summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOussama Ben Abdelbaki <obenabde@google.com>2020-08-10 14:00:36 -0400
committerOussama Ben Abdelbaki <obenabde@google.com>2020-08-10 14:00:36 -0400
commitdcd74cf77f69539e09ed1a6003aa50da3b98efbe (patch)
tree032c3faebd76705d3ca7023814b379194540215e
parent062713a08b2824062a3cdffa57ec79ed2ea87fe2 (diff)
downloadplatform-tools-dcd74cf77f69539e09ed1a6003aa50da3b98efbe.tar.gz
Update darwin platform-tools to 30.0.4androidx-print-releaseandroidx-leanback-release
Downloaded from https://developer.android.com/studio/releases/platform-tools Test: N/A Change-Id: I2d8b90800e0da9e381757d949759ea835e236fa1
-rw-r--r--NOTICE.txt5315
-rwxr-xr-xadbbin2622660 -> 6529920 bytes
-rw-r--r--api/annotations.zipbin75240 -> 97630 bytes
-rw-r--r--api/api-versions.xml14023
-rwxr-xr-xdmtracedumpbin60512 -> 79904 bytes
-rwxr-xr-xe2fsdroidbin997860 -> 1505408 bytes
-rwxr-xr-xetc1toolbin310444 -> 311712 bytes
-rwxr-xr-xfastbootbin1379816 -> 1709344 bytes
-rwxr-xr-xhprof-convbin17544 -> 36288 bytes
-rwxr-xr-xlib/libc++.dylibbin911252 -> 0 bytes
-rwxr-xr-xlib64/libc++.dylibbin0 -> 816144 bytes
-rwxr-xr-xmake_f2fsbin172596 -> 257376 bytes
-rwxr-xr-xmke2fsbin806656 -> 780592 bytes
-rwxr-xr-xmke2fs.conf2
-rwxr-xr-xsload_f2fsbin903332 -> 1473232 bytes
-rw-r--r--source.properties2
-rwxr-xr-xsqlite3bin1378740 -> 1318192 bytes
-rw-r--r--systrace/UPSTREAM_REVISION2
-rw-r--r--systrace/catapult/common/battor/battor/__init__.py27
-rw-r--r--systrace/catapult/common/battor/battor/battor_binary_dependencies.json100
-rw-r--r--systrace/catapult/common/battor/battor/battor_error.py8
-rw-r--r--systrace/catapult/common/battor/battor/battor_wrapper.py436
-rw-r--r--systrace/catapult/common/battor/battor/battor_wrapper_devicetest.py103
-rw-r--r--systrace/catapult/common/battor/battor/battor_wrapper_unittest.py387
-rwxr-xr-xsystrace/catapult/common/battor/bin/run_py_tests23
-rwxr-xr-xsystrace/catapult/common/battor/bin/upload_battor_binaries.py54
-rwxr-xr-xsystrace/catapult/common/bin/run_tests38
-rwxr-xr-xsystrace/catapult/common/bin/update_chrome_reference_binaries119
-rwxr-xr-xsystrace/catapult/common/lab/commits.py24
-rw-r--r--systrace/catapult/common/node_runner/node_runner/README.md11
-rwxr-xr-xsystrace/catapult/common/node_runner/node_runner/minify53
-rwxr-xr-xsystrace/catapult/common/node_runner/node_runner/minifyjs21
-rw-r--r--systrace/catapult/common/node_runner/node_runner/node_binaries.json4
-rw-r--r--systrace/catapult/common/node_runner/node_runner/package-lock.json7189
-rw-r--r--systrace/catapult/common/node_runner/node_runner/package.json48
-rwxr-xr-xsystrace/catapult/common/py_trace_event/bin/run_tests35
-rw-r--r--systrace/catapult/common/py_trace_event/py_trace_event/__init__.py3
-rwxr-xr-xsystrace/catapult/common/py_trace_event/py_trace_event/run_tests163
-rw-r--r--systrace/catapult/common/py_trace_event/py_trace_event/trace_event.py17
-rw-r--r--systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/decorators_test.py3
-rw-r--r--systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log.py245
-rw-r--r--systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log_io_test.py28
-rw-r--r--systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/meta_class.py3
-rw-r--r--systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/multiprocessing_shim.py4
-rw-r--r--systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_proto_classes.py222
-rw-r--r--systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_trace_writer.py166
-rw-r--r--systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_trace_writer_unittest.py80
-rw-r--r--systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/trace_test.py22
-rw-r--r--systrace/catapult/common/py_trace_event/py_trace_event/trace_event_unittest.py135
-rw-r--r--systrace/catapult/common/py_trace_event/py_trace_event/trace_time_unittest.py4
-rw-r--r--systrace/catapult/common/py_trace_event/third_party/protobuf/README.chromium12
-rw-r--r--systrace/catapult/common/py_trace_event/third_party/protobuf/encoder.py224
-rw-r--r--systrace/catapult/common/py_trace_event/third_party/protobuf/wire_format.py52
-rwxr-xr-xsystrace/catapult/common/py_utils/bin/run_tests38
-rw-r--r--systrace/catapult/common/py_utils/py_utils/__init__.py8
-rw-r--r--systrace/catapult/common/py_utils/py_utils/binary_manager.py2
-rw-r--r--systrace/catapult/common/py_utils/py_utils/camel_case.py8
-rw-r--r--systrace/catapult/common/py_utils/py_utils/chrome_binaries.json102
-rw-r--r--systrace/catapult/common/py_utils/py_utils/cloud_storage.py11
-rw-r--r--systrace/catapult/common/py_utils/py_utils/cloud_storage_unittest.py13
-rw-r--r--systrace/catapult/common/py_utils/py_utils/discover.py2
-rw-r--r--systrace/catapult/common/py_utils/py_utils/discover_unittest.py29
-rw-r--r--systrace/catapult/common/py_utils/py_utils/exc_util.py84
-rw-r--r--systrace/catapult/common/py_utils/py_utils/exc_util_unittest.py183
-rw-r--r--systrace/catapult/common/py_utils/py_utils/expectations_parser.py8
-rw-r--r--systrace/catapult/common/py_utils/py_utils/expectations_parser_unittest.py5
-rw-r--r--systrace/catapult/common/py_utils/py_utils/file_util.py23
-rw-r--r--systrace/catapult/common/py_utils/py_utils/file_util_unittest.py66
-rw-r--r--systrace/catapult/common/py_utils/py_utils/lock.py18
-rw-r--r--systrace/catapult/common/py_utils/py_utils/lock_unittest.py8
-rw-r--r--systrace/catapult/common/py_utils/py_utils/logging_util_unittest.py8
-rwxr-xr-xsystrace/catapult/common/py_utils/py_utils/memory_debug.py18
-rw-r--r--systrace/catapult/common/py_utils/py_utils/modules_util.py35
-rw-r--r--systrace/catapult/common/py_utils/py_utils/modules_util_unittest.py41
-rw-r--r--systrace/catapult/common/py_utils/py_utils/refactor/__init__.py2
-rw-r--r--systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/__init__.py4
-rw-r--r--systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/base_symbol.py6
-rw-r--r--systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/class_definition.py2
-rw-r--r--systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/function_definition.py2
-rw-r--r--systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/import_statement.py18
-rw-r--r--systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/reference.py15
-rw-r--r--systrace/catapult/common/py_utils/py_utils/refactor/offset_token.py7
-rw-r--r--systrace/catapult/common/py_utils/py_utils/refactor/snippet.py12
-rw-r--r--systrace/catapult/common/py_utils/py_utils/refactor_util/move.py4
-rw-r--r--systrace/catapult/common/py_utils/py_utils/retry_util.py6
-rw-r--r--systrace/catapult/common/py_utils/py_utils/retry_util_unittest.py3
-rw-r--r--systrace/catapult/common/py_utils/py_utils/shell_util.py8
-rw-r--r--systrace/catapult/common/py_utils/py_utils/slots_metaclass_unittest.py10
-rw-r--r--systrace/catapult/common/py_utils/py_utils/tempfile_ext.py31
-rw-r--r--systrace/catapult/common/py_utils/py_utils/tempfile_ext_unittest.py37
-rw-r--r--systrace/catapult/common/py_utils/py_utils/xvfb.py2
-rw-r--r--systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs.py15
-rw-r--r--systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs_unittest.py10
-rw-r--r--systrace/catapult/common/py_vulcanize/py_vulcanize/generate.py26
-rw-r--r--systrace/catapult/common/py_vulcanize/py_vulcanize/html_module_unittest.py12
-rw-r--r--systrace/catapult/common/py_vulcanize/py_vulcanize/module.py11
-rw-r--r--systrace/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py17
-rw-r--r--systrace/catapult/common/py_vulcanize/py_vulcanize/project.py14
-rw-r--r--systrace/catapult/common/py_vulcanize/py_vulcanize/strip_js_comments.py6
-rw-r--r--systrace/catapult/dependency_manager/PRESUBMIT.py1
-rw-r--r--systrace/catapult/dependency_manager/dependency_manager/__init__.py2
-rw-r--r--systrace/catapult/dependency_manager/dependency_manager/archive_info.py5
-rw-r--r--systrace/catapult/dependency_manager/dependency_manager/base_config.py28
-rwxr-xr-xsystrace/catapult/dependency_manager/dependency_manager/base_config_unittest.py43
-rw-r--r--systrace/catapult/dependency_manager/dependency_manager/cloud_storage_info_unittest.py2
-rw-r--r--systrace/catapult/dependency_manager/dependency_manager/dependency_info.py2
-rw-r--r--systrace/catapult/dependency_manager/dependency_manager/local_path_info.py31
-rw-r--r--systrace/catapult/dependency_manager/dependency_manager/local_path_info_unittest.py136
-rw-r--r--systrace/catapult/dependency_manager/dependency_manager/manager.py2
-rw-r--r--systrace/catapult/dependency_manager/dependency_manager/uploader.py2
-rw-r--r--systrace/catapult/devil/BUILD.gn32
-rw-r--r--systrace/catapult/devil/README.md4
-rwxr-xr-xsystrace/catapult/devil/bin/run_py_tests6
-rw-r--r--systrace/catapult/devil/devil/android/apk_helper.py150
-rwxr-xr-xsystrace/catapult/devil/devil/android/apk_helper_test.py157
-rw-r--r--systrace/catapult/devil/devil/android/battery_utils.py46
-rwxr-xr-xsystrace/catapult/devil/devil/android/battery_utils_test.py51
-rw-r--r--systrace/catapult/devil/devil/android/cpu_temperature.py154
-rw-r--r--systrace/catapult/devil/devil/android/cpu_temperature_test.py132
-rw-r--r--systrace/catapult/devil/devil/android/crash_handler.py3
-rw-r--r--systrace/catapult/devil/devil/android/decorators.py2
-rw-r--r--systrace/catapult/devil/devil/android/device_errors.py34
-rw-r--r--systrace/catapult/devil/devil/android/device_utils.py687
-rwxr-xr-xsystrace/catapult/devil/devil/android/device_utils_devicetest.py33
-rwxr-xr-xsystrace/catapult/devil/devil/android/device_utils_test.py625
-rw-r--r--systrace/catapult/devil/devil/android/fastboot_utils.py2
-rw-r--r--systrace/catapult/devil/devil/android/flag_changer.py51
-rwxr-xr-xsystrace/catapult/devil/devil/android/flag_changer_test.py13
-rw-r--r--systrace/catapult/devil/devil/android/forwarder.py2
-rw-r--r--systrace/catapult/devil/devil/android/logcat_monitor.py13
-rw-r--r--systrace/catapult/devil/devil/android/md5sum.py6
-rw-r--r--systrace/catapult/devil/devil/android/ndk/__init__.py6
-rw-r--r--systrace/catapult/devil/devil/android/ndk/abis.py16
-rw-r--r--systrace/catapult/devil/devil/android/perf/perf_control.py256
-rw-r--r--systrace/catapult/devil/devil/android/perf/perf_control_test.py105
-rw-r--r--systrace/catapult/devil/devil/android/perf/surface_stats_collector.py136
-rw-r--r--systrace/catapult/devil/devil/android/perf/surface_stats_collector_test.py40
-rw-r--r--systrace/catapult/devil/devil/android/perf/thermal_throttle.py1
-rw-r--r--systrace/catapult/devil/devil/android/ports.py2
-rw-r--r--systrace/catapult/devil/devil/android/sdk/adb_wrapper.py107
-rw-r--r--systrace/catapult/devil/devil/android/sdk/fastboot.py4
-rw-r--r--systrace/catapult/devil/devil/android/sdk/shared_prefs.py68
-rwxr-xr-xsystrace/catapult/devil/devil/android/sdk/shared_prefs_test.py45
-rw-r--r--systrace/catapult/devil/devil/android/sdk/version_codes.py5
-rwxr-xr-xsystrace/catapult/devil/devil/android/tools/device_monitor.py7
-rwxr-xr-xsystrace/catapult/devil/devil/android/tools/device_recovery.py66
-rwxr-xr-xsystrace/catapult/devil/devil/android/tools/provision_devices.py31
-rw-r--r--systrace/catapult/devil/devil/android/tools/script_common.py33
-rwxr-xr-xsystrace/catapult/devil/devil/android/tools/script_common_test.py2
-rwxr-xr-xsystrace/catapult/devil/devil/android/tools/system_app.py69
-rwxr-xr-xsystrace/catapult/devil/devil/android/tools/system_app_devicetest.py2
-rw-r--r--systrace/catapult/devil/devil/android/tools/system_app_test.py72
-rw-r--r--systrace/catapult/devil/devil/android/tools/unlock_bootloader.py2
-rwxr-xr-xsystrace/catapult/devil/devil/android/tools/webview_app.py205
-rw-r--r--systrace/catapult/devil/devil/devil_dependencies.json16
-rw-r--r--systrace/catapult/devil/devil/utils/__init__.py23
-rwxr-xr-xsystrace/catapult/devil/devil/utils/battor_device_mapping.py309
-rw-r--r--systrace/catapult/devil/devil/utils/cmd_helper.py36
-rwxr-xr-xsystrace/catapult/devil/devil/utils/find_usb_devices.py4
-rwxr-xr-xsystrace/catapult/devil/devil/utils/find_usb_devices_test.py161
-rw-r--r--systrace/catapult/devil/devil/utils/lazy/weak_constant.py23
-rw-r--r--systrace/catapult/devil/devil/utils/lazy/weak_constant_test.py70
-rw-r--r--systrace/catapult/devil/devil/utils/logging_common.py23
-rwxr-xr-xsystrace/catapult/devil/devil/utils/markdown.py12
-rw-r--r--systrace/catapult/devil/devil/utils/reraiser_thread.py30
-rwxr-xr-xsystrace/catapult/devil/devil/utils/reset_usb.py5
-rw-r--r--systrace/catapult/devil/devil/utils/run_tests_helper.py4
-rw-r--r--systrace/catapult/devil/devil/utils/test/data/test_serial_map.json1
-rw-r--r--systrace/catapult/devil/devil/utils/timeout_retry.py3
-rwxr-xr-xsystrace/catapult/devil/devil/utils/update_mapping.py47
-rw-r--r--systrace/catapult/devil/pylintrc1
-rw-r--r--systrace/catapult/systrace/PRESUBMIT.py1
-rw-r--r--systrace/catapult/systrace/atrace_helper/jni/atrace_process_dump.cc36
-rw-r--r--systrace/catapult/systrace/atrace_helper/jni/logging.h1
-rw-r--r--systrace/catapult/systrace/atrace_helper/jni/main.cc3
-rw-r--r--systrace/catapult/systrace/atrace_helper/jni/process_memory_stats.cc4
-rw-r--r--systrace/catapult/systrace/atrace_helper/jni/time_utils.cc1
-rwxr-xr-xsystrace/catapult/systrace/bin/adb_profile_chrome_startup7
-rw-r--r--systrace/catapult/systrace/profile_chrome/chrome_startup_tracing_agent.py5
-rw-r--r--systrace/catapult/systrace/profile_chrome/chrome_tracing_agent.py5
-rw-r--r--systrace/catapult/systrace/profile_chrome/chrome_tracing_agent_unittest.py4
-rw-r--r--systrace/catapult/systrace/profile_chrome/ddms_tracing_agent.py3
-rw-r--r--systrace/catapult/systrace/profile_chrome/perf_tracing_agent.py5
-rw-r--r--systrace/catapult/systrace/profile_chrome/profiler_unittest.py2
-rw-r--r--systrace/catapult/systrace/systrace/__init__.py1
-rw-r--r--systrace/catapult/systrace/systrace/output_generator.py14
-rw-r--r--systrace/catapult/systrace/systrace/output_generator_unittest.py106
-rwxr-xr-xsystrace/catapult/systrace/systrace/run_systrace.py9
-rw-r--r--systrace/catapult/systrace/systrace/systrace_runner.py3
-rw-r--r--systrace/catapult/systrace/systrace/systrace_trace_viewer.html1953
-rw-r--r--systrace/catapult/systrace/systrace/test_data/battor_test_data.txt16
-rw-r--r--systrace/catapult/systrace/systrace/tracing_agents/agents_unittest.py2
-rw-r--r--systrace/catapult/systrace/systrace/tracing_agents/atrace_agent.py41
-rwxr-xr-xsystrace/catapult/systrace/systrace/tracing_agents/atrace_agent_unittest.py12
-rw-r--r--systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent.py51
-rwxr-xr-xsystrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent_unittest.py34
-rw-r--r--systrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent.py165
-rwxr-xr-xsystrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent_unittest.py182
-rw-r--r--systrace/catapult/systrace/systrace/tracing_agents/walt_agent.py3
-rw-r--r--systrace/catapult/systrace/systrace/tracing_agents/walt_agent_unittest.py6
-rw-r--r--systrace/catapult/systrace/systrace/tracing_controller.py11
-rwxr-xr-xsystrace/catapult/systrace/systrace/update_systrace_trace_viewer.py2
-rw-r--r--systrace/catapult/systrace/systrace/util.py90
-rw-r--r--systrace/catapult/systrace/systrace/util_unittest.py30
-rw-r--r--systrace/catapult/tracing/tracing/trace_data/trace_data.py454
-rw-r--r--systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py181
-rw-r--r--systrace/catapult/tracing/tracing_project.py2
207 files changed, 26025 insertions, 12322 deletions
diff --git a/NOTICE.txt b/NOTICE.txt
index 0992577..d7e6dd9 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -1,306 +1,721 @@
Notices for files contained in the tools directory:
============================================================
Notices for file(s):
-/bin/newfs_msdos
+/lib64/libfec_rs.a
------------------------------------------------------------
-Copyright (c) 1998 Robert Nordier
-All rights reserved.
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
+ Copyright © 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS
-OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
--------------------------------------------------------------------
+ Preamble
-Copyright (c) 2013 The NetBSD Foundation, Inc.
-All rights reserved.
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
-This code is derived from software contributed to The NetBSD Foundation
-by Christos Zoulas.
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
-THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
--------------------------------------------------------------------
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
-SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
-Copyright (c) 1998 Robert Nordier
-All rights reserved.
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS
-OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
--------------------------------------------------------------------
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
-============================================================
-Notices for file(s):
-/framework/jsr305.jar
-/framework/jsr305lib.jar
-------------------------------------------------------------
-Copyright (c) 2007-2009, JSR305 expert group
-All rights reserved.
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
-http://www.opensource.org/licenses/bsd-license.php
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- * Neither the name of the JSR305 expert group nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
-============================================================
-Notices for file(s):
-/framework/mockito-host.jar
-------------------------------------------------------------
-The MIT License
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
-Copyright (c) 2007 Mockito contributors
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-============================================================
-Notices for file(s):
-/lib64/libtinyxml2.dylib
-------------------------------------------------------------
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any
-damages arising from the use of this software.
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
-Permission is granted to anyone to use this software for any
-purpose, including commercial applications, and to alter it and
-redistribute it freely, subject to the following restrictions:
+ a) The modified work must itself be a software library.
-1. The origin of this software must not be misrepresented; you must
-not claim that you wrote the original software. If you use this
-software in a product, an acknowledgment in the product documentation
-would be appreciated but is not required.
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
-2. Altered source versions must be plainly marked as such, and
-must not be misrepresented as being the original software.
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
-3. This notice may not be removed or altered from any source
-distribution.
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
-============================================================
-Notices for file(s):
-/lib/libcompiler_rt-extras.a
-/lib64/libcompiler_rt-extras.a
-/lib64/libcompiler_rt.dylib
-------------------------------------------------------------
-==============================================================================
-compiler_rt License
-==============================================================================
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
-The compiler_rt library is dual licensed under both the University of Illinois
-"BSD-Like" license and the MIT license. As a user of this code you may choose
-to use it under either license. As a contributor, you agree to allow your code
-to be used under both.
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
-Full text of the relevant licenses is included below.
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
-==============================================================================
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
-University of Illinois/NCSA
-Open Source License
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
-All rights reserved.
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
-Developed by:
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
- LLVM Team
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
- University of Illinois at Urbana-Champaign
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
- http://llvm.org
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal with
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimers.
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimers in the
- documentation and/or other materials provided with the distribution.
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
- * Neither the names of the LLVM Team, University of Illinois at
- Urbana-Champaign, nor the names of its contributors may be used to
- endorse or promote products derived from this Software without specific
- prior written permission.
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
-SOFTWARE.
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
-==============================================================================
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
-==============================================================================
-Copyrights and Licenses for Third Party Software Distributed with LLVM:
-==============================================================================
-The LLVM software contains code written by third parties. Such software will
-have its own individual LICENSE.TXT file in the directory in which it appears.
-This file will describe the copyrights, license, and restrictions which apply
-to that code.
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright © <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
-The disclaimer of warranty in the University of Illinois Open Source License
-applies to all code in the LLVM Distribution, and nothing in any of the
-other licenses gives permission to use the names of the LLVM Team or the
-University of Illinois to endorse or promote products derived from this
-Software.
============================================================
Notices for file(s):
-/lib64/libxml2.dylib
+/lib64/libzopfli.a
------------------------------------------------------------
-Except where otherwise noted in the source code (e.g. the files hash.c,
-list.c and the trio files, which are covered by a similar licence but
-with different Copyright notices) all the files are:
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
- Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved.
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is fur-
-nished to do so, subject to the following conditions:
+ 1. Definitions.
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
-NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2011 Google Inc.
+
+ 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.
============================================================
Notices for file(s):
-/lib/liblog.a
-/lib/liblog.dylib
/lib64/liblog.a
/lib64/liblog.dylib
------------------------------------------------------------
@@ -497,620 +912,206 @@ Notices for file(s):
============================================================
Notices for file(s):
-/bin/v8mkpeephole
-/lib/libv8base.a
-/lib64/libv8base.a
+/bin/adb
+/lib64/libadb_host.a
+/lib64/libfastdeploy_host.a
------------------------------------------------------------
-This license applies to all parts of V8 that are not externally
-maintained libraries. The externally maintained libraries used by V8
-are:
-
- - PCRE test suite, located in
- test/mjsunit/third_party/regexp-pcre/regexp-pcre.js. This is based on the
- test suite from PCRE-7.3, which is copyrighted by the University
- of Cambridge and Google, Inc. The copyright notice and license
- are embedded in regexp-pcre.js.
-
- - Layout tests, located in test/mjsunit/third_party/object-keys. These are
- based on layout tests from webkit.org which are copyrighted by
- Apple Computer, Inc. and released under a 3-clause BSD license.
-
- - Strongtalk assembler, the basis of the files assembler-arm-inl.h,
- assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h,
- assembler-ia32.cc, assembler-ia32.h, assembler-x64-inl.h,
- assembler-x64.cc, assembler-x64.h, assembler-mips-inl.h,
- assembler-mips.cc, assembler-mips.h, assembler.cc and assembler.h.
- This code is copyrighted by Sun Microsystems Inc. and released
- under a 3-clause BSD license.
-
- - Valgrind client API header, located at third_party/valgrind/valgrind.h
- This is release under the BSD license.
-
-These libraries have their own licenses; we recommend you read them,
-as their terms may differ from the terms below.
-
-Further license information can be found in LICENSE files located in
-sub-directories.
-
-Copyright 2014, the V8 project authors. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of Google Inc. nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-========================================================================
-
-fdlibm
-Copyright (C) 1993-2004 by Sun Microsystems, Inc. All rights reserved.
-
-Developed at SunSoft, a Sun Microsystems, Inc. business.
-Permission to use, copy, modify, and distribute this
-software is freely granted, provided that this notice
-is preserved.
+ Copyright (c) 2006-2009, The Android Open Source Project
+ Copyright 2006, Brian Swetland <swetland@frotz.net>
-========================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
-Strongtalk
+ 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.
-Copyright (c) 1994-2006 Sun Microsystems Inc.
-All Rights Reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-
-- Redistribution in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-- Neither the name of Sun Microsystems or the names of contributors may
-be used to endorse or promote products derived from this software without
-specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-The original source code covered by the above license above has been
-modified significantly by Google Inc.
-Copyright 2006-2008 the V8 project authors. All rights reserved.
+ 1. Definitions.
-========================================================================
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
-valgrind
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
-----------------------------------------------------------------
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
-Notice that the following BSD-style license applies to this one
-file (valgrind.h) only. The rest of Valgrind is licensed under the
-terms of the GNU General Public License, version 2, unless
-otherwise indicated. See the COPYING file in the source
-distribution for details.
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
-----------------------------------------------------------------
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
-This file is part of Valgrind, a dynamic binary instrumentation
-framework.
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
-Copyright (C) 2000-2007 Julian Seward. All rights reserved.
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
-2. The origin of this software must not be misrepresented; you must
- not claim that you wrote the original software. If you use this
- software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
-3. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
-4. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
-OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
-============================================================
-Notices for file(s):
-/framework/org-netbeans-api-visual.jar
-/framework/org-openide-util.jar
-------------------------------------------------------------
-The GNU General Public License (GPL) Version 2, June 1991
-
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-
-59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-
-Preamble
-
-The licenses for most software are designed to take away
-your freedom to share and change it. By contrast, the GNU
-General Public License is intended to guarantee your freedom
-to share and change free software--to make sure the software
-is free for all its users. This General Public License
-applies to most of the Free Software Foundation's software
-and to any other program whose authors commit to using it.
-(Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can
-apply it to your programs, too. When we speak of free
-software, we are referring to freedom, not price. Our
-General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and
-charge for this service if you wish), that you receive
-source code or can get it if you want it, that you can
-change the software or use pieces of it in new free
-programs; and that you know you can do these things. To
-protect your rights, we need to make restrictions that
-forbid anyone to deny you these rights or to ask you to
-surrender the rights. These restrictions translate to
-certain responsibilities for you if you distribute copies of
-the software, or if you modify it.
-
-For example, if you distribute copies of such a program,
-whether gratis or for a fee, you must give the recipients
-all the rights that you have. You must make sure that they,
-too, receive or can get the source code. And you must show
-them these terms so they know their rights.
-
-We protect your rights with two steps: (1) copyright the
-software, and (2) offer you this license which gives you
-legal permission to copy, distribute and/or modify the
-software.
-
-Also, for each author's protection and ours, we want to make
-certain that everyone understands that there is no warranty
-for this free software. If the software is modified by
-someone else and passed on, we want its recipients to know
-that what they have is not the original, so that any
-problems introduced by others will not reflect on the
-original authors' reputations.
-
-Finally, any free program is threatened constantly by
-software patents. We wish to avoid the danger that
-redistributors of a free program will individually obtain
-patent licenses, in effect making the program proprietary.
-To prevent this, we have made it clear that any patent must
-be licensed for everyone's free use or not licensed at all.
-
-The precise terms and conditions for copying, distribution
-and modification follow.
-
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
-MODIFICATION
-
-0. This License applies to any program or other work which
-contains a notice placed by the copyright holder saying it
-may be distributed under the terms of this General Public
-License. The "Program", below, refers to any such program or
-work, and a "work based on the Program" means either the
-Program or any derivative work under copyright law: that is
-to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into
-another language. (Hereinafter, translation is included
-without limitation in the term "modification".) Each
-licensee is addressed as "you".
-
-Activities other than copying, distribution and modification
-are not covered by this License; they are outside its scope.
-The act of running the Program is not restricted, and the
-output from the Program is covered only if its contents
-constitute a work based on the Program (independent of
-having been made by running the Program). Whether that is
-true depends on what the Program does.
-
-1. You may copy and distribute verbatim copies of the
-Program's source code as you receive it, in any medium,
-provided that you conspicuously and appropriately publish on
-each copy an appropriate copyright notice and disclaimer of
-warranty; keep intact all the notices that refer to this
-License and to the absence of any warranty; and give any
-other recipients of the Program a copy of this License along
-with the Program.
-
-You may charge a fee for the physical act of transferring a
-copy, and you may at your option offer warranty protection
-in exchange for a fee.
-
-2. You may modify your copy or copies of the Program or any
-portion of it, thus forming a work based on the Program, and
-copy and distribute such modifications or work under the
-terms of Section 1 above, provided that you also meet all of
-these conditions:
-
-a) You must cause the modified files to carry prominent
-notices stating that you changed the files and the date of
-any change.
-
-b) You must cause any work that you distribute or publish,
-that in whole or in part contains or is derived from the
-Program or any part thereof, to be licensed as a whole at no
-charge to all third parties under the terms of this License.
-
-c) If the modified program normally reads commands
-interactively when run, you must cause it, when started
-running for such interactive use in the most ordinary way,
-to print or display an announcement including an appropriate
-copyright notice and a notice that there is no warranty (or
-else, saying that you provide a warranty) and that users may
-redistribute the program under these conditions, and telling
-the user how to view a copy of this License. (Exception: if
-the Program itself is interactive but does not normally
-print such an announcement, your work based on the Program
-is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the
-Program, and can be reasonably considered independent and
-separate works in themselves, then this License, and its
-terms, do not apply to those sections when you distribute
-them as separate works. But when you distribute the same
-sections as part of a whole which is a work based on the
-Program, the distribution of the whole must be on the terms
-of this License, whose permissions for other licensees
-extend to the entire whole, and thus to each and every part
-regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights
-or contest your rights to work written entirely by you;
-rather, the intent is to exercise the right to control the
-distribution of derivative or collective works based on the
-Program. In addition, mere aggregation of another work not
-based on the Program with the Program (or with a work based
-on the Program) on a volume of a storage or distribution
-medium does not bring the other work under the scope of this
-License.
-
-3. You may copy and distribute the Program (or a work based
-on it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you
-also do one of the following:
-
-a) Accompany it with the complete corresponding
-machine-readable source code, which must be distributed
-under the terms of Sections 1 and 2 above on a medium
-customarily used for software interchange; or,
-
-b) Accompany it with a written offer, valid for at least
-three years, to give any third party, for a charge no more
-than your cost of physically performing source distribution,
-a complete machine-readable copy of the corresponding source
-code, to be distributed under the terms of Sections 1 and 2
-above on a medium customarily used for software interchange;
-or,
-
-c) Accompany it with the information you received as to the
-offer to distribute corresponding source code. (This
-alternative is allowed only for noncommercial distribution
-and only if you received the program in object code or
-executable form with such an offer, in accord with
-Subsection b above.)
-
-The source code for a work means the preferred form of the
-work for making modifications to it. For an executable work,
-complete source code means all the source code for all
-modules it contains, plus any associated interface
-definition files, plus the scripts used to control
-compilation and installation of the executable. However, as
-a special exception, the source code distributed need not
-include anything that is normally distributed (in either
-source or binary form) with the major components (compiler,
-kernel, and so on) of the operating system on which the
-executable runs, unless that component itself accompanies
-the executable. If distribution of executable or object code
-is made by offering access to copy from a designated place,
-then offering equivalent access to copy the source code from
-the same place counts as distribution of the source code,
-even though third parties are not compelled to copy the
-source along with the object code.
-
-4. You may not copy, modify, sublicense, or distribute the
-Program except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense or distribute
-the Program is void, and will automatically terminate your
-rights under this License. However, parties who have
-received copies, or rights, from you under this License will
-not have their licenses terminated so long as such parties
-remain in full compliance.
-
-5. You are not required to accept this License, since you
-have not signed it. However, nothing else grants you
-permission to modify or distribute the Program or its
-derivative works. These actions are prohibited by law if you
-do not accept this License. Therefore, by modifying or
-distributing the Program (or any work based on the Program),
-you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or
-modifying the Program or works based on it.
-
-6. Each time you redistribute the Program (or any work based
-on the Program), the recipient automatically receives a
-license from the original licensor to copy, distribute or
-modify the Program subject to these terms and conditions.
-You may not impose any further restrictions on the
-recipients' exercise of the rights granted herein. You are
-not responsible for enforcing compliance by third parties to
-this License.
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
-7. If, as a consequence of a court judgment or allegation of
-patent infringement or for any other reason (not limited to
-patent issues), conditions are imposed on you (whether by
-court order, agreement or otherwise) that contradict the
-conditions of this License, they do not excuse you from the
-conditions of this License. If you cannot distribute so as
-to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a
-consequence you may not distribute the Program at all. For
-example, if a patent license would not permit royalty-free
-redistribution of the Program by all those who receive
-copies directly or indirectly through you, then the only way
-you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
-If any portion of this section is held invalid or
-unenforceable under any particular circumstance, the balance
-of the section is intended to apply and the section as a
-whole is intended to apply in other circumstances. It is not
-the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest
-validity of any such claims; this section has the sole
-purpose of protecting the integrity of the free software
-distribution system, which is implemented by public license
-practices. Many people have made generous contributions to
-the wide range of software distributed through that system
-in reliance on consistent application of that system; it is
-up to the author/donor to decide if he or she is willing to
-distribute software through any other system and a licensee
-cannot impose that choice.
-
-This section is intended to make thoroughly clear what is
-believed to be a consequence of the rest of this License.
-
-8. If the distribution and/or use of the Program is
-restricted in certain countries either by patents or by
-copyrighted interfaces, the original copyright holder who
-places the Program under this License may add an explicit
-geographical distribution limitation excluding those
-countries, so that distribution is permitted only in or
-among countries not thus excluded. In such case, this
-License incorporates the limitation as if written in the
-body of this License.
-
-9. The Free Software Foundation may publish revised and/or
-new versions of the General Public License from time to
-time. Such new versions will be similar in spirit to the
-present version, but may differ in detail to address new
-problems or concerns.
-
-Each version is given a distinguishing version number. If
-the Program specifies a version number of this License which
-applies to it and "any later version", you have the option
-of following the terms and conditions either of that version
-or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number
-of this License, you may choose any version ever published
-by the Free Software Foundation.
-
-10. If you wish to incorporate parts of the Program into
-other free programs whose distribution conditions are
-different, write to the author to ask for permission. For
-software which is copyrighted by the Free Software
-Foundation, write to the Free Software Foundation; we
-sometimes make exceptions for this. Our decision will be
-guided by the two goals of preserving the free status of all
-derivatives of our free software and of promoting the
-sharing and reuse of software generally.
-
-NO WARRANTY
-
-11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS
-NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
-COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
-"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
-IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
-OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
-DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
-12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED
-TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY
-WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED
-ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
-SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF
-THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
-LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
-LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
-PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
-HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-END OF TERMS AND CONDITIONS
-
-How to Apply These Terms to Your New Programs
-
-If you develop a new program, and you want it to be of the
-greatest possible use to the public, the best way to achieve
-this is to make it free software which everyone can
-redistribute and change under these terms.
-
-To do so, attach the following notices to the program. It is
-safest to attach them to the start of each source file to
-most effectively convey the exclusion of warranty; and each
-file should have at least the "copyright" line and a pointer
-to where the full notice is found.
-
-One line to give the program's name and a brief idea of what
-it does.
-
-Copyright (C) <year> <name of author>
-This program is free software; you can redistribute it
-and/or modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later
-version. This program is distributed in the hope that it
-will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A
-PARTICULAR PURPOSE. See the GNU General Public License for
-more details. You should have received a copy of the GNU
-General Public License along with this program; if not,
-write to the Free Software Foundation, Inc., 59 Temple
-Place, Suite 330, Boston, MA 02111-1307 USA
-
-Also add information on how to contact you by electronic and
-paper mail. If the program is interactive, make it output a
-short notice like this when it starts in an interactive
-mode:
-
-Gnomovision version 69, Copyright (C) year name of author
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-type `show w'. This is free software, and you are welcome to
-redistribute it under certain conditions; type `show c' for
-details. The hypothetical commands `show w' and `show c'
-should show the appropriate parts of the General Public
-License. Of course, the commands you use may be called
-something other than `show w' and `show c'; they could even
-be mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a
-programmer) or your school, if any, to sign a "copyright
-disclaimer" for the program, if necessary. Here is a sample;
-alter the names:
-
-Yoyodyne, Inc., hereby disclaims all copyright interest in
-the program `Gnomovision' (which makes passes at compilers)
-written by James Hacker.
-
-signature of Ty Coon, 1 April 1989
-Ty Coon, President of Vice
-This General Public License does not permit incorporating
-your program into proprietary programs. If your program is a
-subroutine library, you may consider it more useful to
-permit linking proprietary applications with the library. If
-this is what you want to do, use the GNU Library General
-Public License instead of this License.
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
-"CLASSPATH" EXCEPTION TO THE GPL VERSION 2
-
-Certain source files distributed by Sun Microsystems, Inc.
-are subject to the following clarification and special
-exception to the GPL Version 2, but only where Sun has
-expressly included in the particular source file's header
-the words "Sun designates this particular file as subject
-to the "Classpath" exception as provided by Sun in the
-License file that accompanied this code."
-
- Linking this library statically or dynamically with other
-modules is making a combined work based on this library.
-Thus, the terms and conditions of the GNU General Public
-License Version 2 cover the whole combination.
-
- As a special exception, the copyright holders of this
-library give you permission to link this library with
-independent modules to produce an executable, regardless of
-the license terms of these independent modules, and to copy
-and distribute the resulting executable under terms of your
-choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license
-of that module. An independent module is a module which is
-not derived from or based on this library. If you modify
-this library, you may extend this exception to your version
-of the library, but you are not obligated to do so. If you
-do not wish to do so, delete this exception statement from
-your version.
-============================================================
-Notices for file(s):
-/lib/libopenjdkjvm.dylib
-/lib/libopenjdkjvmd.dylib
-/lib64/libopenjdkjvm.dylib
-/lib64/libopenjdkjvmd.dylib
-------------------------------------------------------------
-Copyright (C) 2014 The Android Open Source Project
-DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
-This file implements interfaces from the file jvm.h. This implementation
-is licensed under the same terms as the file jvm.h. The
-copyright and license information for the file jvm.h follows.
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
-Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
-DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
-This code is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License version 2 only, as
-published by the Free Software Foundation. Oracle designates this
-particular file as subject to the "Classpath" exception as provided
-by Oracle in the LICENSE file that accompanied this code.
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
-This code is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-version 2 for more details (a copy is included in the LICENSE file that
-accompanied this code).
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
-You should have received a copy of the GNU General Public License version
-2 along with this work; if not, write to the Free Software Foundation,
-Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ END OF TERMS AND CONDITIONS
-Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-or visit www.oracle.com if you need additional information or have any
-questions.
============================================================
Notices for file(s):
/bin/mdnsd
+/lib64/libmdnssd.a
------------------------------------------------------------
The majority of the source code in the mDNSResponder project is licensed
under the terms of the Apache License, Version 2.0, available from:
@@ -1131,6 +1132,7 @@ Notices for file(s):
/bin/fsck.f2fs
/bin/make_f2fs
/bin/sload_f2fs
+/lib64/libf2fs_fmt_host.a
------------------------------------------------------------
The tools for F2FS are covered by GNU Public License version 2.
Exceptionally, the following files are also covered by the GNU Lesser General
@@ -1999,363 +2001,50 @@ That's all there is to it!
============================================================
Notices for file(s):
-/bin/fc_sort
+/bin/aprotoc
+/bin/protoc-gen-javanano
+/lib64/libprotobuf-cpp-full.a
+/lib64/libprotobuf-cpp-full.dylib
+/lib64/libprotobuf-cpp-lite.a
+/lib64/libprotoc.a
------------------------------------------------------------
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
+Copyright 2008 Google Inc. All rights reserved.
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
+Code generated by the Protocol Buffer compiler is owned by the owner
+of the input file used when generating it. This code is not
+standalone and requires a support library to be linked with it. This
+support library is itself covered by the above license.
============================================================
Notices for file(s):
/bin/assemble_vintf
-/bin/checkvintf
-/bin/hidl-gen
-/framework/dagger2-auto-value-host.jar
-/framework/dagger2-host.jar
-/framework/dagger2-inject-host.jar
-/framework/desugar.jar
-/framework/guavalib.jar
-/framework/jarjar.jar
-/framework/objenesis-host.jar
-/lib64/libhidl-gen-ast.dylib
-/lib64/libhidl-gen.dylib
+/lib64/libassemblevintf.a
/lib64/libvintf.dylib
------------------------------------------------------------
@@ -2563,143 +2252,228 @@ Notices for file(s):
============================================================
Notices for file(s):
-/lib64/libevent-host.dylib
+/bin/apksigner
+/framework/apksigner.jar
------------------------------------------------------------
-Libevent is available for use under the following license, commonly known
-as the 3-clause (or "modified") BSD license:
-==============================
-Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
-Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
+ Copyright (c) 2016, The Android Open Source Project
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-3. The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-==============================
+ 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.
-Portions of Libevent are based on works by others, also made available by
-them under the three-clause BSD license above. The copyright notices are
-available in the corresponding source files; the license is as above. Here's
-a list:
-log.c:
- Copyright (c) 2000 Dug Song <dugsong@monkey.org>
- Copyright (c) 1993 The Regents of the University of California.
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
-strlcpy.c:
- Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-win32select.c:
- Copyright (c) 2003 Michael A. Davis <mike@datanerds.net>
+ 1. Definitions.
-evport.c:
- Copyright (c) 2007 Sun Microsystems
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
-ht-internal.h:
- Copyright (c) 2002 Christopher Clark
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
-minheap-internal.h:
- Copyright (c) 2006 Maxim Yegorushkin <maxim.yegorushkin@gmail.com>
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
-==============================
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
-The arc4module is available under the following, sometimes called the
-"OpenBSD" license:
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
- Copyright (c) 1996, David Mazieres <dm@uun.org>
- Copyright (c) 2008, Damien Miller <djm@openbsd.org>
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
- Permission to use, copy, modify, and distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
- copyright notice and this permission notice appear in all copies.
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
-============================================================
-Notices for file(s):
-/lib/libopenjdkjvmti.dylib
-/lib/libopenjdkjvmtid.dylib
-/lib64/libopenjdkjvmti.dylib
-/lib64/libopenjdkjvmtid.dylib
-------------------------------------------------------------
-Copyright (C) 2016 The Android Open Source Project
-DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
-This file implements interfaces from the file jvmti.h. This implementation
-is licensed under the same terms as the file jvmti.h. The
-copyright and license information for the file jvmti.h follows.
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
-Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
-DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
-This code is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License version 2 only, as
-published by the Free Software Foundation. Oracle designates this
-particular file as subject to the "Classpath" exception as provided
-by Oracle in the LICENSE file that accompanied this code.
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
-This code is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-version 2 for more details (a copy is included in the LICENSE file that
-accompanied this code).
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
-You should have received a copy of the GNU General Public License version
-2 along with this work; if not, write to the Free Software Foundation,
-Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
-Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-or visit www.oracle.com if you need additional information or have any
-questions.
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
-============================================================
-Notices for file(s):
-/framework/commons-compress-1.0.jar
-------------------------------------------------------------
-Apache Commons Compress
-Copyright 2002-2009 The Apache Software Foundation
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
-This product includes software developed by
-The Apache Software Foundation (http://www.apache.org/).
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
-Original BZip2 classes contributed by Keiron Liddle
-<keiron@aftexsw.com>, Aftex Software to the Apache Ant project
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
-Original Tar classes from contributors of the Apache Ant project
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
-Original Zip classes from contributors of the Apache Ant project
+ END OF TERMS AND CONDITIONS
-Original CPIO classes contributed by Markus Kuss and the jRPM project
-(jrpm.sourceforge.net)
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
============================================================
Notices for file(s):
/bin/sgdisk
+/lib64/libgptf.a
------------------------------------------------------------
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
@@ -3044,37 +2818,89 @@ Public License instead of this License.
============================================================
Notices for file(s):
-/lib/libexpat-host.dylib
-/lib/libexpat.a
-/lib64/libexpat-host.dylib
-/lib64/libexpat.a
+/lib64/libc++abi.a
------------------------------------------------------------
-Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
-Copyright (c) 2001-2017 Expat maintainers
+==============================================================================
+libc++abi License
+==============================================================================
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
+The libc++abi library is dual licensed under both the University of Illinois
+"BSD-Like" license and the MIT license. As a user of this code you may choose
+to use it under either license. As a contributor, you agree to allow your code
+to be used under both.
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
+Full text of the relevant licenses is included below.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+==============================================================================
+
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
+
+All rights reserved.
+
+Developed by:
+
+ LLVM Team
+
+ University of Illinois at Urbana-Champaign
+
+ http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimers.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimers in the
+ documentation and/or other materials provided with the distribution.
+
+ * Neither the names of the LLVM Team, University of Illinois at
+ Urbana-Champaign, nor the names of its contributors may be used to
+ endorse or promote products derived from this Software without specific
+ prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+
+Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
============================================================
Notices for file(s):
/bin/sqlite3
-/lib/libsqlite.dylib
+/lib64/libsqlite.a
/lib64/libsqlite.dylib
------------------------------------------------------------
2001 September 15
@@ -3089,44 +2915,6 @@ a legal notice, here is a blessing:
============================================================
Notices for file(s):
-/framework/conscrypt.jar
-/lib/libconscrypt_openjdk_jni.dylib
-/lib64/libconscrypt_openjdk_jni.dylib
-------------------------------------------------------------
-Copyright 2016 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.
-
------------------------------------------------------------------------
-This product contains a modified portion of `Netty`, a configurable network
-stack in Java, which can be obtained at:
-
- * LICENSE:
- * licenses/LICENSE.netty.txt (Apache License 2.0)
- * HOMEPAGE:
- * http://netty.io/
-
-This product contains a modified portion of `Apache Harmony`, modular Java runtime,
-which can be obtained at:
-
- * LICENSE:
- * licenses/LICENSE.harmony.txt (Apache License 2.0)
- * HOMEPAGE:
- * https://harmony.apache.org/
-
-============================================================
-Notices for file(s):
-/bin/fontchain_linter
/lib64/libplatformprotos.dylib
------------------------------------------------------------
=========================================================================
@@ -3467,263 +3255,57 @@ authorization of the copyright holder.
============================================================
Notices for file(s):
-/bin/adb
+/lib64/libexpat.a
------------------------------------------------------------
+Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
+Copyright (c) 2001-2017 Expat maintainers
- Copyright (c) 2006-2009, The Android Open Source Project
- Copyright 2006, Brian Swetland <swetland@frotz.net>
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
-
- 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.
-
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
- END OF TERMS AND CONDITIONS
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
-------------------------------------------------------------
-libwinpthread license:
-------------------------------------------------------------
-Copyright (c) 2011 mingw-w64 project
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
+Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
+Copyright (c) 2001-2017 Expat maintainers
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
-/*
- * Parts of this library are derived by:
- *
- * Posix Threads library for Microsoft Windows
- *
- * Use at own risk, there is no implied warranty to this code.
- * It uses undocumented features of Microsoft Windows that can change
- * at any time in the future.
- *
- * (C) 2010 Lockless Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of Lockless Inc. nor the names of its contributors may be
- * used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AN
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- */
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
============================================================
Notices for file(s):
/bin/llvm-rs-cc
+/lib64/libslang.a
------------------------------------------------------------
=========================
NOTICE file for slang.git
@@ -4067,8 +3649,6 @@ OpenBSD regex llvm/lib/Support/{reg*, COPYRIGHT.regex}
============================================================
Notices for file(s):
-/lib/libc++.dylib
-/lib/libc++_static.a
/lib64/libc++.dylib
/lib64/libc++_static.a
------------------------------------------------------------
@@ -4151,7 +3731,36 @@ THE SOFTWARE.
============================================================
Notices for file(s):
-/lib64/libbrotli.dylib
+/bin/sefcontext_compile
+/lib64/libselinux.a
+/lib64/libselinux.dylib
+------------------------------------------------------------
+This library (libselinux) is public domain software, i.e. not copyrighted.
+
+Warranty Exclusion
+------------------
+You agree that this software is a
+non-commercially developed program that may contain "bugs" (as that
+term is used in the industry) and that it may not function as intended.
+The software is licensed "as is". NSA makes no, and hereby expressly
+disclaims all, warranties, express, implied, statutory, or otherwise
+with respect to the software, including noninfringement and the implied
+warranties of merchantability and fitness for a particular purpose.
+
+Limitation of Liability
+-----------------------
+In no event will NSA be liable for any damages, including loss of data,
+lost profits, cost of cover, or other special, incidental,
+consequential, direct or indirect damages arising from the software or
+the use thereof, however caused and on any theory of liability. This
+limitation will apply even if NSA has been advised of the possibility
+of such damage. You acknowledge that this is a reasonable allocation of
+risk.
+
+============================================================
+Notices for file(s):
+/bin/brotli
+/lib64/libbrotli.a
------------------------------------------------------------
Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
@@ -4177,22 +3786,15 @@ THE SOFTWARE.
Notices for file(s):
/bin/aapt
/bin/aidl
-/bin/dexdump
/bin/dx
-/bin/showmap
/framework/dx.jar
-/framework/jasmin.jar
-/lib/libaapt.a
-/lib/libandroidfw.a
-/lib/libcutils.a
-/lib/libcutils.dylib
-/lib/libnativehelper.dylib
-/lib/libutils.a
/lib64/libaapt.a
+/lib64/libaidl-common.a
/lib64/libandroidfw.a
/lib64/libcutils.a
/lib64/libcutils.dylib
-/lib64/libnativehelper.dylib
+/lib64/libcutils_sockets.a
+/lib64/libinstrumentation.a
/lib64/libutils.a
------------------------------------------------------------
@@ -4388,1077 +3990,266 @@ Notices for file(s):
============================================================
Notices for file(s):
-/framework/jdiff.jar
-------------------------------------------------------------
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
-
-
-
-============================================================
-Notices for file(s):
-/framework/doclava.jar
-------------------------------------------------------------
-
- Copyright (C) 2010 Google Inc.
-
- 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.
-
-
-======================================================================
-
-jQuery 1.2.6 - New Wave Javascript
-
-Copyright (c) 2008 John Resig (jquery.com)
-Dual licensed under the MIT (MIT-LICENSE.txt)
-and GPL (GPL-LICENSE.txt) licenses.
-
-Copyright (c) 2009 John Resig, http://jquery.com/
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-============================================================
-Notices for file(s):
-/bin/depmod
+/lib64/libcrypto-host.dylib
+/lib64/libcrypto.a
+/lib64/libssl.a
------------------------------------------------------------
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
+BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL
+licensing. Files that are completely new have a Google copyright and an ISC
+license. This license is reproduced at the bottom of this file.
+
+Contributors to BoringSSL are required to follow the CLA rules for Chromium:
+https://cla.developers.google.com/clas
+
+Files in third_party/ have their own licenses, as described therein. The MIT
+license, for third_party/fiat, which, unlike other third_party directories, is
+compiled into non-test libraries, is included below.
+
+The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the
+OpenSSL License and the original SSLeay license apply to the toolkit. See below
+for the actual license texts. Actually both licenses are BSD-style Open Source
+licenses. In case of any license issues related to OpenSSL please contact
+openssl-core@openssl.org.
+
+The following are Google-internal bug numbers where explicit permission from
+some authors is recorded for use of their work. (This is purely for our own
+record keeping.)
+ 27287199
+ 27287880
+ 27287883
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
+ OpenSSL License
+ ---------------
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
+/* ====================================================================
+ * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com). This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
+ Original SSLeay License
+ -----------------------
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ *
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to. The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ *
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * "This product includes cryptographic software written by
+ * Eric Young (eay@cryptsoft.com)"
+ * The word 'cryptographic' can be left out if the rouines from the library
+ * being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from
+ * the apps directory (application code) you must include an acknowledgement:
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
+ISC license used for completely new code in BoringSSL:
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
+/* Copyright (c) 2015, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
+The code in third_party/fiat carries the MIT license:
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
+Copyright (c) 2015-2016 the fiat-crypto authors (see
+https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS).
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
+Licenses for support code
+-------------------------
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
+Parts of the TLS test suite are under the Go license. This code is not included
+in BoringSSL (i.e. libcrypto and libssl) when compiled, however, so
+distributing code linked against BoringSSL does not trigger this license:
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
+Copyright (c) 2009 The Go Authors. All rights reserved.
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
-Also add information on how to contact you by electronic and paper mail.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+BoringSSL uses the Chromium test infrastructure to run a continuous build,
+trybots etc. The scripts which manage this, and the script for generating build
+metadata, are under the Chromium license. Distributing code linked against
+BoringSSL does not trigger this license.
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
+Copyright 2015 The Chromium Authors. All rights reserved.
-That's all there is to it!
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
============================================================
Notices for file(s):
/bin/imgdiff
+/lib64/libimgdiff.a
------------------------------------------------------------
Copyright (C) 2009 The Android Open Source Project
@@ -5504,82 +4295,147 @@ POSSIBILITY OF SUCH DAMAGE.
============================================================
Notices for file(s):
-/bin/minigzip
-/lib/libz-host.dylib
-/lib/libz.a
-/lib64/libz-host.dylib
-/lib64/libz.a
+/lib64/libpng.a
------------------------------------------------------------
- (C) 1995-2017 Jean-loup Gailly and Mark Adler
+COPYRIGHT NOTICE, DISCLAIMER, and LICENSE
+=========================================
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
+PNG Reference Library License version 2
+---------------------------------------
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
+ * Copyright (c) 1995-2019 The PNG Reference Library Authors.
+ * Copyright (c) 2018-2019 Cosmin Truta.
+ * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.
+ * Copyright (c) 1996-1997 Andreas Dilger.
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
+The software is supplied "as is", without warranty of any kind,
+express or implied, including, without limitation, the warranties
+of merchantability, fitness for a particular purpose, title, and
+non-infringement. In no event shall the Copyright owners, or
+anyone distributing the software, be liable for any damages or
+other liability, whether in contract, tort or otherwise, arising
+from, out of, or in connection with the software, or the use or
+other dealings in the software, even if advised of the possibility
+of such damage.
- Jean-loup Gailly Mark Adler
- jloup@gzip.org madler@alumni.caltech.edu
+Permission is hereby granted to use, copy, modify, and distribute
+this software, or portions hereof, for any purpose, without fee,
+subject to the following restrictions:
-============================================================
-Notices for file(s):
-/bin/aprotoc
-/framework/host-libprotobuf-java-full.jar
-/framework/host-libprotobuf-java-lite.jar
-/framework/host-libprotobuf-java-micro.jar
-/framework/libprotobuf-java-full.jar
-/lib64/libprotobuf-cpp-full.dylib
-/lib64/libprotobuf-cpp-lite.dylib
-/lib64/libprotoc.dylib
-------------------------------------------------------------
-Copyright 2008, Google Inc.
-All rights reserved.
+ 1. The origin of this software must not be misrepresented; you
+ must not claim that you wrote the original software. If you
+ use this software in a product, an acknowledgment in the product
+ documentation would be appreciated, but is not required.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
+ 2. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
+ 3. This Copyright notice may not be removed or altered from any
+ source or altered source distribution.
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-Code generated by the Protocol Buffer compiler is owned by the owner
-of the input file used when generating it. This code is not
-standalone and requires a support library to be linked with it. This
-support library is itself covered by the above license.
+PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35)
+-----------------------------------------------------------------------
+
+libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are
+Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are
+derived from libpng-1.0.6, and are distributed according to the same
+disclaimer and license as libpng-1.0.6 with the following individuals
+added to the list of Contributing Authors:
+
+ Simon-Pierre Cadieux
+ Eric S. Raymond
+ Mans Rullgard
+ Cosmin Truta
+ Gilles Vollant
+ James Yu
+ Mandar Sahastrabuddhe
+ Google Inc.
+ Vadim Barkov
+
+and with the following additions to the disclaimer:
+
+ There is no warranty against interference with your enjoyment of
+ the library or against infringement. There is no warranty that our
+ efforts or the library will fulfill any of your particular purposes
+ or needs. This library is provided with all faults, and the entire
+ risk of satisfactory quality, performance, accuracy, and effort is
+ with the user.
+
+Some files in the "contrib" directory and some configure-generated
+files that are distributed with libpng have other copyright owners, and
+are released under other open source licenses.
+
+libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
+Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
+libpng-0.96, and are distributed according to the same disclaimer and
+license as libpng-0.96, with the following individuals added to the
+list of Contributing Authors:
+
+ Tom Lane
+ Glenn Randers-Pehrson
+ Willem van Schaik
+
+libpng versions 0.89, June 1996, through 0.96, May 1997, are
+Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
+and are distributed according to the same disclaimer and license as
+libpng-0.88, with the following individuals added to the list of
+Contributing Authors:
+
+ John Bowler
+ Kevin Bracey
+ Sam Bushell
+ Magnus Holmgren
+ Greg Roelofs
+ Tom Tanner
+
+Some files in the "scripts" directory have other copyright owners,
+but are released under this license.
+
+libpng versions 0.5, May 1995, through 0.88, January 1996, are
+Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
+
+For the purposes of this copyright and license, "Contributing Authors"
+is defined as the following set of individuals:
+
+ Andreas Dilger
+ Dave Martindale
+ Guy Eric Schalnat
+ Paul Schmidt
+ Tim Wegner
+
+The PNG Reference Library is supplied "AS IS". The Contributing
+Authors and Group 42, Inc. disclaim all warranties, expressed or
+implied, including, without limitation, the warranties of
+merchantability and of fitness for any purpose. The Contributing
+Authors and Group 42, Inc. assume no liability for direct, indirect,
+incidental, special, exemplary, or consequential damages, which may
+result from the use of the PNG Reference Library, even if advised of
+the possibility of such damage.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+source code, or portions hereof, for any purpose, without fee, subject
+to the following restrictions:
+
+ 1. The origin of this source code must not be misrepresented.
+
+ 2. Altered versions must be plainly marked as such and must not
+ be misrepresented as being the original source.
+
+ 3. This Copyright notice may not be removed or altered from any
+ source or altered source distribution.
+
+The Contributing Authors and Group 42, Inc. specifically permit,
+without fee, and encourage the use of this source code as a component
+to supporting the PNG file format in commercial products. If you use
+this source code in a product, acknowledgment is not required but would
+be appreciated.
============================================================
Notices for file(s):
-/lib64/libfec.dylib
-/lib64/libsquashfs_utils.dylib
+/lib64/libfec.a
+/lib64/libsquashfs_utils.a
------------------------------------------------------------
Copyright (c) 2015, The Android Open Source Project
@@ -5774,43 +4630,11 @@ Notices for file(s):
============================================================
Notices for file(s):
-/bin/d8-compat-dx
-/framework/d8-compat-dx.jar
-/framework/d8.jar
-------------------------------------------------------------
-Copyright (c) 2016, the R8 project authors.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-* Neither the name of Google Inc. nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-============================================================
-Notices for file(s):
/bin/blk_alloc_to_base_fs
/bin/mke2fs.conf
-/bin/mkuserimg_mke2fs.sh
+/bin/mkf2fsuserimg.sh
+/bin/mkuserimg_mke2fs
+/lib64/libext4_utils.a
/lib64/libext4_utils.dylib
------------------------------------------------------------
@@ -6006,148 +4830,132 @@ Notices for file(s):
============================================================
Notices for file(s):
-/framework/emmalib.jar
+/lib64/fmtlib.a
------------------------------------------------------------
-Common Public License - v 1.0
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S
-ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
- a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
- b) in the case of each subsequent Contributor:
-
- i) changes to the Program, and
-
- ii) additions to the Program;
-
- where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was
-added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules
-of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
-
-"Contributor" means any person or entity that distributes the Program.
-
-"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
-
-"Program" means the Contributions distributed in accordance with this Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
-
-2. GRANT OF RIGHTS
-
- a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative
-works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
-
- b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make,
-use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
-combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered
-by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
-
- c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the
-Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other
-entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole
-responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
-Program, it is Recipient's responsibility to acquire that license before distributing the Program.
-
- d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this
-Agreement.
-
-3. REQUIREMENTS
-
-A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+Copyright (c) 2012 - 2016, Victor Zverovich
- a) it complies with the terms and conditions of this Agreement; and
-
- b) its license agreement:
-
- i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement,
-and implied warranties or conditions of merchantability and fitness for a particular purpose;
+All rights reserved.
- ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost
-profits;
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
- iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
- iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium
-customarily used for software exchange.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-When the Program is made available in source code form:
+============================================================
+Notices for file(s):
+/lib64/libjsoncpp.a
+------------------------------------------------------------
+The JsonCpp library's source code, including accompanying documentation,
+tests and demonstration applications, are licensed under the following
+conditions...
- a) it must be made available under this Agreement; and
+The author (Baptiste Lepilleur) explicitly disclaims copyright in all
+jurisdictions which recognize such a disclaimer. In such jurisdictions,
+this software is released into the Public Domain.
- b) a copy of this Agreement must be included with each copy of the Program.
+In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
+2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
+released under the terms of the MIT License (see below).
-Contributors may not remove or alter any copyright notices contained within the Program.
+In jurisdictions which recognize Public Domain property, the user of this
+software may choose to accept it either as 1) Public Domain, 2) under the
+conditions of the MIT License (see below), or 3) under the terms of dual
+Public Domain/MIT License conditions described here, as they choose.
-Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the
-Contribution.
+The MIT License is about as close to Public Domain as a license can get, and is
+described in clear, concise terms at:
-4. COMMERCIAL DISTRIBUTION
+ http://en.wikipedia.org/wiki/MIT_License
+
+The full text of the MIT License follows:
-Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the
-commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other
-Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
-every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a
-third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a
-commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to
-qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate
-with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+========================================================================
+Copyright (c) 2007-2010 Baptiste Lepilleur
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
-For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor
-then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other
-Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
-5. NO WARRANTY
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+========================================================================
+(END LICENSE TEXT)
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
-determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to
-the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+The MIT license is compatible with both the GPL and commercial
+software, affording one all of the rights of Public Domain with the
+minor nuisance of being required to keep the above copyright notice
+and license text in the source code. Note also that by accepting the
+Public Domain "license" you can re-license your copy using whatever
+license you like.
-6. DISCLAIMER OF LIABILITY
+============================================================
+Notices for file(s):
+/lib64/libzstd.a
+------------------------------------------------------------
+BSD License
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
+For Zstandard software
-7. GENERAL
+Copyright (c) 2016-present, Facebook, Inc. All rights reserved.
-If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this
-Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
-If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any
-patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes
-patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other
-software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
-All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a
-reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the
-Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and
-survive.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
-Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following
-manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
-right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new
-version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under
-which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new
-version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement,
-whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+ * Neither the name Facebook nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific
+ prior written permission.
-This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal
-action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
============================================================
Notices for file(s):
-/lib/libgtest_host.a
-/lib64/libgtest_host.a
-/lib64/libgtest_prod.dylib
+/lib64/libgflags.a
------------------------------------------------------------
-Copyright 2008, Google Inc.
+Copyright (c) 2006, Google Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -6178,9 +4986,22 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
============================================================
Notices for file(s):
-/framework/easymock.jar
+/bin/boot_signer
+/framework/boot_signer.jar
------------------------------------------------------------
+ Copyright (c) 2013-2015, 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.
+
+ 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.
+
+
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
@@ -6358,34 +5179,10 @@ Notices for file(s):
END OF TERMS AND CONDITIONS
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- 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.
============================================================
Notices for file(s):
-/lib64/libbz.dylib
+/lib64/libbz.a
------------------------------------------------------------
--------------------------------------------------------------------------
@@ -6432,6 +5229,7 @@ bzip2/libbzip2 version 1.0.6 of 6 September 2010
============================================================
Notices for file(s):
+/lib64/libpcre2.a
/lib64/libpcre2.dylib
------------------------------------------------------------
PCRE LICENCE
@@ -6529,7 +5327,35 @@ End
============================================================
Notices for file(s):
+/lib64/libdivsufsort.a
+/lib64/libdivsufsort64.a
+------------------------------------------------------------
+The MIT License (MIT)
+
+Copyright (c) 2003 Yuta Mori All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+============================================================
+Notices for file(s):
/bin/bsdiff
+/lib64/libbsdiff.a
------------------------------------------------------------
This project governed by the following BSD-style licenses. Check each file
header to known the licenses applying to it:
@@ -6592,8 +5418,51 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
============================================================
Notices for file(s):
-/lib/liblz4.dylib
-/lib64/liblz4.dylib
+/lib64/libtinyxml2.a
+/lib64/libtinyxml2.dylib
+------------------------------------------------------------
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+
+============================================================
+Notices for file(s):
+/lib64/liblz4.a
------------------------------------------------------------
LZ4 Library
Copyright (c) 2011-2016, Yann Collet
@@ -6622,6 +5491,32 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
============================================================
Notices for file(s):
+/bin/minigzip
+/lib64/libz-host.dylib
+/lib64/libz.a
+------------------------------------------------------------
+version 1.2.11, January 15th, 2017
+
+Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+
+============================================================
+Notices for file(s):
/bin/avbtool
------------------------------------------------------------
Copyright 2016, The Android Open Source Project
@@ -6647,155 +5542,575 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
============================================================
Notices for file(s):
-/framework/bouncycastle.jar
+/lib64/libgtest.a
+/lib64/libgtest_host.a
+/lib64/libgtest_prod.a
------------------------------------------------------------
-Copyright (c) 2000-2015 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
+Copyright 2008, Google Inc.
+All rights reserved.
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
-associated documentation files (the "Software"), to deal in the Software without restriction,
-including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+Copyright 2008, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
============================================================
Notices for file(s):
-/lib64/libcrypto-host.dylib
-/lib64/libssl-host.dylib
+/lib64/libusb.a
------------------------------------------------------------
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
- LICENSE ISSUES
- ==============
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
- The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
- the OpenSSL License and the original SSLeay license apply to the toolkit.
- See below for the actual license texts. Actually both licenses are BSD-style
- Open Source licenses. In case of any license issues related to OpenSSL
- please contact openssl-core@openssl.org.
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
- OpenSSL License
- ---------------
+ Preamble
-/* ====================================================================
- * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- * software must display the following acknowledgment:
- * "This product includes software developed by the OpenSSL Project
- * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- * endorse or promote products derived from this software without
- * prior written permission. For written permission, please contact
- * openssl-core@openssl.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- * nor may "OpenSSL" appear in their names without prior written
- * permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- * acknowledgment:
- * "This product includes software developed by the OpenSSL Project
- * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ====================================================================
- *
- * This product includes cryptographic software written by Eric Young
- * (eay@cryptsoft.com). This product includes software written by Tim
- * Hudson (tjh@cryptsoft.com).
- *
- */
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
- Original SSLeay License
- -----------------------
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to. The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code. The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * "This product includes cryptographic software written by
- * Eric Young (eay@cryptsoft.com)"
- * The word 'cryptographic' can be left out if the rouines from the library
- * being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- * the apps directory (application code) you must include an acknowledgement:
- * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed. i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
diff --git a/adb b/adb
index e9a3b0c..e78e54a 100755
--- a/adb
+++ b/adb
Binary files differ
diff --git a/api/annotations.zip b/api/annotations.zip
index 9a44ebb..bcc310d 100644
--- a/api/annotations.zip
+++ b/api/annotations.zip
Binary files differ
diff --git a/api/api-versions.xml b/api/api-versions.xml
index 5f010bf..ca5c4d5 100644
--- a/api/api-versions.xml
+++ b/api/api-versions.xml
@@ -8,16 +8,19 @@
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
<field name="ACCEPT_HANDOVER" since="28"/>
+ <field name="ACCESS_BACKGROUND_LOCATION" since="29"/>
<field name="ACCESS_CHECKIN_PROPERTIES"/>
<field name="ACCESS_COARSE_LOCATION"/>
<field name="ACCESS_FINE_LOCATION"/>
<field name="ACCESS_LOCATION_EXTRA_COMMANDS"/>
+ <field name="ACCESS_MEDIA_LOCATION" since="29"/>
<field name="ACCESS_MOCK_LOCATION" removed="23"/>
<field name="ACCESS_NETWORK_STATE"/>
<field name="ACCESS_NOTIFICATION_POLICY" since="23"/>
<field name="ACCESS_SURFACE_FLINGER" removed="23"/>
<field name="ACCESS_WIFI_STATE"/>
<field name="ACCOUNT_MANAGER" since="5"/>
+ <field name="ACTIVITY_RECOGNITION" since="29"/>
<field name="ADD_SYSTEM_SERVICE" removed="4"/>
<field name="ADD_VOICEMAIL" since="14"/>
<field name="ANSWER_PHONE_CALLS" since="26"/>
@@ -26,6 +29,8 @@
<field name="BIND_ACCESSIBILITY_SERVICE" since="16"/>
<field name="BIND_APPWIDGET" since="3"/>
<field name="BIND_AUTOFILL_SERVICE" since="26"/>
+ <field name="BIND_CALL_REDIRECTION_SERVICE" since="29"/>
+ <field name="BIND_CARRIER_MESSAGING_CLIENT_SERVICE" since="29"/>
<field name="BIND_CARRIER_MESSAGING_SERVICE" since="22" deprecated="23"/>
<field name="BIND_CARRIER_SERVICES" since="23"/>
<field name="BIND_CHOOSER_TARGET_SERVICE" since="23"/>
@@ -58,12 +63,13 @@
<field name="BROADCAST_SMS" since="2"/>
<field name="BROADCAST_STICKY"/>
<field name="BROADCAST_WAP_PUSH" since="2"/>
+ <field name="CALL_COMPANION_APP" since="29"/>
<field name="CALL_PHONE"/>
<field name="CALL_PRIVILEGED"/>
<field name="CAMERA"/>
<field name="CAPTURE_AUDIO_OUTPUT" since="19"/>
- <field name="CAPTURE_SECURE_VIDEO_OUTPUT" since="19"/>
- <field name="CAPTURE_VIDEO_OUTPUT" since="19"/>
+ <field name="CAPTURE_SECURE_VIDEO_OUTPUT" since="19" removed="29"/>
+ <field name="CAPTURE_VIDEO_OUTPUT" since="19" removed="29"/>
<field name="CHANGE_COMPONENT_ENABLED_STATE"/>
<field name="CHANGE_CONFIGURATION"/>
<field name="CHANGE_NETWORK_STATE"/>
@@ -111,21 +117,23 @@
<field name="MOUNT_FORMAT_FILESYSTEMS" since="3"/>
<field name="MOUNT_UNMOUNT_FILESYSTEMS"/>
<field name="NFC" since="9"/>
+ <field name="NFC_PREFERRED_PAYMENT_INFO" since="30"/>
<field name="NFC_TRANSACTION_EVENT" since="28"/>
<field name="PACKAGE_USAGE_STATS" since="23"/>
- <field name="PERSISTENT_ACTIVITY" deprecated="16"/>
- <field name="PROCESS_OUTGOING_CALLS"/>
+ <field name="PERSISTENT_ACTIVITY" deprecated="15"/>
+ <field name="PROCESS_OUTGOING_CALLS" deprecated="29"/>
<field name="READ_CALENDAR"/>
<field name="READ_CALL_LOG" since="16"/>
<field name="READ_CONTACTS"/>
<field name="READ_EXTERNAL_STORAGE" since="16"/>
- <field name="READ_FRAME_BUFFER"/>
+ <field name="READ_FRAME_BUFFER" removed="29"/>
<field name="READ_HISTORY_BOOKMARKS" since="4" removed="23"/>
<field name="READ_INPUT_STATE" deprecated="16"/>
<field name="READ_LOGS"/>
<field name="READ_OWNER_DATA" removed="9"/>
<field name="READ_PHONE_NUMBERS" since="26"/>
<field name="READ_PHONE_STATE"/>
+ <field name="READ_PRECISE_PHONE_STATE" since="30"/>
<field name="READ_PROFILE" since="14" removed="23"/>
<field name="READ_SMS"/>
<field name="READ_SOCIAL_STREAM" since="15" deprecated="21" removed="23"/>
@@ -145,7 +153,8 @@
<field name="REQUEST_DELETE_PACKAGES" since="26"/>
<field name="REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" since="23"/>
<field name="REQUEST_INSTALL_PACKAGES" since="23"/>
- <field name="RESTART_PACKAGES" deprecated="16"/>
+ <field name="REQUEST_PASSWORD_COMPLEXITY" since="29"/>
+ <field name="RESTART_PACKAGES" deprecated="15"/>
<field name="SEND_RESPOND_VIA_MESSAGE" since="18"/>
<field name="SEND_SMS"/>
<field name="SET_ACTIVITY_WATCHER" removed="23"/>
@@ -155,7 +164,7 @@
<field name="SET_DEBUG_APP"/>
<field name="SET_ORIENTATION" removed="23"/>
<field name="SET_POINTER_SPEED" since="13" removed="23"/>
- <field name="SET_PREFERRED_APPLICATIONS" deprecated="16"/>
+ <field name="SET_PREFERRED_APPLICATIONS" deprecated="15"/>
<field name="SET_PROCESS_FOREGROUND" removed="4"/>
<field name="SET_PROCESS_LIMIT"/>
<field name="SET_TIME" since="8"/>
@@ -163,6 +172,8 @@
<field name="SET_WALLPAPER"/>
<field name="SET_WALLPAPER_HINTS"/>
<field name="SIGNAL_PERSISTENT_PROCESSES"/>
+ <field name="SMS_FINANCIAL_TRANSACTIONS" since="29"/>
+ <field name="START_VIEW_PERMISSION_USAGE" since="29"/>
<field name="STATUS_BAR"/>
<field name="SUBSCRIBED_FEEDS_READ" removed="23"/>
<field name="SUBSCRIBED_FEEDS_WRITE" removed="23"/>
@@ -173,6 +184,7 @@
<field name="USE_BIOMETRIC" since="28"/>
<field name="USE_CREDENTIALS" since="5" removed="23"/>
<field name="USE_FINGERPRINT" since="23" deprecated="28"/>
+ <field name="USE_FULL_SCREEN_INTENT" since="29"/>
<field name="USE_SIP" since="9"/>
<field name="VIBRATE"/>
<field name="WAKE_LOCK"/>
@@ -198,13 +210,14 @@
<method name="&lt;init>()V"/>
<field name="ACCESSIBILITY_FEATURES" since="18" removed="23"/>
<field name="ACCOUNTS" removed="23"/>
+ <field name="ACTIVITY_RECOGNITION" since="29"/>
<field name="AFFECTS_BATTERY" since="17" removed="23"/>
<field name="APP_INFO" since="17" removed="23"/>
<field name="AUDIO_SETTINGS" since="17" removed="23"/>
<field name="BLUETOOTH_NETWORK" since="17" removed="23"/>
<field name="BOOKMARKS" since="17" removed="23"/>
<field name="CALENDAR" since="17"/>
- <field name="CALL_LOG" since="29"/>
+ <field name="CALL_LOG" since="28"/>
<field name="CAMERA" since="17"/>
<field name="CONTACTS" since="23"/>
<field name="COST_MONEY" removed="23"/>
@@ -330,6 +343,7 @@
<field name="alertDialogTheme" since="11"/>
<field name="alignmentMode" since="14"/>
<field name="allContactsName" since="11"/>
+ <field name="allowAudioPlaybackCapture" since="29"/>
<field name="allowBackup" since="4"/>
<field name="allowClearUserData"/>
<field name="allowEmbedded" since="20"/>
@@ -373,7 +387,7 @@
<field name="autoSizeStepGranularity" since="26"/>
<field name="autoSizeTextType" since="26"/>
<field name="autoStart" since="7"/>
- <field name="autoText" deprecated="16"/>
+ <field name="autoText" deprecated="15"/>
<field name="autoUrlDetect" since="4"/>
<field name="autoVerify" since="23"/>
<field name="autofillHints" since="26"/>
@@ -433,7 +447,7 @@
<field name="canRetrieveWindowContent" since="14"/>
<field name="candidatesTextStyleSpans" since="3"/>
<field name="cantSaveState" since="28"/>
- <field name="capitalize" deprecated="16"/>
+ <field name="capitalize" deprecated="15"/>
<field name="category" since="19"/>
<field name="centerBright"/>
<field name="centerColor"/>
@@ -466,7 +480,7 @@
<field name="clipOrientation"/>
<field name="clipToPadding"/>
<field name="closeIcon" since="21"/>
- <field name="codes" since="3"/>
+ <field name="codes" since="3" deprecated="29"/>
<field name="collapseColumns"/>
<field name="collapseContentDescription" since="22"/>
<field name="collapseIcon" since="24"/>
@@ -604,19 +618,21 @@
<field name="editTextColor" since="11"/>
<field name="editTextPreferenceStyle"/>
<field name="editTextStyle"/>
- <field name="editable" deprecated="16"/>
+ <field name="editable" deprecated="15"/>
<field name="editorExtras" since="3"/>
<field name="elegantTextHeight" since="21"/>
<field name="elevation" since="21"/>
<field name="ellipsize"/>
<field name="ems"/>
<field name="enableVrMode" since="24"/>
- <field name="enabled"/>
+ <field name="enabled" deprecated="15"/>
<field name="end" since="23"/>
<field name="endColor"/>
<field name="endX" since="24"/>
<field name="endY" since="24"/>
<field name="endYear" deprecated="16"/>
+ <field name="enforceNavigationBarContrast" since="29"/>
+ <field name="enforceStatusBarContrast" since="29"/>
<field name="enterFadeDuration" since="11"/>
<field name="entries"/>
<field name="entryValues"/>
@@ -643,7 +659,7 @@
<field name="fadeEnabled" since="4"/>
<field name="fadeOffset" since="4"/>
<field name="fadeScrollbars" since="5"/>
- <field name="fadingEdge"/>
+ <field name="fadingEdge" deprecated="15"/>
<field name="fadingEdgeLength"/>
<field name="fadingMode" since="19"/>
<field name="fallbackLineSpacing" since="28"/>
@@ -687,9 +703,12 @@
<field name="fontVariationSettings" since="28"/>
<field name="fontWeight" since="26"/>
<field name="footerDividersEnabled" since="3"/>
+ <field name="forceDarkAllowed" since="29"/>
<field name="forceHasOverlappingRendering" since="24"/>
+ <field name="forceUriPermissions" since="29"/>
<field name="foreground"/>
<field name="foregroundGravity"/>
+ <field name="foregroundServiceType" since="29"/>
<field name="foregroundTint" since="21"/>
<field name="foregroundTintMode" since="21"/>
<field name="format"/>
@@ -747,6 +766,7 @@
<field name="hapticFeedbackEnabled" since="3"/>
<field name="hardwareAccelerated" since="11"/>
<field name="hasCode"/>
+ <field name="hasFragileUserData" since="29"/>
<field name="headerAmPmTextAppearance" since="21" deprecated="23"/>
<field name="headerBackground"/>
<field name="headerDayOfMonthTextAppearance" since="21" deprecated="23"/>
@@ -760,7 +780,7 @@
<field name="homeAsUpIndicator" since="11"/>
<field name="homeLayout" since="11"/>
<field name="horizontalDivider"/>
- <field name="horizontalGap" since="3"/>
+ <field name="horizontalGap" since="3" deprecated="29"/>
<field name="horizontalScrollViewStyle" since="11"/>
<field name="horizontalSpacing"/>
<field name="host"/>
@@ -768,12 +788,13 @@
<field name="hotSpotY" since="24"/>
<field name="hyphenationFrequency" since="23"/>
<field name="icon"/>
- <field name="iconPreview" since="3"/>
+ <field name="iconPreview" since="3" deprecated="29"/>
<field name="iconSpaceReserved" since="26"/>
<field name="iconTint" since="26"/>
<field name="iconTintMode" since="26"/>
<field name="iconifiedByDefault" since="11"/>
<field name="id"/>
+ <field name="identifier" since="29"/>
<field name="ignoreGravity"/>
<field name="imageButtonStyle"/>
<field name="imageWellStyle"/>
@@ -805,12 +826,13 @@
<field name="indicatorRight"/>
<field name="indicatorStart" since="18"/>
<field name="inflatedId"/>
+ <field name="inheritShowWhenLocked" since="29"/>
<field name="initOrder"/>
<field name="initialKeyguardLayout" since="17"/>
<field name="initialLayout" since="3"/>
<field name="innerRadius" since="3"/>
<field name="innerRadiusRatio"/>
- <field name="inputMethod" deprecated="16"/>
+ <field name="inputMethod" deprecated="15"/>
<field name="inputType" since="3"/>
<field name="inset" since="21"/>
<field name="insetBottom"/>
@@ -818,6 +840,7 @@
<field name="insetRight"/>
<field name="insetTop"/>
<field name="installLocation" since="8"/>
+ <field name="interactiveUiTimeout" since="29"/>
<field name="interpolator"/>
<field name="isAlwaysSyncable" since="11"/>
<field name="isAsciiCapable" since="19"/>
@@ -826,11 +849,13 @@
<field name="isFeatureSplit" since="26"/>
<field name="isGame" since="21"/>
<field name="isIndicator"/>
- <field name="isModifier" since="3"/>
- <field name="isRepeatable" since="3"/>
+ <field name="isLightTheme" since="29"/>
+ <field name="isModifier" since="3" deprecated="29"/>
+ <field name="isRepeatable" since="3" deprecated="29"/>
<field name="isScrollContainer" since="3"/>
+ <field name="isSplitRequired" since="29"/>
<field name="isStatic" since="26"/>
- <field name="isSticky" since="3"/>
+ <field name="isSticky" since="3" deprecated="29"/>
<field name="isolatedProcess" since="16"/>
<field name="isolatedSplits" since="26"/>
<field name="itemBackground"/>
@@ -840,27 +865,27 @@
<field name="justificationMode" since="26"/>
<field name="keepScreenOn"/>
<field name="key"/>
- <field name="keyBackground" since="3"/>
- <field name="keyEdgeFlags" since="3"/>
- <field name="keyHeight" since="3"/>
- <field name="keyIcon" since="3"/>
- <field name="keyLabel" since="3"/>
- <field name="keyOutputText" since="3"/>
- <field name="keyPreviewHeight" since="3"/>
- <field name="keyPreviewLayout" since="3"/>
- <field name="keyPreviewOffset" since="3"/>
+ <field name="keyBackground" since="3" deprecated="29"/>
+ <field name="keyEdgeFlags" since="3" deprecated="29"/>
+ <field name="keyHeight" since="3" deprecated="29"/>
+ <field name="keyIcon" since="3" deprecated="29"/>
+ <field name="keyLabel" since="3" deprecated="29"/>
+ <field name="keyOutputText" since="3" deprecated="29"/>
+ <field name="keyPreviewHeight" since="3" deprecated="29"/>
+ <field name="keyPreviewLayout" since="3" deprecated="29"/>
+ <field name="keyPreviewOffset" since="3" deprecated="29"/>
<field name="keySet" since="19"/>
- <field name="keyTextColor" since="3"/>
- <field name="keyTextSize" since="3"/>
- <field name="keyWidth" since="3"/>
+ <field name="keyTextColor" since="3" deprecated="29"/>
+ <field name="keyTextSize" since="3" deprecated="29"/>
+ <field name="keyWidth" since="3" deprecated="29"/>
<field name="keyboardLayout" since="16"/>
- <field name="keyboardMode" since="3"/>
+ <field name="keyboardMode" since="3" deprecated="29"/>
<field name="keyboardNavigationCluster" since="26"/>
<field name="keycode"/>
<field name="killAfterRestore" since="5"/>
<field name="label"/>
<field name="labelFor" since="17"/>
- <field name="labelTextSize" since="3"/>
+ <field name="labelTextSize" since="3" deprecated="29"/>
<field name="languageTag" since="24"/>
<field name="largeHeap" since="11"/>
<field name="largeScreens" since="4"/>
@@ -978,6 +1003,7 @@
<field name="menuCategory"/>
<field name="mimeType"/>
<field name="min" since="26"/>
+ <field name="minAspectRatio" since="29"/>
<field name="minDate" since="11"/>
<field name="minEms"/>
<field name="minHeight"/>
@@ -997,7 +1023,7 @@
<field name="multiprocess"/>
<field name="name"/>
<field name="navigationBarColor" since="21"/>
- <field name="navigationBarDividerColor" since="28"/>
+ <field name="navigationBarDividerColor" since="27"/>
<field name="navigationContentDescription" since="21"/>
<field name="navigationIcon" since="21"/>
<field name="navigationMode" since="11"/>
@@ -1011,6 +1037,7 @@
<field name="nextFocusRight"/>
<field name="nextFocusUp"/>
<field name="noHistory" since="3"/>
+ <field name="nonInteractiveUiTimeout" since="29"/>
<field name="normalScreens" since="4"/>
<field name="notificationTimeout" since="14"/>
<field name="numColumns"/>
@@ -1020,13 +1047,17 @@
<field name="numbersInnerTextColor" since="23"/>
<field name="numbersSelectorColor" since="21"/>
<field name="numbersTextColor" since="21"/>
- <field name="numeric" deprecated="16"/>
+ <field name="numeric" deprecated="15"/>
<field name="numericModifiers" since="26"/>
<field name="numericShortcut"/>
<field name="offset" since="24"/>
<field name="onClick" since="4"/>
<field name="oneshot"/>
<field name="opacity" since="11"/>
+ <field name="opticalInsetBottom" since="29"/>
+ <field name="opticalInsetLeft" since="29"/>
+ <field name="opticalInsetRight" since="29"/>
+ <field name="opticalInsetTop" since="29"/>
<field name="order"/>
<field name="orderInCategory"/>
<field name="ordering" since="11"/>
@@ -1042,6 +1073,7 @@
<field name="overlapAnchor" since="21"/>
<field name="overridesImplicitlyEnabledSubtype" since="14"/>
<field name="packageNames" since="14"/>
+ <field name="packageType" since="29"/>
<field name="padding"/>
<field name="paddingBottom"/>
<field name="paddingEnd" since="17"/>
@@ -1058,7 +1090,7 @@
<field name="panelFullBackground"/>
<field name="panelTextAppearance"/>
<field name="parentActivityName" since="16"/>
- <field name="password" deprecated="16"/>
+ <field name="password" deprecated="15"/>
<field name="path"/>
<field name="pathData" since="21"/>
<field name="pathPattern"/>
@@ -1072,18 +1104,18 @@
<field name="persistent"/>
<field name="persistentDrawingCache"/>
<field name="persistentWhenFeatureAvailable" since="26"/>
- <field name="phoneNumber" deprecated="16"/>
+ <field name="phoneNumber" deprecated="15"/>
<field name="pivotX"/>
<field name="pivotY"/>
<field name="pointerIcon" since="24"/>
<field name="popupAnimationStyle" since="9"/>
<field name="popupBackground"/>
- <field name="popupCharacters" since="3"/>
+ <field name="popupCharacters" since="3" deprecated="29"/>
<field name="popupElevation" since="21"/>
<field name="popupEnterTransition" since="24"/>
<field name="popupExitTransition" since="24"/>
- <field name="popupKeyboard" since="3"/>
- <field name="popupLayout" since="3"/>
+ <field name="popupKeyboard" since="3" deprecated="29"/>
+ <field name="popupLayout" since="3" deprecated="29"/>
<field name="popupMenuStyle" since="11"/>
<field name="popupTheme" since="21"/>
<field name="popupWindowStyle"/>
@@ -1152,6 +1184,7 @@
<field name="reqKeyboardType" since="3"/>
<field name="reqNavigation" since="3"/>
<field name="reqTouchScreen" since="3"/>
+ <field name="requestLegacyExternalStorage" since="29"/>
<field name="requireDeviceUnlock" since="19"/>
<field name="required" since="5"/>
<field name="requiredAccountType" since="18"/>
@@ -1166,7 +1199,7 @@
<field name="resizeableActivity" since="24"/>
<field name="resource"/>
<field name="restoreAnyVersion" since="8"/>
- <field name="restoreNeedsApplication" since="5" deprecated="16"/>
+ <field name="restoreNeedsApplication" since="5" deprecated="15"/>
<field name="restrictedAccountType" since="18"/>
<field name="restrictionType" since="21"/>
<field name="resumeWhilePausing" since="21"/>
@@ -1182,7 +1215,7 @@
<field name="roundIcon" since="25"/>
<field name="rowCount" since="14"/>
<field name="rowDelay"/>
- <field name="rowEdgeFlags" since="3"/>
+ <field name="rowEdgeFlags" since="3" deprecated="29"/>
<field name="rowHeight"/>
<field name="rowOrderPreserved" since="14"/>
<field name="saveEnabled"/>
@@ -1214,7 +1247,7 @@
<field name="scrollbarTrackVertical"/>
<field name="scrollbars"/>
<field name="scrollingCache"/>
- <field name="searchButtonText" deprecated="16"/>
+ <field name="searchButtonText" deprecated="15"/>
<field name="searchHintIcon" since="22"/>
<field name="searchIcon" since="21"/>
<field name="searchMode"/>
@@ -1230,6 +1263,7 @@
<field name="secondaryProgress"/>
<field name="secondaryProgressTint" since="21"/>
<field name="secondaryProgressTintMode" since="21"/>
+ <field name="secureElementName" since="29"/>
<field name="seekBarStyle"/>
<field name="segmentedButtonStyle" since="11"/>
<field name="selectAllOnFocus"/>
@@ -1238,8 +1272,10 @@
<field name="selectableItemBackgroundBorderless" since="21"/>
<field name="selectedDateVerticalBar" since="11" deprecated="23"/>
<field name="selectedWeekBackgroundColor" since="11" deprecated="23"/>
+ <field name="selectionDividerHeight" since="29"/>
<field name="sessionService" since="21"/>
<field name="settingsActivity" since="3"/>
+ <field name="settingsSliceUri" since="29"/>
<field name="setupActivity" since="21"/>
<field name="shadowColor"/>
<field name="shadowDx"/>
@@ -1247,8 +1283,9 @@
<field name="shadowRadius"/>
<field name="shape"/>
<field name="shareInterpolator"/>
- <field name="sharedUserId"/>
- <field name="sharedUserLabel" since="3"/>
+ <field name="sharedUserId" deprecated="29"/>
+ <field name="sharedUserLabel" since="3" deprecated="29"/>
+ <field name="shell" since="29"/>
<field name="shortcutDisabledMessage" since="25"/>
<field name="shortcutId" since="25"/>
<field name="shortcutLongLabel" since="25"/>
@@ -1266,7 +1303,7 @@
<field name="showWhenLocked" since="27"/>
<field name="shownWeekCount" since="11" deprecated="23"/>
<field name="shrinkColumns"/>
- <field name="singleLine" deprecated="16"/>
+ <field name="singleLine" deprecated="15"/>
<field name="singleLineTitle" since="26"/>
<field name="singleUser" since="17"/>
<field name="slideEdge" since="21"/>
@@ -1315,7 +1352,7 @@
<field name="state_focused"/>
<field name="state_hovered" since="14"/>
<field name="state_last"/>
- <field name="state_long_pressable" since="3"/>
+ <field name="state_long_pressable" since="3" deprecated="29"/>
<field name="state_middle"/>
<field name="state_multiline" since="11"/>
<field name="state_pressed"/>
@@ -1354,6 +1391,7 @@
<field name="supportsAssist" since="23"/>
<field name="supportsLaunchVoiceAssistFromKeyguard" since="23"/>
<field name="supportsLocalInteraction" since="24"/>
+ <field name="supportsMultipleDisplays" since="29"/>
<field name="supportsPictureInPicture" since="24"/>
<field name="supportsRtl" since="17"/>
<field name="supportsSwitchingToNextInputMethod" since="19"/>
@@ -1378,7 +1416,7 @@
<field name="targetName" since="21"/>
<field name="targetPackage"/>
<field name="targetProcesses" since="26"/>
- <field name="targetSandboxVersion" since="26"/>
+ <field name="targetSandboxVersion" since="26" deprecated="29"/>
<field name="targetSdkVersion" since="4"/>
<field name="taskAffinity"/>
<field name="taskCloseEnterAnimation"/>
@@ -1443,6 +1481,7 @@
<field name="textFilterEnabled"/>
<field name="textFontWeight" since="28"/>
<field name="textIsSelectable" since="11"/>
+ <field name="textLocale" since="29"/>
<field name="textOff"/>
<field name="textOn"/>
<field name="textScaleX"/>
@@ -1533,7 +1572,9 @@
<field name="unselectedAlpha"/>
<field name="updatePeriodMillis" since="3"/>
<field name="use32bitAbi" since="24"/>
+ <field name="useAppZygote" since="29"/>
<field name="useDefaultMargins" since="14"/>
+ <field name="useEmbeddedDex" since="29"/>
<field name="useIntrinsicSizeAsMinimum" since="11"/>
<field name="useLevel"/>
<field name="userVisible" since="5"/>
@@ -1549,9 +1590,9 @@
<field name="versionCodeMajor" since="28"/>
<field name="versionMajor" since="28"/>
<field name="versionName"/>
- <field name="verticalCorrection" since="3"/>
+ <field name="verticalCorrection" since="3" deprecated="29"/>
<field name="verticalDivider"/>
- <field name="verticalGap" since="3"/>
+ <field name="verticalGap" since="3" deprecated="29"/>
<field name="verticalScrollbarPosition" since="11"/>
<field name="verticalSpacing"/>
<field name="viewportHeight" since="21"/>
@@ -1611,8 +1652,8 @@
<field name="windowHideAnimation"/>
<field name="windowIsFloating"/>
<field name="windowIsTranslucent"/>
- <field name="windowLayoutInDisplayCutoutMode" since="28"/>
- <field name="windowLightNavigationBar" since="28"/>
+ <field name="windowLayoutInDisplayCutoutMode" since="27"/>
+ <field name="windowLightNavigationBar" since="27"/>
<field name="windowLightStatusBar" since="23"/>
<field name="windowMinWidthMajor" since="11"/>
<field name="windowMinWidthMinor" since="11"/>
@@ -1645,6 +1686,7 @@
<field name="yearListSelectorColor" since="21" deprecated="23"/>
<field name="yesNoPreferenceStyle"/>
<field name="zAdjustment"/>
+ <field name="zygotePreloadName" since="29"/>
</class>
<class name="android/R$bool" since="3">
<extends name="java/lang/Object"/>
@@ -1847,14 +1889,14 @@
<field name="stat_sys_download"/>
<field name="stat_sys_download_done"/>
<field name="stat_sys_headset"/>
- <field name="stat_sys_phone_call" deprecated="16"/>
- <field name="stat_sys_phone_call_forward" deprecated="16"/>
- <field name="stat_sys_phone_call_on_hold" deprecated="16"/>
+ <field name="stat_sys_phone_call" deprecated="15"/>
+ <field name="stat_sys_phone_call_forward" deprecated="15"/>
+ <field name="stat_sys_phone_call_on_hold" deprecated="15"/>
<field name="stat_sys_speakerphone"/>
<field name="stat_sys_upload"/>
<field name="stat_sys_upload_done"/>
- <field name="stat_sys_vp_phone_call" since="4" deprecated="16"/>
- <field name="stat_sys_vp_phone_call_on_hold" since="4" deprecated="16"/>
+ <field name="stat_sys_vp_phone_call" since="4" deprecated="15"/>
+ <field name="stat_sys_vp_phone_call_on_hold" since="4" deprecated="15"/>
<field name="stat_sys_warning"/>
<field name="status_bar_item_app_background"/>
<field name="status_bar_item_background"/>
@@ -1881,6 +1923,10 @@
<field name="accessibilityActionContextClick" since="23"/>
<field name="accessibilityActionHideTooltip" since="28"/>
<field name="accessibilityActionMoveWindow" since="26"/>
+ <field name="accessibilityActionPageDown" since="29"/>
+ <field name="accessibilityActionPageLeft" since="29"/>
+ <field name="accessibilityActionPageRight" since="29"/>
+ <field name="accessibilityActionPageUp" since="29"/>
<field name="accessibilityActionScrollDown" since="23"/>
<field name="accessibilityActionScrollLeft" since="23"/>
<field name="accessibilityActionScrollRight" since="23"/>
@@ -1915,7 +1961,7 @@
<field name="input"/>
<field name="inputArea" since="3"/>
<field name="inputExtractEditText" since="3"/>
- <field name="keyboardView" since="3"/>
+ <field name="keyboardView" since="3" deprecated="29"/>
<field name="list"/>
<field name="list_container" since="24"/>
<field name="mask" since="21"/>
@@ -2042,7 +2088,7 @@
<field name="fingerprint_icon_content_description" since="23"/>
<field name="httpErrorBadUrl"/>
<field name="httpErrorUnsupportedScheme"/>
- <field name="no"/>
+ <field name="no" deprecated="30"/>
<field name="ok"/>
<field name="paste"/>
<field name="paste_as_plain_text" since="26"/>
@@ -2052,7 +2098,7 @@
<field name="status_bar_notification_info_overflow" since="14"/>
<field name="unknownName"/>
<field name="untitled"/>
- <field name="yes"/>
+ <field name="yes" deprecated="30"/>
</class>
<class name="android/R$style" since="1">
<extends name="java/lang/Object"/>
@@ -2238,6 +2284,7 @@
<field name="TextAppearance_WindowTitle"/>
<field name="Theme"/>
<field name="ThemeOverlay" since="21"/>
+ <field name="ThemeOverlay_DeviceDefault_Accent_DayNight" since="29"/>
<field name="ThemeOverlay_Material" since="21"/>
<field name="ThemeOverlay_Material_ActionBar" since="21"/>
<field name="ThemeOverlay_Material_Dark" since="21"/>
@@ -2249,6 +2296,7 @@
<field name="Theme_Black_NoTitleBar"/>
<field name="Theme_Black_NoTitleBar_Fullscreen"/>
<field name="Theme_DeviceDefault" since="14"/>
+ <field name="Theme_DeviceDefault_DayNight" since="29"/>
<field name="Theme_DeviceDefault_Dialog" since="14"/>
<field name="Theme_DeviceDefault_DialogWhenLarge" since="14"/>
<field name="Theme_DeviceDefault_DialogWhenLarge_NoActionBar" since="14"/>
@@ -2626,7 +2674,7 @@
<field name="Widget_Holo_WebView" since="11"/>
<field name="Widget_ImageButton"/>
<field name="Widget_ImageWell"/>
- <field name="Widget_KeyboardView" since="3"/>
+ <field name="Widget_KeyboardView" since="3" deprecated="29"/>
<field name="Widget_ListPopupWindow" since="11"/>
<field name="Widget_ListView"/>
<field name="Widget_ListView_DropDown"/>
@@ -2810,7 +2858,6 @@
</class>
<class name="android/accessibilityservice/AccessibilityButtonController" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="isAccessibilityButtonAvailable()Z"/>
<method name="registerAccessibilityButtonCallback(Landroid/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback;)V"/>
<method name="registerAccessibilityButtonCallback(Landroid/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback;Landroid/os/Handler;)V"/>
@@ -2871,6 +2918,7 @@
<field name="SERVICE_META_DATA" since="14"/>
<field name="SHOW_MODE_AUTO" since="24"/>
<field name="SHOW_MODE_HIDDEN" since="24"/>
+ <field name="SHOW_MODE_IGNORE_HARD_KEYBOARD" since="29"/>
</class>
<class name="android/accessibilityservice/AccessibilityService$GestureResultCallback" since="24">
<extends name="java/lang/Object"/>
@@ -2880,8 +2928,6 @@
</class>
<class name="android/accessibilityservice/AccessibilityService$MagnificationController" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/accessibilityservice/AccessibilityService;Ljava/lang/Object;)V" since="29"/>
<method name="addListener(Landroid/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener;)V"/>
<method name="addListener(Landroid/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener;Landroid/os/Handler;)V"/>
<method name="getCenterX()F"/>
@@ -2899,8 +2945,6 @@
</class>
<class name="android/accessibilityservice/AccessibilityService$SoftKeyboardController" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/accessibilityservice/AccessibilityService;Ljava/lang/Object;)V" since="29"/>
<method name="addOnShowModeChangedListener(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener;)V"/>
<method name="addOnShowModeChangedListener(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener;Landroid/os/Handler;)V"/>
<method name="getShowMode()I"/>
@@ -2922,10 +2966,14 @@
<method name="getCapabilities()I" since="18"/>
<method name="getDescription()Ljava/lang/String;" since="14" deprecated="16"/>
<method name="getId()Ljava/lang/String;" since="14"/>
+ <method name="getInteractiveUiTimeoutMillis()I" since="29"/>
+ <method name="getNonInteractiveUiTimeoutMillis()I" since="29"/>
<method name="getResolveInfo()Landroid/content/pm/ResolveInfo;" since="14"/>
<method name="getSettingsActivityName()Ljava/lang/String;" since="14"/>
<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/String;" since="16"/>
<method name="loadSummary(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" since="26"/>
+ <method name="setInteractiveUiTimeoutMillis(I)V" since="29"/>
+ <method name="setNonInteractiveUiTimeoutMillis(I)V" since="29"/>
<field name="CAPABILITY_CAN_CONTROL_MAGNIFICATION" since="24"/>
<field name="CAPABILITY_CAN_PERFORM_GESTURES" since="24"/>
<field name="CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY" since="18" deprecated="26"/>
@@ -2949,6 +2997,7 @@
<field name="FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY" since="18" deprecated="26"/>
<field name="FLAG_REQUEST_FILTER_KEY_EVENTS" since="18"/>
<field name="FLAG_REQUEST_FINGERPRINT_GESTURES" since="26"/>
+ <field name="FLAG_REQUEST_SHORTCUT_WARNING_DIALOG_SPOKEN_FEEDBACK" since="29"/>
<field name="FLAG_REQUEST_TOUCH_EXPLORATION_MODE" since="16"/>
<field name="FLAG_RETRIEVE_INTERACTIVE_WINDOWS" since="21"/>
<field name="eventTypes"/>
@@ -2959,7 +3008,6 @@
</class>
<class name="android/accessibilityservice/FingerprintGestureController" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="isGestureDetectionAvailable()Z"/>
<method name="registerFingerprintGestureCallback(Landroid/accessibilityservice/FingerprintGestureController$FingerprintGestureCallback;Landroid/os/Handler;)V"/>
<method name="unregisterFingerprintGestureCallback(Landroid/accessibilityservice/FingerprintGestureController$FingerprintGestureCallback;)V"/>
@@ -2976,7 +3024,6 @@
</class>
<class name="android/accessibilityservice/GestureDescription" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getMaxGestureDuration()J"/>
<method name="getMaxStrokeCount()I"/>
<method name="getStroke(I)Landroid/accessibilityservice/GestureDescription$StrokeDescription;"/>
@@ -3027,10 +3074,10 @@
<field name="name"/>
<field name="type"/>
</class>
- <class name="android/accounts/AccountAuthenticatorActivity" since="5">
+ <class name="android/accounts/AccountAuthenticatorActivity" since="5" deprecated="30">
<extends name="android/app/Activity"/>
- <method name="&lt;init>()V"/>
- <method name="setAccountAuthenticatorResult(Landroid/os/Bundle;)V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="setAccountAuthenticatorResult(Landroid/os/Bundle;)V" deprecated="30"/>
</class>
<class name="android/accounts/AccountAuthenticatorResponse" since="5">
<extends name="java/lang/Object"/>
@@ -3043,7 +3090,6 @@
</class>
<class name="android/accounts/AccountManager" since="5">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="addAccount(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
<method name="addAccountExplicitly(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Z"/>
<method name="addAccountExplicitly(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Ljava/util/Map;)Z" since="26"/>
@@ -3063,7 +3109,7 @@
<method name="getAccountsByTypeForPackage(Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;" since="18"/>
<method name="getAuthToken(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
<method name="getAuthToken(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;ZLandroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="14"/>
- <method name="getAuthToken(Landroid/accounts/Account;Ljava/lang/String;ZLandroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" deprecated="16"/>
+ <method name="getAuthToken(Landroid/accounts/Account;Ljava/lang/String;ZLandroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" deprecated="15"/>
<method name="getAuthTokenByFeatures(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/Bundle;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
<method name="getAuthenticatorTypes()[Landroid/accounts/AuthenticatorDescription;"/>
<method name="getPackagesAndVisibilityForAccount(Landroid/accounts/Account;)Ljava/util/Map;" since="26"/>
@@ -3264,8 +3310,6 @@
</class>
<class name="android/animation/AnimatorSet$Builder" since="11">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/animation/AnimatorSet;)V" removed="29"/>
- <method name="&lt;init>(Landroid/animation/AnimatorSet;Landroid/animation/Animator;)V" since="29"/>
<method name="after(J)Landroid/animation/AnimatorSet$Builder;"/>
<method name="after(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;"/>
<method name="before(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;"/>
@@ -3411,8 +3455,6 @@
<class name="android/animation/PropertyValuesHolder" since="11">
<extends name="java/lang/Object"/>
<implements name="java/lang/Cloneable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
<method name="clone()Landroid/animation/PropertyValuesHolder;"/>
<method name="getPropertyName()Ljava/lang/String;"/>
<method name="ofFloat(Landroid/util/Property;[F)Landroid/animation/PropertyValuesHolder;" since="14"/>
@@ -3621,35 +3663,35 @@
</class>
<class name="android/app/ActionBar$OnNavigationListener" since="11" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="onNavigationItemSelected(IJ)Z"/>
+ <method name="onNavigationItemSelected(IJ)Z" deprecated="29"/>
</class>
<class name="android/app/ActionBar$Tab" since="11" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="getContentDescription()Ljava/lang/CharSequence;" since="14"/>
- <method name="getCustomView()Landroid/view/View;"/>
- <method name="getIcon()Landroid/graphics/drawable/Drawable;"/>
- <method name="getPosition()I"/>
- <method name="getTag()Ljava/lang/Object;"/>
- <method name="getText()Ljava/lang/CharSequence;"/>
- <method name="select()V"/>
- <method name="setContentDescription(I)Landroid/app/ActionBar$Tab;" since="14"/>
- <method name="setContentDescription(Ljava/lang/CharSequence;)Landroid/app/ActionBar$Tab;" since="14"/>
- <method name="setCustomView(I)Landroid/app/ActionBar$Tab;"/>
- <method name="setCustomView(Landroid/view/View;)Landroid/app/ActionBar$Tab;"/>
- <method name="setIcon(I)Landroid/app/ActionBar$Tab;"/>
- <method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/app/ActionBar$Tab;"/>
- <method name="setTabListener(Landroid/app/ActionBar$TabListener;)Landroid/app/ActionBar$Tab;"/>
- <method name="setTag(Ljava/lang/Object;)Landroid/app/ActionBar$Tab;"/>
- <method name="setText(I)Landroid/app/ActionBar$Tab;"/>
- <method name="setText(Ljava/lang/CharSequence;)Landroid/app/ActionBar$Tab;"/>
- <field name="INVALID_POSITION"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="getContentDescription()Ljava/lang/CharSequence;" since="14" deprecated="29"/>
+ <method name="getCustomView()Landroid/view/View;" deprecated="29"/>
+ <method name="getIcon()Landroid/graphics/drawable/Drawable;" deprecated="29"/>
+ <method name="getPosition()I" deprecated="29"/>
+ <method name="getTag()Ljava/lang/Object;" deprecated="29"/>
+ <method name="getText()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="select()V" deprecated="29"/>
+ <method name="setContentDescription(I)Landroid/app/ActionBar$Tab;" since="14" deprecated="29"/>
+ <method name="setContentDescription(Ljava/lang/CharSequence;)Landroid/app/ActionBar$Tab;" since="14" deprecated="29"/>
+ <method name="setCustomView(I)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+ <method name="setCustomView(Landroid/view/View;)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+ <method name="setIcon(I)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+ <method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+ <method name="setTabListener(Landroid/app/ActionBar$TabListener;)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+ <method name="setTag(Ljava/lang/Object;)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+ <method name="setText(I)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+ <method name="setText(Ljava/lang/CharSequence;)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+ <field name="INVALID_POSITION" deprecated="29"/>
</class>
<class name="android/app/ActionBar$TabListener" since="11" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="onTabReselected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V"/>
- <method name="onTabSelected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V"/>
- <method name="onTabUnselected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V"/>
+ <method name="onTabReselected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V" deprecated="29"/>
+ <method name="onTabSelected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V" deprecated="29"/>
+ <method name="onTabUnselected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V" deprecated="29"/>
</class>
<class name="android/app/Activity" since="1">
<extends name="android/view/ContextThemeWrapper"/>
@@ -3665,7 +3707,7 @@
<method name="closeContextMenu()V" since="3"/>
<method name="closeOptionsMenu()V"/>
<method name="createPendingResult(ILandroid/content/Intent;I)Landroid/app/PendingIntent;"/>
- <method name="dismissDialog(I)V" deprecated="16"/>
+ <method name="dismissDialog(I)V" deprecated="15"/>
<method name="dismissKeyboardShortcutsHelper()V" since="24"/>
<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="11"/>
<method name="enterPictureInPictureMode()V" since="24" deprecated="26"/>
@@ -3690,7 +3732,7 @@
<method name="getFragmentManager()Landroid/app/FragmentManager;" since="11" deprecated="28"/>
<method name="getInstanceCount()J" removed="11"/>
<method name="getIntent()Landroid/content/Intent;"/>
- <method name="getLastNonConfigurationInstance()Ljava/lang/Object;" deprecated="16"/>
+ <method name="getLastNonConfigurationInstance()Ljava/lang/Object;" deprecated="15"/>
<method name="getLayoutInflater()Landroid/view/LayoutInflater;"/>
<method name="getLoaderManager()Landroid/app/LoaderManager;" since="11" deprecated="28"/>
<method name="getLocalClassName()Ljava/lang/String;"/>
@@ -3724,7 +3766,7 @@
<method name="isTaskRoot()Z"/>
<method name="isVoiceInteraction()Z" since="23"/>
<method name="isVoiceInteractionRoot()Z" since="23"/>
- <method name="managedQuery(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" deprecated="16"/>
+ <method name="managedQuery(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" deprecated="15"/>
<method name="moveTaskToBack(Z)Z"/>
<method name="navigateUpTo(Landroid/content/Intent;)Z" since="16"/>
<method name="navigateUpToFromChild(Landroid/app/Activity;Landroid/content/Intent;)Z" since="16"/>
@@ -3738,14 +3780,15 @@
<method name="onCreate(Landroid/os/Bundle;)V"/>
<method name="onCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
<method name="onCreateDescription()Ljava/lang/CharSequence;"/>
- <method name="onCreateDialog(I)Landroid/app/Dialog;" deprecated="16"/>
- <method name="onCreateDialog(ILandroid/os/Bundle;)Landroid/app/Dialog;" since="8" deprecated="16"/>
+ <method name="onCreateDialog(I)Landroid/app/Dialog;" deprecated="15"/>
+ <method name="onCreateDialog(ILandroid/os/Bundle;)Landroid/app/Dialog;" since="8" deprecated="15"/>
<method name="onCreateNavigateUpTaskStack(Landroid/app/TaskStackBuilder;)V" since="16"/>
<method name="onCreateOptionsMenu(Landroid/view/Menu;)Z"/>
<method name="onCreateThumbnail(Landroid/graphics/Bitmap;Landroid/graphics/Canvas;)Z" deprecated="28"/>
<method name="onDestroy()V"/>
<method name="onEnterAnimationComplete()V" since="21"/>
<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12"/>
+ <method name="onGetDirectActions(Landroid/os/CancellationSignal;Ljava/util/function/Consumer;)V" since="29"/>
<method name="onKeyShortcut(ILandroid/view/KeyEvent;)Z" since="11"/>
<method name="onLocalVoiceInteractionStarted()V" since="24"/>
<method name="onLocalVoiceInteractionStopped()V" since="24"/>
@@ -3757,13 +3800,14 @@
<method name="onOptionsItemSelected(Landroid/view/MenuItem;)Z"/>
<method name="onOptionsMenuClosed(Landroid/view/Menu;)V"/>
<method name="onPause()V"/>
+ <method name="onPerformDirectAction(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;Ljava/util/function/Consumer;)V" since="29"/>
<method name="onPictureInPictureModeChanged(Z)V" since="24" deprecated="26"/>
<method name="onPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26"/>
<method name="onPostCreate(Landroid/os/Bundle;)V"/>
<method name="onPostCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
<method name="onPostResume()V"/>
- <method name="onPrepareDialog(ILandroid/app/Dialog;)V" deprecated="16"/>
- <method name="onPrepareDialog(ILandroid/app/Dialog;Landroid/os/Bundle;)V" since="8" deprecated="16"/>
+ <method name="onPrepareDialog(ILandroid/app/Dialog;)V" deprecated="15"/>
+ <method name="onPrepareDialog(ILandroid/app/Dialog;Landroid/os/Bundle;)V" since="8" deprecated="15"/>
<method name="onPrepareNavigateUpTaskStack(Landroid/app/TaskStackBuilder;)V" since="16"/>
<method name="onPrepareOptionsMenu(Landroid/view/Menu;)Z"/>
<method name="onProvideAssistContent(Landroid/app/assist/AssistContent;)V" since="23"/>
@@ -3774,13 +3818,14 @@
<method name="onRestoreInstanceState(Landroid/os/Bundle;)V"/>
<method name="onRestoreInstanceState(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
<method name="onResume()V"/>
- <method name="onRetainNonConfigurationInstance()Ljava/lang/Object;" deprecated="16"/>
+ <method name="onRetainNonConfigurationInstance()Ljava/lang/Object;" deprecated="15"/>
<method name="onSaveInstanceState(Landroid/os/Bundle;)V"/>
<method name="onSaveInstanceState(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
<method name="onStart()V"/>
- <method name="onStateNotSaved()V" since="23"/>
+ <method name="onStateNotSaved()V" since="23" deprecated="29"/>
<method name="onStop()V"/>
<method name="onTitleChanged(Ljava/lang/CharSequence;I)V"/>
+ <method name="onTopResumedActivityChanged(Z)V" since="29"/>
<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z"/>
<method name="onUserInteraction()V" since="3"/>
@@ -3791,9 +3836,10 @@
<method name="overridePendingTransition(II)V" since="5"/>
<method name="postponeEnterTransition()V" since="21"/>
<method name="recreate()V" since="11"/>
+ <method name="registerActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V" since="29"/>
<method name="registerForContextMenu(Landroid/view/View;)V"/>
<method name="releaseInstance()Z" since="21"/>
- <method name="removeDialog(I)V" deprecated="16"/>
+ <method name="removeDialog(I)V" deprecated="15"/>
<method name="reportFullyDrawn()V" since="19"/>
<method name="requestDragAndDropPermissions(Landroid/view/DragEvent;)Landroid/view/DragAndDropPermissions;" since="24"/>
<method name="requestPermissions([Ljava/lang/String;I)V" since="23"/>
@@ -3816,6 +3862,7 @@
<method name="setFeatureDrawableUri(ILandroid/net/Uri;)V"/>
<method name="setFinishOnTouchOutside(Z)V" since="11"/>
<method name="setImmersive(Z)V" since="18"/>
+ <method name="setInheritShowWhenLocked(Z)V" since="29"/>
<method name="setIntent(Landroid/content/Intent;)V"/>
<method name="setMediaController(Landroid/media/session/MediaController;)V" since="21"/>
<method name="setPersistent(Z)V" removed="11"/>
@@ -3840,8 +3887,8 @@
<method name="shouldShowRequestPermissionRationale(Ljava/lang/String;)Z" since="23"/>
<method name="shouldUpRecreateTask(Landroid/content/Intent;)Z" since="16"/>
<method name="showAssist(Landroid/os/Bundle;)Z" since="23"/>
- <method name="showDialog(I)V" deprecated="16"/>
- <method name="showDialog(ILandroid/os/Bundle;)Z" since="8" deprecated="16"/>
+ <method name="showDialog(I)V" deprecated="15"/>
+ <method name="showDialog(ILandroid/os/Bundle;)Z" since="8" deprecated="15"/>
<method name="showLockTaskEscapeMessage()V" since="23"/>
<method name="startActionMode(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;" since="11"/>
<method name="startActionMode(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;" since="23"/>
@@ -3859,16 +3906,17 @@
<method name="startIntentSenderFromChild(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="16"/>
<method name="startLocalVoiceInteraction(Landroid/os/Bundle;)V" since="24"/>
<method name="startLockTask()V" since="21"/>
- <method name="startManagingCursor(Landroid/database/Cursor;)V" deprecated="16"/>
+ <method name="startManagingCursor(Landroid/database/Cursor;)V" deprecated="15"/>
<method name="startNextMatchingActivity(Landroid/content/Intent;)Z"/>
<method name="startNextMatchingActivity(Landroid/content/Intent;Landroid/os/Bundle;)Z" since="16"/>
<method name="startPostponedEnterTransition()V" since="21"/>
<method name="startSearch(Ljava/lang/String;ZLandroid/os/Bundle;Z)V"/>
<method name="stopLocalVoiceInteraction()V" since="24"/>
<method name="stopLockTask()V" since="21"/>
- <method name="stopManagingCursor(Landroid/database/Cursor;)V" deprecated="16"/>
+ <method name="stopManagingCursor(Landroid/database/Cursor;)V" deprecated="15"/>
<method name="takeKeyEvents(Z)V"/>
<method name="triggerSearch(Ljava/lang/String;Landroid/os/Bundle;)V" since="5"/>
+ <method name="unregisterActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V" since="29"/>
<method name="unregisterForContextMenu(Landroid/view/View;)V"/>
<field name="DEFAULT_KEYS_DIALER"/>
<field name="DEFAULT_KEYS_DISABLE"/>
@@ -3882,15 +3930,13 @@
</class>
<class name="android/app/ActivityGroup" since="1" deprecated="13">
<extends name="android/app/Activity"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Z)V"/>
- <method name="getCurrentActivity()Landroid/app/Activity;"/>
- <method name="getLocalActivityManager()Landroid/app/LocalActivityManager;"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="&lt;init>(Z)V" deprecated="29"/>
+ <method name="getCurrentActivity()Landroid/app/Activity;" deprecated="29"/>
+ <method name="getLocalActivityManager()Landroid/app/LocalActivityManager;" deprecated="29"/>
</class>
<class name="android/app/ActivityManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/os/Handler;)V" since="29"/>
<method name="addAppTask(Landroid/app/Activity;Landroid/content/Intent;Landroid/app/ActivityManager$TaskDescription;Landroid/graphics/Bitmap;)I" since="21"/>
<method name="clearApplicationUserData()Z" since="19"/>
<method name="clearWatchHeapLimit()V" since="23"/>
@@ -3912,15 +3958,17 @@
<method name="getRunningServiceControlPanel(Landroid/content/ComponentName;)Landroid/app/PendingIntent;" since="5"/>
<method name="getRunningServices(I)Ljava/util/List;" deprecated="26"/>
<method name="getRunningTasks(I)Ljava/util/List;" deprecated="21"/>
+ <method name="isActivityStartAllowedOnDisplay(Landroid/content/Context;ILandroid/content/Intent;)Z" since="29"/>
<method name="isBackgroundRestricted()Z" since="28"/>
<method name="isInLockTaskMode()Z" since="21" deprecated="23"/>
<method name="isLowRamDevice()Z" since="19"/>
- <method name="isRunningInTestHarness()Z" since="11"/>
+ <method name="isRunningInTestHarness()Z" since="11" deprecated="29"/>
+ <method name="isRunningInUserTestHarness()Z" since="29"/>
<method name="isUserAMonkey()Z" since="8"/>
<method name="killBackgroundProcesses(Ljava/lang/String;)V" since="8"/>
<method name="moveTaskToFront(II)V" since="11"/>
<method name="moveTaskToFront(IILandroid/os/Bundle;)V" since="16"/>
- <method name="restartPackage(Ljava/lang/String;)V" since="3" deprecated="16"/>
+ <method name="restartPackage(Ljava/lang/String;)V" since="3" deprecated="15"/>
<method name="setVrThread(I)V" since="25"/>
<method name="setWatchHeapLimit(J)V" since="23"/>
<field name="ACTION_REPORT_HEAP_LIMIT" since="23"/>
@@ -3935,7 +3983,6 @@
</class>
<class name="android/app/ActivityManager$AppTask" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="finishAndRemoveTask()V"/>
<method name="getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;"/>
<method name="moveToFront()V"/>
@@ -3973,21 +4020,22 @@
<field name="uid"/>
</class>
<class name="android/app/ActivityManager$RecentTaskInfo" since="1">
- <extends name="java/lang/Object"/>
+ <extends name="android/app/TaskInfo" since="29"/>
+ <extends name="java/lang/Object" removed="29"/>
<implements name="android/os/Parcelable"/>
<method name="&lt;init>()V"/>
<method name="readFromParcel(Landroid/os/Parcel;)V"/>
<field name="CREATOR"/>
- <field name="affiliatedTaskId" since="21"/>
- <field name="baseActivity" since="23"/>
- <field name="baseIntent"/>
- <field name="description" since="11"/>
- <field name="id"/>
- <field name="numActivities" since="23"/>
- <field name="origActivity"/>
- <field name="persistentId" since="12"/>
- <field name="taskDescription" since="21"/>
- <field name="topActivity" since="23"/>
+ <field name="affiliatedTaskId" since="21" deprecated="29"/>
+ <field name="baseActivity" since="23" removed="29"/>
+ <field name="baseIntent" removed="29"/>
+ <field name="description" since="11" deprecated="29"/>
+ <field name="id" deprecated="29"/>
+ <field name="numActivities" since="23" removed="29"/>
+ <field name="origActivity" removed="29"/>
+ <field name="persistentId" since="12" deprecated="29"/>
+ <field name="taskDescription" since="21" removed="29"/>
+ <field name="topActivity" since="23" removed="29"/>
</class>
<class name="android/app/ActivityManager$RunningAppProcessInfo" since="3">
<extends name="java/lang/Object"/>
@@ -4049,18 +4097,19 @@
<field name="uid" since="5"/>
</class>
<class name="android/app/ActivityManager$RunningTaskInfo" since="1">
- <extends name="java/lang/Object"/>
+ <extends name="android/app/TaskInfo" since="29"/>
+ <extends name="java/lang/Object" removed="29"/>
<implements name="android/os/Parcelable"/>
<method name="&lt;init>()V"/>
<method name="readFromParcel(Landroid/os/Parcel;)V"/>
<field name="CREATOR"/>
- <field name="baseActivity"/>
- <field name="description"/>
- <field name="id"/>
- <field name="numActivities"/>
- <field name="numRunning"/>
- <field name="thumbnail"/>
- <field name="topActivity"/>
+ <field name="baseActivity" removed="29"/>
+ <field name="description" deprecated="29"/>
+ <field name="id" deprecated="29"/>
+ <field name="numActivities" removed="29"/>
+ <field name="numRunning" deprecated="29"/>
+ <field name="thumbnail" deprecated="29"/>
+ <field name="topActivity" removed="29"/>
</class>
<class name="android/app/ActivityManager$TaskDescription" since="21">
<extends name="java/lang/Object"/>
@@ -4080,7 +4129,6 @@
</class>
<class name="android/app/ActivityOptions" since="16">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getLaunchBounds()Landroid/graphics/Rect;" since="24"/>
<method name="getLaunchDisplayId()I" since="26"/>
<method name="getLockTaskMode()Z" since="28"/>
@@ -4104,7 +4152,6 @@
</class>
<class name="android/app/AlarmManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="cancel(Landroid/app/AlarmManager$OnAlarmListener;)V" since="24"/>
<method name="cancel(Landroid/app/PendingIntent;)V"/>
<method name="getNextAlarmClock()Landroid/app/AlarmManager$AlarmClockInfo;" since="21"/>
@@ -4153,12 +4200,12 @@
<method name="getListView()Landroid/widget/ListView;" since="3"/>
<method name="setButton(ILjava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" since="3"/>
<method name="setButton(ILjava/lang/CharSequence;Landroid/os/Message;)V" since="3"/>
- <method name="setButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="16"/>
- <method name="setButton(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="16"/>
- <method name="setButton2(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="16"/>
- <method name="setButton2(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="16"/>
- <method name="setButton3(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="16"/>
- <method name="setButton3(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="16"/>
+ <method name="setButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="15"/>
+ <method name="setButton(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="15"/>
+ <method name="setButton2(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="15"/>
+ <method name="setButton2(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="15"/>
+ <method name="setButton3(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="15"/>
+ <method name="setButton3(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="15"/>
<method name="setCustomTitle(Landroid/view/View;)V"/>
<method name="setIcon(I)V"/>
<method name="setIcon(Landroid/graphics/drawable/Drawable;)V"/>
@@ -4214,38 +4261,45 @@
<method name="setView(Landroid/view/View;)Landroid/app/AlertDialog$Builder;"/>
<method name="show()Landroid/app/AlertDialog;"/>
</class>
- <class name="android/app/AliasActivity" since="1">
+ <class name="android/app/AliasActivity" since="1" deprecated="30">
<extends name="android/app/Activity"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
</class>
<class name="android/app/AppComponentFactory" since="28">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
<method name="instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;"/>
<method name="instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application;"/>
+ <method name="instantiateClassLoader(Ljava/lang/ClassLoader;Landroid/content/pm/ApplicationInfo;)Ljava/lang/ClassLoader;" since="29"/>
<method name="instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider;"/>
<method name="instantiateReceiver(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/content/BroadcastReceiver;"/>
<method name="instantiateService(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Service;"/>
</class>
<class name="android/app/AppOpsManager" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="checkOp(Ljava/lang/String;ILjava/lang/String;)I"/>
- <method name="checkOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I"/>
+ <method name="checkOp(Ljava/lang/String;ILjava/lang/String;)I" deprecated="29"/>
+ <method name="checkOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I" deprecated="29"/>
<method name="checkPackage(ILjava/lang/String;)V"/>
<method name="finishOp(Ljava/lang/String;ILjava/lang/String;)V"/>
<method name="noteOp(Ljava/lang/String;ILjava/lang/String;)I"/>
<method name="noteOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I"/>
<method name="noteProxyOp(Ljava/lang/String;Ljava/lang/String;)I" since="23"/>
<method name="noteProxyOpNoThrow(Ljava/lang/String;Ljava/lang/String;)I" since="23"/>
+ <method name="noteProxyOpNoThrow(Ljava/lang/String;Ljava/lang/String;I)I" since="29"/>
<method name="permissionToOp(Ljava/lang/String;)Ljava/lang/String;" since="23"/>
<method name="startOp(Ljava/lang/String;ILjava/lang/String;)I"/>
<method name="startOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I"/>
+ <method name="startWatchingMode(Ljava/lang/String;Ljava/lang/String;ILandroid/app/AppOpsManager$OnOpChangedListener;)V" since="29"/>
<method name="startWatchingMode(Ljava/lang/String;Ljava/lang/String;Landroid/app/AppOpsManager$OnOpChangedListener;)V"/>
<method name="stopWatchingMode(Landroid/app/AppOpsManager$OnOpChangedListener;)V"/>
+ <method name="unsafeCheckOp(Ljava/lang/String;ILjava/lang/String;)I" since="29"/>
+ <method name="unsafeCheckOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I" since="29"/>
+ <method name="unsafeCheckOpRaw(Ljava/lang/String;ILjava/lang/String;)I" since="29"/>
+ <method name="unsafeCheckOpRawNoThrow(Ljava/lang/String;ILjava/lang/String;)I" since="29"/>
<field name="MODE_ALLOWED"/>
<field name="MODE_DEFAULT" since="21"/>
<field name="MODE_ERRORED"/>
+ <field name="MODE_FOREGROUND" since="29"/>
<field name="MODE_IGNORED"/>
<field name="OPSTR_ADD_VOICEMAIL" since="23"/>
<field name="OPSTR_ANSWER_PHONE_CALLS" since="26"/>
@@ -4281,6 +4335,7 @@
<field name="OPSTR_WRITE_CONTACTS" since="23"/>
<field name="OPSTR_WRITE_EXTERNAL_STORAGE" since="23"/>
<field name="OPSTR_WRITE_SETTINGS" since="23"/>
+ <field name="WATCH_FOREGROUND_CHANGES" since="29"/>
</class>
<class name="android/app/AppOpsManager$OnOpChangedListener" since="19">
<extends name="java/lang/Object"/>
@@ -4304,6 +4359,20 @@
<method name="onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
<method name="onActivityDestroyed(Landroid/app/Activity;)V"/>
<method name="onActivityPaused(Landroid/app/Activity;)V"/>
+ <method name="onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V" since="29"/>
+ <method name="onActivityPostDestroyed(Landroid/app/Activity;)V" since="29"/>
+ <method name="onActivityPostPaused(Landroid/app/Activity;)V" since="29"/>
+ <method name="onActivityPostResumed(Landroid/app/Activity;)V" since="29"/>
+ <method name="onActivityPostSaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V" since="29"/>
+ <method name="onActivityPostStarted(Landroid/app/Activity;)V" since="29"/>
+ <method name="onActivityPostStopped(Landroid/app/Activity;)V" since="29"/>
+ <method name="onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V" since="29"/>
+ <method name="onActivityPreDestroyed(Landroid/app/Activity;)V" since="29"/>
+ <method name="onActivityPrePaused(Landroid/app/Activity;)V" since="29"/>
+ <method name="onActivityPreResumed(Landroid/app/Activity;)V" since="29"/>
+ <method name="onActivityPreSaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V" since="29"/>
+ <method name="onActivityPreStarted(Landroid/app/Activity;)V" since="29"/>
+ <method name="onActivityPreStopped(Landroid/app/Activity;)V" since="29"/>
<method name="onActivityResumed(Landroid/app/Activity;)V"/>
<method name="onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
<method name="onActivityStarted(Landroid/app/Activity;)V"/>
@@ -4393,17 +4462,22 @@
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
<method name="&lt;init>(Landroid/os/Parcel;)V"/>
- <method name="&lt;init>(Ljava/lang/String;Landroid/content/ComponentName;Landroid/net/Uri;IZ)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Landroid/content/ComponentName;Landroid/content/ComponentName;Landroid/net/Uri;Landroid/service/notification/ZenPolicy;IZ)V" since="29"/>
+ <method name="&lt;init>(Ljava/lang/String;Landroid/content/ComponentName;Landroid/net/Uri;IZ)V" deprecated="29"/>
<method name="getConditionId()Landroid/net/Uri;"/>
+ <method name="getConfigurationActivity()Landroid/content/ComponentName;" since="29"/>
<method name="getCreationTime()J"/>
<method name="getInterruptionFilter()I"/>
<method name="getName()Ljava/lang/String;"/>
<method name="getOwner()Landroid/content/ComponentName;"/>
+ <method name="getZenPolicy()Landroid/service/notification/ZenPolicy;" since="29"/>
<method name="isEnabled()Z"/>
<method name="setConditionId(Landroid/net/Uri;)V"/>
+ <method name="setConfigurationActivity(Landroid/content/ComponentName;)V" since="29"/>
<method name="setEnabled(Z)V"/>
<method name="setInterruptionFilter(I)V"/>
<method name="setName(Ljava/lang/String;)V"/>
+ <method name="setZenPolicy(Landroid/service/notification/ZenPolicy;)V" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/app/DatePickerDialog" since="1">
@@ -4494,30 +4568,43 @@
<extends name="android/app/Fragment"/>
<implements name="android/content/DialogInterface$OnCancelListener"/>
<implements name="android/content/DialogInterface$OnDismissListener"/>
- <method name="&lt;init>()V"/>
- <method name="dismiss()V"/>
- <method name="dismissAllowingStateLoss()V" since="12"/>
- <method name="getDialog()Landroid/app/Dialog;"/>
- <method name="getShowsDialog()Z"/>
- <method name="getTheme()I"/>
- <method name="isCancelable()Z"/>
- <method name="onCreateDialog(Landroid/os/Bundle;)Landroid/app/Dialog;"/>
- <method name="setCancelable(Z)V"/>
- <method name="setShowsDialog(Z)V"/>
- <method name="setStyle(II)V"/>
- <method name="show(Landroid/app/FragmentManager;Ljava/lang/String;)V"/>
- <method name="show(Landroid/app/FragmentTransaction;Ljava/lang/String;)I"/>
- <field name="STYLE_NORMAL"/>
- <field name="STYLE_NO_FRAME"/>
- <field name="STYLE_NO_INPUT"/>
- <field name="STYLE_NO_TITLE"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="dismiss()V" deprecated="29"/>
+ <method name="dismissAllowingStateLoss()V" since="12" deprecated="29"/>
+ <method name="getDialog()Landroid/app/Dialog;" deprecated="29"/>
+ <method name="getShowsDialog()Z" deprecated="29"/>
+ <method name="getTheme()I" deprecated="29"/>
+ <method name="isCancelable()Z" deprecated="29"/>
+ <method name="onCreateDialog(Landroid/os/Bundle;)Landroid/app/Dialog;" deprecated="29"/>
+ <method name="setCancelable(Z)V" deprecated="29"/>
+ <method name="setShowsDialog(Z)V" deprecated="29"/>
+ <method name="setStyle(II)V" deprecated="29"/>
+ <method name="show(Landroid/app/FragmentManager;Ljava/lang/String;)V" deprecated="29"/>
+ <method name="show(Landroid/app/FragmentTransaction;Ljava/lang/String;)I" deprecated="29"/>
+ <field name="STYLE_NORMAL" deprecated="29"/>
+ <field name="STYLE_NO_FRAME" deprecated="29"/>
+ <field name="STYLE_NO_INPUT" deprecated="29"/>
+ <field name="STYLE_NO_TITLE" deprecated="29"/>
+ </class>
+ <class name="android/app/DirectAction" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getExtras()Landroid/os/Bundle;"/>
+ <method name="getId()Ljava/lang/String;"/>
+ <method name="getLocusId()Landroid/content/LocusId;"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/app/DirectAction$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="build()Landroid/app/DirectAction;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/app/DirectAction$Builder;"/>
+ <method name="setLocusId(Landroid/content/LocusId;)Landroid/app/DirectAction$Builder;"/>
</class>
<class name="android/app/DownloadManager" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
- <method name="addCompletedDownload(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;JZ)J" since="12"/>
- <method name="addCompletedDownload(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;JZLandroid/net/Uri;Landroid/net/Uri;)J" since="24"/>
+ <method name="addCompletedDownload(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;JZ)J" since="12" deprecated="29"/>
+ <method name="addCompletedDownload(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;JZLandroid/net/Uri;Landroid/net/Uri;)J" since="24" deprecated="29"/>
<method name="enqueue(Landroid/app/DownloadManager$Request;)J"/>
<method name="getMaxBytesOverMobile(Landroid/content/Context;)Ljava/lang/Long;" since="11"/>
<method name="getMimeTypeForDownloadedFile(J)Ljava/lang/String;" since="11"/>
@@ -4574,7 +4661,7 @@
<extends name="java/lang/Object"/>
<method name="&lt;init>(Landroid/net/Uri;)V"/>
<method name="addRequestHeader(Ljava/lang/String;Ljava/lang/String;)Landroid/app/DownloadManager$Request;"/>
- <method name="allowScanningByMediaScanner()V" since="11"/>
+ <method name="allowScanningByMediaScanner()V" since="11" deprecated="29"/>
<method name="setAllowedNetworkTypes(I)Landroid/app/DownloadManager$Request;"/>
<method name="setAllowedOverMetered(Z)Landroid/app/DownloadManager$Request;" since="16"/>
<method name="setAllowedOverRoaming(Z)Landroid/app/DownloadManager$Request;"/>
@@ -4586,9 +4673,9 @@
<method name="setNotificationVisibility(I)Landroid/app/DownloadManager$Request;" since="11"/>
<method name="setRequiresCharging(Z)Landroid/app/DownloadManager$Request;" since="24"/>
<method name="setRequiresDeviceIdle(Z)Landroid/app/DownloadManager$Request;" since="24"/>
- <method name="setShowRunningNotification(Z)Landroid/app/DownloadManager$Request;" deprecated="16"/>
+ <method name="setShowRunningNotification(Z)Landroid/app/DownloadManager$Request;" deprecated="15"/>
<method name="setTitle(Ljava/lang/CharSequence;)Landroid/app/DownloadManager$Request;"/>
- <method name="setVisibleInDownloadsUi(Z)Landroid/app/DownloadManager$Request;"/>
+ <method name="setVisibleInDownloadsUi(Z)Landroid/app/DownloadManager$Request;" deprecated="29"/>
<field name="NETWORK_MOBILE"/>
<field name="NETWORK_WIFI"/>
<field name="VISIBILITY_HIDDEN" since="11"/>
@@ -4596,329 +4683,323 @@
<field name="VISIBILITY_VISIBLE_NOTIFY_COMPLETED" since="11"/>
<field name="VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION" since="12"/>
</class>
- <class name="android/app/ExpandableListActivity" since="1">
+ <class name="android/app/ExpandableListActivity" since="1" deprecated="30">
<extends name="android/app/Activity"/>
<implements name="android/widget/ExpandableListView$OnChildClickListener"/>
<implements name="android/widget/ExpandableListView$OnGroupCollapseListener"/>
<implements name="android/widget/ExpandableListView$OnGroupExpandListener"/>
- <method name="&lt;init>()V"/>
- <method name="getExpandableListAdapter()Landroid/widget/ExpandableListAdapter;"/>
- <method name="getExpandableListView()Landroid/widget/ExpandableListView;"/>
- <method name="getSelectedId()J"/>
- <method name="getSelectedPosition()J"/>
- <method name="setListAdapter(Landroid/widget/ExpandableListAdapter;)V"/>
- <method name="setSelectedChild(IIZ)Z"/>
- <method name="setSelectedGroup(I)V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="getExpandableListAdapter()Landroid/widget/ExpandableListAdapter;" deprecated="30"/>
+ <method name="getExpandableListView()Landroid/widget/ExpandableListView;" deprecated="30"/>
+ <method name="getSelectedId()J" deprecated="30"/>
+ <method name="getSelectedPosition()J" deprecated="30"/>
+ <method name="setListAdapter(Landroid/widget/ExpandableListAdapter;)V" deprecated="30"/>
+ <method name="setSelectedChild(IIZ)Z" deprecated="30"/>
+ <method name="setSelectedGroup(I)V" deprecated="30"/>
</class>
<class name="android/app/Fragment" since="11" deprecated="28">
<extends name="java/lang/Object"/>
<implements name="android/content/ComponentCallbacks" removed="14"/>
<implements name="android/content/ComponentCallbacks2" since="14"/>
<implements name="android/view/View$OnCreateContextMenuListener"/>
- <method name="&lt;init>()V"/>
- <method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
- <method name="getActivity()Landroid/app/Activity;"/>
- <method name="getAllowEnterTransitionOverlap()Z" since="21"/>
- <method name="getAllowReturnTransitionOverlap()Z" since="21"/>
- <method name="getArguments()Landroid/os/Bundle;"/>
- <method name="getChildFragmentManager()Landroid/app/FragmentManager;" since="17"/>
- <method name="getContext()Landroid/content/Context;" since="23"/>
- <method name="getEnterTransition()Landroid/transition/Transition;" since="21"/>
- <method name="getExitTransition()Landroid/transition/Transition;" since="21"/>
- <method name="getFragmentManager()Landroid/app/FragmentManager;"/>
- <method name="getHost()Ljava/lang/Object;" since="23"/>
- <method name="getId()I"/>
- <method name="getLayoutInflater()Landroid/view/LayoutInflater;" since="26"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29"/>
+ <method name="getActivity()Landroid/app/Activity;" deprecated="29"/>
+ <method name="getAllowEnterTransitionOverlap()Z" since="21" deprecated="29"/>
+ <method name="getAllowReturnTransitionOverlap()Z" since="21" deprecated="29"/>
+ <method name="getArguments()Landroid/os/Bundle;" deprecated="29"/>
+ <method name="getChildFragmentManager()Landroid/app/FragmentManager;" since="17" deprecated="29"/>
+ <method name="getContext()Landroid/content/Context;" since="23" deprecated="29"/>
+ <method name="getEnterTransition()Landroid/transition/Transition;" since="21" deprecated="29"/>
+ <method name="getExitTransition()Landroid/transition/Transition;" since="21" deprecated="29"/>
+ <method name="getFragmentManager()Landroid/app/FragmentManager;" deprecated="29"/>
+ <method name="getHost()Ljava/lang/Object;" since="23" deprecated="29"/>
+ <method name="getId()I" deprecated="29"/>
+ <method name="getLayoutInflater()Landroid/view/LayoutInflater;" since="26" deprecated="29"/>
<method name="getLoaderManager()Landroid/app/LoaderManager;" deprecated="28"/>
- <method name="getParentFragment()Landroid/app/Fragment;" since="17"/>
- <method name="getReenterTransition()Landroid/transition/Transition;" since="21"/>
- <method name="getResources()Landroid/content/res/Resources;"/>
- <method name="getRetainInstance()Z"/>
- <method name="getReturnTransition()Landroid/transition/Transition;" since="21"/>
- <method name="getSharedElementEnterTransition()Landroid/transition/Transition;" since="21"/>
- <method name="getSharedElementReturnTransition()Landroid/transition/Transition;" since="21"/>
- <method name="getString(I)Ljava/lang/String;"/>
- <method name="getString(I[Ljava/lang/Object;)Ljava/lang/String;"/>
- <method name="getTag()Ljava/lang/String;"/>
- <method name="getTargetFragment()Landroid/app/Fragment;"/>
- <method name="getTargetRequestCode()I"/>
- <method name="getText(I)Ljava/lang/CharSequence;"/>
- <method name="getUserVisibleHint()Z" since="15"/>
- <method name="getView()Landroid/view/View;"/>
- <method name="instantiate(Landroid/content/Context;Ljava/lang/String;)Landroid/app/Fragment;"/>
- <method name="instantiate(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;"/>
- <method name="isAdded()Z"/>
- <method name="isDetached()Z" since="13"/>
- <method name="isHidden()Z"/>
- <method name="isInLayout()Z"/>
- <method name="isRemoving()Z"/>
- <method name="isResumed()Z"/>
- <method name="isStateSaved()Z" since="26"/>
- <method name="isVisible()Z"/>
- <method name="onActivityCreated(Landroid/os/Bundle;)V"/>
- <method name="onActivityResult(IILandroid/content/Intent;)V"/>
+ <method name="getParentFragment()Landroid/app/Fragment;" since="17" deprecated="29"/>
+ <method name="getReenterTransition()Landroid/transition/Transition;" since="21" deprecated="29"/>
+ <method name="getResources()Landroid/content/res/Resources;" deprecated="29"/>
+ <method name="getRetainInstance()Z" deprecated="29"/>
+ <method name="getReturnTransition()Landroid/transition/Transition;" since="21" deprecated="29"/>
+ <method name="getSharedElementEnterTransition()Landroid/transition/Transition;" since="21" deprecated="29"/>
+ <method name="getSharedElementReturnTransition()Landroid/transition/Transition;" since="21" deprecated="29"/>
+ <method name="getString(I)Ljava/lang/String;" deprecated="29"/>
+ <method name="getString(I[Ljava/lang/Object;)Ljava/lang/String;" deprecated="29"/>
+ <method name="getTag()Ljava/lang/String;" deprecated="29"/>
+ <method name="getTargetFragment()Landroid/app/Fragment;" deprecated="29"/>
+ <method name="getTargetRequestCode()I" deprecated="29"/>
+ <method name="getText(I)Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getUserVisibleHint()Z" since="15" deprecated="29"/>
+ <method name="getView()Landroid/view/View;" deprecated="29"/>
+ <method name="instantiate(Landroid/content/Context;Ljava/lang/String;)Landroid/app/Fragment;" deprecated="29"/>
+ <method name="instantiate(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;" deprecated="29"/>
+ <method name="isAdded()Z" deprecated="29"/>
+ <method name="isDetached()Z" since="13" deprecated="29"/>
+ <method name="isHidden()Z" deprecated="29"/>
+ <method name="isInLayout()Z" deprecated="29"/>
+ <method name="isRemoving()Z" deprecated="29"/>
+ <method name="isResumed()Z" deprecated="29"/>
+ <method name="isStateSaved()Z" since="26" deprecated="29"/>
+ <method name="isVisible()Z" deprecated="29"/>
+ <method name="onActivityCreated(Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="onActivityResult(IILandroid/content/Intent;)V" deprecated="29"/>
<method name="onAttach(Landroid/app/Activity;)V" deprecated="23"/>
- <method name="onAttach(Landroid/content/Context;)V" since="23"/>
- <method name="onAttachFragment(Landroid/app/Fragment;)V" since="24"/>
- <method name="onContextItemSelected(Landroid/view/MenuItem;)Z"/>
- <method name="onCreate(Landroid/os/Bundle;)V"/>
- <method name="onCreateAnimator(IZI)Landroid/animation/Animator;"/>
- <method name="onCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)V"/>
- <method name="onCreateView(Landroid/view/LayoutInflater;Landroid/view/ViewGroup;Landroid/os/Bundle;)Landroid/view/View;"/>
- <method name="onDestroy()V"/>
- <method name="onDestroyOptionsMenu()V"/>
- <method name="onDestroyView()V"/>
- <method name="onDetach()V"/>
- <method name="onGetLayoutInflater(Landroid/os/Bundle;)Landroid/view/LayoutInflater;" since="26"/>
- <method name="onHiddenChanged(Z)V"/>
+ <method name="onAttach(Landroid/content/Context;)V" since="23" deprecated="29"/>
+ <method name="onAttachFragment(Landroid/app/Fragment;)V" since="24" deprecated="29"/>
+ <method name="onContextItemSelected(Landroid/view/MenuItem;)Z" deprecated="29"/>
+ <method name="onCreate(Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="onCreateAnimator(IZI)Landroid/animation/Animator;" deprecated="29"/>
+ <method name="onCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)V" deprecated="29"/>
+ <method name="onCreateView(Landroid/view/LayoutInflater;Landroid/view/ViewGroup;Landroid/os/Bundle;)Landroid/view/View;" deprecated="29"/>
+ <method name="onDestroy()V" deprecated="29"/>
+ <method name="onDestroyOptionsMenu()V" deprecated="29"/>
+ <method name="onDestroyView()V" deprecated="29"/>
+ <method name="onDetach()V" deprecated="29"/>
+ <method name="onGetLayoutInflater(Landroid/os/Bundle;)Landroid/view/LayoutInflater;" since="26" deprecated="29"/>
+ <method name="onHiddenChanged(Z)V" deprecated="29"/>
<method name="onInflate(Landroid/app/Activity;Landroid/util/AttributeSet;Landroid/os/Bundle;)V" since="12" deprecated="23"/>
- <method name="onInflate(Landroid/content/Context;Landroid/util/AttributeSet;Landroid/os/Bundle;)V" since="23"/>
- <method name="onInflate(Landroid/util/AttributeSet;Landroid/os/Bundle;)V" deprecated="16"/>
+ <method name="onInflate(Landroid/content/Context;Landroid/util/AttributeSet;Landroid/os/Bundle;)V" since="23" deprecated="29"/>
+ <method name="onInflate(Landroid/util/AttributeSet;Landroid/os/Bundle;)V" deprecated="15"/>
<method name="onMultiWindowModeChanged(Z)V" since="24" deprecated="26"/>
- <method name="onMultiWindowModeChanged(ZLandroid/content/res/Configuration;)V" since="26"/>
- <method name="onOptionsItemSelected(Landroid/view/MenuItem;)Z"/>
- <method name="onOptionsMenuClosed(Landroid/view/Menu;)V"/>
- <method name="onPause()V"/>
+ <method name="onMultiWindowModeChanged(ZLandroid/content/res/Configuration;)V" since="26" deprecated="29"/>
+ <method name="onOptionsItemSelected(Landroid/view/MenuItem;)Z" deprecated="29"/>
+ <method name="onOptionsMenuClosed(Landroid/view/Menu;)V" deprecated="29"/>
+ <method name="onPause()V" deprecated="29"/>
<method name="onPictureInPictureModeChanged(Z)V" since="24" deprecated="26"/>
- <method name="onPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26"/>
- <method name="onPrepareOptionsMenu(Landroid/view/Menu;)V"/>
- <method name="onRequestPermissionsResult(I[Ljava/lang/String;[I)V" since="23"/>
- <method name="onResume()V"/>
- <method name="onSaveInstanceState(Landroid/os/Bundle;)V"/>
- <method name="onStart()V"/>
- <method name="onStop()V"/>
- <method name="onViewCreated(Landroid/view/View;Landroid/os/Bundle;)V" since="13"/>
- <method name="onViewStateRestored(Landroid/os/Bundle;)V" since="17"/>
- <method name="postponeEnterTransition()V" since="26"/>
- <method name="registerForContextMenu(Landroid/view/View;)V"/>
- <method name="requestPermissions([Ljava/lang/String;I)V" since="23"/>
- <method name="setAllowEnterTransitionOverlap(Z)V" since="21"/>
- <method name="setAllowReturnTransitionOverlap(Z)V" since="21"/>
- <method name="setArguments(Landroid/os/Bundle;)V"/>
- <method name="setEnterSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21"/>
- <method name="setEnterTransition(Landroid/transition/Transition;)V" since="21"/>
- <method name="setExitSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21"/>
- <method name="setExitTransition(Landroid/transition/Transition;)V" since="21"/>
- <method name="setHasOptionsMenu(Z)V"/>
- <method name="setInitialSavedState(Landroid/app/Fragment$SavedState;)V" since="13"/>
- <method name="setMenuVisibility(Z)V" since="14"/>
- <method name="setReenterTransition(Landroid/transition/Transition;)V" since="21"/>
- <method name="setRetainInstance(Z)V"/>
- <method name="setReturnTransition(Landroid/transition/Transition;)V" since="21"/>
- <method name="setSharedElementEnterTransition(Landroid/transition/Transition;)V" since="21"/>
- <method name="setSharedElementReturnTransition(Landroid/transition/Transition;)V" since="21"/>
- <method name="setTargetFragment(Landroid/app/Fragment;I)V"/>
- <method name="setUserVisibleHint(Z)V" since="15"/>
- <method name="shouldShowRequestPermissionRationale(Ljava/lang/String;)Z" since="23"/>
- <method name="startActivity(Landroid/content/Intent;)V"/>
- <method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;)V" since="16"/>
- <method name="startActivityForResult(Landroid/content/Intent;I)V"/>
- <method name="startActivityForResult(Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16"/>
- <method name="startIntentSenderForResult(Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="24"/>
- <method name="startPostponedEnterTransition()V" since="26"/>
- <method name="unregisterForContextMenu(Landroid/view/View;)V"/>
+ <method name="onPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26" deprecated="29"/>
+ <method name="onPrepareOptionsMenu(Landroid/view/Menu;)V" deprecated="29"/>
+ <method name="onRequestPermissionsResult(I[Ljava/lang/String;[I)V" since="23" deprecated="29"/>
+ <method name="onResume()V" deprecated="29"/>
+ <method name="onSaveInstanceState(Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="onStart()V" deprecated="29"/>
+ <method name="onStop()V" deprecated="29"/>
+ <method name="onViewCreated(Landroid/view/View;Landroid/os/Bundle;)V" since="13" deprecated="29"/>
+ <method name="onViewStateRestored(Landroid/os/Bundle;)V" since="17" deprecated="29"/>
+ <method name="postponeEnterTransition()V" since="26" deprecated="29"/>
+ <method name="registerForContextMenu(Landroid/view/View;)V" deprecated="29"/>
+ <method name="requestPermissions([Ljava/lang/String;I)V" since="23" deprecated="29"/>
+ <method name="setAllowEnterTransitionOverlap(Z)V" since="21" deprecated="29"/>
+ <method name="setAllowReturnTransitionOverlap(Z)V" since="21" deprecated="29"/>
+ <method name="setArguments(Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="setEnterSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21" deprecated="29"/>
+ <method name="setEnterTransition(Landroid/transition/Transition;)V" since="21" deprecated="29"/>
+ <method name="setExitSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21" deprecated="29"/>
+ <method name="setExitTransition(Landroid/transition/Transition;)V" since="21" deprecated="29"/>
+ <method name="setHasOptionsMenu(Z)V" deprecated="29"/>
+ <method name="setInitialSavedState(Landroid/app/Fragment$SavedState;)V" since="13" deprecated="29"/>
+ <method name="setMenuVisibility(Z)V" since="14" deprecated="29"/>
+ <method name="setReenterTransition(Landroid/transition/Transition;)V" since="21" deprecated="29"/>
+ <method name="setRetainInstance(Z)V" deprecated="29"/>
+ <method name="setReturnTransition(Landroid/transition/Transition;)V" since="21" deprecated="29"/>
+ <method name="setSharedElementEnterTransition(Landroid/transition/Transition;)V" since="21" deprecated="29"/>
+ <method name="setSharedElementReturnTransition(Landroid/transition/Transition;)V" since="21" deprecated="29"/>
+ <method name="setTargetFragment(Landroid/app/Fragment;I)V" deprecated="29"/>
+ <method name="setUserVisibleHint(Z)V" since="15" deprecated="29"/>
+ <method name="shouldShowRequestPermissionRationale(Ljava/lang/String;)Z" since="23" deprecated="29"/>
+ <method name="startActivity(Landroid/content/Intent;)V" deprecated="29"/>
+ <method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;)V" since="16" deprecated="29"/>
+ <method name="startActivityForResult(Landroid/content/Intent;I)V" deprecated="29"/>
+ <method name="startActivityForResult(Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16" deprecated="29"/>
+ <method name="startIntentSenderForResult(Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="24" deprecated="29"/>
+ <method name="startPostponedEnterTransition()V" since="26" deprecated="29"/>
+ <method name="unregisterForContextMenu(Landroid/view/View;)V" deprecated="29"/>
</class>
<class name="android/app/Fragment$InstantiationException" since="11" deprecated="28">
<extends name="android/util/AndroidRuntimeException"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Exception;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Exception;)V" deprecated="29"/>
</class>
<class name="android/app/Fragment$SavedState" since="13" deprecated="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Bundle;)V" since="29"/>
- <field name="CREATOR"/>
+ <field name="CREATOR" deprecated="29"/>
</class>
<class name="android/app/FragmentBreadCrumbs" since="11" deprecated="21">
<extends name="android/view/ViewGroup"/>
<implements name="android/app/FragmentManager$OnBackStackChangedListener"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="setActivity(Landroid/app/Activity;)V"/>
- <method name="setMaxVisible(I)V"/>
- <method name="setOnBreadCrumbClickListener(Landroid/app/FragmentBreadCrumbs$OnBreadCrumbClickListener;)V" since="12"/>
- <method name="setParentTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/view/View$OnClickListener;)V"/>
- <method name="setTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="setActivity(Landroid/app/Activity;)V" deprecated="29"/>
+ <method name="setMaxVisible(I)V" deprecated="29"/>
+ <method name="setOnBreadCrumbClickListener(Landroid/app/FragmentBreadCrumbs$OnBreadCrumbClickListener;)V" since="12" deprecated="29"/>
+ <method name="setParentTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/view/View$OnClickListener;)V" deprecated="29"/>
+ <method name="setTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V" deprecated="29"/>
</class>
<class name="android/app/FragmentBreadCrumbs$OnBreadCrumbClickListener" since="12" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="onBreadCrumbClick(Landroid/app/FragmentManager$BackStackEntry;I)Z"/>
+ <method name="onBreadCrumbClick(Landroid/app/FragmentManager$BackStackEntry;I)Z" deprecated="29"/>
</class>
<class name="android/app/FragmentContainer" since="23" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="onFindViewById(I)Landroid/view/View;"/>
- <method name="onHasView()Z"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="onFindViewById(I)Landroid/view/View;" deprecated="29"/>
+ <method name="onHasView()Z" deprecated="29"/>
</class>
<class name="android/app/FragmentController" since="23" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/app/FragmentHostCallback;)V" since="29"/>
- <method name="attachHost(Landroid/app/Fragment;)V"/>
- <method name="createController(Landroid/app/FragmentHostCallback;)Landroid/app/FragmentController;"/>
- <method name="dispatchActivityCreated()V"/>
- <method name="dispatchConfigurationChanged(Landroid/content/res/Configuration;)V"/>
- <method name="dispatchContextItemSelected(Landroid/view/MenuItem;)Z"/>
- <method name="dispatchCreate()V"/>
- <method name="dispatchCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)Z"/>
- <method name="dispatchDestroy()V"/>
- <method name="dispatchDestroyView()V"/>
- <method name="dispatchLowMemory()V"/>
+ <method name="attachHost(Landroid/app/Fragment;)V" deprecated="29"/>
+ <method name="createController(Landroid/app/FragmentHostCallback;)Landroid/app/FragmentController;" deprecated="29"/>
+ <method name="dispatchActivityCreated()V" deprecated="29"/>
+ <method name="dispatchConfigurationChanged(Landroid/content/res/Configuration;)V" deprecated="29"/>
+ <method name="dispatchContextItemSelected(Landroid/view/MenuItem;)Z" deprecated="29"/>
+ <method name="dispatchCreate()V" deprecated="29"/>
+ <method name="dispatchCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)Z" deprecated="29"/>
+ <method name="dispatchDestroy()V" deprecated="29"/>
+ <method name="dispatchDestroyView()V" deprecated="29"/>
+ <method name="dispatchLowMemory()V" deprecated="29"/>
<method name="dispatchMultiWindowModeChanged(Z)V" since="24" deprecated="26"/>
- <method name="dispatchMultiWindowModeChanged(ZLandroid/content/res/Configuration;)V" since="26"/>
- <method name="dispatchOptionsItemSelected(Landroid/view/MenuItem;)Z"/>
- <method name="dispatchOptionsMenuClosed(Landroid/view/Menu;)V"/>
- <method name="dispatchPause()V"/>
+ <method name="dispatchMultiWindowModeChanged(ZLandroid/content/res/Configuration;)V" since="26" deprecated="29"/>
+ <method name="dispatchOptionsItemSelected(Landroid/view/MenuItem;)Z" deprecated="29"/>
+ <method name="dispatchOptionsMenuClosed(Landroid/view/Menu;)V" deprecated="29"/>
+ <method name="dispatchPause()V" deprecated="29"/>
<method name="dispatchPictureInPictureModeChanged(Z)V" since="24" deprecated="26"/>
- <method name="dispatchPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26"/>
- <method name="dispatchPrepareOptionsMenu(Landroid/view/Menu;)Z"/>
- <method name="dispatchResume()V"/>
- <method name="dispatchStart()V"/>
- <method name="dispatchStop()V"/>
- <method name="dispatchTrimMemory(I)V"/>
- <method name="doLoaderDestroy()V"/>
- <method name="doLoaderStart()V"/>
- <method name="doLoaderStop(Z)V"/>
- <method name="dumpLoaders(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
- <method name="execPendingActions()Z"/>
- <method name="findFragmentByWho(Ljava/lang/String;)Landroid/app/Fragment;"/>
- <method name="getFragmentManager()Landroid/app/FragmentManager;"/>
- <method name="getLoaderManager()Landroid/app/LoaderManager;"/>
- <method name="noteStateNotSaved()V"/>
- <method name="onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;"/>
- <method name="reportLoaderStart()V"/>
- <method name="restoreAllState(Landroid/os/Parcelable;Landroid/app/FragmentManagerNonConfig;)V" since="24"/>
+ <method name="dispatchPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26" deprecated="29"/>
+ <method name="dispatchPrepareOptionsMenu(Landroid/view/Menu;)Z" deprecated="29"/>
+ <method name="dispatchResume()V" deprecated="29"/>
+ <method name="dispatchStart()V" deprecated="29"/>
+ <method name="dispatchStop()V" deprecated="29"/>
+ <method name="dispatchTrimMemory(I)V" deprecated="29"/>
+ <method name="doLoaderDestroy()V" deprecated="29"/>
+ <method name="doLoaderStart()V" deprecated="29"/>
+ <method name="doLoaderStop(Z)V" deprecated="29"/>
+ <method name="dumpLoaders(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29"/>
+ <method name="execPendingActions()Z" deprecated="29"/>
+ <method name="findFragmentByWho(Ljava/lang/String;)Landroid/app/Fragment;" deprecated="29"/>
+ <method name="getFragmentManager()Landroid/app/FragmentManager;" deprecated="29"/>
+ <method name="getLoaderManager()Landroid/app/LoaderManager;" deprecated="29"/>
+ <method name="noteStateNotSaved()V" deprecated="29"/>
+ <method name="onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;" deprecated="29"/>
+ <method name="reportLoaderStart()V" deprecated="29"/>
+ <method name="restoreAllState(Landroid/os/Parcelable;Landroid/app/FragmentManagerNonConfig;)V" since="24" deprecated="29"/>
<method name="restoreAllState(Landroid/os/Parcelable;Ljava/util/List;)V" deprecated="24"/>
- <method name="restoreLoaderNonConfig(Landroid/util/ArrayMap;)V"/>
- <method name="retainLoaderNonConfig()Landroid/util/ArrayMap;"/>
- <method name="retainNestedNonConfig()Landroid/app/FragmentManagerNonConfig;" since="24"/>
+ <method name="restoreLoaderNonConfig(Landroid/util/ArrayMap;)V" deprecated="29"/>
+ <method name="retainLoaderNonConfig()Landroid/util/ArrayMap;" deprecated="29"/>
+ <method name="retainNestedNonConfig()Landroid/app/FragmentManagerNonConfig;" since="24" deprecated="29"/>
<method name="retainNonConfig()Ljava/util/List;" deprecated="24"/>
- <method name="saveAllState()Landroid/os/Parcelable;"/>
+ <method name="saveAllState()Landroid/os/Parcelable;" deprecated="29"/>
</class>
<class name="android/app/FragmentHostCallback" since="23" deprecated="28">
<extends name="android/app/FragmentContainer"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/os/Handler;I)V"/>
- <method name="onAttachFragment(Landroid/app/Fragment;)V"/>
- <method name="onDump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
- <method name="onGetHost()Ljava/lang/Object;"/>
- <method name="onGetLayoutInflater()Landroid/view/LayoutInflater;"/>
- <method name="onGetWindowAnimations()I"/>
- <method name="onHasWindowAnimations()Z"/>
- <method name="onInvalidateOptionsMenu()V"/>
- <method name="onRequestPermissionsFromFragment(Landroid/app/Fragment;[Ljava/lang/String;I)V"/>
- <method name="onShouldSaveFragmentState(Landroid/app/Fragment;)Z"/>
- <method name="onStartActivityFromFragment(Landroid/app/Fragment;Landroid/content/Intent;ILandroid/os/Bundle;)V"/>
- <method name="onStartIntentSenderFromFragment(Landroid/app/Fragment;Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="24"/>
- <method name="onUseFragmentManagerInflaterFactory()Z"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/os/Handler;I)V" deprecated="29"/>
+ <method name="onAttachFragment(Landroid/app/Fragment;)V" deprecated="29"/>
+ <method name="onDump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29"/>
+ <method name="onGetHost()Ljava/lang/Object;" deprecated="29"/>
+ <method name="onGetLayoutInflater()Landroid/view/LayoutInflater;" deprecated="29"/>
+ <method name="onGetWindowAnimations()I" deprecated="29"/>
+ <method name="onHasWindowAnimations()Z" deprecated="29"/>
+ <method name="onInvalidateOptionsMenu()V" deprecated="29"/>
+ <method name="onRequestPermissionsFromFragment(Landroid/app/Fragment;[Ljava/lang/String;I)V" deprecated="29"/>
+ <method name="onShouldSaveFragmentState(Landroid/app/Fragment;)Z" deprecated="29"/>
+ <method name="onStartActivityFromFragment(Landroid/app/Fragment;Landroid/content/Intent;ILandroid/os/Bundle;)V" deprecated="29"/>
+ <method name="onStartIntentSenderFromFragment(Landroid/app/Fragment;Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="24" deprecated="29"/>
+ <method name="onUseFragmentManagerInflaterFactory()Z" deprecated="29"/>
</class>
<class name="android/app/FragmentManager" since="11" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="addOnBackStackChangedListener(Landroid/app/FragmentManager$OnBackStackChangedListener;)V"/>
- <method name="beginTransaction()Landroid/app/FragmentTransaction;"/>
- <method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
- <method name="enableDebugLogging(Z)V"/>
- <method name="executePendingTransactions()Z"/>
- <method name="findFragmentById(I)Landroid/app/Fragment;"/>
- <method name="findFragmentByTag(Ljava/lang/String;)Landroid/app/Fragment;"/>
- <method name="getBackStackEntryAt(I)Landroid/app/FragmentManager$BackStackEntry;"/>
- <method name="getBackStackEntryCount()I"/>
- <method name="getFragment(Landroid/os/Bundle;Ljava/lang/String;)Landroid/app/Fragment;"/>
- <method name="getFragments()Ljava/util/List;" since="26"/>
- <method name="getPrimaryNavigationFragment()Landroid/app/Fragment;" since="26"/>
- <method name="invalidateOptionsMenu()V" since="14"/>
- <method name="isDestroyed()Z" since="17"/>
- <method name="isStateSaved()Z" since="26"/>
- <method name="popBackStack()V"/>
- <method name="popBackStack(II)V"/>
- <method name="popBackStack(Ljava/lang/String;I)V"/>
- <method name="popBackStackImmediate()Z"/>
- <method name="popBackStackImmediate(II)Z"/>
- <method name="popBackStackImmediate(Ljava/lang/String;I)Z"/>
- <method name="putFragment(Landroid/os/Bundle;Ljava/lang/String;Landroid/app/Fragment;)V"/>
- <method name="registerFragmentLifecycleCallbacks(Landroid/app/FragmentManager$FragmentLifecycleCallbacks;Z)V" since="26"/>
- <method name="removeOnBackStackChangedListener(Landroid/app/FragmentManager$OnBackStackChangedListener;)V"/>
- <method name="saveFragmentInstanceState(Landroid/app/Fragment;)Landroid/app/Fragment$SavedState;" since="13"/>
- <method name="unregisterFragmentLifecycleCallbacks(Landroid/app/FragmentManager$FragmentLifecycleCallbacks;)V" since="26"/>
- <field name="POP_BACK_STACK_INCLUSIVE"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="addOnBackStackChangedListener(Landroid/app/FragmentManager$OnBackStackChangedListener;)V" deprecated="29"/>
+ <method name="beginTransaction()Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29"/>
+ <method name="enableDebugLogging(Z)V" deprecated="29"/>
+ <method name="executePendingTransactions()Z" deprecated="29"/>
+ <method name="findFragmentById(I)Landroid/app/Fragment;" deprecated="29"/>
+ <method name="findFragmentByTag(Ljava/lang/String;)Landroid/app/Fragment;" deprecated="29"/>
+ <method name="getBackStackEntryAt(I)Landroid/app/FragmentManager$BackStackEntry;" deprecated="29"/>
+ <method name="getBackStackEntryCount()I" deprecated="29"/>
+ <method name="getFragment(Landroid/os/Bundle;Ljava/lang/String;)Landroid/app/Fragment;" deprecated="29"/>
+ <method name="getFragments()Ljava/util/List;" since="26" deprecated="29"/>
+ <method name="getPrimaryNavigationFragment()Landroid/app/Fragment;" since="26" deprecated="29"/>
+ <method name="invalidateOptionsMenu()V" since="14" deprecated="29"/>
+ <method name="isDestroyed()Z" since="17" deprecated="29"/>
+ <method name="isStateSaved()Z" since="26" deprecated="29"/>
+ <method name="popBackStack()V" deprecated="29"/>
+ <method name="popBackStack(II)V" deprecated="29"/>
+ <method name="popBackStack(Ljava/lang/String;I)V" deprecated="29"/>
+ <method name="popBackStackImmediate()Z" deprecated="29"/>
+ <method name="popBackStackImmediate(II)Z" deprecated="29"/>
+ <method name="popBackStackImmediate(Ljava/lang/String;I)Z" deprecated="29"/>
+ <method name="putFragment(Landroid/os/Bundle;Ljava/lang/String;Landroid/app/Fragment;)V" deprecated="29"/>
+ <method name="registerFragmentLifecycleCallbacks(Landroid/app/FragmentManager$FragmentLifecycleCallbacks;Z)V" since="26" deprecated="29"/>
+ <method name="removeOnBackStackChangedListener(Landroid/app/FragmentManager$OnBackStackChangedListener;)V" deprecated="29"/>
+ <method name="saveFragmentInstanceState(Landroid/app/Fragment;)Landroid/app/Fragment$SavedState;" since="13" deprecated="29"/>
+ <method name="unregisterFragmentLifecycleCallbacks(Landroid/app/FragmentManager$FragmentLifecycleCallbacks;)V" since="26" deprecated="29"/>
+ <field name="POP_BACK_STACK_INCLUSIVE" deprecated="29"/>
</class>
<class name="android/app/FragmentManager$BackStackEntry" since="11" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="getBreadCrumbShortTitle()Ljava/lang/CharSequence;"/>
- <method name="getBreadCrumbShortTitleRes()I"/>
- <method name="getBreadCrumbTitle()Ljava/lang/CharSequence;"/>
- <method name="getBreadCrumbTitleRes()I"/>
- <method name="getId()I"/>
- <method name="getName()Ljava/lang/String;" since="14"/>
+ <method name="getBreadCrumbShortTitle()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getBreadCrumbShortTitleRes()I" deprecated="29"/>
+ <method name="getBreadCrumbTitle()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getBreadCrumbTitleRes()I" deprecated="29"/>
+ <method name="getId()I" deprecated="29"/>
+ <method name="getName()Ljava/lang/String;" since="14" deprecated="29"/>
</class>
<class name="android/app/FragmentManager$FragmentLifecycleCallbacks" since="26" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="onFragmentActivityCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V"/>
- <method name="onFragmentAttached(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/content/Context;)V"/>
- <method name="onFragmentCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V"/>
- <method name="onFragmentDestroyed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
- <method name="onFragmentDetached(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
- <method name="onFragmentPaused(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
- <method name="onFragmentPreAttached(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/content/Context;)V"/>
- <method name="onFragmentPreCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V"/>
- <method name="onFragmentResumed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
- <method name="onFragmentSaveInstanceState(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V"/>
- <method name="onFragmentStarted(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
- <method name="onFragmentStopped(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
- <method name="onFragmentViewCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/view/View;Landroid/os/Bundle;)V"/>
- <method name="onFragmentViewDestroyed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="onFragmentActivityCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="onFragmentAttached(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/content/Context;)V" deprecated="29"/>
+ <method name="onFragmentCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="onFragmentDestroyed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
+ <method name="onFragmentDetached(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
+ <method name="onFragmentPaused(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
+ <method name="onFragmentPreAttached(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/content/Context;)V" deprecated="29"/>
+ <method name="onFragmentPreCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="onFragmentResumed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
+ <method name="onFragmentSaveInstanceState(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="onFragmentStarted(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
+ <method name="onFragmentStopped(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
+ <method name="onFragmentViewCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/view/View;Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="onFragmentViewDestroyed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
</class>
<class name="android/app/FragmentManager$OnBackStackChangedListener" since="11" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="onBackStackChanged()V"/>
+ <method name="onBackStackChanged()V" deprecated="29"/>
</class>
<class name="android/app/FragmentManagerNonConfig" since="24" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/List;Ljava/util/List;)V" since="29"/>
</class>
<class name="android/app/FragmentTransaction" since="11" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="add(ILandroid/app/Fragment;)Landroid/app/FragmentTransaction;"/>
- <method name="add(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;"/>
- <method name="add(Landroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;"/>
- <method name="addSharedElement(Landroid/view/View;Ljava/lang/String;)Landroid/app/FragmentTransaction;" since="21"/>
- <method name="addToBackStack(Ljava/lang/String;)Landroid/app/FragmentTransaction;"/>
- <method name="attach(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="13"/>
- <method name="commit()I"/>
- <method name="commitAllowingStateLoss()I"/>
- <method name="commitNow()V" since="24"/>
- <method name="commitNowAllowingStateLoss()V" since="24"/>
- <method name="detach(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="13"/>
- <method name="disallowAddToBackStack()Landroid/app/FragmentTransaction;"/>
- <method name="hide(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;"/>
- <method name="isAddToBackStackAllowed()Z"/>
- <method name="isEmpty()Z"/>
- <method name="remove(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;"/>
- <method name="replace(ILandroid/app/Fragment;)Landroid/app/FragmentTransaction;"/>
- <method name="replace(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;"/>
- <method name="runOnCommit(Ljava/lang/Runnable;)Landroid/app/FragmentTransaction;" since="26"/>
- <method name="setBreadCrumbShortTitle(I)Landroid/app/FragmentTransaction;"/>
- <method name="setBreadCrumbShortTitle(Ljava/lang/CharSequence;)Landroid/app/FragmentTransaction;"/>
- <method name="setBreadCrumbTitle(I)Landroid/app/FragmentTransaction;"/>
- <method name="setBreadCrumbTitle(Ljava/lang/CharSequence;)Landroid/app/FragmentTransaction;"/>
- <method name="setCustomAnimations(II)Landroid/app/FragmentTransaction;"/>
- <method name="setCustomAnimations(IIII)Landroid/app/FragmentTransaction;" since="13"/>
- <method name="setPrimaryNavigationFragment(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="26"/>
- <method name="setReorderingAllowed(Z)Landroid/app/FragmentTransaction;" since="26"/>
- <method name="setTransition(I)Landroid/app/FragmentTransaction;"/>
- <method name="setTransitionStyle(I)Landroid/app/FragmentTransaction;"/>
- <method name="show(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;"/>
- <field name="TRANSIT_ENTER_MASK"/>
- <field name="TRANSIT_EXIT_MASK"/>
- <field name="TRANSIT_FRAGMENT_CLOSE"/>
- <field name="TRANSIT_FRAGMENT_FADE"/>
- <field name="TRANSIT_FRAGMENT_OPEN"/>
- <field name="TRANSIT_NONE"/>
- <field name="TRANSIT_UNSET"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="add(ILandroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="add(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="add(Landroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="addSharedElement(Landroid/view/View;Ljava/lang/String;)Landroid/app/FragmentTransaction;" since="21" deprecated="29"/>
+ <method name="addToBackStack(Ljava/lang/String;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="attach(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="13" deprecated="29"/>
+ <method name="commit()I" deprecated="29"/>
+ <method name="commitAllowingStateLoss()I" deprecated="29"/>
+ <method name="commitNow()V" since="24" deprecated="29"/>
+ <method name="commitNowAllowingStateLoss()V" since="24" deprecated="29"/>
+ <method name="detach(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="13" deprecated="29"/>
+ <method name="disallowAddToBackStack()Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="hide(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="isAddToBackStackAllowed()Z" deprecated="29"/>
+ <method name="isEmpty()Z" deprecated="29"/>
+ <method name="remove(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="replace(ILandroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="replace(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="runOnCommit(Ljava/lang/Runnable;)Landroid/app/FragmentTransaction;" since="26" deprecated="29"/>
+ <method name="setBreadCrumbShortTitle(I)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="setBreadCrumbShortTitle(Ljava/lang/CharSequence;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="setBreadCrumbTitle(I)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="setBreadCrumbTitle(Ljava/lang/CharSequence;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="setCustomAnimations(II)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="setCustomAnimations(IIII)Landroid/app/FragmentTransaction;" since="13" deprecated="29"/>
+ <method name="setPrimaryNavigationFragment(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="26" deprecated="29"/>
+ <method name="setReorderingAllowed(Z)Landroid/app/FragmentTransaction;" since="26" deprecated="29"/>
+ <method name="setTransition(I)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="setTransitionStyle(I)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <method name="show(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+ <field name="TRANSIT_ENTER_MASK" deprecated="29"/>
+ <field name="TRANSIT_EXIT_MASK" deprecated="29"/>
+ <field name="TRANSIT_FRAGMENT_CLOSE" deprecated="29"/>
+ <field name="TRANSIT_FRAGMENT_FADE" deprecated="29"/>
+ <field name="TRANSIT_FRAGMENT_OPEN" deprecated="29"/>
+ <field name="TRANSIT_NONE" deprecated="29"/>
+ <field name="TRANSIT_UNSET" deprecated="29"/>
</class>
<class name="android/app/Instrumentation" since="1">
<extends name="java/lang/Object"/>
@@ -5013,23 +5094,22 @@
<method name="getResultCode()I"/>
<method name="getResultData()Landroid/content/Intent;"/>
</class>
- <class name="android/app/IntentService" since="3">
+ <class name="android/app/IntentService" since="3" deprecated="30">
<extends name="android/app/Service"/>
- <method name="&lt;init>(Ljava/lang/String;)V"/>
- <method name="onHandleIntent(Landroid/content/Intent;)V"/>
- <method name="setIntentRedelivery(Z)V" since="5"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" deprecated="30"/>
+ <method name="onHandleIntent(Landroid/content/Intent;)V" deprecated="30"/>
+ <method name="setIntentRedelivery(Z)V" since="5" deprecated="30"/>
</class>
<class name="android/app/KeyguardManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="createConfirmDeviceCredentialIntent(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Landroid/content/Intent;" since="21"/>
- <method name="exitKeyguardSecurely(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V" deprecated="16"/>
+ <method name="createConfirmDeviceCredentialIntent(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Landroid/content/Intent;" since="21" deprecated="29"/>
+ <method name="exitKeyguardSecurely(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V" deprecated="15"/>
<method name="inKeyguardRestrictedInputMode()Z" deprecated="28"/>
<method name="isDeviceLocked()Z" since="22"/>
<method name="isDeviceSecure()Z" since="23"/>
<method name="isKeyguardLocked()Z" since="16"/>
<method name="isKeyguardSecure()Z" since="16"/>
- <method name="newKeyguardLock(Ljava/lang/String;)Landroid/app/KeyguardManager$KeyguardLock;" deprecated="16"/>
+ <method name="newKeyguardLock(Ljava/lang/String;)Landroid/app/KeyguardManager$KeyguardLock;" deprecated="15"/>
<method name="requestDismissKeyguard(Landroid/app/Activity;Landroid/app/KeyguardManager$KeyguardDismissCallback;)V" since="26"/>
</class>
<class name="android/app/KeyguardManager$KeyguardDismissCallback" since="26">
@@ -5039,98 +5119,96 @@
<method name="onDismissError()V"/>
<method name="onDismissSucceeded()V"/>
</class>
- <class name="android/app/KeyguardManager$KeyguardLock" since="1" deprecated="16">
+ <class name="android/app/KeyguardManager$KeyguardLock" since="1" deprecated="15">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/app/KeyguardManager;)V" removed="29"/>
- <method name="&lt;init>(Landroid/app/KeyguardManager;Ljava/lang/String;)V" since="29"/>
- <method name="disableKeyguard()V"/>
- <method name="reenableKeyguard()V"/>
+ <method name="disableKeyguard()V" deprecated="29"/>
+ <method name="reenableKeyguard()V" deprecated="29"/>
</class>
<class name="android/app/KeyguardManager$OnKeyguardExitResult" since="1" deprecated="26">
<extends name="java/lang/Object"/>
- <method name="onKeyguardExitResult(Z)V"/>
+ <method name="onKeyguardExitResult(Z)V" deprecated="29"/>
</class>
- <class name="android/app/LauncherActivity" since="1">
+ <class name="android/app/LauncherActivity" since="1" deprecated="30">
<extends name="android/app/ListActivity"/>
- <method name="&lt;init>()V"/>
- <method name="getTargetIntent()Landroid/content/Intent;"/>
- <method name="intentForPosition(I)Landroid/content/Intent;" since="3"/>
- <method name="itemForPosition(I)Landroid/app/LauncherActivity$ListItem;" since="4"/>
- <method name="makeListItems()Ljava/util/List;" since="3"/>
- <method name="onQueryPackageManager(Landroid/content/Intent;)Ljava/util/List;" since="5"/>
- <method name="onSetContentView()V" since="5"/>
- </class>
- <class name="android/app/LauncherActivity$IconResizer" since="3">
- <extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/app/LauncherActivity;)V"/>
- <method name="createIconThumbnail(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;"/>
- </class>
- <class name="android/app/LauncherActivity$ListItem" since="3">
- <extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <field name="className"/>
- <field name="extras"/>
- <field name="icon"/>
- <field name="label"/>
- <field name="packageName"/>
- <field name="resolveInfo" since="4"/>
- </class>
- <class name="android/app/ListActivity" since="1">
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="getTargetIntent()Landroid/content/Intent;" deprecated="30"/>
+ <method name="intentForPosition(I)Landroid/content/Intent;" since="3" deprecated="30"/>
+ <method name="itemForPosition(I)Landroid/app/LauncherActivity$ListItem;" since="4" deprecated="30"/>
+ <method name="makeListItems()Ljava/util/List;" since="3" deprecated="30"/>
+ <method name="onQueryPackageManager(Landroid/content/Intent;)Ljava/util/List;" since="5" deprecated="30"/>
+ <method name="onSetContentView()V" since="5" deprecated="30"/>
+ </class>
+ <class name="android/app/LauncherActivity$IconResizer" since="3" deprecated="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/app/LauncherActivity;)V" deprecated="30"/>
+ <method name="createIconThumbnail(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;" deprecated="30"/>
+ </class>
+ <class name="android/app/LauncherActivity$ListItem" since="3" deprecated="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <field name="className" deprecated="30"/>
+ <field name="extras" deprecated="30"/>
+ <field name="icon" deprecated="30"/>
+ <field name="label" deprecated="30"/>
+ <field name="packageName" deprecated="30"/>
+ <field name="resolveInfo" since="4" deprecated="30"/>
+ </class>
+ <class name="android/app/ListActivity" since="1" deprecated="30">
<extends name="android/app/Activity"/>
- <method name="&lt;init>()V"/>
- <method name="getListAdapter()Landroid/widget/ListAdapter;"/>
- <method name="getListView()Landroid/widget/ListView;"/>
- <method name="getSelectedItemId()J"/>
- <method name="getSelectedItemPosition()I"/>
- <method name="onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V"/>
- <method name="setListAdapter(Landroid/widget/ListAdapter;)V"/>
- <method name="setSelection(I)V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="getListAdapter()Landroid/widget/ListAdapter;" deprecated="30"/>
+ <method name="getListView()Landroid/widget/ListView;" deprecated="30"/>
+ <method name="getSelectedItemId()J" deprecated="30"/>
+ <method name="getSelectedItemPosition()I" deprecated="30"/>
+ <method name="onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V" deprecated="30"/>
+ <method name="setListAdapter(Landroid/widget/ListAdapter;)V" deprecated="30"/>
+ <method name="setSelection(I)V" deprecated="30"/>
</class>
<class name="android/app/ListFragment" since="11" deprecated="28">
<extends name="android/app/Fragment"/>
- <method name="&lt;init>()V"/>
- <method name="getListAdapter()Landroid/widget/ListAdapter;"/>
- <method name="getListView()Landroid/widget/ListView;"/>
- <method name="getSelectedItemId()J"/>
- <method name="getSelectedItemPosition()I"/>
- <method name="onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V"/>
- <method name="setEmptyText(Ljava/lang/CharSequence;)V"/>
- <method name="setListAdapter(Landroid/widget/ListAdapter;)V"/>
- <method name="setListShown(Z)V"/>
- <method name="setListShownNoAnimation(Z)V"/>
- <method name="setSelection(I)V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="getListAdapter()Landroid/widget/ListAdapter;" deprecated="29"/>
+ <method name="getListView()Landroid/widget/ListView;" deprecated="29"/>
+ <method name="getSelectedItemId()J" deprecated="29"/>
+ <method name="getSelectedItemPosition()I" deprecated="29"/>
+ <method name="onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V" deprecated="29"/>
+ <method name="setEmptyText(Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="setListAdapter(Landroid/widget/ListAdapter;)V" deprecated="29"/>
+ <method name="setListShown(Z)V" deprecated="29"/>
+ <method name="setListShownNoAnimation(Z)V" deprecated="29"/>
+ <method name="setSelection(I)V" deprecated="29"/>
</class>
<class name="android/app/LoaderManager" since="11" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="destroyLoader(I)V"/>
- <method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
- <method name="enableDebugLogging(Z)V"/>
- <method name="getLoader(I)Landroid/content/Loader;"/>
- <method name="initLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;"/>
- <method name="restartLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="destroyLoader(I)V" deprecated="29"/>
+ <method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29"/>
+ <method name="enableDebugLogging(Z)V" deprecated="29"/>
+ <method name="getLoader(I)Landroid/content/Loader;" deprecated="29"/>
+ <method name="initLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;" deprecated="29"/>
+ <method name="restartLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;" deprecated="29"/>
</class>
<class name="android/app/LoaderManager$LoaderCallbacks" since="11" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="onCreateLoader(ILandroid/os/Bundle;)Landroid/content/Loader;"/>
- <method name="onLoadFinished(Landroid/content/Loader;Ljava/lang/Object;)V"/>
- <method name="onLoaderReset(Landroid/content/Loader;)V"/>
+ <method name="onCreateLoader(ILandroid/os/Bundle;)Landroid/content/Loader;" deprecated="29"/>
+ <method name="onLoadFinished(Landroid/content/Loader;Ljava/lang/Object;)V" deprecated="29"/>
+ <method name="onLoaderReset(Landroid/content/Loader;)V" deprecated="29"/>
</class>
<class name="android/app/LocalActivityManager" since="1" deprecated="13">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/app/Activity;Z)V"/>
- <method name="destroyActivity(Ljava/lang/String;Z)Landroid/view/Window;"/>
- <method name="dispatchCreate(Landroid/os/Bundle;)V"/>
- <method name="dispatchDestroy(Z)V"/>
- <method name="dispatchPause(Z)V"/>
- <method name="dispatchResume()V"/>
- <method name="dispatchStop()V"/>
- <method name="getActivity(Ljava/lang/String;)Landroid/app/Activity;"/>
- <method name="getCurrentActivity()Landroid/app/Activity;"/>
- <method name="getCurrentId()Ljava/lang/String;"/>
- <method name="removeAllActivities()V"/>
- <method name="saveInstanceState()Landroid/os/Bundle;"/>
- <method name="startActivity(Ljava/lang/String;Landroid/content/Intent;)Landroid/view/Window;"/>
+ <method name="&lt;init>(Landroid/app/Activity;Z)V" deprecated="29"/>
+ <method name="destroyActivity(Ljava/lang/String;Z)Landroid/view/Window;" deprecated="29"/>
+ <method name="dispatchCreate(Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="dispatchDestroy(Z)V" deprecated="29"/>
+ <method name="dispatchPause(Z)V" deprecated="29"/>
+ <method name="dispatchResume()V" deprecated="29"/>
+ <method name="dispatchStop()V" deprecated="29"/>
+ <method name="getActivity(Ljava/lang/String;)Landroid/app/Activity;" deprecated="29"/>
+ <method name="getCurrentActivity()Landroid/app/Activity;" deprecated="29"/>
+ <method name="getCurrentId()Ljava/lang/String;" deprecated="29"/>
+ <method name="removeAllActivities()V" deprecated="29"/>
+ <method name="saveInstanceState()Landroid/os/Bundle;" deprecated="29"/>
+ <method name="startActivity(Ljava/lang/String;Landroid/content/Intent;)Landroid/view/Window;" deprecated="29"/>
</class>
<class name="android/app/MediaRouteActionProvider" since="16">
<extends name="android/view/ActionProvider"/>
@@ -5162,20 +5240,23 @@
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
<method name="&lt;init>()V"/>
- <method name="&lt;init>(ILjava/lang/CharSequence;J)V" deprecated="16"/>
+ <method name="&lt;init>(ILjava/lang/CharSequence;J)V" deprecated="15"/>
<method name="&lt;init>(Landroid/os/Parcel;)V"/>
<method name="clone()Landroid/app/Notification;" since="9"/>
+ <method name="getAllowSystemGeneratedContextualActions()Z" since="29"/>
<method name="getBadgeIconType()I" since="26"/>
+ <method name="getBubbleMetadata()Landroid/app/Notification$BubbleMetadata;" since="29"/>
<method name="getChannelId()Ljava/lang/String;" since="26"/>
<method name="getGroup()Ljava/lang/String;" since="20"/>
<method name="getGroupAlertBehavior()I" since="26"/>
<method name="getLargeIcon()Landroid/graphics/drawable/Icon;" since="23"/>
+ <method name="getLocusId()Landroid/content/LocusId;" since="29"/>
<method name="getSettingsText()Ljava/lang/CharSequence;" since="26"/>
<method name="getShortcutId()Ljava/lang/String;" since="26"/>
<method name="getSmallIcon()Landroid/graphics/drawable/Icon;" since="23"/>
<method name="getSortKey()Ljava/lang/String;" since="20"/>
<method name="getTimeoutAfter()J" since="26"/>
- <method name="setLatestEventInfo(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V" deprecated="16" removed="23"/>
+ <method name="setLatestEventInfo(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V" deprecated="15" removed="23"/>
<field name="AUDIO_ATTRIBUTES_DEFAULT" since="21"/>
<field name="BADGE_ICON_LARGE" since="26"/>
<field name="BADGE_ICON_NONE" since="26"/>
@@ -5241,6 +5322,7 @@
<field name="EXTRA_TITLE" since="19"/>
<field name="EXTRA_TITLE_BIG" since="19"/>
<field name="FLAG_AUTO_CANCEL"/>
+ <field name="FLAG_BUBBLE" since="29"/>
<field name="FLAG_FOREGROUND_SERVICE" since="5"/>
<field name="FLAG_GROUP_SUMMARY" since="20"/>
<field name="FLAG_HIGH_PRIORITY" since="11" deprecated="16"/>
@@ -5304,6 +5386,7 @@
<method name="getIcon()Landroid/graphics/drawable/Icon;" since="23"/>
<method name="getRemoteInputs()[Landroid/app/RemoteInput;" since="20"/>
<method name="getSemanticAction()I" since="28"/>
+ <method name="isContextual()Z" since="29"/>
<field name="CREATOR"/>
<field name="SEMANTIC_ACTION_ARCHIVE" since="28"/>
<field name="SEMANTIC_ACTION_CALL" since="28"/>
@@ -5331,6 +5414,7 @@
<method name="extend(Landroid/app/Notification$Action$Extender;)Landroid/app/Notification$Action$Builder;"/>
<method name="getExtras()Landroid/os/Bundle;"/>
<method name="setAllowGeneratedReplies(Z)Landroid/app/Notification$Action$Builder;" since="24"/>
+ <method name="setContextual(Z)Landroid/app/Notification$Action$Builder;" since="29"/>
<method name="setSemanticAction(I)Landroid/app/Notification$Action$Builder;" since="28"/>
</class>
<class name="android/app/Notification$Action$Extender" since="20">
@@ -5374,6 +5458,30 @@
<method name="setBigContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;"/>
<method name="setSummaryText(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;"/>
</class>
+ <class name="android/app/Notification$BubbleMetadata" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getAutoExpandBubble()Z"/>
+ <method name="getDeleteIntent()Landroid/app/PendingIntent;"/>
+ <method name="getDesiredHeight()I"/>
+ <method name="getDesiredHeightResId()I"/>
+ <method name="getIcon()Landroid/graphics/drawable/Icon;"/>
+ <method name="getIntent()Landroid/app/PendingIntent;"/>
+ <method name="isNotificationSuppressed()Z"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/app/Notification$BubbleMetadata$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="build()Landroid/app/Notification$BubbleMetadata;"/>
+ <method name="setAutoExpandBubble(Z)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+ <method name="setDeleteIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+ <method name="setDesiredHeight(I)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+ <method name="setDesiredHeightResId(I)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+ <method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+ <method name="setIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+ <method name="setSuppressNotification(Z)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+ </class>
<class name="android/app/Notification$Builder" since="11">
<extends name="java/lang/Object"/>
<method name="&lt;init>(Landroid/content/Context;)V" deprecated="26"/>
@@ -5393,8 +5501,10 @@
<method name="getStyle()Landroid/app/Notification$Style;" since="28"/>
<method name="recoverBuilder(Landroid/content/Context;Landroid/app/Notification;)Landroid/app/Notification$Builder;" since="24"/>
<method name="setActions([Landroid/app/Notification$Action;)Landroid/app/Notification$Builder;" since="24"/>
+ <method name="setAllowSystemGeneratedContextualActions(Z)Landroid/app/Notification$Builder;" since="29"/>
<method name="setAutoCancel(Z)Landroid/app/Notification$Builder;"/>
<method name="setBadgeIconType(I)Landroid/app/Notification$Builder;" since="26"/>
+ <method name="setBubbleMetadata(Landroid/app/Notification$BubbleMetadata;)Landroid/app/Notification$Builder;" since="29"/>
<method name="setCategory(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="21"/>
<method name="setChannelId(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="26"/>
<method name="setChronometerCountDown(Z)Landroid/app/Notification$Builder;" since="24"/>
@@ -5411,6 +5521,7 @@
<method name="setDefaults(I)Landroid/app/Notification$Builder;" deprecated="26"/>
<method name="setDeleteIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;"/>
<method name="setExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;" since="19"/>
+ <method name="setFlag(IZ)Landroid/app/Notification$Builder;" since="30"/>
<method name="setFullScreenIntent(Landroid/app/PendingIntent;Z)Landroid/app/Notification$Builder;"/>
<method name="setGroup(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="20"/>
<method name="setGroupAlertBehavior(I)Landroid/app/Notification$Builder;" since="26"/>
@@ -5419,6 +5530,7 @@
<method name="setLargeIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;" since="23"/>
<method name="setLights(III)Landroid/app/Notification$Builder;" deprecated="26"/>
<method name="setLocalOnly(Z)Landroid/app/Notification$Builder;" since="20"/>
+ <method name="setLocusId(Landroid/content/LocusId;)Landroid/app/Notification$Builder;" since="29"/>
<method name="setNumber(I)Landroid/app/Notification$Builder;" deprecated="24"/>
<method name="setOngoing(Z)Landroid/app/Notification$Builder;"/>
<method name="setOnlyAlertOnce(Z)Landroid/app/Notification$Builder;"/>
@@ -5469,8 +5581,6 @@
</class>
<class name="android/app/Notification$CarExtender$UnreadConversation" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>([Ljava/lang/String;Landroid/app/RemoteInput;Landroid/app/PendingIntent;Landroid/app/PendingIntent;[Ljava/lang/String;J)V" since="29"/>
<method name="getLatestTimestamp()J"/>
<method name="getMessages()[Ljava/lang/String;"/>
<method name="getParticipant()Ljava/lang/String;"/>
@@ -5555,13 +5665,13 @@
<method name="&lt;init>(Landroid/app/Notification;)V"/>
<method name="addAction(Landroid/app/Notification$Action;)Landroid/app/Notification$WearableExtender;"/>
<method name="addActions(Ljava/util/List;)Landroid/app/Notification$WearableExtender;"/>
- <method name="addPage(Landroid/app/Notification;)Landroid/app/Notification$WearableExtender;"/>
- <method name="addPages(Ljava/util/List;)Landroid/app/Notification$WearableExtender;"/>
+ <method name="addPage(Landroid/app/Notification;)Landroid/app/Notification$WearableExtender;" deprecated="29"/>
+ <method name="addPages(Ljava/util/List;)Landroid/app/Notification$WearableExtender;" deprecated="29"/>
<method name="clearActions()Landroid/app/Notification$WearableExtender;"/>
- <method name="clearPages()Landroid/app/Notification$WearableExtender;"/>
+ <method name="clearPages()Landroid/app/Notification$WearableExtender;" deprecated="29"/>
<method name="clone()Landroid/app/Notification$WearableExtender;"/>
<method name="getActions()Ljava/util/List;"/>
- <method name="getBackground()Landroid/graphics/Bitmap;"/>
+ <method name="getBackground()Landroid/graphics/Bitmap;" deprecated="29"/>
<method name="getBridgeTag()Ljava/lang/String;" since="26"/>
<method name="getContentAction()I"/>
<method name="getContentIcon()I" deprecated="28"/>
@@ -5570,17 +5680,17 @@
<method name="getCustomContentHeight()I" deprecated="28"/>
<method name="getCustomSizePreset()I" deprecated="28"/>
<method name="getDismissalId()Ljava/lang/String;" since="24"/>
- <method name="getDisplayIntent()Landroid/app/PendingIntent;"/>
+ <method name="getDisplayIntent()Landroid/app/PendingIntent;" deprecated="29"/>
<method name="getGravity()I" deprecated="28"/>
- <method name="getHintAmbientBigPicture()Z" since="24"/>
+ <method name="getHintAmbientBigPicture()Z" since="24" deprecated="29"/>
<method name="getHintAvoidBackgroundClipping()Z" since="22" deprecated="28"/>
<method name="getHintContentIntentLaunchesActivity()Z" since="24"/>
<method name="getHintHideIcon()Z" deprecated="28"/>
<method name="getHintScreenTimeout()I" since="22" deprecated="28"/>
<method name="getHintShowBackgroundOnly()Z" deprecated="28"/>
- <method name="getPages()Ljava/util/List;"/>
+ <method name="getPages()Ljava/util/List;" deprecated="29"/>
<method name="getStartScrollBottom()Z"/>
- <method name="setBackground(Landroid/graphics/Bitmap;)Landroid/app/Notification$WearableExtender;"/>
+ <method name="setBackground(Landroid/graphics/Bitmap;)Landroid/app/Notification$WearableExtender;" deprecated="29"/>
<method name="setBridgeTag(Ljava/lang/String;)Landroid/app/Notification$WearableExtender;" since="26"/>
<method name="setContentAction(I)Landroid/app/Notification$WearableExtender;"/>
<method name="setContentIcon(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
@@ -5589,29 +5699,30 @@
<method name="setCustomContentHeight(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
<method name="setCustomSizePreset(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
<method name="setDismissalId(Ljava/lang/String;)Landroid/app/Notification$WearableExtender;" since="24"/>
- <method name="setDisplayIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$WearableExtender;"/>
+ <method name="setDisplayIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$WearableExtender;" deprecated="29"/>
<method name="setGravity(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
- <method name="setHintAmbientBigPicture(Z)Landroid/app/Notification$WearableExtender;" since="24"/>
+ <method name="setHintAmbientBigPicture(Z)Landroid/app/Notification$WearableExtender;" since="24" deprecated="29"/>
<method name="setHintAvoidBackgroundClipping(Z)Landroid/app/Notification$WearableExtender;" since="22" deprecated="28"/>
<method name="setHintContentIntentLaunchesActivity(Z)Landroid/app/Notification$WearableExtender;" since="24"/>
<method name="setHintHideIcon(Z)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
<method name="setHintScreenTimeout(I)Landroid/app/Notification$WearableExtender;" since="22" deprecated="28"/>
<method name="setHintShowBackgroundOnly(Z)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
<method name="setStartScrollBottom(Z)Landroid/app/Notification$WearableExtender;"/>
- <field name="SCREEN_TIMEOUT_LONG" since="22"/>
- <field name="SCREEN_TIMEOUT_SHORT" since="22"/>
- <field name="SIZE_DEFAULT"/>
- <field name="SIZE_FULL_SCREEN"/>
- <field name="SIZE_LARGE"/>
- <field name="SIZE_MEDIUM"/>
- <field name="SIZE_SMALL"/>
- <field name="SIZE_XSMALL"/>
+ <field name="SCREEN_TIMEOUT_LONG" since="22" deprecated="29"/>
+ <field name="SCREEN_TIMEOUT_SHORT" since="22" deprecated="29"/>
+ <field name="SIZE_DEFAULT" deprecated="29"/>
+ <field name="SIZE_FULL_SCREEN" deprecated="29"/>
+ <field name="SIZE_LARGE" deprecated="29"/>
+ <field name="SIZE_MEDIUM" deprecated="29"/>
+ <field name="SIZE_SMALL" deprecated="29"/>
+ <field name="SIZE_XSMALL" deprecated="29"/>
<field name="UNSET_ACTION_INDEX"/>
</class>
<class name="android/app/NotificationChannel" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;I)V"/>
+ <method name="canBubble()Z" since="29"/>
<method name="canBypassDnd()Z"/>
<method name="canShowBadge()Z"/>
<method name="enableLights(Z)V"/>
@@ -5626,6 +5737,8 @@
<method name="getName()Ljava/lang/CharSequence;"/>
<method name="getSound()Landroid/net/Uri;"/>
<method name="getVibrationPattern()[J"/>
+ <method name="hasUserSetImportance()Z" since="29"/>
+ <method name="setAllowBubbles(Z)V" since="29"/>
<method name="setBypassDnd(Z)V"/>
<method name="setDescription(Ljava/lang/String;)V"/>
<method name="setGroup(Ljava/lang/String;)V"/>
@@ -5656,10 +5769,11 @@
</class>
<class name="android/app/NotificationManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/os/Handler;)V" since="29"/>
<method name="addAutomaticZenRule(Landroid/app/AutomaticZenRule;)Ljava/lang/String;" since="24"/>
+ <method name="areBubblesAllowed()Z" since="29"/>
<method name="areNotificationsEnabled()Z" since="24"/>
+ <method name="areNotificationsPaused()Z" since="29"/>
+ <method name="canNotifyAsPackage(Ljava/lang/String;)Z" since="29"/>
<method name="cancel(I)V"/>
<method name="cancel(Ljava/lang/String;I)V" since="5"/>
<method name="cancelAll()V"/>
@@ -5678,21 +5792,28 @@
<method name="getNotificationChannelGroup(Ljava/lang/String;)Landroid/app/NotificationChannelGroup;" since="28"/>
<method name="getNotificationChannelGroups()Ljava/util/List;" since="26"/>
<method name="getNotificationChannels()Ljava/util/List;" since="26"/>
+ <method name="getNotificationDelegate()Ljava/lang/String;" since="29"/>
<method name="getNotificationPolicy()Landroid/app/NotificationManager$Policy;" since="23"/>
<method name="isNotificationListenerAccessGranted(Landroid/content/ComponentName;)Z" since="27"/>
<method name="isNotificationPolicyAccessGranted()Z" since="23"/>
<method name="notify(ILandroid/app/Notification;)V"/>
<method name="notify(Ljava/lang/String;ILandroid/app/Notification;)V" since="5"/>
+ <method name="notifyAsPackage(Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;)V" since="29"/>
<method name="removeAutomaticZenRule(Ljava/lang/String;)Z" since="24"/>
+ <method name="setAutomaticZenRuleState(Ljava/lang/String;Landroid/service/notification/Condition;)V" since="29"/>
<method name="setInterruptionFilter(I)V" since="23"/>
+ <method name="setNotificationDelegate(Ljava/lang/String;)V" since="29"/>
<method name="setNotificationPolicy(Landroid/app/NotificationManager$Policy;)V" since="23"/>
+ <method name="shouldHideSilentStatusBarIcons()Z" since="29"/>
<method name="updateAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;)Z" since="24"/>
<field name="ACTION_APP_BLOCK_STATE_CHANGED" since="28"/>
+ <field name="ACTION_AUTOMATIC_ZEN_RULE" since="29"/>
<field name="ACTION_INTERRUPTION_FILTER_CHANGED" since="23"/>
<field name="ACTION_NOTIFICATION_CHANNEL_BLOCK_STATE_CHANGED" since="28"/>
<field name="ACTION_NOTIFICATION_CHANNEL_GROUP_BLOCK_STATE_CHANGED" since="28"/>
<field name="ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED" since="23"/>
<field name="ACTION_NOTIFICATION_POLICY_CHANGED" since="23"/>
+ <field name="EXTRA_AUTOMATIC_RULE_ID" since="29"/>
<field name="EXTRA_BLOCKED_STATE" since="28"/>
<field name="EXTRA_NOTIFICATION_CHANNEL_GROUP_ID" since="28"/>
<field name="EXTRA_NOTIFICATION_CHANNEL_ID" since="28"/>
@@ -5708,6 +5829,8 @@
<field name="INTERRUPTION_FILTER_NONE" since="23"/>
<field name="INTERRUPTION_FILTER_PRIORITY" since="23"/>
<field name="INTERRUPTION_FILTER_UNKNOWN" since="23"/>
+ <field name="META_DATA_AUTOMATIC_RULE_TYPE" since="29"/>
+ <field name="META_DATA_RULE_INSTANCE_LIMIT" since="29"/>
</class>
<class name="android/app/NotificationManager$Policy" since="23">
<extends name="java/lang/Object"/>
@@ -5746,8 +5869,6 @@
<class name="android/app/PendingIntent" since="1">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/IBinder;Ljava/lang/Object;)V" since="29"/>
<method name="cancel()V"/>
<method name="getActivities(Landroid/content/Context;I[Landroid/content/Intent;I)Landroid/app/PendingIntent;" since="11"/>
<method name="getActivities(Landroid/content/Context;I[Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/PendingIntent;" since="16"/>
@@ -5790,8 +5911,6 @@
<class name="android/app/Person" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
<method name="getKey()Ljava/lang/String;"/>
<method name="getName()Ljava/lang/CharSequence;"/>
@@ -5815,7 +5934,6 @@
<class name="android/app/PictureInPictureParams" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<field name="CREATOR"/>
</class>
<class name="android/app/PictureInPictureParams$Builder" since="26">
@@ -5837,29 +5955,37 @@
</class>
<class name="android/app/ProgressDialog" since="1" deprecated="26">
<extends name="android/app/AlertDialog"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;I)V"/>
- <method name="getMax()I"/>
- <method name="getProgress()I"/>
- <method name="getSecondaryProgress()I"/>
- <method name="incrementProgressBy(I)V"/>
- <method name="incrementSecondaryProgressBy(I)V"/>
- <method name="isIndeterminate()Z"/>
- <method name="setIndeterminate(Z)V"/>
- <method name="setIndeterminateDrawable(Landroid/graphics/drawable/Drawable;)V"/>
- <method name="setMax(I)V"/>
- <method name="setProgress(I)V"/>
- <method name="setProgressDrawable(Landroid/graphics/drawable/Drawable;)V"/>
- <method name="setProgressNumberFormat(Ljava/lang/String;)V" since="11"/>
- <method name="setProgressPercentFormat(Ljava/text/NumberFormat;)V" since="11"/>
- <method name="setProgressStyle(I)V"/>
- <method name="setSecondaryProgress(I)V"/>
- <method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Landroid/app/ProgressDialog;"/>
- <method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Landroid/app/ProgressDialog;"/>
- <method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZZ)Landroid/app/ProgressDialog;"/>
- <method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZZLandroid/content/DialogInterface$OnCancelListener;)Landroid/app/ProgressDialog;"/>
- <field name="STYLE_HORIZONTAL"/>
- <field name="STYLE_SPINNER"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;I)V" deprecated="29"/>
+ <method name="getMax()I" deprecated="29"/>
+ <method name="getProgress()I" deprecated="29"/>
+ <method name="getSecondaryProgress()I" deprecated="29"/>
+ <method name="incrementProgressBy(I)V" deprecated="29"/>
+ <method name="incrementSecondaryProgressBy(I)V" deprecated="29"/>
+ <method name="isIndeterminate()Z" deprecated="29"/>
+ <method name="setIndeterminate(Z)V" deprecated="29"/>
+ <method name="setIndeterminateDrawable(Landroid/graphics/drawable/Drawable;)V" deprecated="29"/>
+ <method name="setMax(I)V" deprecated="29"/>
+ <method name="setProgress(I)V" deprecated="29"/>
+ <method name="setProgressDrawable(Landroid/graphics/drawable/Drawable;)V" deprecated="29"/>
+ <method name="setProgressNumberFormat(Ljava/lang/String;)V" since="11" deprecated="29"/>
+ <method name="setProgressPercentFormat(Ljava/text/NumberFormat;)V" since="11" deprecated="29"/>
+ <method name="setProgressStyle(I)V" deprecated="29"/>
+ <method name="setSecondaryProgress(I)V" deprecated="29"/>
+ <method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Landroid/app/ProgressDialog;" deprecated="29"/>
+ <method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Landroid/app/ProgressDialog;" deprecated="29"/>
+ <method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZZ)Landroid/app/ProgressDialog;" deprecated="29"/>
+ <method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZZLandroid/content/DialogInterface$OnCancelListener;)Landroid/app/ProgressDialog;" deprecated="29"/>
+ <field name="STYLE_HORIZONTAL" deprecated="29"/>
+ <field name="STYLE_SPINNER" deprecated="29"/>
+ </class>
+ <class name="android/app/RecoverableSecurityException" since="29">
+ <extends name="java/lang/SecurityException"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="&lt;init>(Ljava/lang/Throwable;Ljava/lang/CharSequence;Landroid/app/RemoteAction;)V"/>
+ <method name="getUserAction()Landroid/app/RemoteAction;"/>
+ <method name="getUserMessage()Ljava/lang/CharSequence;"/>
+ <field name="CREATOR"/>
</class>
<class name="android/app/RemoteAction" since="26">
<extends name="java/lang/Object"/>
@@ -5880,14 +6006,13 @@
<class name="android/app/RemoteInput" since="20">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="addDataResultToIntent(Landroid/app/RemoteInput;Landroid/content/Intent;Ljava/util/Map;)V" since="26"/>
<method name="addResultsToIntent([Landroid/app/RemoteInput;Landroid/content/Intent;Landroid/os/Bundle;)V"/>
<method name="getAllowFreeFormInput()Z"/>
<method name="getAllowedDataTypes()Ljava/util/Set;" since="26"/>
<method name="getChoices()[Ljava/lang/CharSequence;"/>
<method name="getDataResultsFromIntent(Landroid/content/Intent;Ljava/lang/String;)Ljava/util/Map;" since="26"/>
+ <method name="getEditChoicesBeforeSending()I" since="29"/>
<method name="getExtras()Landroid/os/Bundle;"/>
<method name="getLabel()Ljava/lang/CharSequence;"/>
<method name="getResultKey()Ljava/lang/String;"/>
@@ -5896,6 +6021,9 @@
<method name="isDataOnly()Z" since="26"/>
<method name="setResultsSource(Landroid/content/Intent;I)V" since="28"/>
<field name="CREATOR"/>
+ <field name="EDIT_CHOICES_BEFORE_SENDING_AUTO" since="29"/>
+ <field name="EDIT_CHOICES_BEFORE_SENDING_DISABLED" since="29"/>
+ <field name="EDIT_CHOICES_BEFORE_SENDING_ENABLED" since="29"/>
<field name="EXTRA_RESULTS_DATA"/>
<field name="RESULTS_CLIP_LABEL"/>
<field name="SOURCE_CHOICE" since="28"/>
@@ -5910,13 +6038,13 @@
<method name="setAllowDataType(Ljava/lang/String;Z)Landroid/app/RemoteInput$Builder;" since="26"/>
<method name="setAllowFreeFormInput(Z)Landroid/app/RemoteInput$Builder;"/>
<method name="setChoices([Ljava/lang/CharSequence;)Landroid/app/RemoteInput$Builder;"/>
+ <method name="setEditChoicesBeforeSending(I)Landroid/app/RemoteInput$Builder;" since="29"/>
<method name="setLabel(Ljava/lang/CharSequence;)Landroid/app/RemoteInput$Builder;"/>
</class>
<class name="android/app/SearchManager" since="1">
<extends name="java/lang/Object"/>
<implements name="android/content/DialogInterface$OnCancelListener"/>
<implements name="android/content/DialogInterface$OnDismissListener"/>
- <method name="&lt;init>()V"/>
<method name="getGlobalSearchActivity()Landroid/content/ComponentName;" since="16"/>
<method name="getSearchableInfo(Landroid/content/ComponentName;)Landroid/app/SearchableInfo;" since="8"/>
<method name="getSearchablesInGlobalSearch()Ljava/util/List;" since="8"/>
@@ -5989,8 +6117,6 @@
<class name="android/app/SearchableInfo" since="8">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="autoUrlDetect()Z"/>
<method name="getHintId()I"/>
<method name="getImeOptions()I"/>
@@ -6024,16 +6150,18 @@
<method name="&lt;init>()V"/>
<method name="dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
<method name="getApplication()Landroid/app/Application;"/>
+ <method name="getForegroundServiceType()I" since="29"/>
<method name="onBind(Landroid/content/Intent;)Landroid/os/IBinder;"/>
<method name="onCreate()V"/>
<method name="onDestroy()V"/>
<method name="onRebind(Landroid/content/Intent;)V"/>
- <method name="onStart(Landroid/content/Intent;I)V" deprecated="16"/>
+ <method name="onStart(Landroid/content/Intent;I)V" deprecated="15"/>
<method name="onStartCommand(Landroid/content/Intent;II)I" since="5"/>
<method name="onTaskRemoved(Landroid/content/Intent;)V" since="14"/>
<method name="onUnbind(Landroid/content/Intent;)Z"/>
<method name="setForeground(Z)V" removed="11"/>
<method name="startForeground(ILandroid/app/Notification;)V" since="5"/>
+ <method name="startForeground(ILandroid/app/Notification;I)V" since="29"/>
<method name="stopForeground(I)V" since="24"/>
<method name="stopForeground(Z)V" since="5"/>
<method name="stopSelf()V"/>
@@ -6064,18 +6192,30 @@
<extends name="java/lang/Object"/>
<method name="onSharedElementsReady()V"/>
</class>
+ <class name="android/app/StatusBarManager" since="29">
+ <extends name="java/lang/Object"/>
+ </class>
<class name="android/app/TabActivity" since="1" deprecated="13">
<extends name="android/app/ActivityGroup"/>
- <method name="&lt;init>()V"/>
- <method name="getTabHost()Landroid/widget/TabHost;"/>
- <method name="getTabWidget()Landroid/widget/TabWidget;"/>
- <method name="setDefaultTab(I)V"/>
- <method name="setDefaultTab(Ljava/lang/String;)V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="getTabHost()Landroid/widget/TabHost;" deprecated="29"/>
+ <method name="getTabWidget()Landroid/widget/TabWidget;" deprecated="29"/>
+ <method name="setDefaultTab(I)V" deprecated="29"/>
+ <method name="setDefaultTab(Ljava/lang/String;)V" deprecated="29"/>
+ </class>
+ <class name="android/app/TaskInfo" since="29">
+ <extends name="java/lang/Object"/>
+ <field name="baseActivity"/>
+ <field name="baseIntent"/>
+ <field name="isRunning"/>
+ <field name="numActivities"/>
+ <field name="origActivity"/>
+ <field name="taskDescription"/>
+ <field name="taskId"/>
+ <field name="topActivity"/>
</class>
<class name="android/app/TaskStackBuilder" since="16">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="addNextIntent(Landroid/content/Intent;)Landroid/app/TaskStackBuilder;"/>
<method name="addNextIntentWithParentStack(Landroid/content/Intent;)Landroid/app/TaskStackBuilder;"/>
<method name="addParentStack(Landroid/app/Activity;)Landroid/app/TaskStackBuilder;"/>
@@ -6104,9 +6244,11 @@
</class>
<class name="android/app/UiAutomation" since="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="adoptShellPermissionIdentity()V" since="29"/>
+ <method name="adoptShellPermissionIdentity([Ljava/lang/String;)V" since="29"/>
<method name="clearWindowAnimationFrameStats()V" since="21"/>
<method name="clearWindowContentFrameStats(I)Z" since="21"/>
+ <method name="dropShellPermissionIdentity()V" since="29"/>
<method name="executeAndWaitForEvent(Ljava/lang/Runnable;Landroid/app/UiAutomation$AccessibilityEventFilter;J)Landroid/view/accessibility/AccessibilityEvent;"/>
<method name="executeShellCommand(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" since="21"/>
<method name="findFocus(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="21"/>
@@ -6145,7 +6287,6 @@
</class>
<class name="android/app/UiModeManager" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="disableCarMode(I)V"/>
<method name="enableCarMode(I)V"/>
<method name="getCurrentModeType()I"/>
@@ -6164,12 +6305,15 @@
</class>
<class name="android/app/VoiceInteractor" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getActiveRequest(Ljava/lang/String;)Landroid/app/VoiceInteractor$Request;"/>
<method name="getActiveRequests()[Landroid/app/VoiceInteractor$Request;"/>
+ <method name="isDestroyed()Z" since="29"/>
+ <method name="notifyDirectActionsChanged()V" since="29"/>
+ <method name="registerOnDestroyedCallback(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)Z" since="29"/>
<method name="submitRequest(Landroid/app/VoiceInteractor$Request;)Z"/>
<method name="submitRequest(Landroid/app/VoiceInteractor$Request;Ljava/lang/String;)Z"/>
<method name="supportsCommands([Ljava/lang/String;)[Z"/>
+ <method name="unregisterOnDestroyedCallback(Ljava/lang/Runnable;)Z" since="29"/>
</class>
<class name="android/app/VoiceInteractor$AbortVoiceRequest" since="23">
<extends name="android/app/VoiceInteractor$Request"/>
@@ -6221,7 +6365,6 @@
</class>
<class name="android/app/VoiceInteractor$Request" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="cancel()V"/>
<method name="getActivity()Landroid/app/Activity;"/>
<method name="getContext()Landroid/content/Context;"/>
@@ -6252,6 +6395,7 @@
<method name="getServiceInfo()Landroid/content/pm/ServiceInfo;"/>
<method name="getServiceName()Ljava/lang/String;"/>
<method name="getSettingsActivity()Ljava/lang/String;"/>
+ <method name="getSettingsSliceUri()Landroid/net/Uri;" since="29"/>
<method name="getShowMetadataInPreview()Z" since="25"/>
<method name="loadAuthor(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
<method name="loadContextDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" since="25"/>
@@ -6260,11 +6404,11 @@
<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
<method name="loadThumbnail(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
+ <method name="supportsMultipleDisplays()Z" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/app/WallpaperManager" since="5">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="addOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;Landroid/os/Handler;)V" since="27"/>
<method name="clear()V"/>
<method name="clear(I)V" since="24"/>
@@ -6319,14 +6463,22 @@
<extends name="java/lang/Object"/>
<method name="onColorsChanged(Landroid/app/WallpaperColors;I)V"/>
</class>
+ <class name="android/app/ZygotePreload" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="doPreload(Landroid/content/pm/ApplicationInfo;)V"/>
+ </class>
<class name="android/app/admin/ConnectEvent" since="26">
<extends name="android/app/admin/NetworkEvent"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getInetAddress()Ljava/net/InetAddress;"/>
<method name="getPort()I"/>
<field name="CREATOR"/>
</class>
+ <class name="android/app/admin/DelegatedAdminReceiver" since="29">
+ <extends name="android/content/BroadcastReceiver"/>
+ <method name="&lt;init>()V"/>
+ <method name="onChoosePrivateKeyAlias(Landroid/content/Context;Landroid/content/Intent;ILandroid/net/Uri;Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="onNetworkLogsAvailable(Landroid/content/Context;Landroid/content/Intent;JI)V"/>
+ </class>
<class name="android/app/admin/DeviceAdminInfo" since="8">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
@@ -6388,11 +6540,13 @@
<method name="onUserStarted(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="28"/>
<method name="onUserStopped(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="28"/>
<method name="onUserSwitched(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="28"/>
+ <field name="ACTION_CHOOSE_PRIVATE_KEY_ALIAS" since="29"/>
<field name="ACTION_DEVICE_ADMIN_DISABLED"/>
<field name="ACTION_DEVICE_ADMIN_DISABLE_REQUESTED"/>
<field name="ACTION_DEVICE_ADMIN_ENABLED"/>
<field name="ACTION_LOCK_TASK_ENTERING" since="21"/>
<field name="ACTION_LOCK_TASK_EXITING" since="21"/>
+ <field name="ACTION_NETWORK_LOGS_AVAILABLE" since="29"/>
<field name="ACTION_PASSWORD_CHANGED"/>
<field name="ACTION_PASSWORD_EXPIRING" since="11"/>
<field name="ACTION_PASSWORD_FAILED"/>
@@ -6411,7 +6565,6 @@
</class>
<class name="android/app/admin/DevicePolicyManager" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="addCrossProfileIntentFilter(Landroid/content/ComponentName;Landroid/content/IntentFilter;I)V" since="21"/>
<method name="addCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21"/>
<method name="addOverrideApn(Landroid/content/ComponentName;Landroid/telephony/data/ApnSetting;)I" since="28"/>
@@ -6435,6 +6588,7 @@
<method name="getAccountTypesWithManagementDisabled()[Ljava/lang/String;" since="21"/>
<method name="getActiveAdmins()Ljava/util/List;"/>
<method name="getAffiliationIds(Landroid/content/ComponentName;)Ljava/util/Set;" since="26"/>
+ <method name="getAlwaysOnVpnLockdownWhitelist(Landroid/content/ComponentName;)Ljava/util/Set;" since="29"/>
<method name="getAlwaysOnVpnPackage(Landroid/content/ComponentName;)Ljava/lang/String;" since="24"/>
<method name="getApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;)Landroid/os/Bundle;" since="21"/>
<method name="getApplicationRestrictionsManagingPackage(Landroid/content/ComponentName;)Ljava/lang/String;" since="24" deprecated="26"/>
@@ -6443,6 +6597,7 @@
<method name="getBluetoothContactSharingDisabled(Landroid/content/ComponentName;)Z" since="23"/>
<method name="getCameraDisabled(Landroid/content/ComponentName;)Z" since="14"/>
<method name="getCertInstallerPackage(Landroid/content/ComponentName;)Ljava/lang/String;" since="23" deprecated="26"/>
+ <method name="getCrossProfileCalendarPackages(Landroid/content/ComponentName;)Ljava/util/Set;" since="29"/>
<method name="getCrossProfileCallerIdDisabled(Landroid/content/ComponentName;)Z" since="21"/>
<method name="getCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;)Z" since="24"/>
<method name="getCrossProfileWidgetProviders(Landroid/content/ComponentName;)Ljava/util/List;" since="21"/>
@@ -6451,6 +6606,8 @@
<method name="getDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;" since="26"/>
<method name="getDeviceOwnerLockScreenInfo()Ljava/lang/CharSequence;" since="24"/>
<method name="getEndUserSessionMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="28"/>
+ <method name="getGlobalPrivateDnsHost(Landroid/content/ComponentName;)Ljava/lang/String;" since="29"/>
+ <method name="getGlobalPrivateDnsMode(Landroid/content/ComponentName;)I" since="29"/>
<method name="getInstalledCaCerts(Landroid/content/ComponentName;)Ljava/util/List;" since="21"/>
<method name="getKeepUninstalledPackages(Landroid/content/ComponentName;)Ljava/util/List;" since="28"/>
<method name="getKeyguardDisabledFeatures(Landroid/content/ComponentName;)I" since="17"/>
@@ -6464,6 +6621,7 @@
<method name="getOrganizationName(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="24"/>
<method name="getOverrideApns(Landroid/content/ComponentName;)Ljava/util/List;" since="28"/>
<method name="getParentProfileInstance(Landroid/content/ComponentName;)Landroid/app/admin/DevicePolicyManager;" since="24"/>
+ <method name="getPasswordComplexity()I" since="29"/>
<method name="getPasswordExpiration(Landroid/content/ComponentName;)J" since="11"/>
<method name="getPasswordExpirationTimeout(Landroid/content/ComponentName;)J" since="11"/>
<method name="getPasswordHistoryLength(Landroid/content/ComponentName;)I" since="11"/>
@@ -6501,9 +6659,11 @@
<method name="installKeyPair(Landroid/content/ComponentName;Ljava/security/PrivateKey;Ljava/security/cert/Certificate;Ljava/lang/String;)Z" since="21"/>
<method name="installKeyPair(Landroid/content/ComponentName;Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;Ljava/lang/String;I)Z" since="28"/>
<method name="installKeyPair(Landroid/content/ComponentName;Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;Ljava/lang/String;Z)Z" since="24"/>
+ <method name="installSystemUpdate(Landroid/content/ComponentName;Landroid/net/Uri;Ljava/util/concurrent/Executor;Landroid/app/admin/DevicePolicyManager$InstallSystemUpdateCallback;)V" since="29"/>
<method name="isActivePasswordSufficient()Z"/>
<method name="isAdminActive(Landroid/content/ComponentName;)Z"/>
<method name="isAffiliatedUser()Z" since="28"/>
+ <method name="isAlwaysOnVpnLockdownEnabled(Landroid/content/ComponentName;)Z" since="29"/>
<method name="isApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21"/>
<method name="isBackupServiceEnabled(Landroid/content/ComponentName;)Z" since="26"/>
<method name="isCallerApplicationRestrictionsManagingPackage()Z" since="24" deprecated="26"/>
@@ -6541,6 +6701,7 @@
<method name="setAccountManagementDisabled(Landroid/content/ComponentName;Ljava/lang/String;Z)V" since="21"/>
<method name="setAffiliationIds(Landroid/content/ComponentName;Ljava/util/Set;)V" since="26"/>
<method name="setAlwaysOnVpnPackage(Landroid/content/ComponentName;Ljava/lang/String;Z)V" since="24"/>
+ <method name="setAlwaysOnVpnPackage(Landroid/content/ComponentName;Ljava/lang/String;ZLjava/util/Set;)V" since="29"/>
<method name="setApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;Z)Z" since="21"/>
<method name="setApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/Bundle;)V" since="21"/>
<method name="setApplicationRestrictionsManagingPackage(Landroid/content/ComponentName;Ljava/lang/String;)V" since="24" deprecated="26"/>
@@ -6549,11 +6710,15 @@
<method name="setBluetoothContactSharingDisabled(Landroid/content/ComponentName;Z)V" since="23"/>
<method name="setCameraDisabled(Landroid/content/ComponentName;Z)V" since="14"/>
<method name="setCertInstallerPackage(Landroid/content/ComponentName;Ljava/lang/String;)V" since="23" deprecated="26"/>
+ <method name="setCrossProfileCalendarPackages(Landroid/content/ComponentName;Ljava/util/Set;)V" since="29"/>
<method name="setCrossProfileCallerIdDisabled(Landroid/content/ComponentName;Z)V" since="21"/>
<method name="setCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;Z)V" since="24"/>
+ <method name="setDefaultSmsApplication(Landroid/content/ComponentName;Ljava/lang/String;)V" since="29"/>
<method name="setDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)V" since="26"/>
<method name="setDeviceOwnerLockScreenInfo(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="24"/>
<method name="setEndUserSessionMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="28"/>
+ <method name="setGlobalPrivateDnsModeOpportunistic(Landroid/content/ComponentName;)I" since="29"/>
+ <method name="setGlobalPrivateDnsModeSpecifiedHost(Landroid/content/ComponentName;Ljava/lang/String;)I" since="29"/>
<method name="setGlobalSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V" since="21"/>
<method name="setKeepUninstalledPackages(Landroid/content/ComponentName;Ljava/util/List;)V" since="28"/>
<method name="setKeyPairCertificate(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;Z)Z" since="28"/>
@@ -6617,9 +6782,11 @@
<method name="wipeData(I)V"/>
<method name="wipeData(ILjava/lang/CharSequence;)V" since="28"/>
<field name="ACTION_ADD_DEVICE_ADMIN"/>
+ <field name="ACTION_ADMIN_POLICY_COMPLIANCE" since="29"/>
<field name="ACTION_APPLICATION_DELEGATION_SCOPES_CHANGED" since="26"/>
<field name="ACTION_DEVICE_ADMIN_SERVICE" since="26"/>
<field name="ACTION_DEVICE_OWNER_CHANGED" since="23"/>
+ <field name="ACTION_GET_PROVISIONING_MODE" since="29"/>
<field name="ACTION_MANAGED_PROFILE_PROVISIONED" since="23"/>
<field name="ACTION_PROFILE_OWNER_CHANGED" since="28"/>
<field name="ACTION_PROVISIONING_SUCCESSFUL" since="26"/>
@@ -6632,9 +6799,11 @@
<field name="DELEGATION_APP_RESTRICTIONS" since="26"/>
<field name="DELEGATION_BLOCK_UNINSTALL" since="26"/>
<field name="DELEGATION_CERT_INSTALL" since="26"/>
+ <field name="DELEGATION_CERT_SELECTION" since="29"/>
<field name="DELEGATION_ENABLE_SYSTEM_APP" since="26"/>
<field name="DELEGATION_INSTALL_EXISTING_PACKAGE" since="28"/>
<field name="DELEGATION_KEEP_UNINSTALLED_PACKAGES" since="28"/>
+ <field name="DELEGATION_NETWORK_LOGGING" since="29"/>
<field name="DELEGATION_PACKAGE_ACCESS" since="26"/>
<field name="DELEGATION_PERMISSION_GRANT" since="26"/>
<field name="ENCRYPTION_STATUS_ACTIVATING" since="11"/>
@@ -6646,6 +6815,7 @@
<field name="EXTRA_ADD_EXPLANATION"/>
<field name="EXTRA_DELEGATION_SCOPES" since="26"/>
<field name="EXTRA_DEVICE_ADMIN"/>
+ <field name="EXTRA_PASSWORD_COMPLEXITY" since="29"/>
<field name="EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE" since="22"/>
<field name="EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE" since="21"/>
<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME" since="23"/>
@@ -6659,23 +6829,34 @@
<field name="EXTRA_PROVISIONING_DISCLAIMER_CONTENT" since="26"/>
<field name="EXTRA_PROVISIONING_DISCLAIMER_HEADER" since="26"/>
<field name="EXTRA_PROVISIONING_EMAIL_ADDRESS" since="21" deprecated="26"/>
+ <field name="EXTRA_PROVISIONING_IMEI" since="29"/>
<field name="EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION" since="26"/>
<field name="EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED" since="22"/>
<field name="EXTRA_PROVISIONING_LOCALE" since="21"/>
<field name="EXTRA_PROVISIONING_LOCAL_TIME" since="21"/>
<field name="EXTRA_PROVISIONING_LOGO_URI" since="24"/>
<field name="EXTRA_PROVISIONING_MAIN_COLOR" since="24"/>
+ <field name="EXTRA_PROVISIONING_MODE" since="29"/>
+ <field name="EXTRA_PROVISIONING_SERIAL_NUMBER" since="29"/>
+ <field name="EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS" since="29"/>
<field name="EXTRA_PROVISIONING_SKIP_ENCRYPTION" since="23"/>
<field name="EXTRA_PROVISIONING_SKIP_USER_CONSENT" since="26"/>
<field name="EXTRA_PROVISIONING_TIME_ZONE" since="21"/>
+ <field name="EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY" since="29"/>
+ <field name="EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE" since="29"/>
+ <field name="EXTRA_PROVISIONING_WIFI_DOMAIN" since="29"/>
+ <field name="EXTRA_PROVISIONING_WIFI_EAP_METHOD" since="29"/>
<field name="EXTRA_PROVISIONING_WIFI_HIDDEN" since="21"/>
+ <field name="EXTRA_PROVISIONING_WIFI_IDENTITY" since="29"/>
<field name="EXTRA_PROVISIONING_WIFI_PAC_URL" since="21"/>
<field name="EXTRA_PROVISIONING_WIFI_PASSWORD" since="21"/>
+ <field name="EXTRA_PROVISIONING_WIFI_PHASE2_AUTH" since="29"/>
<field name="EXTRA_PROVISIONING_WIFI_PROXY_BYPASS" since="21"/>
<field name="EXTRA_PROVISIONING_WIFI_PROXY_HOST" since="21"/>
<field name="EXTRA_PROVISIONING_WIFI_PROXY_PORT" since="21"/>
<field name="EXTRA_PROVISIONING_WIFI_SECURITY_TYPE" since="21"/>
<field name="EXTRA_PROVISIONING_WIFI_SSID" since="21"/>
+ <field name="EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE" since="29"/>
<field name="FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY" since="26"/>
<field name="FLAG_MANAGED_CAN_ACCESS_PARENT" since="21"/>
<field name="FLAG_PARENT_CAN_ACCESS_MANAGED" since="21"/>
@@ -6707,6 +6888,10 @@
<field name="LOCK_TASK_FEATURE_SYSTEM_INFO" since="28"/>
<field name="MAKE_USER_EPHEMERAL" since="28"/>
<field name="MIME_TYPE_PROVISIONING_NFC" since="21"/>
+ <field name="PASSWORD_COMPLEXITY_HIGH" since="29"/>
+ <field name="PASSWORD_COMPLEXITY_LOW" since="29"/>
+ <field name="PASSWORD_COMPLEXITY_MEDIUM" since="29"/>
+ <field name="PASSWORD_COMPLEXITY_NONE" since="29"/>
<field name="PASSWORD_QUALITY_ALPHABETIC"/>
<field name="PASSWORD_QUALITY_ALPHANUMERIC"/>
<field name="PASSWORD_QUALITY_BIOMETRIC_WEAK" since="14"/>
@@ -6723,12 +6908,32 @@
<field name="PERMISSION_POLICY_PROMPT" since="23"/>
<field name="POLICY_DISABLE_CAMERA" since="26"/>
<field name="POLICY_DISABLE_SCREEN_CAPTURE" since="26"/>
+ <field name="PRIVATE_DNS_MODE_OFF" since="29"/>
+ <field name="PRIVATE_DNS_MODE_OPPORTUNISTIC" since="29"/>
+ <field name="PRIVATE_DNS_MODE_PROVIDER_HOSTNAME" since="29"/>
+ <field name="PRIVATE_DNS_MODE_UNKNOWN" since="29"/>
+ <field name="PRIVATE_DNS_SET_ERROR_FAILURE_SETTING" since="29"/>
+ <field name="PRIVATE_DNS_SET_ERROR_HOST_NOT_SERVING" since="29"/>
+ <field name="PRIVATE_DNS_SET_NO_ERROR" since="29"/>
+ <field name="PROVISIONING_MODE_FULLY_MANAGED_DEVICE" since="29"/>
+ <field name="PROVISIONING_MODE_MANAGED_PROFILE" since="29"/>
<field name="RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT" since="23"/>
<field name="RESET_PASSWORD_REQUIRE_ENTRY"/>
<field name="SKIP_SETUP_WIZARD" since="24"/>
<field name="WIPE_EUICC" since="28"/>
<field name="WIPE_EXTERNAL_STORAGE" since="9"/>
<field name="WIPE_RESET_PROTECTION_DATA" since="22"/>
+ <field name="WIPE_SILENTLY" since="29"/>
+ </class>
+ <class name="android/app/admin/DevicePolicyManager$InstallSystemUpdateCallback" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="onInstallUpdateError(ILjava/lang/String;)V"/>
+ <field name="UPDATE_ERROR_BATTERY_LOW"/>
+ <field name="UPDATE_ERROR_FILE_NOT_FOUND"/>
+ <field name="UPDATE_ERROR_INCORRECT_OS_VERSION"/>
+ <field name="UPDATE_ERROR_UNKNOWN"/>
+ <field name="UPDATE_ERROR_UPDATE_FILE_INVALID"/>
</class>
<class name="android/app/admin/DevicePolicyManager$OnClearApplicationUserDataListener" since="28">
<extends name="java/lang/Object"/>
@@ -6736,8 +6941,6 @@
</class>
<class name="android/app/admin/DnsEvent" since="26">
<extends name="android/app/admin/NetworkEvent"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getHostname()Ljava/lang/String;"/>
<method name="getInetAddresses()Ljava/util/List;"/>
<method name="getTotalResolvedAddressCount()I"/>
@@ -6752,7 +6955,6 @@
<class name="android/app/admin/NetworkEvent" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getId()J" since="28"/>
<method name="getPackageName()Ljava/lang/String;"/>
<method name="getTimestamp()J"/>
@@ -6801,8 +7003,6 @@
<class name="android/app/admin/SecurityLog$SecurityEvent" since="24">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>([B)V" since="29"/>
<method name="getData()Ljava/lang/Object;"/>
<method name="getId()J" since="28"/>
<method name="getLogLevel()I" since="28"/>
@@ -6813,8 +7013,6 @@
<class name="android/app/admin/SystemUpdateInfo" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getReceivedTime()J"/>
<method name="getSecurityPatchState()I"/>
<field name="CREATOR"/>
@@ -6825,7 +7023,6 @@
<class name="android/app/admin/SystemUpdatePolicy" since="23">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="createAutomaticInstallPolicy()Landroid/app/admin/SystemUpdatePolicy;"/>
<method name="createPostponeInstallPolicy()Landroid/app/admin/SystemUpdatePolicy;"/>
<method name="createWindowedInstallPolicy(II)Landroid/app/admin/SystemUpdatePolicy;"/>
@@ -6842,8 +7039,6 @@
<class name="android/app/admin/SystemUpdatePolicy$ValidationFailedException" since="28">
<extends name="java/lang/IllegalArgumentException"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILjava/lang/String;)V" since="29"/>
<method name="getErrorCode()I"/>
<field name="CREATOR"/>
<field name="ERROR_COMBINED_FREEZE_PERIOD_TOO_CLOSE"/>
@@ -6884,7 +7079,6 @@
</class>
<class name="android/app/assist/AssistStructure$ViewNode" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getAlpha()F"/>
<method name="getAutofillHints()[Ljava/lang/String;" since="26"/>
<method name="getAutofillId()Landroid/view/autofill/AutofillId;" since="26"/>
@@ -6950,7 +7144,6 @@
</class>
<class name="android/app/assist/AssistStructure$WindowNode" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getDisplayId()I"/>
<method name="getHeight()I"/>
<method name="getLeft()I"/>
@@ -6984,8 +7177,6 @@
</class>
<class name="android/app/backup/BackupDataInput" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/io/FileDescriptor;)V" since="29"/>
<method name="getDataSize()I"/>
<method name="getKey()Ljava/lang/String;"/>
<method name="readEntityData([BII)I"/>
@@ -6994,15 +7185,11 @@
</class>
<class name="android/app/backup/BackupDataInputStream" since="8">
<extends name="java/io/InputStream"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/app/backup/BackupDataInput;)V" since="29"/>
<method name="getKey()Ljava/lang/String;"/>
<method name="size()I"/>
</class>
<class name="android/app/backup/BackupDataOutput" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/io/FileDescriptor;)V" since="29"/>
<method name="getQuota()J" since="26"/>
<method name="getTransportFlags()I" since="28"/>
<method name="writeEntityData([BI)I"/>
@@ -7019,23 +7206,16 @@
<method name="&lt;init>(Landroid/content/Context;)V"/>
<method name="dataChanged()V"/>
<method name="dataChanged(Ljava/lang/String;)V"/>
+ <method name="getUserForAncestralSerialNumber(J)Landroid/os/UserHandle;" since="29"/>
<method name="requestRestore(Landroid/app/backup/RestoreObserver;)I" deprecated="28"/>
</class>
<class name="android/app/backup/FileBackupHelper" since="8">
- <extends name="android/app/backup/FileBackupHelperBase" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
+ <extends name="java/lang/Object"/>
<implements name="android/app/backup/BackupHelper"/>
<method name="&lt;init>(Landroid/content/Context;[Ljava/lang/String;)V"/>
</class>
- <class name="android/app/backup/FileBackupHelperBase" since="8" removed="29">
- <extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="writeNewStateDescription(Landroid/os/ParcelFileDescriptor;)V"/>
- </class>
<class name="android/app/backup/FullBackupDataOutput" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(J)V" since="29"/>
<method name="getQuota()J" since="26"/>
<method name="getTransportFlags()I" since="28"/>
</class>
@@ -7047,16 +7227,13 @@
<method name="restoreStarting(I)V"/>
</class>
<class name="android/app/backup/SharedPreferencesBackupHelper" since="8">
- <extends name="android/app/backup/FileBackupHelperBase" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
+ <extends name="java/lang/Object"/>
<implements name="android/app/backup/BackupHelper"/>
<method name="&lt;init>(Landroid/content/Context;[Ljava/lang/String;)V"/>
</class>
<class name="android/app/job/JobInfo" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getBackoffPolicy()I"/>
<method name="getClipData()Landroid/content/ClipData;" since="26"/>
<method name="getClipGrantFlags()I" since="26"/>
@@ -7137,8 +7314,6 @@
<class name="android/app/job/JobParameters" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="completeWork(Landroid/app/job/JobWorkItem;)V" since="26"/>
<method name="dequeueWork()Landroid/app/job/JobWorkItem;" since="26"/>
<method name="getClipData()Landroid/content/ClipData;" since="26"/>
@@ -7191,6 +7366,20 @@
<method name="getIntent()Landroid/content/Intent;"/>
<field name="CREATOR"/>
</class>
+ <class name="android/app/role/RoleManager" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="createRequestRoleIntent(Ljava/lang/String;)Landroid/content/Intent;"/>
+ <method name="isRoleAvailable(Ljava/lang/String;)Z"/>
+ <method name="isRoleHeld(Ljava/lang/String;)Z"/>
+ <field name="ROLE_ASSISTANT"/>
+ <field name="ROLE_BROWSER"/>
+ <field name="ROLE_CALL_REDIRECTION"/>
+ <field name="ROLE_CALL_SCREENING"/>
+ <field name="ROLE_DIALER"/>
+ <field name="ROLE_EMERGENCY"/>
+ <field name="ROLE_HOME"/>
+ <field name="ROLE_SMS"/>
+ </class>
<class name="android/app/slice/Slice" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
@@ -7251,8 +7440,6 @@
<class name="android/app/slice/SliceItem" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getAction()Landroid/app/PendingIntent;"/>
<method name="getBundle()Landroid/os/Bundle;"/>
<method name="getFormat()Ljava/lang/String;"/>
@@ -7277,7 +7464,6 @@
</class>
<class name="android/app/slice/SliceManager" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="bindSlice(Landroid/content/Intent;Ljava/util/Set;)Landroid/app/slice/Slice;"/>
<method name="bindSlice(Landroid/net/Uri;Ljava/util/Set;)Landroid/app/slice/Slice;"/>
<method name="checkSlicePermission(Landroid/net/Uri;II)I"/>
@@ -7348,7 +7534,6 @@
<class name="android/app/usage/ExternalStorageStats" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getAppBytes()J"/>
<method name="getAudioBytes()J"/>
<method name="getImageBytes()J"/>
@@ -7359,7 +7544,6 @@
<class name="android/app/usage/NetworkStats" since="23">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V"/>
<method name="getNextBucket(Landroid/app/usage/NetworkStats$Bucket;)Z"/>
<method name="hasNextBucket()Z"/>
</class>
@@ -7397,7 +7581,6 @@
</class>
<class name="android/app/usage/NetworkStatsManager" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="queryDetails(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats;"/>
<method name="queryDetailsForUid(ILjava/lang/String;JJI)Landroid/app/usage/NetworkStats;"/>
<method name="queryDetailsForUidTag(ILjava/lang/String;JJII)Landroid/app/usage/NetworkStats;" since="24"/>
@@ -7417,7 +7600,6 @@
<class name="android/app/usage/StorageStats" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getAppBytes()J"/>
<method name="getCacheBytes()J"/>
<method name="getDataBytes()J"/>
@@ -7425,7 +7607,6 @@
</class>
<class name="android/app/usage/StorageStatsManager" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getFreeBytes(Ljava/util/UUID;)J"/>
<method name="getTotalBytes(Ljava/util/UUID;)J"/>
<method name="queryExternalStatsForUser(Ljava/util/UUID;Landroid/os/UserHandle;)Landroid/app/usage/ExternalStorageStats;"/>
@@ -7436,7 +7617,6 @@
<class name="android/app/usage/UsageEvents" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getNextEvent(Landroid/app/usage/UsageEvents$Event;)Z"/>
<method name="hasNextEvent()Z"/>
<field name="CREATOR"/>
@@ -7451,11 +7631,18 @@
<method name="getPackageName()Ljava/lang/String;"/>
<method name="getShortcutId()Ljava/lang/String;" since="25"/>
<method name="getTimeStamp()J"/>
+ <field name="ACTIVITY_PAUSED" since="29"/>
+ <field name="ACTIVITY_RESUMED" since="29"/>
+ <field name="ACTIVITY_STOPPED" since="29"/>
<field name="CONFIGURATION_CHANGE"/>
+ <field name="DEVICE_SHUTDOWN" since="29"/>
+ <field name="DEVICE_STARTUP" since="29"/>
+ <field name="FOREGROUND_SERVICE_START" since="29"/>
+ <field name="FOREGROUND_SERVICE_STOP" since="29"/>
<field name="KEYGUARD_HIDDEN" since="28"/>
<field name="KEYGUARD_SHOWN" since="28"/>
- <field name="MOVE_TO_BACKGROUND"/>
- <field name="MOVE_TO_FOREGROUND"/>
+ <field name="MOVE_TO_BACKGROUND" deprecated="29"/>
+ <field name="MOVE_TO_FOREGROUND" deprecated="29"/>
<field name="NONE"/>
<field name="SCREEN_INTERACTIVE" since="28"/>
<field name="SCREEN_NON_INTERACTIVE" since="28"/>
@@ -7469,15 +7656,18 @@
<method name="&lt;init>(Landroid/app/usage/UsageStats;)V"/>
<method name="add(Landroid/app/usage/UsageStats;)V"/>
<method name="getFirstTimeStamp()J"/>
+ <method name="getLastTimeForegroundServiceUsed()J" since="29"/>
<method name="getLastTimeStamp()J"/>
<method name="getLastTimeUsed()J"/>
+ <method name="getLastTimeVisible()J" since="29"/>
<method name="getPackageName()Ljava/lang/String;"/>
+ <method name="getTotalTimeForegroundServiceUsed()J" since="29"/>
<method name="getTotalTimeInForeground()J"/>
+ <method name="getTotalTimeVisible()J" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/app/usage/UsageStatsManager" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getAppStandbyBucket()I" since="28"/>
<method name="isAppInactive(Ljava/lang/String;)Z" since="23"/>
<method name="queryAndAggregateUsageStats(JJ)Ljava/util/Map;"/>
@@ -7525,13 +7715,13 @@
<method name="prepareView(Landroid/view/View;)V"/>
<method name="setAppWidget(ILandroid/appwidget/AppWidgetProviderInfo;)V"/>
<method name="setExecutor(Ljava/util/concurrent/Executor;)V" since="26"/>
+ <method name="setOnLightBackground(Z)V" since="29"/>
<method name="updateAppWidget(Landroid/widget/RemoteViews;)V"/>
<method name="updateAppWidgetOptions(Landroid/os/Bundle;)V" since="16"/>
<method name="updateAppWidgetSize(Landroid/os/Bundle;IIII)V" since="16"/>
</class>
<class name="android/appwidget/AppWidgetManager" since="3">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="bindAppWidgetId(ILandroid/content/ComponentName;)V" removed="16"/>
<method name="bindAppWidgetIdIfAllowed(ILandroid/content/ComponentName;)Z" since="16"/>
<method name="bindAppWidgetIdIfAllowed(ILandroid/content/ComponentName;Landroid/os/Bundle;)Z" since="17"/>
@@ -7632,8 +7822,6 @@
<class name="android/bluetooth/BluetoothA2dp" since="11">
<extends name="java/lang/Object"/>
<implements name="android/bluetooth/BluetoothProfile"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V" since="29"/>
<method name="isA2dpPlaying(Landroid/bluetooth/BluetoothDevice;)Z"/>
<field name="ACTION_CONNECTION_STATE_CHANGED"/>
<field name="ACTION_PLAYING_STATE_CHANGED"/>
@@ -7642,7 +7830,6 @@
</class>
<class name="android/bluetooth/BluetoothAdapter" since="5">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="cancelDiscovery()Z"/>
<method name="checkBluetoothAddress(Ljava/lang/String;)Z"/>
<method name="closeProfileProxy(ILandroid/bluetooth/BluetoothProfile;)V" since="11"/>
@@ -7670,7 +7857,9 @@
<method name="isMultipleAdvertisementSupported()Z" since="21"/>
<method name="isOffloadedFilteringSupported()Z" since="21"/>
<method name="isOffloadedScanBatchingSupported()Z" since="21"/>
+ <method name="listenUsingInsecureL2capChannel()Landroid/bluetooth/BluetoothServerSocket;" since="29"/>
<method name="listenUsingInsecureRfcommWithServiceRecord(Ljava/lang/String;Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;" since="10"/>
+ <method name="listenUsingL2capChannel()Landroid/bluetooth/BluetoothServerSocket;" since="29"/>
<method name="listenUsingRfcommWithServiceRecord(Ljava/lang/String;Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;"/>
<method name="setName(Ljava/lang/String;)Z"/>
<method name="startDiscovery()Z"/>
@@ -7712,7 +7901,6 @@
</class>
<class name="android/bluetooth/BluetoothAssignedNumbers" since="11">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="AAMP_OF_AMERICA" since="19"/>
<field name="ACCEL_SEMICONDUCTOR"/>
<field name="ACE_SENSOR" since="19"/>
@@ -7944,8 +8132,6 @@
<class name="android/bluetooth/BluetoothClass" since="5">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="getDeviceClass()I"/>
<method name="getMajorDeviceClass()I"/>
<method name="hasService(I)Z"/>
@@ -8036,17 +8222,18 @@
<class name="android/bluetooth/BluetoothDevice" since="5">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;" since="18"/>
<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;I)Landroid/bluetooth/BluetoothGatt;" since="23"/>
<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;II)Landroid/bluetooth/BluetoothGatt;" since="26"/>
<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;IILandroid/os/Handler;)Landroid/bluetooth/BluetoothGatt;" since="26"/>
<method name="createBond()Z" since="19"/>
+ <method name="createInsecureL2capChannel(I)Landroid/bluetooth/BluetoothSocket;" since="29"/>
<method name="createInsecureRfcommSocketToServiceRecord(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;" since="10"/>
+ <method name="createL2capChannel(I)Landroid/bluetooth/BluetoothSocket;" since="29"/>
<method name="createRfcommSocketToServiceRecord(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;"/>
<method name="fetchUuidsWithSdp()Z" since="15"/>
<method name="getAddress()Ljava/lang/String;"/>
+ <method name="getAlias()Ljava/lang/String;" since="30"/>
<method name="getBluetoothClass()Landroid/bluetooth/BluetoothClass;"/>
<method name="getBondState()I"/>
<method name="getName()Ljava/lang/String;"/>
@@ -8057,6 +8244,7 @@
<field name="ACTION_ACL_CONNECTED"/>
<field name="ACTION_ACL_DISCONNECTED"/>
<field name="ACTION_ACL_DISCONNECT_REQUESTED"/>
+ <field name="ACTION_ALIAS_CHANGED" since="30"/>
<field name="ACTION_BOND_STATE_CHANGED"/>
<field name="ACTION_CLASS_CHANGED"/>
<field name="ACTION_FOUND"/>
@@ -8099,7 +8287,6 @@
<class name="android/bluetooth/BluetoothGatt" since="18">
<extends name="java/lang/Object"/>
<implements name="android/bluetooth/BluetoothProfile"/>
- <method name="&lt;init>()V"/>
<method name="abortReliableWrite()V" since="19"/>
<method name="abortReliableWrite(Landroid/bluetooth/BluetoothDevice;)V" deprecated="19"/>
<method name="beginReliableWrite()Z"/>
@@ -8228,7 +8415,6 @@
<class name="android/bluetooth/BluetoothGattServer" since="18">
<extends name="java/lang/Object"/>
<implements name="android/bluetooth/BluetoothProfile"/>
- <method name="&lt;init>()V"/>
<method name="addService(Landroid/bluetooth/BluetoothGattService;)Z"/>
<method name="cancelConnection(Landroid/bluetooth/BluetoothDevice;)V"/>
<method name="clearServices()V"/>
@@ -8278,8 +8464,6 @@
<class name="android/bluetooth/BluetoothHeadset" since="11">
<extends name="java/lang/Object"/>
<implements name="android/bluetooth/BluetoothProfile"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V" since="29"/>
<method name="isAudioConnected(Landroid/bluetooth/BluetoothDevice;)Z"/>
<method name="sendVendorSpecificResultCode(Landroid/bluetooth/BluetoothDevice;Ljava/lang/String;Ljava/lang/String;)Z" since="19"/>
<method name="startVoiceRecognition(Landroid/bluetooth/BluetoothDevice;)Z"/>
@@ -8301,50 +8485,49 @@
<field name="VENDOR_RESULT_CODE_COMMAND_ANDROID" since="19"/>
<field name="VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY"/>
</class>
- <class name="android/bluetooth/BluetoothHealth" since="14">
+ <class name="android/bluetooth/BluetoothHealth" since="14" deprecated="29">
<extends name="java/lang/Object"/>
<implements name="android/bluetooth/BluetoothProfile"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V" since="29"/>
- <method name="connectChannelToSource(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z"/>
- <method name="disconnectChannel(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;I)Z"/>
- <method name="getMainChannelFd(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;"/>
- <method name="registerSinkAppConfiguration(Ljava/lang/String;ILandroid/bluetooth/BluetoothHealthCallback;)Z"/>
- <method name="unregisterAppConfiguration(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z"/>
- <field name="APP_CONFIG_REGISTRATION_FAILURE"/>
- <field name="APP_CONFIG_REGISTRATION_SUCCESS"/>
- <field name="APP_CONFIG_UNREGISTRATION_FAILURE"/>
- <field name="APP_CONFIG_UNREGISTRATION_SUCCESS"/>
- <field name="CHANNEL_TYPE_RELIABLE"/>
- <field name="CHANNEL_TYPE_STREAMING"/>
- <field name="SINK_ROLE"/>
- <field name="SOURCE_ROLE"/>
- <field name="STATE_CHANNEL_CONNECTED"/>
- <field name="STATE_CHANNEL_CONNECTING"/>
- <field name="STATE_CHANNEL_DISCONNECTED"/>
- <field name="STATE_CHANNEL_DISCONNECTING"/>
- </class>
- <class name="android/bluetooth/BluetoothHealthAppConfiguration" since="14">
+ <method name="connectChannelToSource(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z" deprecated="29"/>
+ <method name="disconnectChannel(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;I)Z" deprecated="29"/>
+ <method name="getMainChannelFd(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;" deprecated="29"/>
+ <method name="registerSinkAppConfiguration(Ljava/lang/String;ILandroid/bluetooth/BluetoothHealthCallback;)Z" deprecated="29"/>
+ <method name="unregisterAppConfiguration(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z" deprecated="29"/>
+ <field name="APP_CONFIG_REGISTRATION_FAILURE" deprecated="29"/>
+ <field name="APP_CONFIG_REGISTRATION_SUCCESS" deprecated="29"/>
+ <field name="APP_CONFIG_UNREGISTRATION_FAILURE" deprecated="29"/>
+ <field name="APP_CONFIG_UNREGISTRATION_SUCCESS" deprecated="29"/>
+ <field name="CHANNEL_TYPE_RELIABLE" deprecated="29"/>
+ <field name="CHANNEL_TYPE_STREAMING" deprecated="29"/>
+ <field name="SINK_ROLE" deprecated="29"/>
+ <field name="SOURCE_ROLE" deprecated="29"/>
+ <field name="STATE_CHANNEL_CONNECTED" deprecated="29"/>
+ <field name="STATE_CHANNEL_CONNECTING" deprecated="29"/>
+ <field name="STATE_CHANNEL_DISCONNECTED" deprecated="29"/>
+ <field name="STATE_CHANNEL_DISCONNECTING" deprecated="29"/>
+ </class>
+ <class name="android/bluetooth/BluetoothHealthAppConfiguration" since="14" deprecated="29">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;I)V" since="29"/>
- <method name="getDataType()I"/>
- <method name="getName()Ljava/lang/String;"/>
- <method name="getRole()I"/>
- <field name="CREATOR"/>
+ <method name="getDataType()I" deprecated="29"/>
+ <method name="getName()Ljava/lang/String;" deprecated="29"/>
+ <method name="getRole()I" deprecated="29"/>
+ <field name="CREATOR" deprecated="29"/>
</class>
- <class name="android/bluetooth/BluetoothHealthCallback" since="14">
+ <class name="android/bluetooth/BluetoothHealthCallback" since="14" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="onHealthAppConfigurationStatusChange(Landroid/bluetooth/BluetoothHealthAppConfiguration;I)V"/>
- <method name="onHealthChannelStateChange(Landroid/bluetooth/BluetoothHealthAppConfiguration;Landroid/bluetooth/BluetoothDevice;IILandroid/os/ParcelFileDescriptor;I)V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="onHealthAppConfigurationStatusChange(Landroid/bluetooth/BluetoothHealthAppConfiguration;I)V" deprecated="29"/>
+ <method name="onHealthChannelStateChange(Landroid/bluetooth/BluetoothHealthAppConfiguration;Landroid/bluetooth/BluetoothDevice;IILandroid/os/ParcelFileDescriptor;I)V" deprecated="29"/>
+ </class>
+ <class name="android/bluetooth/BluetoothHearingAid" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/bluetooth/BluetoothProfile"/>
+ <field name="ACTION_CONNECTION_STATE_CHANGED"/>
</class>
<class name="android/bluetooth/BluetoothHidDevice" since="28">
<extends name="java/lang/Object"/>
<implements name="android/bluetooth/BluetoothProfile"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V" since="29"/>
<method name="connect(Landroid/bluetooth/BluetoothDevice;)Z"/>
<method name="disconnect(Landroid/bluetooth/BluetoothDevice;)Z"/>
<method name="registerApp(Landroid/bluetooth/BluetoothHidDeviceAppSdpSettings;Landroid/bluetooth/BluetoothHidDeviceAppQosSettings;Landroid/bluetooth/BluetoothHidDeviceAppQosSettings;Ljava/util/concurrent/Executor;Landroid/bluetooth/BluetoothHidDevice$Callback;)Z"/>
@@ -8416,8 +8599,6 @@
</class>
<class name="android/bluetooth/BluetoothManager" since="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="getAdapter()Landroid/bluetooth/BluetoothAdapter;"/>
<method name="getConnectedDevices(I)Ljava/util/List;"/>
<method name="getConnectionState(Landroid/bluetooth/BluetoothDevice;I)I"/>
@@ -8435,7 +8616,8 @@
<field name="GATT" since="18"/>
<field name="GATT_SERVER" since="18"/>
<field name="HEADSET"/>
- <field name="HEALTH" since="14"/>
+ <field name="HEALTH" since="14" deprecated="29"/>
+ <field name="HEARING_AID" since="29"/>
<field name="HID_DEVICE" since="28"/>
<field name="SAP" since="23"/>
<field name="STATE_CONNECTED"/>
@@ -8451,16 +8633,13 @@
<class name="android/bluetooth/BluetoothServerSocket" since="5">
<extends name="java/lang/Object"/>
<implements name="java/io/Closeable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IZZI)V" since="29"/>
<method name="accept()Landroid/bluetooth/BluetoothSocket;"/>
<method name="accept(I)Landroid/bluetooth/BluetoothSocket;"/>
+ <method name="getPsm()I" since="29"/>
</class>
<class name="android/bluetooth/BluetoothSocket" since="5">
<extends name="java/lang/Object"/>
<implements name="java/io/Closeable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/bluetooth/BluetoothSocket;)V" since="29"/>
<method name="connect()V"/>
<method name="getConnectionType()I" since="23"/>
<method name="getInputStream()Ljava/io/InputStream;"/>
@@ -8487,8 +8666,6 @@
<class name="android/bluetooth/le/AdvertiseData" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/List;Landroid/util/SparseArray;Ljava/util/Map;ZZ)V" since="29"/>
<method name="getIncludeDeviceName()Z"/>
<method name="getIncludeTxPowerLevel()Z"/>
<method name="getManufacturerSpecificData()Landroid/util/SparseArray;"/>
@@ -8509,8 +8686,6 @@
<class name="android/bluetooth/le/AdvertiseSettings" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getMode()I"/>
<method name="getTimeout()I"/>
<method name="getTxPowerLevel()I"/>
@@ -8535,7 +8710,6 @@
</class>
<class name="android/bluetooth/le/AdvertisingSet" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="enableAdvertising(ZII)V"/>
<method name="setAdvertisingData(Landroid/bluetooth/le/AdvertiseData;)V"/>
<method name="setAdvertisingParameters(Landroid/bluetooth/le/AdvertisingSetParameters;)V"/>
@@ -8566,8 +8740,6 @@
<class name="android/bluetooth/le/AdvertisingSetParameters" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getInterval()I"/>
<method name="getPrimaryPhy()I"/>
<method name="getSecondaryPhy()I"/>
@@ -8606,7 +8778,6 @@
</class>
<class name="android/bluetooth/le/BluetoothLeAdvertiser" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="startAdvertising(Landroid/bluetooth/le/AdvertiseSettings;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseCallback;)V"/>
<method name="startAdvertising(Landroid/bluetooth/le/AdvertiseSettings;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseCallback;)V"/>
<method name="startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;IILandroid/bluetooth/le/AdvertisingSetCallback;)V" since="26"/>
@@ -8618,7 +8789,6 @@
</class>
<class name="android/bluetooth/le/BluetoothLeScanner" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="flushPendingScanResults(Landroid/bluetooth/le/ScanCallback;)V"/>
<method name="startScan(Landroid/bluetooth/le/ScanCallback;)V"/>
<method name="startScan(Ljava/util/List;Landroid/bluetooth/le/ScanSettings;Landroid/app/PendingIntent;)I" since="26"/>
@@ -8632,8 +8802,6 @@
<class name="android/bluetooth/le/PeriodicAdvertisingParameters" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getIncludeTxPower()Z"/>
<method name="getInterval()I"/>
<field name="CREATOR"/>
@@ -8659,8 +8827,6 @@
<class name="android/bluetooth/le/ScanFilter" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;[B[BI[B[B)V" since="29"/>
<method name="getDeviceAddress()Ljava/lang/String;"/>
<method name="getDeviceName()Ljava/lang/String;"/>
<method name="getManufacturerData()[B"/>
@@ -8669,6 +8835,8 @@
<method name="getServiceData()[B"/>
<method name="getServiceDataMask()[B"/>
<method name="getServiceDataUuid()Landroid/os/ParcelUuid;"/>
+ <method name="getServiceSolicitationUuid()Landroid/os/ParcelUuid;" since="29"/>
+ <method name="getServiceSolicitationUuidMask()Landroid/os/ParcelUuid;" since="29"/>
<method name="getServiceUuid()Landroid/os/ParcelUuid;"/>
<method name="getServiceUuidMask()Landroid/os/ParcelUuid;"/>
<method name="matches(Landroid/bluetooth/le/ScanResult;)Z"/>
@@ -8684,13 +8852,13 @@
<method name="setManufacturerData(I[B[B)Landroid/bluetooth/le/ScanFilter$Builder;"/>
<method name="setServiceData(Landroid/os/ParcelUuid;[B)Landroid/bluetooth/le/ScanFilter$Builder;"/>
<method name="setServiceData(Landroid/os/ParcelUuid;[B[B)Landroid/bluetooth/le/ScanFilter$Builder;"/>
+ <method name="setServiceSolicitationUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;" since="29"/>
+ <method name="setServiceSolicitationUuid(Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;" since="29"/>
<method name="setServiceUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;"/>
<method name="setServiceUuid(Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;"/>
</class>
<class name="android/bluetooth/le/ScanRecord" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/List;Landroid/util/SparseArray;Ljava/util/Map;IILjava/lang/String;[B)V" since="29"/>
<method name="getAdvertiseFlags()I"/>
<method name="getBytes()[B"/>
<method name="getDeviceName()Ljava/lang/String;"/>
@@ -8698,6 +8866,7 @@
<method name="getManufacturerSpecificData(I)[B"/>
<method name="getServiceData()Ljava/util/Map;"/>
<method name="getServiceData(Landroid/os/ParcelUuid;)[B"/>
+ <method name="getServiceSolicitationUuids()Ljava/util/List;" since="29"/>
<method name="getServiceUuids()Ljava/util/List;"/>
<method name="getTxPowerLevel()I"/>
</class>
@@ -8729,8 +8898,6 @@
<class name="android/bluetooth/le/ScanSettings" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getCallbackType()I"/>
<method name="getLegacy()Z" since="26"/>
<method name="getPhy()I" since="26"/>
@@ -8767,8 +8934,6 @@
<class name="android/companion/AssociationRequest" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/companion/AssociationRequest$Builder" since="26">
@@ -8776,15 +8941,13 @@
<method name="&lt;init>()V"/>
<method name="addDeviceFilter(Landroid/companion/DeviceFilter;)Landroid/companion/AssociationRequest$Builder;"/>
<method name="build()Landroid/companion/AssociationRequest;"/>
- <method name="checkNotUsed()V" since="29"/>
- <method name="markUsed()V" since="29"/>
+ <method name="checkNotUsed()V" since="28" removed="29"/>
+ <method name="markUsed()V" since="28" removed="29"/>
<method name="setSingleDevice(Z)Landroid/companion/AssociationRequest$Builder;"/>
</class>
<class name="android/companion/BluetoothDeviceFilter" since="26">
<extends name="java/lang/Object"/>
<implements name="android/companion/DeviceFilter"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/companion/BluetoothDeviceFilter$Builder" since="26">
@@ -8792,16 +8955,14 @@
<method name="&lt;init>()V"/>
<method name="addServiceUuid(Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;)Landroid/companion/BluetoothDeviceFilter$Builder;"/>
<method name="build()Landroid/companion/BluetoothDeviceFilter;"/>
- <method name="checkNotUsed()V" since="29"/>
- <method name="markUsed()V" since="29"/>
+ <method name="checkNotUsed()V" since="28" removed="29"/>
+ <method name="markUsed()V" since="28" removed="29"/>
<method name="setAddress(Ljava/lang/String;)Landroid/companion/BluetoothDeviceFilter$Builder;"/>
<method name="setNamePattern(Ljava/util/regex/Pattern;)Landroid/companion/BluetoothDeviceFilter$Builder;"/>
</class>
<class name="android/companion/BluetoothLeDeviceFilter" since="26">
<extends name="java/lang/Object"/>
<implements name="android/companion/DeviceFilter"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/regex/Pattern;Landroid/bluetooth/le/ScanFilter;[B[BLjava/lang/String;Ljava/lang/String;IIIIZ)V" since="29"/>
<method name="getRenamePrefixLengthLimit()I"/>
<field name="CREATOR"/>
</class>
@@ -8809,8 +8970,8 @@
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
<method name="build()Landroid/companion/BluetoothLeDeviceFilter;"/>
- <method name="checkNotUsed()V" since="29"/>
- <method name="markUsed()V" since="29"/>
+ <method name="checkNotUsed()V" since="28" removed="29"/>
+ <method name="markUsed()V" since="28" removed="29"/>
<method name="setNamePattern(Ljava/util/regex/Pattern;)Landroid/companion/BluetoothLeDeviceFilter$Builder;"/>
<method name="setRawDataFilter([B[B)Landroid/companion/BluetoothLeDeviceFilter$Builder;"/>
<method name="setRenameFromBytes(Ljava/lang/String;Ljava/lang/String;IILjava/nio/ByteOrder;)Landroid/companion/BluetoothLeDeviceFilter$Builder;"/>
@@ -8819,7 +8980,6 @@
</class>
<class name="android/companion/CompanionDeviceManager" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="associate(Landroid/companion/AssociationRequest;Landroid/companion/CompanionDeviceManager$Callback;Landroid/os/Handler;)V"/>
<method name="disassociate(Ljava/lang/String;)V"/>
<method name="getAssociations()Ljava/util/List;"/>
@@ -8840,16 +9000,14 @@
<class name="android/companion/WifiDeviceFilter" since="26">
<extends name="java/lang/Object"/>
<implements name="android/companion/DeviceFilter"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/regex/Pattern;)V" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/companion/WifiDeviceFilter$Builder" since="26">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
<method name="build()Landroid/companion/WifiDeviceFilter;"/>
- <method name="checkNotUsed()V" since="29"/>
- <method name="markUsed()V" since="29"/>
+ <method name="checkNotUsed()V" since="28" removed="29"/>
+ <method name="markUsed()V" since="28" removed="29"/>
<method name="setNamePattern(Ljava/util/regex/Pattern;)Landroid/companion/WifiDeviceFilter$Builder;"/>
</class>
<class name="android/content/AbstractThreadedSyncAdapter" since="5">
@@ -8863,7 +9021,7 @@
<method name="onSyncCanceled()V" since="8"/>
<method name="onSyncCanceled(Ljava/lang/Thread;)V" since="11"/>
<method name="onUnsyncableAccount()Z" since="28"/>
- <field name="LOG_SYNC_DETAILS" deprecated="16"/>
+ <field name="LOG_SYNC_DETAILS" deprecated="15"/>
</class>
<class name="android/content/ActivityNotFoundException" since="1">
<extends name="java/lang/RuntimeException"/>
@@ -8903,14 +9061,14 @@
</class>
<class name="android/content/AsyncTaskLoader" since="11" deprecated="28">
<extends name="android/content/Loader"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
<method name="cancelLoad()Z" removed="16"/>
- <method name="cancelLoadInBackground()V" since="16"/>
- <method name="isLoadInBackgroundCanceled()Z" since="16"/>
- <method name="loadInBackground()Ljava/lang/Object;"/>
- <method name="onCanceled(Ljava/lang/Object;)V"/>
- <method name="onLoadInBackground()Ljava/lang/Object;"/>
- <method name="setUpdateThrottle(J)V"/>
+ <method name="cancelLoadInBackground()V" since="16" deprecated="29"/>
+ <method name="isLoadInBackgroundCanceled()Z" since="16" deprecated="29"/>
+ <method name="loadInBackground()Ljava/lang/Object;" deprecated="29"/>
+ <method name="onCanceled(Ljava/lang/Object;)V" deprecated="29"/>
+ <method name="onLoadInBackground()Ljava/lang/Object;" deprecated="29"/>
+ <method name="setUpdateThrottle(J)V" deprecated="29"/>
</class>
<class name="android/content/BroadcastReceiver" since="1">
<extends name="java/lang/Object"/>
@@ -8936,8 +9094,6 @@
</class>
<class name="android/content/BroadcastReceiver$PendingResult" since="11">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILjava/lang/String;Landroid/os/Bundle;IZZLandroid/os/IBinder;II)V" since="29"/>
<method name="abortBroadcast()V"/>
<method name="clearAbortBroadcast()V"/>
<method name="finish()V"/>
@@ -9006,7 +9162,6 @@
</class>
<class name="android/content/ClipboardManager" since="11">
<extends name="android/text/ClipboardManager"/>
- <method name="&lt;init>()V"/>
<method name="addPrimaryClipChangedListener(Landroid/content/ClipboardManager$OnPrimaryClipChangedListener;)V"/>
<method name="clearPrimaryClip()V" since="28"/>
<method name="getPrimaryClip()Landroid/content/ClipData;"/>
@@ -9065,11 +9220,14 @@
<implements name="android/content/ComponentCallbacks" removed="14"/>
<implements name="android/content/ComponentCallbacks2" since="14"/>
<method name="&lt;init>()V"/>
+ <method name="applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="29"/>
<method name="applyBatch(Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="5"/>
<method name="attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V"/>
<method name="bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I"/>
<method name="call(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="11"/>
+ <method name="call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="29"/>
<method name="canonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
+ <method name="clearCallingIdentity()Landroid/content/ContentProvider$CallingIdentity;" since="29"/>
<method name="delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I"/>
<method name="dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="18"/>
<method name="getCallingPackage()Ljava/lang/String;" since="19"/>
@@ -9094,6 +9252,7 @@
<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
<method name="refresh(Landroid/net/Uri;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Z" since="26"/>
+ <method name="restoreCallingIdentity(Landroid/content/ContentProvider$CallingIdentity;)V" since="29"/>
<method name="setPathPermissions([Landroid/content/pm/PathPermission;)V" since="4"/>
<method name="setReadPermission(Ljava/lang/String;)V"/>
<method name="setWritePermission(Ljava/lang/String;)V"/>
@@ -9101,6 +9260,9 @@
<method name="uncanonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I"/>
</class>
+ <class name="android/content/ContentProvider$CallingIdentity" since="29">
+ <extends name="java/lang/Object"/>
+ </class>
<class name="android/content/ContentProvider$PipeDataWriter" since="11">
<extends name="java/lang/Object"/>
<method name="writeDataToPipe(Landroid/os/ParcelFileDescriptor;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/Object;)V"/>
@@ -9108,10 +9270,11 @@
<class name="android/content/ContentProviderClient" since="5">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable" since="24"/>
- <method name="&lt;init>()V"/>
+ <method name="applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="29"/>
<method name="applyBatch(Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;"/>
<method name="bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I"/>
<method name="call(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="17"/>
+ <method name="call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="29"/>
<method name="canonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
<method name="delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I"/>
<method name="getLocalContentProvider()Landroid/content/ContentProvider;"/>
@@ -9122,6 +9285,7 @@
<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
<method name="openFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;"/>
<method name="openFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="19"/>
+ <method name="openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="29"/>
<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;" since="11"/>
<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
<method name="query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="26"/>
@@ -9135,8 +9299,6 @@
<class name="android/content/ContentProviderOperation" since="5">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/ContentProviderOperation$Builder;)V" since="29"/>
<method name="apply(Landroid/content/ContentProvider;[Landroid/content/ContentProviderResult;I)Landroid/content/ContentProviderResult;"/>
<method name="getUri()Landroid/net/Uri;"/>
<method name="isAssertQuery()Z" since="23"/>
@@ -9156,8 +9318,6 @@
</class>
<class name="android/content/ContentProviderOperation$Builder" since="5">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILandroid/net/Uri;)V" since="29"/>
<method name="build()Landroid/content/ContentProviderOperation;"/>
<method name="withExpectedCount(I)Landroid/content/ContentProviderOperation$Builder;"/>
<method name="withSelection(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/ContentProviderOperation$Builder;"/>
@@ -9199,12 +9359,13 @@
<method name="applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="5"/>
<method name="bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I"/>
<method name="call(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="11"/>
+ <method name="call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="29"/>
<method name="cancelSync(Landroid/accounts/Account;Ljava/lang/String;)V" since="5"/>
<method name="cancelSync(Landroid/content/SyncRequest;)V" since="21"/>
- <method name="cancelSync(Landroid/net/Uri;)V" deprecated="16"/>
+ <method name="cancelSync(Landroid/net/Uri;)V" deprecated="15"/>
<method name="canonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
<method name="delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I"/>
- <method name="getCurrentSync()Landroid/content/SyncInfo;" since="8" deprecated="16"/>
+ <method name="getCurrentSync()Landroid/content/SyncInfo;" since="8" deprecated="15"/>
<method name="getCurrentSyncs()Ljava/util/List;" since="11"/>
<method name="getIsSyncable(Landroid/accounts/Account;Ljava/lang/String;)I" since="5"/>
<method name="getMasterSyncAutomatically()Z" since="5"/>
@@ -9215,19 +9376,24 @@
<method name="getSyncAdapterTypes()[Landroid/content/SyncAdapterType;" since="5"/>
<method name="getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z" since="5"/>
<method name="getType(Landroid/net/Uri;)Ljava/lang/String;"/>
+ <method name="getTypeInfo(Ljava/lang/String;)Landroid/content/ContentResolver$MimeTypeInfo;" since="29"/>
<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;"/>
<method name="isSyncActive(Landroid/accounts/Account;Ljava/lang/String;)Z" since="5"/>
<method name="isSyncPending(Landroid/accounts/Account;Ljava/lang/String;)Z" since="5"/>
+ <method name="loadThumbnail(Landroid/net/Uri;Landroid/util/Size;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;" since="29"/>
<method name="notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;)V"/>
<method name="notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;I)V" since="24"/>
<method name="notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;Z)V"/>
+ <method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="29"/>
<method name="openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;" since="3"/>
<method name="openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
+ <method name="openFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="29"/>
<method name="openFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;"/>
<method name="openFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="19"/>
<method name="openInputStream(Landroid/net/Uri;)Ljava/io/InputStream;"/>
<method name="openOutputStream(Landroid/net/Uri;)Ljava/io/OutputStream;"/>
<method name="openOutputStream(Landroid/net/Uri;Ljava/lang/String;)Ljava/io/OutputStream;" since="3"/>
+ <method name="openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="29"/>
<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;" since="11"/>
<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
<method name="query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="26"/>
@@ -9243,12 +9409,14 @@
<method name="setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V" since="5"/>
<method name="setMasterSyncAutomatically(Z)V" since="5"/>
<method name="setSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;Z)V" since="5"/>
- <method name="startSync(Landroid/net/Uri;Landroid/os/Bundle;)V" deprecated="16"/>
+ <method name="startSync(Landroid/net/Uri;Landroid/os/Bundle;)V" deprecated="15"/>
<method name="takePersistableUriPermission(Landroid/net/Uri;I)V" since="19"/>
<method name="uncanonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
<method name="unregisterContentObserver(Landroid/database/ContentObserver;)V"/>
<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I"/>
<method name="validateSyncExtrasBundle(Landroid/os/Bundle;)V"/>
+ <method name="wrap(Landroid/content/ContentProvider;)Landroid/content/ContentResolver;" since="29"/>
+ <method name="wrap(Landroid/content/ContentProviderClient;)Landroid/content/ContentResolver;" since="29"/>
<field name="ANY_CURSOR_ITEM_TYPE" since="21"/>
<field name="CURSOR_DIR_BASE_TYPE"/>
<field name="CURSOR_ITEM_BASE_TYPE"/>
@@ -9271,11 +9439,11 @@
<field name="SCHEME_ANDROID_RESOURCE"/>
<field name="SCHEME_CONTENT"/>
<field name="SCHEME_FILE"/>
- <field name="SYNC_EXTRAS_ACCOUNT" deprecated="16"/>
+ <field name="SYNC_EXTRAS_ACCOUNT" deprecated="15"/>
<field name="SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS"/>
<field name="SYNC_EXTRAS_DO_NOT_RETRY" since="8"/>
<field name="SYNC_EXTRAS_EXPEDITED"/>
- <field name="SYNC_EXTRAS_FORCE" deprecated="16"/>
+ <field name="SYNC_EXTRAS_FORCE" deprecated="15"/>
<field name="SYNC_EXTRAS_IGNORE_BACKOFF" since="8"/>
<field name="SYNC_EXTRAS_IGNORE_SETTINGS" since="8"/>
<field name="SYNC_EXTRAS_INITIALIZE" since="5"/>
@@ -9287,11 +9455,18 @@
<field name="SYNC_OBSERVER_TYPE_PENDING" since="8"/>
<field name="SYNC_OBSERVER_TYPE_SETTINGS" since="8"/>
</class>
+ <class name="android/content/ContentResolver$MimeTypeInfo" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getContentDescription()Ljava/lang/CharSequence;"/>
+ <method name="getIcon()Landroid/graphics/drawable/Icon;"/>
+ <method name="getLabel()Ljava/lang/CharSequence;"/>
+ </class>
<class name="android/content/ContentUris" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
<method name="appendId(Landroid/net/Uri$Builder;J)Landroid/net/Uri$Builder;"/>
<method name="parseId(Landroid/net/Uri;)J"/>
+ <method name="removeId(Landroid/net/Uri;)Landroid/net/Uri;" since="29"/>
<method name="withAppendedId(Landroid/net/Uri;J)Landroid/net/Uri;"/>
</class>
<class name="android/content/ContentValues" since="1">
@@ -9333,6 +9508,8 @@
<class name="android/content/Context" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
+ <method name="bindIsolatedService(Landroid/content/Intent;ILjava/lang/String;Ljava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z" since="29"/>
+ <method name="bindService(Landroid/content/Intent;ILjava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z" since="29"/>
<method name="bindService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z"/>
<method name="checkCallingOrSelfPermission(Ljava/lang/String;)I"/>
<method name="checkCallingOrSelfUriPermission(Landroid/net/Uri;I)I"/>
@@ -9342,7 +9519,7 @@
<method name="checkSelfPermission(Ljava/lang/String;)I" since="23"/>
<method name="checkUriPermission(Landroid/net/Uri;III)I"/>
<method name="checkUriPermission(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;III)I"/>
- <method name="clearWallpaper()V" deprecated="16"/>
+ <method name="clearWallpaper()V" deprecated="15"/>
<method name="createConfigurationContext(Landroid/content/res/Configuration;)Landroid/content/Context;" since="17"/>
<method name="createContextForSplit(Ljava/lang/String;)Landroid/content/Context;" since="26"/>
<method name="createDeviceProtectedStorageContext()Landroid/content/Context;" since="24"/>
@@ -9385,6 +9562,7 @@
<method name="getNoBackupFilesDir()Ljava/io/File;" since="21"/>
<method name="getObbDir()Ljava/io/File;" since="11"/>
<method name="getObbDirs()[Ljava/io/File;" since="19"/>
+ <method name="getOpPackageName()Ljava/lang/String;" since="29"/>
<method name="getPackageCodePath()Ljava/lang/String;" since="8"/>
<method name="getPackageManager()Landroid/content/pm/PackageManager;"/>
<method name="getPackageName()Ljava/lang/String;"/>
@@ -9398,9 +9576,9 @@
<method name="getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;" since="23"/>
<method name="getText(I)Ljava/lang/CharSequence;"/>
<method name="getTheme()Landroid/content/res/Resources$Theme;"/>
- <method name="getWallpaper()Landroid/graphics/drawable/Drawable;" deprecated="16"/>
- <method name="getWallpaperDesiredMinimumHeight()I" deprecated="16"/>
- <method name="getWallpaperDesiredMinimumWidth()I" deprecated="16"/>
+ <method name="getWallpaper()Landroid/graphics/drawable/Drawable;" deprecated="15"/>
+ <method name="getWallpaperDesiredMinimumHeight()I" deprecated="15"/>
+ <method name="getWallpaperDesiredMinimumWidth()I" deprecated="15"/>
<method name="grantUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V"/>
<method name="isDeviceProtectedStorage()Z" since="24"/>
<method name="isRestricted()Z" since="4"/>
@@ -9414,7 +9592,7 @@
<method name="openFileOutput(Ljava/lang/String;I)Ljava/io/FileOutputStream;"/>
<method name="openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;"/>
<method name="openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;" since="11"/>
- <method name="peekWallpaper()Landroid/graphics/drawable/Drawable;" deprecated="16"/>
+ <method name="peekWallpaper()Landroid/graphics/drawable/Drawable;" deprecated="15"/>
<method name="registerComponentCallbacks(Landroid/content/ComponentCallbacks;)V" since="14"/>
<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;"/>
<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent;" since="26"/>
@@ -9430,14 +9608,15 @@
<method name="sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;)V" since="17"/>
<method name="sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;)V"/>
<method name="sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V"/>
+ <method name="sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="30"/>
<method name="sendOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="17"/>
<method name="sendStickyBroadcast(Landroid/content/Intent;)V" deprecated="21"/>
<method name="sendStickyBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V" since="17" deprecated="21"/>
<method name="sendStickyOrderedBroadcast(Landroid/content/Intent;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="5" deprecated="21"/>
<method name="sendStickyOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="17" deprecated="21"/>
<method name="setTheme(I)V"/>
- <method name="setWallpaper(Landroid/graphics/Bitmap;)V" deprecated="16"/>
- <method name="setWallpaper(Ljava/io/InputStream;)V" deprecated="16"/>
+ <method name="setWallpaper(Landroid/graphics/Bitmap;)V" deprecated="15"/>
+ <method name="setWallpaper(Ljava/io/InputStream;)V" deprecated="15"/>
<method name="startActivities([Landroid/content/Intent;)V" since="11"/>
<method name="startActivities([Landroid/content/Intent;Landroid/os/Bundle;)V" since="16"/>
<method name="startActivity(Landroid/content/Intent;)V"/>
@@ -9451,6 +9630,7 @@
<method name="unbindService(Landroid/content/ServiceConnection;)V"/>
<method name="unregisterComponentCallbacks(Landroid/content/ComponentCallbacks;)V" since="14"/>
<method name="unregisterReceiver(Landroid/content/BroadcastReceiver;)V"/>
+ <method name="updateServiceGroup(Landroid/content/ServiceConnection;II)V" since="29"/>
<field name="ACCESSIBILITY_SERVICE" since="4"/>
<field name="ACCOUNT_SERVICE" since="5"/>
<field name="ACTIVITY_SERVICE"/>
@@ -9466,14 +9646,18 @@
<field name="BIND_DEBUG_UNBIND"/>
<field name="BIND_EXTERNAL_SERVICE" since="24"/>
<field name="BIND_IMPORTANT" since="14"/>
+ <field name="BIND_INCLUDE_CAPABILITIES" since="29"/>
<field name="BIND_NOT_FOREGROUND" since="8"/>
+ <field name="BIND_NOT_PERCEPTIBLE" since="29"/>
<field name="BIND_WAIVE_PRIORITY" since="14"/>
+ <field name="BIOMETRIC_SERVICE" since="29"/>
<field name="BLUETOOTH_SERVICE" since="18"/>
<field name="CAMERA_SERVICE" since="21"/>
<field name="CAPTIONING_SERVICE" since="19"/>
<field name="CARRIER_CONFIG_SERVICE" since="23"/>
<field name="CLIPBOARD_SERVICE"/>
<field name="COMPANION_DEVICE_SERVICE" since="26"/>
+ <field name="CONNECTIVITY_DIAGNOSTICS_SERVICE" since="30"/>
<field name="CONNECTIVITY_SERVICE"/>
<field name="CONSUMER_IR_SERVICE" since="19"/>
<field name="CONTEXT_IGNORE_SECURITY"/>
@@ -9514,6 +9698,7 @@
<field name="PRINT_SERVICE" since="19"/>
<field name="RECEIVER_VISIBLE_TO_INSTANT_APPS" since="26"/>
<field name="RESTRICTIONS_SERVICE" since="21"/>
+ <field name="ROLE_SERVICE" since="29"/>
<field name="SEARCH_SERVICE"/>
<field name="SENSOR_SERVICE"/>
<field name="SHORTCUT_SERVICE" since="25"/>
@@ -9521,6 +9706,7 @@
<field name="STORAGE_STATS_SERVICE" since="26"/>
<field name="SYSTEM_HEALTH_SERVICE" since="24"/>
<field name="TELECOM_SERVICE" since="21"/>
+ <field name="TELEPHONY_IMS_SERVICE" since="30"/>
<field name="TELEPHONY_SERVICE"/>
<field name="TELEPHONY_SUBSCRIPTION_SERVICE" since="22"/>
<field name="TEXT_CLASSIFICATION_SERVICE" since="26"/>
@@ -9531,6 +9717,7 @@
<field name="USB_SERVICE" since="12"/>
<field name="USER_SERVICE" since="17"/>
<field name="VIBRATOR_SERVICE"/>
+ <field name="VPN_MANAGEMENT_SERVICE" since="30"/>
<field name="WALLPAPER_SERVICE"/>
<field name="WIFI_AWARE_SERVICE" since="26"/>
<field name="WIFI_P2P_SERVICE" since="14"/>
@@ -9545,32 +9732,33 @@
<method name="getBaseContext()Landroid/content/Context;"/>
<method name="getPackageCodePath()Ljava/lang/String;"/>
<method name="getPackageResourcePath()Ljava/lang/String;"/>
+ <method name="sendOrderedBroadcast(Landroid/content/Intent;ILjava/lang/String;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/Bundle;)V" since="30"/>
</class>
<class name="android/content/CursorLoader" since="11" deprecated="28">
<extends name="android/content/AsyncTaskLoader"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V"/>
- <method name="deliverResult(Landroid/database/Cursor;)V"/>
- <method name="getProjection()[Ljava/lang/String;"/>
- <method name="getSelection()Ljava/lang/String;"/>
- <method name="getSelectionArgs()[Ljava/lang/String;"/>
- <method name="getSortOrder()Ljava/lang/String;"/>
- <method name="getUri()Landroid/net/Uri;"/>
- <method name="loadInBackground()Landroid/database/Cursor;"/>
- <method name="onCanceled(Landroid/database/Cursor;)V"/>
- <method name="setProjection([Ljava/lang/String;)V"/>
- <method name="setSelection(Ljava/lang/String;)V"/>
- <method name="setSelectionArgs([Ljava/lang/String;)V"/>
- <method name="setSortOrder(Ljava/lang/String;)V"/>
- <method name="setUri(Landroid/net/Uri;)V"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V" deprecated="29"/>
+ <method name="deliverResult(Landroid/database/Cursor;)V" deprecated="29"/>
+ <method name="getProjection()[Ljava/lang/String;" deprecated="29"/>
+ <method name="getSelection()Ljava/lang/String;" deprecated="29"/>
+ <method name="getSelectionArgs()[Ljava/lang/String;" deprecated="29"/>
+ <method name="getSortOrder()Ljava/lang/String;" deprecated="29"/>
+ <method name="getUri()Landroid/net/Uri;" deprecated="29"/>
+ <method name="loadInBackground()Landroid/database/Cursor;" deprecated="29"/>
+ <method name="onCanceled(Landroid/database/Cursor;)V" deprecated="29"/>
+ <method name="setProjection([Ljava/lang/String;)V" deprecated="29"/>
+ <method name="setSelection(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="setSelectionArgs([Ljava/lang/String;)V" deprecated="29"/>
+ <method name="setSortOrder(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="setUri(Landroid/net/Uri;)V" deprecated="29"/>
</class>
<class name="android/content/DialogInterface" since="1">
<extends name="java/lang/Object"/>
<method name="cancel()V"/>
<method name="dismiss()V"/>
- <field name="BUTTON1" deprecated="16"/>
- <field name="BUTTON2" deprecated="16"/>
- <field name="BUTTON3" deprecated="16"/>
+ <field name="BUTTON1" deprecated="15"/>
+ <field name="BUTTON2" deprecated="15"/>
+ <field name="BUTTON3" deprecated="15"/>
<field name="BUTTON_NEGATIVE" since="3"/>
<field name="BUTTON_NEUTRAL" since="3"/>
<field name="BUTTON_POSITIVE" since="3"/>
@@ -9658,10 +9846,11 @@
<method name="getFlags()I"/>
<method name="getFloatArrayExtra(Ljava/lang/String;)[F"/>
<method name="getFloatExtra(Ljava/lang/String;F)F"/>
+ <method name="getIdentifier()Ljava/lang/String;" since="29"/>
<method name="getIntArrayExtra(Ljava/lang/String;)[I"/>
<method name="getIntExtra(Ljava/lang/String;I)I"/>
<method name="getIntegerArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;"/>
- <method name="getIntent(Ljava/lang/String;)Landroid/content/Intent;" deprecated="16"/>
+ <method name="getIntent(Ljava/lang/String;)Landroid/content/Intent;" deprecated="15"/>
<method name="getIntentOld(Ljava/lang/String;)Landroid/content/Intent;"/>
<method name="getLongArrayExtra(Ljava/lang/String;)[J"/>
<method name="getLongExtra(Ljava/lang/String;J)J"/>
@@ -9741,12 +9930,13 @@
<method name="setDataAndTypeAndNormalize(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;" since="16"/>
<method name="setExtrasClassLoader(Ljava/lang/ClassLoader;)V"/>
<method name="setFlags(I)Landroid/content/Intent;"/>
+ <method name="setIdentifier(Ljava/lang/String;)Landroid/content/Intent;" since="29"/>
<method name="setPackage(Ljava/lang/String;)Landroid/content/Intent;" since="4"/>
<method name="setSelector(Landroid/content/Intent;)V" since="15"/>
<method name="setSourceBounds(Landroid/graphics/Rect;)V" since="7"/>
<method name="setType(Ljava/lang/String;)Landroid/content/Intent;"/>
<method name="setTypeAndNormalize(Ljava/lang/String;)Landroid/content/Intent;" since="16"/>
- <method name="toURI()Ljava/lang/String;" deprecated="16"/>
+ <method name="toURI()Ljava/lang/String;" deprecated="15"/>
<method name="toUri(I)Ljava/lang/String;" since="4"/>
<field name="ACTION_AIRPLANE_MODE_CHANGED"/>
<field name="ACTION_ALL_APPS"/>
@@ -9772,6 +9962,7 @@
<field name="ACTION_CREATE_SHORTCUT"/>
<field name="ACTION_DATE_CHANGED"/>
<field name="ACTION_DEFAULT"/>
+ <field name="ACTION_DEFINE" since="29"/>
<field name="ACTION_DELETE"/>
<field name="ACTION_DEVICE_STORAGE_LOW" deprecated="26"/>
<field name="ACTION_DEVICE_STORAGE_OK" deprecated="26"/>
@@ -9792,7 +9983,7 @@
<field name="ACTION_INSERT"/>
<field name="ACTION_INSERT_OR_EDIT"/>
<field name="ACTION_INSTALL_FAILURE" since="27"/>
- <field name="ACTION_INSTALL_PACKAGE" since="14"/>
+ <field name="ACTION_INSTALL_PACKAGE" since="14" deprecated="29"/>
<field name="ACTION_LOCALE_CHANGED" since="7"/>
<field name="ACTION_LOCKED_BOOT_COMPLETED" since="24"/>
<field name="ACTION_MAIN"/>
@@ -9811,7 +10002,7 @@
<field name="ACTION_MEDIA_NOFS" since="3"/>
<field name="ACTION_MEDIA_REMOVED"/>
<field name="ACTION_MEDIA_SCANNER_FINISHED"/>
- <field name="ACTION_MEDIA_SCANNER_SCAN_FILE"/>
+ <field name="ACTION_MEDIA_SCANNER_SCAN_FILE" deprecated="29"/>
<field name="ACTION_MEDIA_SCANNER_STARTED"/>
<field name="ACTION_MEDIA_SHARED"/>
<field name="ACTION_MEDIA_UNMOUNTABLE"/>
@@ -9819,7 +10010,7 @@
<field name="ACTION_MY_PACKAGE_REPLACED" since="12"/>
<field name="ACTION_MY_PACKAGE_SUSPENDED" since="28"/>
<field name="ACTION_MY_PACKAGE_UNSUSPENDED" since="28"/>
- <field name="ACTION_NEW_OUTGOING_CALL"/>
+ <field name="ACTION_NEW_OUTGOING_CALL" deprecated="29"/>
<field name="ACTION_OPEN_DOCUMENT" since="19"/>
<field name="ACTION_OPEN_DOCUMENT_TREE" since="21"/>
<field name="ACTION_PACKAGES_SUSPENDED" since="24"/>
@@ -9829,7 +10020,7 @@
<field name="ACTION_PACKAGE_DATA_CLEARED" since="3"/>
<field name="ACTION_PACKAGE_FIRST_LAUNCH" since="12"/>
<field name="ACTION_PACKAGE_FULLY_REMOVED" since="14"/>
- <field name="ACTION_PACKAGE_INSTALL" deprecated="16"/>
+ <field name="ACTION_PACKAGE_INSTALL" deprecated="15"/>
<field name="ACTION_PACKAGE_NEEDS_VERIFICATION" since="14"/>
<field name="ACTION_PACKAGE_REMOVED"/>
<field name="ACTION_PACKAGE_REPLACED" since="3"/>
@@ -9862,16 +10053,19 @@
<field name="ACTION_TIMEZONE_CHANGED"/>
<field name="ACTION_TIME_CHANGED"/>
<field name="ACTION_TIME_TICK"/>
+ <field name="ACTION_TRANSLATE" since="29"/>
<field name="ACTION_UID_REMOVED"/>
- <field name="ACTION_UMS_CONNECTED" deprecated="16"/>
- <field name="ACTION_UMS_DISCONNECTED" deprecated="16"/>
- <field name="ACTION_UNINSTALL_PACKAGE" since="14"/>
+ <field name="ACTION_UMS_CONNECTED" deprecated="15"/>
+ <field name="ACTION_UMS_DISCONNECTED" deprecated="15"/>
+ <field name="ACTION_UNINSTALL_PACKAGE" since="14" deprecated="29"/>
<field name="ACTION_USER_BACKGROUND" since="17"/>
<field name="ACTION_USER_FOREGROUND" since="17"/>
<field name="ACTION_USER_INITIALIZE" since="17"/>
<field name="ACTION_USER_PRESENT" since="3"/>
<field name="ACTION_USER_UNLOCKED" since="24"/>
<field name="ACTION_VIEW"/>
+ <field name="ACTION_VIEW_LOCUS" since="29"/>
+ <field name="ACTION_VIEW_PERMISSION_USAGE" since="29"/>
<field name="ACTION_VOICE_COMMAND"/>
<field name="ACTION_WALLPAPER_CHANGED" deprecated="16"/>
<field name="ACTION_WEB_SEARCH"/>
@@ -9881,6 +10075,7 @@
<field name="CATEGORY_APP_CALENDAR" since="15"/>
<field name="CATEGORY_APP_CONTACTS" since="15"/>
<field name="CATEGORY_APP_EMAIL" since="15"/>
+ <field name="CATEGORY_APP_FILES" since="29"/>
<field name="CATEGORY_APP_GALLERY" since="15"/>
<field name="CATEGORY_APP_MAPS" since="15"/>
<field name="CATEGORY_APP_MARKET" since="11"/>
@@ -9905,6 +10100,7 @@
<field name="CATEGORY_OPENABLE"/>
<field name="CATEGORY_PREFERENCE"/>
<field name="CATEGORY_SAMPLE_CODE"/>
+ <field name="CATEGORY_SECONDARY_HOME" since="29"/>
<field name="CATEGORY_SELECTED_ALTERNATIVE"/>
<field name="CATEGORY_TAB"/>
<field name="CATEGORY_TEST"/>
@@ -9922,10 +10118,11 @@
<field name="EXTRA_ASSIST_INPUT_HINT_KEYBOARD" since="21"/>
<field name="EXTRA_ASSIST_PACKAGE" since="18"/>
<field name="EXTRA_ASSIST_UID" since="23"/>
+ <field name="EXTRA_AUTO_LAUNCH_SINGLE_CHOICE" since="29"/>
<field name="EXTRA_BCC"/>
<field name="EXTRA_BUG_REPORT" since="14"/>
<field name="EXTRA_CC"/>
- <field name="EXTRA_CHANGED_COMPONENT_NAME" since="5" deprecated="16"/>
+ <field name="EXTRA_CHANGED_COMPONENT_NAME" since="5" deprecated="15"/>
<field name="EXTRA_CHANGED_COMPONENT_NAME_LIST" since="7"/>
<field name="EXTRA_CHANGED_PACKAGE_LIST" since="8"/>
<field name="EXTRA_CHANGED_UID_LIST" since="8"/>
@@ -9935,6 +10132,7 @@
<field name="EXTRA_CHOSEN_COMPONENT_INTENT_SENDER" since="22"/>
<field name="EXTRA_COMPONENT_NAME" since="26"/>
<field name="EXTRA_CONTENT_ANNOTATIONS" since="26"/>
+ <field name="EXTRA_CONTENT_QUERY" since="29"/>
<field name="EXTRA_DATA_REMOVED" since="3"/>
<field name="EXTRA_DOCK_STATE" since="5"/>
<field name="EXTRA_DOCK_STATE_CAR" since="5"/>
@@ -9943,6 +10141,7 @@
<field name="EXTRA_DOCK_STATE_LE_DESK" since="11"/>
<field name="EXTRA_DOCK_STATE_UNDOCKED" since="5"/>
<field name="EXTRA_DONT_KILL_APP"/>
+ <field name="EXTRA_DURATION_MILLIS" since="29"/>
<field name="EXTRA_EMAIL"/>
<field name="EXTRA_EXCLUDE_COMPONENTS" since="24"/>
<field name="EXTRA_FROM_STORAGE" since="26"/>
@@ -9953,6 +10152,7 @@
<field name="EXTRA_INTENT"/>
<field name="EXTRA_KEY_EVENT"/>
<field name="EXTRA_LOCAL_ONLY" since="11"/>
+ <field name="EXTRA_LOCUS_ID" since="29"/>
<field name="EXTRA_MIME_TYPES" since="19"/>
<field name="EXTRA_NOT_UNKNOWN_SOURCE" since="14"/>
<field name="EXTRA_ORIGINATING_URI" since="17"/>
@@ -9974,6 +10174,7 @@
<field name="EXTRA_RETURN_RESULT" since="14"/>
<field name="EXTRA_SHORTCUT_ICON" deprecated="26"/>
<field name="EXTRA_SHORTCUT_ICON_RESOURCE" deprecated="26"/>
+ <field name="EXTRA_SHORTCUT_ID" since="29"/>
<field name="EXTRA_SHORTCUT_INTENT" deprecated="26"/>
<field name="EXTRA_SHORTCUT_NAME" deprecated="26"/>
<field name="EXTRA_SHUTDOWN_USERSPACE_ONLY" since="19"/>
@@ -9991,6 +10192,7 @@
<field name="FILL_IN_CLIP_DATA" since="16"/>
<field name="FILL_IN_COMPONENT"/>
<field name="FILL_IN_DATA"/>
+ <field name="FILL_IN_IDENTIFIER" since="29"/>
<field name="FILL_IN_PACKAGE" since="4"/>
<field name="FILL_IN_SELECTOR" since="15"/>
<field name="FILL_IN_SOURCE_BOUNDS" since="7"/>
@@ -9998,7 +10200,6 @@
<field name="FLAG_ACTIVITY_CLEAR_TASK" since="11"/>
<field name="FLAG_ACTIVITY_CLEAR_TOP"/>
<field name="FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET" since="3" deprecated="21"/>
- <field name="FLAG_ACTIVITY_CLOSE_SYSTEM_DIALOGS" since="16" removed="17"/>
<field name="FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS"/>
<field name="FLAG_ACTIVITY_FORWARD_RESULT"/>
<field name="FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY"/>
@@ -10017,6 +10218,7 @@
<field name="FLAG_ACTIVITY_SINGLE_TOP"/>
<field name="FLAG_ACTIVITY_TASK_ON_HOME" since="11"/>
<field name="FLAG_DEBUG_LOG_RESOLUTION"/>
+ <field name="FLAG_DIRECT_BOOT_AUTO" since="29"/>
<field name="FLAG_EXCLUDE_STOPPED_PACKAGES" since="12"/>
<field name="FLAG_FROM_BACKGROUND"/>
<field name="FLAG_GRANT_PERSISTABLE_URI_PERMISSION" since="19"/>
@@ -10135,8 +10337,6 @@
<class name="android/content/IntentSender" since="4">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/IBinder;)V" since="29"/>
<method name="getCreatorPackage()Ljava/lang/String;" since="17"/>
<method name="getCreatorUid()I" since="17"/>
<method name="getCreatorUserHandle()Landroid/os/UserHandle;" since="17"/>
@@ -10159,48 +10359,55 @@
</class>
<class name="android/content/Loader" since="11" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="abandon()V"/>
- <method name="cancelLoad()Z" since="16"/>
- <method name="commitContentChanged()V" since="18"/>
- <method name="dataToString(Ljava/lang/Object;)Ljava/lang/String;"/>
- <method name="deliverCancellation()V" since="16"/>
- <method name="deliverResult(Ljava/lang/Object;)V"/>
- <method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
- <method name="forceLoad()V"/>
- <method name="getContext()Landroid/content/Context;"/>
- <method name="getId()I"/>
- <method name="isAbandoned()Z"/>
- <method name="isReset()Z"/>
- <method name="isStarted()Z"/>
- <method name="onAbandon()V"/>
- <method name="onCancelLoad()Z" since="16"/>
- <method name="onContentChanged()V"/>
- <method name="onForceLoad()V"/>
- <method name="onReset()V"/>
- <method name="onStartLoading()V"/>
- <method name="onStopLoading()V"/>
- <method name="registerListener(ILandroid/content/Loader$OnLoadCompleteListener;)V"/>
- <method name="registerOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V" since="16"/>
- <method name="reset()V"/>
- <method name="rollbackContentChanged()V" since="18"/>
- <method name="startLoading()V"/>
- <method name="stopLoading()V"/>
- <method name="takeContentChanged()Z"/>
- <method name="unregisterListener(Landroid/content/Loader$OnLoadCompleteListener;)V"/>
- <method name="unregisterOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V" since="16"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="abandon()V" deprecated="29"/>
+ <method name="cancelLoad()Z" since="16" deprecated="29"/>
+ <method name="commitContentChanged()V" since="18" deprecated="29"/>
+ <method name="dataToString(Ljava/lang/Object;)Ljava/lang/String;" deprecated="29"/>
+ <method name="deliverCancellation()V" since="16" deprecated="29"/>
+ <method name="deliverResult(Ljava/lang/Object;)V" deprecated="29"/>
+ <method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29"/>
+ <method name="forceLoad()V" deprecated="29"/>
+ <method name="getContext()Landroid/content/Context;" deprecated="29"/>
+ <method name="getId()I" deprecated="29"/>
+ <method name="isAbandoned()Z" deprecated="29"/>
+ <method name="isReset()Z" deprecated="29"/>
+ <method name="isStarted()Z" deprecated="29"/>
+ <method name="onAbandon()V" deprecated="29"/>
+ <method name="onCancelLoad()Z" since="16" deprecated="29"/>
+ <method name="onContentChanged()V" deprecated="29"/>
+ <method name="onForceLoad()V" deprecated="29"/>
+ <method name="onReset()V" deprecated="29"/>
+ <method name="onStartLoading()V" deprecated="29"/>
+ <method name="onStopLoading()V" deprecated="29"/>
+ <method name="registerListener(ILandroid/content/Loader$OnLoadCompleteListener;)V" deprecated="29"/>
+ <method name="registerOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V" since="16" deprecated="29"/>
+ <method name="reset()V" deprecated="29"/>
+ <method name="rollbackContentChanged()V" since="18" deprecated="29"/>
+ <method name="startLoading()V" deprecated="29"/>
+ <method name="stopLoading()V" deprecated="29"/>
+ <method name="takeContentChanged()Z" deprecated="29"/>
+ <method name="unregisterListener(Landroid/content/Loader$OnLoadCompleteListener;)V" deprecated="29"/>
+ <method name="unregisterOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V" since="16" deprecated="29"/>
</class>
<class name="android/content/Loader$ForceLoadContentObserver" since="11" deprecated="28">
<extends name="android/database/ContentObserver"/>
- <method name="&lt;init>(Landroid/content/Loader;)V"/>
+ <method name="&lt;init>(Landroid/content/Loader;)V" deprecated="29"/>
</class>
<class name="android/content/Loader$OnLoadCanceledListener" since="16" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="onLoadCanceled(Landroid/content/Loader;)V"/>
+ <method name="onLoadCanceled(Landroid/content/Loader;)V" deprecated="29"/>
</class>
<class name="android/content/Loader$OnLoadCompleteListener" since="11" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="onLoadComplete(Landroid/content/Loader;Ljava/lang/Object;)V"/>
+ <method name="onLoadComplete(Landroid/content/Loader;Ljava/lang/Object;)V" deprecated="29"/>
+ </class>
+ <class name="android/content/LocusId" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="getId()Ljava/lang/String;"/>
+ <field name="CREATOR"/>
</class>
<class name="android/content/MutableContextWrapper" since="1">
<extends name="android/content/ContextWrapper"/>
@@ -10229,7 +10436,6 @@
</class>
<class name="android/content/QuickViewConstants" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="FEATURE_DELETE" since="28"/>
<field name="FEATURE_DOWNLOAD"/>
<field name="FEATURE_EDIT"/>
@@ -10287,7 +10493,6 @@
</class>
<class name="android/content/RestrictionsManager" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="convertRestrictionsToBundle(Ljava/util/List;)Landroid/os/Bundle;" since="23"/>
<method name="createLocalApprovalIntent()Landroid/content/Intent;"/>
<method name="getApplicationRestrictions()Landroid/os/Bundle;"/>
@@ -10389,15 +10594,12 @@
</class>
<class name="android/content/SyncContext" since="5">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getSyncContextBinder()Landroid/os/IBinder;"/>
<method name="onFinished(Landroid/content/SyncResult;)V"/>
</class>
<class name="android/content/SyncInfo" since="8">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable" since="11"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/SyncInfo;)V" since="29"/>
<field name="account"/>
<field name="authority"/>
<field name="startTime"/>
@@ -10405,8 +10607,6 @@
<class name="android/content/SyncRequest" since="19">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/content/SyncRequest$Builder" since="19">
@@ -10478,8 +10678,6 @@
<class name="android/content/UriPermission" since="19">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getPersistedTime()J"/>
<method name="getUri()Landroid/net/Uri;"/>
<method name="isReadPermission()Z"/>
@@ -10593,6 +10791,8 @@
<method name="&lt;init>(Landroid/content/pm/ApplicationInfo;)V"/>
<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
<method name="getCategoryTitle(Landroid/content/Context;I)Ljava/lang/CharSequence;" since="26"/>
+ <method name="isProfileableByShell()Z" since="29"/>
+ <method name="isResourceOverlay()Z" since="29"/>
<method name="isVirtualPreload()Z" since="27"/>
<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
<field name="CATEGORY_AUDIO" since="26"/>
@@ -10716,7 +10916,6 @@
</class>
<class name="android/content/pm/CrossProfileApps" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getProfileSwitchingIconDrawable(Landroid/os/UserHandle;)Landroid/graphics/drawable/Drawable;"/>
<method name="getProfileSwitchingLabel(Landroid/os/UserHandle;)Ljava/lang/CharSequence;"/>
<method name="getTargetUserProfiles()Ljava/util/List;"/>
@@ -10788,8 +10987,6 @@
</class>
<class name="android/content/pm/LauncherActivityInfo" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="getApplicationInfo()Landroid/content/pm/ApplicationInfo;"/>
<method name="getBadgedIcon(I)Landroid/graphics/drawable/Drawable;"/>
<method name="getComponentName()Landroid/content/ComponentName;"/>
@@ -10801,9 +10998,8 @@
</class>
<class name="android/content/pm/LauncherApps" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="getActivityList(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;"/>
+ <method name="getAllPackageInstallerSessions()Ljava/util/List;" since="29"/>
<method name="getApplicationInfo(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ApplicationInfo;" since="26"/>
<method name="getPinItemRequest(Landroid/content/Intent;)Landroid/content/pm/LauncherApps$PinItemRequest;" since="26"/>
<method name="getProfiles()Ljava/util/List;" since="26"/>
@@ -10819,12 +11015,16 @@
<method name="pinShortcuts(Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;)V" since="25"/>
<method name="registerCallback(Landroid/content/pm/LauncherApps$Callback;)V"/>
<method name="registerCallback(Landroid/content/pm/LauncherApps$Callback;Landroid/os/Handler;)V"/>
+ <method name="registerPackageInstallerSessionCallback(Ljava/util/concurrent/Executor;Landroid/content/pm/PackageInstaller$SessionCallback;)V" since="29"/>
<method name="resolveActivity(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/pm/LauncherActivityInfo;"/>
+ <method name="shouldHideFromSuggestions(Ljava/lang/String;Landroid/os/UserHandle;)Z" since="29"/>
<method name="startAppDetailsActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;Landroid/graphics/Rect;Landroid/os/Bundle;)V"/>
<method name="startMainActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;Landroid/graphics/Rect;Landroid/os/Bundle;)V"/>
+ <method name="startPackageInstallerSessionDetailsActivity(Landroid/content/pm/PackageInstaller$SessionInfo;Landroid/graphics/Rect;Landroid/os/Bundle;)V" since="29"/>
<method name="startShortcut(Landroid/content/pm/ShortcutInfo;Landroid/graphics/Rect;Landroid/os/Bundle;)V" since="25"/>
<method name="startShortcut(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;Landroid/os/Bundle;Landroid/os/UserHandle;)V" since="25"/>
<method name="unregisterCallback(Landroid/content/pm/LauncherApps$Callback;)V"/>
+ <method name="unregisterPackageInstallerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;)V" since="29"/>
<field name="ACTION_CONFIRM_PIN_APPWIDGET" since="26"/>
<field name="ACTION_CONFIRM_PIN_SHORTCUT" since="26"/>
<field name="EXTRA_PIN_ITEM_REQUEST" since="26"/>
@@ -10845,8 +11045,6 @@
<class name="android/content/pm/LauncherApps$PinItemRequest" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="accept()Z"/>
<method name="accept(Landroid/os/Bundle;)Z"/>
<method name="getAppWidgetProviderInfo(Landroid/content/Context;)Landroid/appwidget/AppWidgetProviderInfo;"/>
@@ -10872,6 +11070,14 @@
<field name="FLAG_MATCH_PINNED"/>
<field name="FLAG_MATCH_PINNED_BY_ANY_LAUNCHER" since="28"/>
</class>
+ <class name="android/content/pm/ModuleInfo" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getName()Ljava/lang/CharSequence;"/>
+ <method name="getPackageName()Ljava/lang/String;"/>
+ <method name="isHidden()Z"/>
+ <field name="CREATOR"/>
+ </class>
<class name="android/content/pm/PackageInfo" since="1">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
@@ -10893,6 +11099,7 @@
<field name="gids"/>
<field name="installLocation" since="21"/>
<field name="instrumentation"/>
+ <field name="isApex" since="29"/>
<field name="lastUpdateTime" since="9"/>
<field name="packageName"/>
<field name="permissions"/>
@@ -10913,12 +11120,15 @@
</class>
<class name="android/content/pm/PackageInstaller" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="abandonSession(I)V"/>
<method name="createSession(Landroid/content/pm/PackageInstaller$SessionParams;)I"/>
+ <method name="getActiveStagedSession()Landroid/content/pm/PackageInstaller$SessionInfo;" since="29" deprecated="30"/>
+ <method name="getActiveStagedSessions()Ljava/util/List;" since="30"/>
<method name="getAllSessions()Ljava/util/List;"/>
<method name="getMySessions()Ljava/util/List;"/>
<method name="getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;"/>
+ <method name="getStagedSessions()Ljava/util/List;" since="29"/>
+ <method name="installExistingPackage(Ljava/lang/String;ILandroid/content/IntentSender;)V" since="29"/>
<method name="openSession(I)Landroid/content/pm/PackageInstaller$Session;"/>
<method name="registerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;)V"/>
<method name="registerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;Landroid/os/Handler;)V"/>
@@ -10929,6 +11139,7 @@
<method name="updateSessionAppLabel(ILjava/lang/CharSequence;)V"/>
<field name="ACTION_SESSION_COMMITTED" since="26"/>
<field name="ACTION_SESSION_DETAILS"/>
+ <field name="ACTION_SESSION_UPDATED" since="29"/>
<field name="EXTRA_OTHER_PACKAGE_NAME"/>
<field name="EXTRA_PACKAGE_NAME"/>
<field name="EXTRA_SESSION" since="26"/>
@@ -10949,13 +11160,18 @@
<class name="android/content/pm/PackageInstaller$Session" since="21">
<extends name="java/lang/Object"/>
<implements name="java/io/Closeable"/>
- <method name="&lt;init>()V"/>
<method name="abandon()V"/>
+ <method name="addChildSessionId(I)V" since="29"/>
<method name="commit(Landroid/content/IntentSender;)V"/>
<method name="fsync(Ljava/io/OutputStream;)V"/>
+ <method name="getChildSessionIds()[I" since="29"/>
<method name="getNames()[Ljava/lang/String;"/>
+ <method name="getParentSessionId()I" since="29"/>
+ <method name="isMultiPackage()Z" since="29"/>
+ <method name="isStaged()Z" since="29"/>
<method name="openRead(Ljava/lang/String;)Ljava/io/InputStream;"/>
<method name="openWrite(Ljava/lang/String;JJ)Ljava/io/OutputStream;"/>
+ <method name="removeChildSessionId(I)V" since="29"/>
<method name="removeSplit(Ljava/lang/String;)V" since="24"/>
<method name="setStagingProgress(F)V"/>
<method name="transfer(Ljava/lang/String;)V" since="27"/>
@@ -10972,24 +11188,42 @@
<class name="android/content/pm/PackageInstaller$SessionInfo" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="createDetailsIntent()Landroid/content/Intent;"/>
<method name="getAppIcon()Landroid/graphics/Bitmap;"/>
<method name="getAppLabel()Ljava/lang/CharSequence;"/>
<method name="getAppPackageName()Ljava/lang/String;"/>
+ <method name="getChildSessionIds()[I" since="29"/>
<method name="getInstallLocation()I" since="27"/>
<method name="getInstallReason()I" since="26"/>
<method name="getInstallerPackageName()Ljava/lang/String;"/>
<method name="getMode()I" since="27"/>
<method name="getOriginatingUid()I" since="27"/>
<method name="getOriginatingUri()Landroid/net/Uri;" since="27"/>
+ <method name="getParentSessionId()I" since="29"/>
<method name="getProgress()F"/>
<method name="getReferrerUri()Landroid/net/Uri;" since="27"/>
<method name="getSessionId()I"/>
<method name="getSize()J" since="27"/>
+ <method name="getStagedSessionErrorCode()I" since="29"/>
+ <method name="getStagedSessionErrorMessage()Ljava/lang/String;" since="29"/>
+ <method name="getUpdatedMillis()J" since="29"/>
+ <method name="getUser()Landroid/os/UserHandle;" since="29"/>
+ <method name="hasParentSessionId()Z" since="30"/>
<method name="isActive()Z"/>
+ <method name="isCommitted()Z" since="29"/>
+ <method name="isMultiPackage()Z" since="29"/>
<method name="isSealed()Z" since="26"/>
+ <method name="isStaged()Z" since="29"/>
+ <method name="isStagedSessionActive()Z" since="30"/>
+ <method name="isStagedSessionApplied()Z" since="29"/>
+ <method name="isStagedSessionFailed()Z" since="29"/>
+ <method name="isStagedSessionReady()Z" since="29"/>
<field name="CREATOR"/>
+ <field name="INVALID_ID" since="29"/>
+ <field name="STAGED_SESSION_ACTIVATION_FAILED" since="29"/>
+ <field name="STAGED_SESSION_NO_ERROR" since="29"/>
+ <field name="STAGED_SESSION_UNKNOWN" since="29"/>
+ <field name="STAGED_SESSION_VERIFICATION_FAILED" since="29"/>
</class>
<class name="android/content/pm/PackageInstaller$SessionParams" since="21">
<extends name="java/lang/Object"/>
@@ -11000,13 +11234,16 @@
<method name="setAppPackageName(Ljava/lang/String;)V"/>
<method name="setInstallLocation(I)V"/>
<method name="setInstallReason(I)V" since="26"/>
+ <method name="setMultiPackage()V" since="29"/>
<method name="setOriginatingUid(I)V" since="24"/>
<method name="setOriginatingUri(Landroid/net/Uri;)V"/>
<method name="setReferrerUri(Landroid/net/Uri;)V"/>
<method name="setSize(J)V"/>
+ <method name="setWhitelistedRestrictedPermissions(Ljava/util/Set;)V" since="29"/>
<field name="CREATOR"/>
<field name="MODE_FULL_INSTALL"/>
<field name="MODE_INHERIT_EXISTING"/>
+ <field name="RESTRICTED_PERMISSIONS_ALL" since="29"/>
</class>
<class name="android/content/pm/PackageItemInfo" since="1">
<extends name="java/lang/Object"/>
@@ -11039,18 +11276,19 @@
</class>
<class name="android/content/pm/PackageManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="addPackageToPreferred(Ljava/lang/String;)V" deprecated="16"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="addPackageToPreferred(Ljava/lang/String;)V" deprecated="15"/>
<method name="addPermission(Landroid/content/pm/PermissionInfo;)Z"/>
<method name="addPermissionAsync(Landroid/content/pm/PermissionInfo;)Z" since="8"/>
- <method name="addPreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;)V" deprecated="16"/>
+ <method name="addPreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;)V" deprecated="15"/>
+ <method name="addWhitelistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;I)Z" since="29"/>
<method name="canRequestPackageInstalls()Z" since="26"/>
<method name="canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String;" since="8"/>
<method name="checkPermission(Ljava/lang/String;Ljava/lang/String;)I"/>
<method name="checkSignatures(II)I" since="5"/>
<method name="checkSignatures(Ljava/lang/String;Ljava/lang/String;)I"/>
<method name="clearInstantAppCookie()V" since="26"/>
- <method name="clearPackagePreferredActivities(Ljava/lang/String;)V"/>
+ <method name="clearPackagePreferredActivities(Ljava/lang/String;)V" deprecated="29"/>
<method name="currentToCanonicalPackageNames([Ljava/lang/String;)[Ljava/lang/String;" since="8"/>
<method name="extendVerificationTimeout(IIJ)V" since="17"/>
<method name="getActivityBanner(Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;" since="20"/>
@@ -11075,6 +11313,7 @@
<method name="getDefaultActivityIcon()Landroid/graphics/drawable/Drawable;"/>
<method name="getDrawable(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;"/>
<method name="getInstalledApplications(I)Ljava/util/List;"/>
+ <method name="getInstalledModules(I)Ljava/util/List;" since="29"/>
<method name="getInstalledPackages(I)Ljava/util/List;"/>
<method name="getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String;" since="5"/>
<method name="getInstantAppCookie()[B" since="26"/>
@@ -11082,6 +11321,7 @@
<method name="getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo;"/>
<method name="getLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;" since="3"/>
<method name="getLeanbackLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;" since="21"/>
+ <method name="getModuleInfo(Ljava/lang/String;I)Landroid/content/pm/ModuleInfo;" since="29"/>
<method name="getNameForUid(I)Ljava/lang/String;"/>
<method name="getPackageArchiveInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;"/>
<method name="getPackageGids(Ljava/lang/String;)[I"/>
@@ -11094,8 +11334,8 @@
<method name="getPackagesHoldingPermissions([Ljava/lang/String;I)Ljava/util/List;" since="18"/>
<method name="getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo;"/>
<method name="getPermissionInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;"/>
- <method name="getPreferredActivities(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I"/>
- <method name="getPreferredPackages(I)Ljava/util/List;"/>
+ <method name="getPreferredActivities(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I" deprecated="29"/>
+ <method name="getPreferredPackages(I)Ljava/util/List;" deprecated="29"/>
<method name="getProviderInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ProviderInfo;" since="9"/>
<method name="getReceiverInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;"/>
<method name="getResourcesForActivity(Landroid/content/ComponentName;)Landroid/content/res/Resources;"/>
@@ -11104,12 +11344,14 @@
<method name="getServiceInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;"/>
<method name="getSharedLibraries(I)Ljava/util/List;" since="26"/>
<method name="getSuspendedPackageAppExtras()Landroid/os/Bundle;" since="28"/>
+ <method name="getSyntheticAppDetailsActivityEnabled(Ljava/lang/String;)Z" since="29"/>
<method name="getSystemAvailableFeatures()[Landroid/content/pm/FeatureInfo;" since="5"/>
<method name="getSystemSharedLibraryNames()[Ljava/lang/String;" since="3"/>
<method name="getText(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;"/>
<method name="getUserBadgedDrawableForDensity(Landroid/graphics/drawable/Drawable;Landroid/os/UserHandle;Landroid/graphics/Rect;I)Landroid/graphics/drawable/Drawable;" since="21"/>
<method name="getUserBadgedIcon(Landroid/graphics/drawable/Drawable;Landroid/os/UserHandle;)Landroid/graphics/drawable/Drawable;" since="21"/>
<method name="getUserBadgedLabel(Ljava/lang/CharSequence;Landroid/os/UserHandle;)Ljava/lang/CharSequence;" since="21"/>
+ <method name="getWhitelistedRestrictedPermissions(Ljava/lang/String;I)Ljava/util/Set;" since="29"/>
<method name="getXml(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/content/res/XmlResourceParser;"/>
<method name="hasSigningCertificate(I[BI)Z" since="28"/>
<method name="hasSigningCertificate(Ljava/lang/String;[BI)Z" since="28"/>
@@ -11117,9 +11359,11 @@
<method name="hasSystemFeature(Ljava/lang/String;I)Z" since="24"/>
<method name="installPackage(Landroid/net/Uri;)V" removed="4"/>
<method name="installPackage(Landroid/net/Uri;Landroid/content/pm/IPackageInstallObserver;I)V" removed="4"/>
+ <method name="isDeviceUpgrading()Z" since="29"/>
<method name="isInstantApp()Z" since="26"/>
<method name="isInstantApp(Ljava/lang/String;)Z" since="26"/>
<method name="isPackageSuspended()Z" since="28"/>
+ <method name="isPackageSuspended(Ljava/lang/String;)Z" since="29"/>
<method name="isPermissionRevokedByPolicy(Ljava/lang/String;Ljava/lang/String;)Z" since="23"/>
<method name="isSafeMode()Z" since="3"/>
<method name="queryBroadcastReceivers(Landroid/content/Intent;I)Ljava/util/List;"/>
@@ -11130,8 +11374,9 @@
<method name="queryIntentContentProviders(Landroid/content/Intent;I)Ljava/util/List;" since="19"/>
<method name="queryIntentServices(Landroid/content/Intent;I)Ljava/util/List;"/>
<method name="queryPermissionsByGroup(Ljava/lang/String;I)Ljava/util/List;"/>
- <method name="removePackageFromPreferred(Ljava/lang/String;)V" deprecated="16"/>
+ <method name="removePackageFromPreferred(Ljava/lang/String;)V" deprecated="15"/>
<method name="removePermission(Ljava/lang/String;)V"/>
+ <method name="removeWhitelistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;I)Z" since="29"/>
<method name="resolveActivity(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;"/>
<method name="resolveContentProvider(Ljava/lang/String;I)Landroid/content/pm/ProviderInfo;"/>
<method name="resolveService(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;"/>
@@ -11172,13 +11417,14 @@
<field name="FEATURE_CAMERA_FLASH" since="7"/>
<field name="FEATURE_CAMERA_FRONT" since="9"/>
<field name="FEATURE_CAMERA_LEVEL_FULL" since="21"/>
- <field name="FEATURE_CANT_SAVE_STATE" since="29"/>
+ <field name="FEATURE_CANT_SAVE_STATE" since="28"/>
<field name="FEATURE_COMPANION_DEVICE_SETUP" since="26"/>
<field name="FEATURE_CONNECTION_SERVICE" since="21"/>
<field name="FEATURE_CONSUMER_IR" since="19"/>
<field name="FEATURE_DEVICE_ADMIN" since="19"/>
<field name="FEATURE_EMBEDDED" since="26"/>
<field name="FEATURE_ETHERNET" since="24"/>
+ <field name="FEATURE_FACE" since="29"/>
<field name="FEATURE_FAKETOUCH" since="11"/>
<field name="FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT" since="13"/>
<field name="FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND" since="13"/>
@@ -11188,6 +11434,8 @@
<field name="FEATURE_HIFI_SENSORS" since="23"/>
<field name="FEATURE_HOME_SCREEN" since="18"/>
<field name="FEATURE_INPUT_METHODS" since="18"/>
+ <field name="FEATURE_IPSEC_TUNNELS" since="29"/>
+ <field name="FEATURE_IRIS" since="29"/>
<field name="FEATURE_LEANBACK" since="21"/>
<field name="FEATURE_LEANBACK_ONLY" since="26"/>
<field name="FEATURE_LIVE_TV" since="21"/>
@@ -11199,8 +11447,11 @@
<field name="FEATURE_MICROPHONE" since="8"/>
<field name="FEATURE_MIDI" since="23"/>
<field name="FEATURE_NFC" since="9"/>
+ <field name="FEATURE_NFC_BEAM" since="29"/>
<field name="FEATURE_NFC_HOST_CARD_EMULATION" since="19"/>
<field name="FEATURE_NFC_HOST_CARD_EMULATION_NFCF" since="24"/>
+ <field name="FEATURE_NFC_OFF_HOST_CARD_EMULATION_ESE" since="29"/>
+ <field name="FEATURE_NFC_OFF_HOST_CARD_EMULATION_UICC" since="29"/>
<field name="FEATURE_OPENGLES_EXTENSION_PACK" since="21"/>
<field name="FEATURE_PC" since="27"/>
<field name="FEATURE_PICTURE_IN_PICTURE" since="24"/>
@@ -11210,6 +11461,7 @@
<field name="FEATURE_SCREEN_LANDSCAPE" since="13"/>
<field name="FEATURE_SCREEN_PORTRAIT" since="13"/>
<field name="FEATURE_SECURELY_REMOVES_USERS" since="21"/>
+ <field name="FEATURE_SECURE_LOCK_SCREEN" since="29"/>
<field name="FEATURE_SENSOR_ACCELEROMETER" since="8"/>
<field name="FEATURE_SENSOR_AMBIENT_TEMPERATURE" since="21"/>
<field name="FEATURE_SENSOR_BAROMETER" since="9"/>
@@ -11222,6 +11474,9 @@
<field name="FEATURE_SENSOR_RELATIVE_HUMIDITY" since="21"/>
<field name="FEATURE_SENSOR_STEP_COUNTER" since="19"/>
<field name="FEATURE_SENSOR_STEP_DETECTOR" since="19"/>
+ <field name="FEATURE_SE_OMAPI_ESE" since="30"/>
+ <field name="FEATURE_SE_OMAPI_SD" since="30"/>
+ <field name="FEATURE_SE_OMAPI_UICC" since="30"/>
<field name="FEATURE_SIP" since="9"/>
<field name="FEATURE_SIP_VOIP" since="9"/>
<field name="FEATURE_STRONGBOX_KEYSTORE" since="28"/>
@@ -11229,6 +11484,7 @@
<field name="FEATURE_TELEPHONY_CDMA" since="7"/>
<field name="FEATURE_TELEPHONY_EUICC" since="28"/>
<field name="FEATURE_TELEPHONY_GSM" since="7"/>
+ <field name="FEATURE_TELEPHONY_IMS" since="29"/>
<field name="FEATURE_TELEPHONY_MBMS" since="28"/>
<field name="FEATURE_TELEVISION" since="16" deprecated="21"/>
<field name="FEATURE_TOUCHSCREEN" since="8"/>
@@ -11241,6 +11497,7 @@
<field name="FEATURE_VR_HEADTRACKING" since="26"/>
<field name="FEATURE_VR_MODE" since="24" deprecated="28"/>
<field name="FEATURE_VR_MODE_HIGH_PERFORMANCE" since="24"/>
+ <field name="FEATURE_VULKAN_DEQP_LEVEL" since="30"/>
<field name="FEATURE_VULKAN_HARDWARE_COMPUTE" since="26"/>
<field name="FEATURE_VULKAN_HARDWARE_LEVEL" since="24"/>
<field name="FEATURE_VULKAN_HARDWARE_VERSION" since="24"/>
@@ -11251,6 +11508,9 @@
<field name="FEATURE_WIFI_DIRECT" since="14"/>
<field name="FEATURE_WIFI_PASSPOINT" since="27"/>
<field name="FEATURE_WIFI_RTT" since="28"/>
+ <field name="FLAG_PERMISSION_WHITELIST_INSTALLER" since="29"/>
+ <field name="FLAG_PERMISSION_WHITELIST_SYSTEM" since="29"/>
+ <field name="FLAG_PERMISSION_WHITELIST_UPGRADE" since="29"/>
<field name="FORWARD_LOCK_PACKAGE" removed="4"/>
<field name="GET_ACTIVITIES"/>
<field name="GET_CONFIGURATIONS" since="3"/>
@@ -11300,7 +11560,9 @@
<field name="INSTALL_REASON_USER" since="26"/>
<field name="INSTALL_SUCCEEDED" removed="4"/>
<field name="MATCH_ALL" since="23"/>
+ <field name="MATCH_APEX" since="29"/>
<field name="MATCH_DEFAULT_ONLY"/>
+ <field name="MATCH_DIRECT_BOOT_AUTO" since="29"/>
<field name="MATCH_DIRECT_BOOT_AWARE" since="24"/>
<field name="MATCH_DIRECT_BOOT_UNAWARE" since="24"/>
<field name="MATCH_DISABLED_COMPONENTS" since="24"/>
@@ -11331,19 +11593,19 @@
<class name="android/content/pm/PackageStats" since="1" deprecated="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>(Landroid/content/pm/PackageStats;)V"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V"/>
- <method name="&lt;init>(Ljava/lang/String;)V"/>
- <field name="CREATOR"/>
- <field name="cacheSize"/>
- <field name="codeSize"/>
- <field name="dataSize"/>
- <field name="externalCacheSize" since="11"/>
- <field name="externalCodeSize" since="14"/>
- <field name="externalDataSize" since="11"/>
- <field name="externalMediaSize" since="11"/>
- <field name="externalObbSize" since="11"/>
- <field name="packageName"/>
+ <method name="&lt;init>(Landroid/content/pm/PackageStats;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/os/Parcel;)V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+ <field name="CREATOR" deprecated="29"/>
+ <field name="cacheSize" deprecated="29"/>
+ <field name="codeSize" deprecated="29"/>
+ <field name="dataSize" deprecated="29"/>
+ <field name="externalCacheSize" since="11" deprecated="29"/>
+ <field name="externalCodeSize" since="14" deprecated="29"/>
+ <field name="externalDataSize" since="11" deprecated="29"/>
+ <field name="externalMediaSize" since="11" deprecated="29"/>
+ <field name="externalObbSize" since="11" deprecated="29"/>
+ <field name="packageName" deprecated="29"/>
</class>
<class name="android/content/pm/PathPermission" since="4">
<extends name="android/os/PatternMatcher"/>
@@ -11356,8 +11618,8 @@
<class name="android/content/pm/PermissionGroupInfo" since="1">
<extends name="android/content/pm/PackageItemInfo"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Landroid/content/pm/PermissionGroupInfo;)V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/pm/PermissionGroupInfo;)V" deprecated="29"/>
<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
<field name="CREATOR"/>
<field name="FLAG_PERSONAL_INFO" since="17"/>
@@ -11369,14 +11631,17 @@
<class name="android/content/pm/PermissionInfo" since="1">
<extends name="android/content/pm/PackageItemInfo"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Landroid/content/pm/PermissionInfo;)V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/pm/PermissionInfo;)V" deprecated="29"/>
<method name="getProtection()I" since="28"/>
<method name="getProtectionFlags()I" since="28"/>
<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
<field name="CREATOR"/>
<field name="FLAG_COSTS_MONEY" since="17"/>
+ <field name="FLAG_HARD_RESTRICTED" since="29"/>
+ <field name="FLAG_IMMUTABLY_RESTRICTED" since="29"/>
<field name="FLAG_INSTALLED" since="23"/>
+ <field name="FLAG_SOFT_RESTRICTED" since="29"/>
<field name="PROTECTION_DANGEROUS"/>
<field name="PROTECTION_FLAG_APPOP" since="21"/>
<field name="PROTECTION_FLAG_DEVELOPMENT" since="16"/>
@@ -11410,9 +11675,10 @@
<field name="FLAG_SINGLE_USER" since="17"/>
<field name="authority"/>
<field name="flags" since="17"/>
+ <field name="forceUriPermissions" since="29"/>
<field name="grantUriPermissions"/>
<field name="initOrder"/>
- <field name="isSyncable" deprecated="16"/>
+ <field name="isSyncable" deprecated="15"/>
<field name="multiprocess"/>
<field name="pathPermissions" since="4"/>
<field name="readPermission"/>
@@ -11456,19 +11722,27 @@
<method name="&lt;init>()V"/>
<method name="&lt;init>(Landroid/content/pm/ServiceInfo;)V"/>
<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" since="5"/>
+ <method name="getForegroundServiceType()I" since="29"/>
<field name="CREATOR"/>
<field name="FLAG_EXTERNAL_SERVICE" since="24"/>
<field name="FLAG_ISOLATED_PROCESS" since="16"/>
<field name="FLAG_SINGLE_USER" since="17"/>
<field name="FLAG_STOP_WITH_TASK" since="14"/>
+ <field name="FLAG_USE_APP_ZYGOTE" since="29"/>
+ <field name="FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE" since="29"/>
+ <field name="FOREGROUND_SERVICE_TYPE_DATA_SYNC" since="29"/>
+ <field name="FOREGROUND_SERVICE_TYPE_LOCATION" since="29"/>
+ <field name="FOREGROUND_SERVICE_TYPE_MANIFEST" since="29"/>
+ <field name="FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK" since="29"/>
+ <field name="FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION" since="29"/>
+ <field name="FOREGROUND_SERVICE_TYPE_NONE" since="29"/>
+ <field name="FOREGROUND_SERVICE_TYPE_PHONE_CALL" since="29"/>
<field name="flags" since="14"/>
<field name="permission"/>
</class>
<class name="android/content/pm/SharedLibraryInfo" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getDeclaringPackage()Landroid/content/pm/VersionedPackage;"/>
<method name="getDependentPackages()Ljava/util/List;"/>
<method name="getLongVersion()J" since="28"/>
@@ -11484,8 +11758,6 @@
<class name="android/content/pm/ShortcutInfo" since="25">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/pm/ShortcutInfo$Builder;)V" since="29"/>
<method name="getActivity()Landroid/content/ComponentName;"/>
<method name="getCategories()Ljava/util/Set;"/>
<method name="getDisabledMessage()Ljava/lang/CharSequence;"/>
@@ -11495,6 +11767,7 @@
<method name="getIntent()Landroid/content/Intent;"/>
<method name="getIntents()[Landroid/content/Intent;"/>
<method name="getLastChangedTimestamp()J"/>
+ <method name="getLocusId()Landroid/content/LocusId;" since="29"/>
<method name="getLongLabel()Ljava/lang/CharSequence;"/>
<method name="getPackage()Ljava/lang/String;"/>
<method name="getRank()I"/>
@@ -11528,14 +11801,16 @@
<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/content/pm/ShortcutInfo$Builder;"/>
<method name="setIntent(Landroid/content/Intent;)Landroid/content/pm/ShortcutInfo$Builder;"/>
<method name="setIntents([Landroid/content/Intent;)Landroid/content/pm/ShortcutInfo$Builder;"/>
+ <method name="setLocusId(Landroid/content/LocusId;)Landroid/content/pm/ShortcutInfo$Builder;" since="29"/>
<method name="setLongLabel(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;"/>
+ <method name="setLongLived(Z)Landroid/content/pm/ShortcutInfo$Builder;" since="29"/>
+ <method name="setPerson(Landroid/app/Person;)Landroid/content/pm/ShortcutInfo$Builder;" since="29"/>
+ <method name="setPersons([Landroid/app/Person;)Landroid/content/pm/ShortcutInfo$Builder;" since="29"/>
<method name="setRank(I)Landroid/content/pm/ShortcutInfo$Builder;"/>
<method name="setShortLabel(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;"/>
</class>
<class name="android/content/pm/ShortcutManager" since="25">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="addDynamicShortcuts(Ljava/util/List;)Z"/>
<method name="createShortcutResultIntent(Landroid/content/pm/ShortcutInfo;)Landroid/content/Intent;" since="26"/>
<method name="disableShortcuts(Ljava/util/List;)V"/>
@@ -11617,7 +11892,6 @@
<class name="android/content/res/AssetManager" since="1">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable" since="21"/>
- <method name="&lt;init>()V"/>
<method name="close()V"/>
<method name="getLocales()[Ljava/lang/String;"/>
<method name="list(Ljava/lang/String;)[Ljava/lang/String;"/>
@@ -11635,8 +11909,6 @@
</class>
<class name="android/content/res/AssetManager$AssetInputStream" since="1">
<extends name="java/io/InputStream"/>
- <method name="&lt;init>(Landroid/content/res/AssetManager;)V" removed="29"/>
- <method name="&lt;init>(Landroid/content/res/AssetManager;J)V" since="29"/>
<method name="getAssetInt()I" removed="21"/>
</class>
<class name="android/content/res/ColorStateList" since="1">
@@ -11774,7 +12046,6 @@
<class name="android/content/res/ObbInfo" since="9">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<field name="CREATOR"/>
<field name="OBB_OVERLAY"/>
<field name="filename"/>
@@ -11784,7 +12055,6 @@
</class>
<class name="android/content/res/ObbScanner" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getObbInfo(Ljava/lang/String;)Landroid/content/res/ObbInfo;"/>
</class>
<class name="android/content/res/Resources" since="1">
@@ -11794,6 +12064,7 @@
<method name="flushLayoutCache()V"/>
<method name="getAnimation(I)Landroid/content/res/XmlResourceParser;"/>
<method name="getAssets()Landroid/content/res/AssetManager;"/>
+ <method name="getAttributeSetSourceResId(Landroid/util/AttributeSet;)I" since="29"/>
<method name="getBoolean(I)Z" since="3"/>
<method name="getColor(I)I" deprecated="23"/>
<method name="getColor(ILandroid/content/res/Resources$Theme;)I" since="23"/>
@@ -11808,13 +12079,14 @@
<method name="getDrawable(ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21"/>
<method name="getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;" since="15" deprecated="22"/>
<method name="getDrawableForDensity(IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21"/>
+ <method name="getFloat(I)F" since="29"/>
<method name="getFont(I)Landroid/graphics/Typeface;" since="26"/>
<method name="getFraction(III)F" since="3"/>
<method name="getIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I"/>
<method name="getIntArray(I)[I"/>
<method name="getInteger(I)I"/>
<method name="getLayout(I)Landroid/content/res/XmlResourceParser;"/>
- <method name="getMovie(I)Landroid/graphics/Movie;"/>
+ <method name="getMovie(I)Landroid/graphics/Movie;" deprecated="29"/>
<method name="getQuantityString(II)Ljava/lang/String;"/>
<method name="getQuantityString(II[Ljava/lang/Object;)Ljava/lang/String;"/>
<method name="getQuantityText(II)Ljava/lang/CharSequence;"/>
@@ -11842,6 +12114,7 @@
<method name="parseBundleExtra(Ljava/lang/String;Landroid/util/AttributeSet;Landroid/os/Bundle;)V" since="3"/>
<method name="parseBundleExtras(Landroid/content/res/XmlResourceParser;Landroid/os/Bundle;)V" since="3"/>
<method name="updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;)V" deprecated="25"/>
+ <field name="ID_NULL" since="29"/>
</class>
<class name="android/content/res/Resources$NotFoundException" since="1">
<extends name="java/lang/RuntimeException"/>
@@ -11851,22 +12124,22 @@
</class>
<class name="android/content/res/Resources$Theme" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/content/res/Resources;)V"/>
<method name="applyStyle(IZ)V"/>
<method name="dump(ILjava/lang/String;Ljava/lang/String;)V"/>
+ <method name="getAttributeResolutionStack(III)[I" since="29"/>
<method name="getChangingConfigurations()I" since="23"/>
<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;" since="21"/>
+ <method name="getExplicitStyle(Landroid/util/AttributeSet;)I" since="29"/>
<method name="getResources()Landroid/content/res/Resources;" since="21"/>
<method name="obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;"/>
<method name="obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;"/>
<method name="obtainStyledAttributes([I)Landroid/content/res/TypedArray;"/>
+ <method name="rebase()V" since="29"/>
<method name="resolveAttribute(ILandroid/util/TypedValue;Z)Z"/>
<method name="setTo(Landroid/content/res/Resources$Theme;)V"/>
</class>
<class name="android/content/res/TypedArray" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/res/Resources;)V" since="29"/>
<method name="getBoolean(IZ)Z"/>
<method name="getChangingConfigurations()I" since="21"/>
<method name="getColor(II)I"/>
@@ -11888,6 +12161,7 @@
<method name="getPositionDescription()Ljava/lang/String;"/>
<method name="getResourceId(II)I"/>
<method name="getResources()Landroid/content/res/Resources;"/>
+ <method name="getSourceResourceId(II)I" since="29"/>
<method name="getString(I)Ljava/lang/String;"/>
<method name="getText(I)Ljava/lang/CharSequence;"/>
<method name="getTextArray(I)[Ljava/lang/CharSequence;"/>
@@ -11912,15 +12186,15 @@
<method name="&lt;init>()V"/>
<method name="checkPosition()V"/>
<method name="getNotificationUri()Landroid/net/Uri;" since="11"/>
- <method name="getUpdatedField(I)Ljava/lang/Object;" deprecated="16"/>
- <method name="isFieldUpdated(I)Z" deprecated="16"/>
+ <method name="getUpdatedField(I)Ljava/lang/Object;" deprecated="15"/>
+ <method name="isFieldUpdated(I)Z" deprecated="15"/>
<method name="onChange(Z)V"/>
<field name="mClosed" deprecated="23"/>
<field name="mContentResolver" deprecated="23"/>
<field name="mCurrentRowID" deprecated="16" removed="23"/>
<field name="mPos" deprecated="23"/>
<field name="mRowIdColumnIndex" deprecated="16" removed="23"/>
- <field name="mUpdatedRows" deprecated="16" removed="23"/>
+ <field name="mUpdatedRows" deprecated="15" removed="23"/>
</class>
<class name="android/database/AbstractCursor$SelfContentObserver" since="1">
<extends name="android/database/ContentObserver"/>
@@ -11930,10 +12204,10 @@
<extends name="android/database/AbstractCursor"/>
<method name="&lt;init>()V"/>
<method name="hasWindow()Z"/>
- <method name="isBlob(I)Z" deprecated="16"/>
- <method name="isFloat(I)Z" since="5" deprecated="16"/>
- <method name="isLong(I)Z" since="5" deprecated="16"/>
- <method name="isString(I)Z" since="5" deprecated="16"/>
+ <method name="isBlob(I)Z" deprecated="15"/>
+ <method name="isFloat(I)Z" since="5" deprecated="15"/>
+ <method name="isLong(I)Z" since="5" deprecated="15"/>
+ <method name="isString(I)Z" since="5" deprecated="15"/>
<method name="setWindow(Landroid/database/CursorWindow;)V"/>
<field name="mWindow"/>
</class>
@@ -11992,6 +12266,7 @@
<method name="getInt(I)I"/>
<method name="getLong(I)J"/>
<method name="getNotificationUri()Landroid/net/Uri;" since="19"/>
+ <method name="getNotificationUris()Ljava/util/List;" since="29"/>
<method name="getPosition()I"/>
<method name="getShort(I)S"/>
<method name="getString(I)Ljava/lang/String;"/>
@@ -12011,10 +12286,11 @@
<method name="moveToPrevious()Z"/>
<method name="registerContentObserver(Landroid/database/ContentObserver;)V"/>
<method name="registerDataSetObserver(Landroid/database/DataSetObserver;)V"/>
- <method name="requery()Z" deprecated="16"/>
+ <method name="requery()Z" deprecated="15"/>
<method name="respond(Landroid/os/Bundle;)Landroid/os/Bundle;"/>
<method name="setExtras(Landroid/os/Bundle;)V" since="23"/>
<method name="setNotificationUri(Landroid/content/ContentResolver;Landroid/net/Uri;)V"/>
+ <method name="setNotificationUris(Landroid/content/ContentResolver;Ljava/util/List;)V" since="29"/>
<method name="unregisterContentObserver(Landroid/database/ContentObserver;)V"/>
<method name="unregisterDataSetObserver(Landroid/database/DataSetObserver;)V"/>
<field name="FIELD_TYPE_BLOB" since="11"/>
@@ -12048,7 +12324,7 @@
<implements name="android/os/Parcelable"/>
<method name="&lt;init>(Ljava/lang/String;)V" since="15"/>
<method name="&lt;init>(Ljava/lang/String;J)V" since="28"/>
- <method name="&lt;init>(Z)V" deprecated="16"/>
+ <method name="&lt;init>(Z)V" deprecated="15"/>
<method name="allocRow()Z"/>
<method name="clear()V"/>
<method name="close()V" removed="16"/>
@@ -12064,11 +12340,11 @@
<method name="getStartPosition()I"/>
<method name="getString(II)Ljava/lang/String;"/>
<method name="getType(II)I" since="11"/>
- <method name="isBlob(II)Z" deprecated="16"/>
- <method name="isFloat(II)Z" since="5" deprecated="16"/>
- <method name="isLong(II)Z" since="5" deprecated="16"/>
- <method name="isNull(II)Z" deprecated="16"/>
- <method name="isString(II)Z" since="5" deprecated="16"/>
+ <method name="isBlob(II)Z" deprecated="15"/>
+ <method name="isFloat(II)Z" since="5" deprecated="15"/>
+ <method name="isLong(II)Z" since="5" deprecated="15"/>
+ <method name="isNull(II)Z" deprecated="15"/>
+ <method name="isString(II)Z" since="5" deprecated="15"/>
<method name="newFromParcel(Landroid/os/Parcel;)Landroid/database/CursorWindow;"/>
<method name="putBlob([BII)Z"/>
<method name="putDouble(DII)Z"/>
@@ -12164,22 +12440,22 @@
</class>
<class name="android/database/DatabaseUtils$InsertHelper" since="1" deprecated="17">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;)V"/>
- <method name="bind(ID)V"/>
- <method name="bind(IF)V"/>
- <method name="bind(II)V"/>
- <method name="bind(IJ)V"/>
- <method name="bind(ILjava/lang/String;)V"/>
- <method name="bind(IZ)V"/>
- <method name="bind(I[B)V"/>
- <method name="bindNull(I)V"/>
- <method name="close()V"/>
- <method name="execute()J"/>
- <method name="getColumnIndex(Ljava/lang/String;)I"/>
- <method name="insert(Landroid/content/ContentValues;)J"/>
- <method name="prepareForInsert()V"/>
- <method name="prepareForReplace()V"/>
- <method name="replace(Landroid/content/ContentValues;)J"/>
+ <method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;)V" deprecated="29"/>
+ <method name="bind(ID)V" deprecated="29"/>
+ <method name="bind(IF)V" deprecated="29"/>
+ <method name="bind(II)V" deprecated="29"/>
+ <method name="bind(IJ)V" deprecated="29"/>
+ <method name="bind(ILjava/lang/String;)V" deprecated="29"/>
+ <method name="bind(IZ)V" deprecated="29"/>
+ <method name="bind(I[B)V" deprecated="29"/>
+ <method name="bindNull(I)V" deprecated="29"/>
+ <method name="close()V" deprecated="29"/>
+ <method name="execute()J" deprecated="29"/>
+ <method name="getColumnIndex(Ljava/lang/String;)I" deprecated="29"/>
+ <method name="insert(Landroid/content/ContentValues;)J" deprecated="29"/>
+ <method name="prepareForInsert()V" deprecated="29"/>
+ <method name="prepareForReplace()V" deprecated="29"/>
+ <method name="replace(Landroid/content/ContentValues;)J" deprecated="29"/>
<field name="TABLE_INFO_PRAGMA_DEFAULT_INDEX" removed="17"/>
</class>
<class name="android/database/DefaultDatabaseErrorHandler" since="11">
@@ -12197,8 +12473,6 @@
</class>
<class name="android/database/MatrixCursor$RowBuilder" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/database/MatrixCursor;)V" removed="29"/>
- <method name="&lt;init>(Landroid/database/MatrixCursor;I)V" since="29"/>
<method name="add(Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;"/>
<method name="add(Ljava/lang/String;Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;" since="19"/>
</class>
@@ -12268,7 +12542,7 @@
<class name="android/database/sqlite/SQLiteCursor" since="1">
<extends name="android/database/AbstractWindowedCursor"/>
<method name="&lt;init>(Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)V" since="11"/>
- <method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)V" deprecated="16"/>
+ <method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)V" deprecated="15"/>
<method name="getDatabase()Landroid/database/sqlite/SQLiteDatabase;"/>
<method name="setFillWindowForwardOnly(Z)V" since="28"/>
<method name="setSelectionArguments([Ljava/lang/String;)V"/>
@@ -12283,8 +12557,6 @@
</class>
<class name="android/database/sqlite/SQLiteDatabase" since="1">
<extends name="android/database/sqlite/SQLiteClosable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;IIJLjava/lang/String;Ljava/lang/String;)V" since="29"/>
<method name="beginTransaction()V"/>
<method name="beginTransactionNonExclusive()V" since="11"/>
<method name="beginTransactionWithListener(Landroid/database/sqlite/SQLiteTransactionListener;)V" since="5"/>
@@ -12305,7 +12577,7 @@
<method name="getMaximumSize()J"/>
<method name="getPageSize()J"/>
<method name="getPath()Ljava/lang/String;"/>
- <method name="getSyncedTables()Ljava/util/Map;" deprecated="16"/>
+ <method name="getSyncedTables()Ljava/util/Map;" deprecated="15"/>
<method name="getVersion()I"/>
<method name="inTransaction()Z"/>
<method name="insert(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J"/>
@@ -12317,8 +12589,8 @@
<method name="isOpen()Z"/>
<method name="isReadOnly()Z"/>
<method name="isWriteAheadLoggingEnabled()Z" since="16"/>
- <method name="markTableSyncable(Ljava/lang/String;Ljava/lang/String;)V" deprecated="16"/>
- <method name="markTableSyncable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="16"/>
+ <method name="markTableSyncable(Ljava/lang/String;Ljava/lang/String;)V" deprecated="15"/>
+ <method name="markTableSyncable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="15"/>
<method name="needUpgrade(I)Z"/>
<method name="openDatabase(Ljava/io/File;Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase;" since="27"/>
<method name="openDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;I)Landroid/database/sqlite/SQLiteDatabase;"/>
@@ -12350,7 +12622,7 @@
<method name="update(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I"/>
<method name="updateWithOnConflict(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;I)I" since="8"/>
<method name="validateSql(Ljava/lang/String;Landroid/os/CancellationSignal;)V" since="24"/>
- <method name="yieldIfContended()Z" deprecated="16"/>
+ <method name="yieldIfContended()Z" deprecated="15"/>
<method name="yieldIfContendedSafely()Z" since="3"/>
<method name="yieldIfContendedSafely(J)Z" since="5"/>
<field name="CONFLICT_ABORT" since="8"/>
@@ -12373,8 +12645,6 @@
</class>
<class name="android/database/sqlite/SQLiteDatabase$OpenParams" since="27">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;IIJLjava/lang/String;Ljava/lang/String;)V" since="29"/>
<method name="getCursorFactory()Landroid/database/sqlite/SQLiteDatabase$CursorFactory;"/>
<method name="getErrorHandler()Landroid/database/DatabaseErrorHandler;"/>
<method name="getIdleConnectionTimeout()J"/>
@@ -12393,7 +12663,7 @@
<method name="removeOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
<method name="setCursorFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
<method name="setErrorHandler(Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
- <method name="setIdleConnectionTimeout(J)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
+ <method name="setIdleConnectionTimeout(J)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" deprecated="29"/>
<method name="setJournalMode(Ljava/lang/String;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" since="28"/>
<method name="setLookasideConfig(II)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
<method name="setOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
@@ -12442,6 +12712,7 @@
</class>
<class name="android/database/sqlite/SQLiteOpenHelper" since="1">
<extends name="java/lang/Object"/>
+ <implements name="java/lang/AutoCloseable" since="29"/>
<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$OpenParams;)V" since="28"/>
<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;I)V"/>
<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ILandroid/database/DatabaseErrorHandler;)V" since="11"/>
@@ -12454,7 +12725,7 @@
<method name="onDowngrade(Landroid/database/sqlite/SQLiteDatabase;II)V" since="11"/>
<method name="onOpen(Landroid/database/sqlite/SQLiteDatabase;)V"/>
<method name="onUpgrade(Landroid/database/sqlite/SQLiteDatabase;II)V"/>
- <method name="setIdleConnectionTimeout(J)V" since="27"/>
+ <method name="setIdleConnectionTimeout(J)V" since="27" deprecated="29"/>
<method name="setLookasideConfig(II)V" since="27"/>
<method name="setOpenParams(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)V" since="28"/>
<method name="setWriteAheadLoggingEnabled(Z)V" since="16"/>
@@ -12466,8 +12737,6 @@
</class>
<class name="android/database/sqlite/SQLiteProgram" since="1">
<extends name="android/database/sqlite/SQLiteClosable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V" since="29"/>
<method name="bindAllArgsAsStrings([Ljava/lang/String;)V" since="11"/>
<method name="bindBlob(I[B)V"/>
<method name="bindDouble(ID)V"/>
@@ -12476,23 +12745,21 @@
<method name="bindString(ILjava/lang/String;)V"/>
<method name="clearBindings()V"/>
<method name="close()V" removed="16"/>
- <method name="compile(Ljava/lang/String;Z)V" removed="16"/>
- <method name="getUniqueId()I" deprecated="16"/>
+ <method name="compile(Ljava/lang/String;Z)V" deprecated="15" removed="16"/>
+ <method name="getUniqueId()I" deprecated="15"/>
<method name="native_bind_blob(I[B)V" removed="16"/>
<method name="native_bind_double(ID)V" removed="16"/>
<method name="native_bind_long(IJ)V" removed="16"/>
<method name="native_bind_null(I)V" removed="16"/>
<method name="native_bind_string(ILjava/lang/String;)V" removed="16"/>
- <method name="native_compile(Ljava/lang/String;)V" removed="16"/>
- <method name="native_finalize()V" removed="16"/>
- <field name="mDatabase" removed="16"/>
- <field name="nHandle" removed="16"/>
- <field name="nStatement" removed="16"/>
+ <method name="native_compile(Ljava/lang/String;)V" deprecated="15" removed="16"/>
+ <method name="native_finalize()V" deprecated="15" removed="16"/>
+ <field name="mDatabase" deprecated="15" removed="16"/>
+ <field name="nHandle" deprecated="15" removed="16"/>
+ <field name="nStatement" deprecated="15" removed="16"/>
</class>
<class name="android/database/sqlite/SQLiteQuery" since="1">
<extends name="android/database/sqlite/SQLiteProgram"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Landroid/os/CancellationSignal;)V" since="29"/>
</class>
<class name="android/database/sqlite/SQLiteQueryBuilder" since="1">
<extends name="java/lang/Object"/>
@@ -12500,13 +12767,19 @@
<method name="appendColumns(Ljava/lang/StringBuilder;[Ljava/lang/String;)V"/>
<method name="appendWhere(Ljava/lang/CharSequence;)V"/>
<method name="appendWhereEscapeString(Ljava/lang/String;)V"/>
+ <method name="appendWhereStandalone(Ljava/lang/CharSequence;)V" since="29"/>
<method name="buildQuery([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="11"/>
- <method name="buildQuery([Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
+ <method name="buildQuery([Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
<method name="buildQueryString(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
<method name="buildUnionQuery([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
<method name="buildUnionSubQuery(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Set;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="11"/>
- <method name="buildUnionSubQuery(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Set;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
+ <method name="buildUnionSubQuery(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Set;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
+ <method name="delete(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)I" since="29"/>
+ <method name="getCursorFactory()Landroid/database/sqlite/SQLiteDatabase$CursorFactory;" since="29"/>
+ <method name="getProjectionMap()Ljava/util/Map;" since="29"/>
<method name="getTables()Ljava/lang/String;"/>
+ <method name="isDistinct()Z" since="29"/>
+ <method name="isStrict()Z" since="29"/>
<method name="query(Landroid/database/sqlite/SQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
<method name="query(Landroid/database/sqlite/SQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
<method name="query(Landroid/database/sqlite/SQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
@@ -12515,6 +12788,7 @@
<method name="setProjectionMap(Ljava/util/Map;)V"/>
<method name="setStrict(Z)V" since="14"/>
<method name="setTables(Ljava/lang/String;)V"/>
+ <method name="update(Landroid/database/sqlite/SQLiteDatabase;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I" since="29"/>
</class>
<class name="android/database/sqlite/SQLiteReadOnlyDatabaseException" since="11">
<extends name="android/database/sqlite/SQLiteException"/>
@@ -12523,8 +12797,6 @@
</class>
<class name="android/database/sqlite/SQLiteStatement" since="1">
<extends name="android/database/sqlite/SQLiteProgram"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V" since="29"/>
<method name="execute()V"/>
<method name="executeInsert()J"/>
<method name="executeUpdateDelete()I" since="11"/>
@@ -12756,16 +13028,12 @@
</class>
<class name="android/drm/DrmUtils$ExtendedMetadataParser" since="11">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>([B)V" since="29"/>
<method name="get(Ljava/lang/String;)Ljava/lang/String;"/>
<method name="iterator()Ljava/util/Iterator;"/>
<method name="keyIterator()Ljava/util/Iterator;"/>
</class>
<class name="android/drm/ProcessedData" since="11">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>([BLjava/lang/String;)V" since="29"/>
<method name="getAccountId()Ljava/lang/String;"/>
<method name="getData()[B"/>
<method name="getSubscriptionId()Ljava/lang/String;"/>
@@ -12790,7 +13058,6 @@
</class>
<class name="android/gesture/GestureLibraries" since="4">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="fromFile(Ljava/io/File;)Landroid/gesture/GestureLibrary;"/>
<method name="fromFile(Ljava/lang/String;)Landroid/gesture/GestureLibrary;"/>
<method name="fromPrivateFile(Landroid/content/Context;Ljava/lang/String;)Landroid/gesture/GestureLibrary;"/>
@@ -12926,7 +13193,6 @@
</class>
<class name="android/gesture/GestureUtils" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="computeOrientedBoundingBox(Ljava/util/ArrayList;)Landroid/gesture/OrientedBoundingBox;"/>
<method name="computeOrientedBoundingBox([F)Landroid/gesture/OrientedBoundingBox;"/>
<method name="spatialSampling(Landroid/gesture/Gesture;I)[F"/>
@@ -12935,8 +13201,6 @@
</class>
<class name="android/gesture/OrientedBoundingBox" since="4">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(FFFFF)V" since="29"/>
<field name="centerX"/>
<field name="centerY"/>
<field name="height"/>
@@ -12946,8 +13210,6 @@
</class>
<class name="android/gesture/Prediction" since="4">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;D)V" since="29"/>
<field name="name"/>
<field name="score"/>
</class>
@@ -12965,7 +13227,6 @@
<class name="android/graphics/Bitmap" since="1">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z"/>
<method name="copy(Landroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;"/>
<method name="copyPixelsFromBuffer(Ljava/nio/Buffer;)V" since="3"/>
@@ -12987,10 +13248,12 @@
<method name="createBitmap([IIILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;"/>
<method name="createScaledBitmap(Landroid/graphics/Bitmap;IIZ)Landroid/graphics/Bitmap;"/>
<method name="eraseColor(I)V"/>
+ <method name="eraseColor(J)V" since="29"/>
<method name="extractAlpha()Landroid/graphics/Bitmap;"/>
<method name="extractAlpha(Landroid/graphics/Paint;[I)Landroid/graphics/Bitmap;"/>
<method name="getAllocationByteCount()I" since="19"/>
<method name="getByteCount()I" since="12"/>
+ <method name="getColor(II)Landroid/graphics/Color;" since="29"/>
<method name="getColorSpace()Landroid/graphics/ColorSpace;" since="26"/>
<method name="getConfig()Landroid/graphics/Bitmap$Config;"/>
<method name="getDensity()I" since="4"/>
@@ -13016,6 +13279,7 @@
<method name="reconfigure(IILandroid/graphics/Bitmap$Config;)V" since="19"/>
<method name="recycle()V"/>
<method name="sameAs(Landroid/graphics/Bitmap;)Z" since="12"/>
+ <method name="setColorSpace(Landroid/graphics/ColorSpace;)V" since="29"/>
<method name="setConfig(Landroid/graphics/Bitmap$Config;)V" since="19"/>
<method name="setDensity(I)V" since="4"/>
<method name="setHasAlpha(Z)V" since="12"/>
@@ -13025,6 +13289,7 @@
<method name="setPixels([IIIIIII)V"/>
<method name="setPremultiplied(Z)V" since="19"/>
<method name="setWidth(I)V" since="19"/>
+ <method name="wrapHardwareBuffer(Landroid/hardware/HardwareBuffer;Landroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;" since="29"/>
<field name="CREATOR"/>
<field name="DENSITY_NONE" since="4"/>
</class>
@@ -13041,7 +13306,7 @@
<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Bitmap$Config;"/>
<method name="values()[Landroid/graphics/Bitmap$Config;"/>
<field name="ALPHA_8"/>
- <field name="ARGB_4444" deprecated="28"/>
+ <field name="ARGB_4444" deprecated="29"/>
<field name="ARGB_8888"/>
<field name="HARDWARE" since="26"/>
<field name="RGBA_F16" since="26"/>
@@ -13091,8 +13356,6 @@
</class>
<class name="android/graphics/BitmapRegionDecoder" since="10">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(J)V" since="29"/>
<method name="decodeRegion(Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
<method name="getHeight()I"/>
<method name="getWidth()I"/>
@@ -13107,6 +13370,46 @@
<extends name="android/graphics/Shader"/>
<method name="&lt;init>(Landroid/graphics/Bitmap;Landroid/graphics/Shader$TileMode;Landroid/graphics/Shader$TileMode;)V"/>
</class>
+ <class name="android/graphics/BlendMode" since="29">
+ <extends name="java/lang/Enum"/>
+ <method name="valueOf(Ljava/lang/String;)Landroid/graphics/BlendMode;"/>
+ <method name="values()[Landroid/graphics/BlendMode;"/>
+ <field name="CLEAR"/>
+ <field name="COLOR"/>
+ <field name="COLOR_BURN"/>
+ <field name="COLOR_DODGE"/>
+ <field name="DARKEN"/>
+ <field name="DIFFERENCE"/>
+ <field name="DST"/>
+ <field name="DST_ATOP"/>
+ <field name="DST_IN"/>
+ <field name="DST_OUT"/>
+ <field name="DST_OVER"/>
+ <field name="EXCLUSION"/>
+ <field name="HARD_LIGHT"/>
+ <field name="HUE"/>
+ <field name="LIGHTEN"/>
+ <field name="LUMINOSITY"/>
+ <field name="MODULATE"/>
+ <field name="MULTIPLY"/>
+ <field name="OVERLAY"/>
+ <field name="PLUS"/>
+ <field name="SATURATION"/>
+ <field name="SCREEN"/>
+ <field name="SOFT_LIGHT"/>
+ <field name="SRC"/>
+ <field name="SRC_ATOP"/>
+ <field name="SRC_IN"/>
+ <field name="SRC_OUT"/>
+ <field name="SRC_OVER"/>
+ <field name="XOR"/>
+ </class>
+ <class name="android/graphics/BlendModeColorFilter" since="29">
+ <extends name="android/graphics/ColorFilter"/>
+ <method name="&lt;init>(ILandroid/graphics/BlendMode;)V"/>
+ <method name="getColor()I"/>
+ <method name="getMode()Landroid/graphics/BlendMode;"/>
+ </class>
<class name="android/graphics/BlurMaskFilter" since="1">
<extends name="android/graphics/MaskFilter"/>
<method name="&lt;init>(FLandroid/graphics/BlurMaskFilter$Blur;)V"/>
@@ -13160,6 +13463,7 @@
<method name="clipRegion(Landroid/graphics/Region;)Z" deprecated="21" removed="26"/>
<method name="clipRegion(Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z" deprecated="21" removed="26"/>
<method name="concat(Landroid/graphics/Matrix;)V"/>
+ <method name="disableZ()V" since="29"/>
<method name="drawARGB(IIII)V"/>
<method name="drawArc(FFFFFFZLandroid/graphics/Paint;)V" since="21"/>
<method name="drawArc(Landroid/graphics/RectF;FFZLandroid/graphics/Paint;)V"/>
@@ -13172,7 +13476,12 @@
<method name="drawBitmapMesh(Landroid/graphics/Bitmap;II[FI[IILandroid/graphics/Paint;)V"/>
<method name="drawCircle(FFFLandroid/graphics/Paint;)V"/>
<method name="drawColor(I)V"/>
+ <method name="drawColor(ILandroid/graphics/BlendMode;)V" since="29"/>
<method name="drawColor(ILandroid/graphics/PorterDuff$Mode;)V"/>
+ <method name="drawColor(J)V" since="29"/>
+ <method name="drawColor(JLandroid/graphics/BlendMode;)V" since="29"/>
+ <method name="drawDoubleRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/RectF;FFLandroid/graphics/Paint;)V" since="29"/>
+ <method name="drawDoubleRoundRect(Landroid/graphics/RectF;[FLandroid/graphics/RectF;[FLandroid/graphics/Paint;)V" since="29"/>
<method name="drawLine(FFFFLandroid/graphics/Paint;)V"/>
<method name="drawLines([FIILandroid/graphics/Paint;)V"/>
<method name="drawLines([FLandroid/graphics/Paint;)V"/>
@@ -13192,6 +13501,7 @@
<method name="drawRect(FFFFLandroid/graphics/Paint;)V"/>
<method name="drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V"/>
<method name="drawRect(Landroid/graphics/RectF;Landroid/graphics/Paint;)V"/>
+ <method name="drawRenderNode(Landroid/graphics/RenderNode;)V" since="29"/>
<method name="drawRoundRect(FFFFFFLandroid/graphics/Paint;)V" since="21"/>
<method name="drawRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Paint;)V"/>
<method name="drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V"/>
@@ -13200,9 +13510,11 @@
<method name="drawText([CIIFFLandroid/graphics/Paint;)V"/>
<method name="drawTextOnPath(Ljava/lang/String;Landroid/graphics/Path;FFLandroid/graphics/Paint;)V"/>
<method name="drawTextOnPath([CIILandroid/graphics/Path;FFLandroid/graphics/Paint;)V"/>
+ <method name="drawTextRun(Landroid/graphics/text/MeasuredText;IIIIFFZLandroid/graphics/Paint;)V" since="29"/>
<method name="drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V" since="23"/>
<method name="drawTextRun([CIIIIFFZLandroid/graphics/Paint;)V" since="23"/>
<method name="drawVertices(Landroid/graphics/Canvas$VertexMode;I[FI[FI[II[SIILandroid/graphics/Paint;)V"/>
+ <method name="enableZ()V" since="29"/>
<method name="freeGlCaches()V" removed="11"/>
<method name="getClipBounds()Landroid/graphics/Rect;"/>
<method name="getClipBounds(Landroid/graphics/Rect;)Z"/>
@@ -13367,8 +13679,6 @@
</class>
<class name="android/graphics/ColorSpace" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;Landroid/graphics/ColorSpace$Model;I)V" since="29"/>
<method name="adapt(Landroid/graphics/ColorSpace;[F)Landroid/graphics/ColorSpace;"/>
<method name="adapt(Landroid/graphics/ColorSpace;[FLandroid/graphics/ColorSpace$Adaptation;)Landroid/graphics/ColorSpace;"/>
<method name="connect(Landroid/graphics/ColorSpace;)Landroid/graphics/ColorSpace$Connector;"/>
@@ -13411,8 +13721,6 @@
</class>
<class name="android/graphics/ColorSpace$Connector" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$RenderIntent;)V" since="29"/>
<method name="getDestination()Landroid/graphics/ColorSpace;"/>
<method name="getRenderIntent()Landroid/graphics/ColorSpace$RenderIntent;"/>
<method name="getSource()Landroid/graphics/ColorSpace;"/>
@@ -13501,8 +13809,9 @@
</class>
<class name="android/graphics/ComposeShader" since="1">
<extends name="android/graphics/Shader"/>
+ <method name="&lt;init>(Landroid/graphics/Shader;Landroid/graphics/Shader;Landroid/graphics/BlendMode;)V" since="29"/>
<method name="&lt;init>(Landroid/graphics/Shader;Landroid/graphics/Shader;Landroid/graphics/PorterDuff$Mode;)V"/>
- <method name="&lt;init>(Landroid/graphics/Shader;Landroid/graphics/Shader;Landroid/graphics/Xfermode;)V"/>
+ <method name="&lt;init>(Landroid/graphics/Shader;Landroid/graphics/Shader;Landroid/graphics/Xfermode;)V" deprecated="29"/>
</class>
<class name="android/graphics/CornerPathEffect" since="1">
<extends name="android/graphics/PathEffect"/>
@@ -13524,16 +13833,44 @@
<extends name="android/graphics/MaskFilter"/>
<method name="&lt;init>([FFFF)V" deprecated="28"/>
</class>
+ <class name="android/graphics/HardwareRenderer" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="clearContent()V"/>
+ <method name="createRenderRequest()Landroid/graphics/HardwareRenderer$FrameRenderRequest;"/>
+ <method name="destroy()V"/>
+ <method name="isOpaque()Z"/>
+ <method name="notifyFramePending()V"/>
+ <method name="setContentRoot(Landroid/graphics/RenderNode;)V"/>
+ <method name="setLightSourceAlpha(FF)V"/>
+ <method name="setLightSourceGeometry(FFFF)V"/>
+ <method name="setName(Ljava/lang/String;)V"/>
+ <method name="setOpaque(Z)V"/>
+ <method name="setSurface(Landroid/view/Surface;)V"/>
+ <method name="start()V"/>
+ <method name="stop()V"/>
+ <field name="SYNC_CONTEXT_IS_STOPPED"/>
+ <field name="SYNC_FRAME_DROPPED"/>
+ <field name="SYNC_LOST_SURFACE_REWARD_IF_FOUND"/>
+ <field name="SYNC_OK"/>
+ <field name="SYNC_REDRAW_REQUESTED"/>
+ </class>
+ <class name="android/graphics/HardwareRenderer$FrameRenderRequest" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="setFrameCommitCallback(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)Landroid/graphics/HardwareRenderer$FrameRenderRequest;"/>
+ <method name="setVsyncTime(J)Landroid/graphics/HardwareRenderer$FrameRenderRequest;"/>
+ <method name="setWaitForPresent(Z)Landroid/graphics/HardwareRenderer$FrameRenderRequest;"/>
+ <method name="syncAndDraw()I"/>
+ </class>
<class name="android/graphics/ImageDecoder" since="28">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JIIZZ)V" since="29"/>
<method name="createSource(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/graphics/ImageDecoder$Source;"/>
<method name="createSource(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/ImageDecoder$Source;"/>
<method name="createSource(Landroid/content/res/Resources;I)Landroid/graphics/ImageDecoder$Source;"/>
<method name="createSource(Ljava/io/File;)Landroid/graphics/ImageDecoder$Source;"/>
<method name="createSource(Ljava/nio/ByteBuffer;)Landroid/graphics/ImageDecoder$Source;"/>
+ <method name="createSource(Ljava/util/concurrent/Callable;)Landroid/graphics/ImageDecoder$Source;" since="29"/>
<method name="decodeBitmap(Landroid/graphics/ImageDecoder$Source;)Landroid/graphics/Bitmap;"/>
<method name="decodeBitmap(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/Bitmap;"/>
<method name="decodeDrawable(Landroid/graphics/ImageDecoder$Source;)Landroid/graphics/drawable/Drawable;"/>
@@ -13544,6 +13881,7 @@
<method name="getOnPartialImageListener()Landroid/graphics/ImageDecoder$OnPartialImageListener;"/>
<method name="getPostProcessor()Landroid/graphics/PostProcessor;"/>
<method name="isDecodeAsAlphaMaskEnabled()Z"/>
+ <method name="isMimeTypeSupported(Ljava/lang/String;)Z" since="29"/>
<method name="isMutableRequired()Z"/>
<method name="isUnpremultipliedRequired()Z"/>
<method name="setAllocator(I)V"/>
@@ -13566,8 +13904,6 @@
</class>
<class name="android/graphics/ImageDecoder$DecodeException" since="28">
<extends name="java/io/IOException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILjava/lang/Throwable;Landroid/graphics/ImageDecoder$Source;)V" since="29"/>
<method name="getError()I"/>
<method name="getSource()Landroid/graphics/ImageDecoder$Source;"/>
<field name="SOURCE_EXCEPTION"/>
@@ -13576,8 +13912,6 @@
</class>
<class name="android/graphics/ImageDecoder$ImageInfo" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/graphics/ImageDecoder;)V" since="29"/>
<method name="getColorSpace()Landroid/graphics/ColorSpace;"/>
<method name="getMimeType()Ljava/lang/String;"/>
<method name="getSize()Landroid/util/Size;"/>
@@ -13593,16 +13927,17 @@
</class>
<class name="android/graphics/ImageDecoder$Source" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/graphics/ImageFormat" since="8">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
<method name="getBitsPerPixel(I)I"/>
<field name="DEPTH16" since="23"/>
+ <field name="DEPTH_JPEG" since="29"/>
<field name="DEPTH_POINT_CLOUD" since="23"/>
<field name="FLEX_RGBA_8888" since="23"/>
<field name="FLEX_RGB_888" since="23"/>
+ <field name="HEIC" since="29"/>
<field name="JPEG"/>
<field name="NV16"/>
<field name="NV21"/>
@@ -13613,12 +13948,29 @@
<field name="RAW_SENSOR" since="21"/>
<field name="RGB_565"/>
<field name="UNKNOWN"/>
+ <field name="Y8" since="29"/>
<field name="YUV_420_888" since="19"/>
<field name="YUV_422_888" since="23"/>
<field name="YUV_444_888" since="23"/>
<field name="YUY2"/>
<field name="YV12" since="9"/>
</class>
+ <class name="android/graphics/Insets" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="add(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;"/>
+ <method name="max(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;"/>
+ <method name="min(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;"/>
+ <method name="of(IIII)Landroid/graphics/Insets;"/>
+ <method name="of(Landroid/graphics/Rect;)Landroid/graphics/Insets;"/>
+ <method name="subtract(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;"/>
+ <field name="CREATOR"/>
+ <field name="NONE"/>
+ <field name="bottom"/>
+ <field name="left"/>
+ <field name="right"/>
+ <field name="top"/>
+ </class>
<class name="android/graphics/Interpolator" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>(I)V"/>
@@ -13656,7 +14008,9 @@
<class name="android/graphics/LinearGradient" since="1">
<extends name="android/graphics/Shader"/>
<method name="&lt;init>(FFFFIILandroid/graphics/Shader$TileMode;)V"/>
+ <method name="&lt;init>(FFFFJJLandroid/graphics/Shader$TileMode;)V" since="29"/>
<method name="&lt;init>(FFFF[I[FLandroid/graphics/Shader$TileMode;)V"/>
+ <method name="&lt;init>(FFFF[J[FLandroid/graphics/Shader$TileMode;)V" since="29"/>
</class>
<class name="android/graphics/MaskFilter" since="1">
<extends name="java/lang/Object"/>
@@ -13733,18 +14087,16 @@
</class>
<class name="android/graphics/Movie" since="1" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(J)V" since="29"/>
- <method name="decodeByteArray([BII)Landroid/graphics/Movie;"/>
- <method name="decodeFile(Ljava/lang/String;)Landroid/graphics/Movie;"/>
- <method name="decodeStream(Ljava/io/InputStream;)Landroid/graphics/Movie;"/>
- <method name="draw(Landroid/graphics/Canvas;FF)V"/>
- <method name="draw(Landroid/graphics/Canvas;FFLandroid/graphics/Paint;)V"/>
- <method name="duration()I"/>
- <method name="height()I"/>
- <method name="isOpaque()Z"/>
- <method name="setTime(I)Z"/>
- <method name="width()I"/>
+ <method name="decodeByteArray([BII)Landroid/graphics/Movie;" deprecated="29"/>
+ <method name="decodeFile(Ljava/lang/String;)Landroid/graphics/Movie;" deprecated="29"/>
+ <method name="decodeStream(Ljava/io/InputStream;)Landroid/graphics/Movie;" deprecated="29"/>
+ <method name="draw(Landroid/graphics/Canvas;FF)V" deprecated="29"/>
+ <method name="draw(Landroid/graphics/Canvas;FFLandroid/graphics/Paint;)V" deprecated="29"/>
+ <method name="duration()I" deprecated="29"/>
+ <method name="height()I" deprecated="29"/>
+ <method name="isOpaque()Z" deprecated="29"/>
+ <method name="setTime(I)Z" deprecated="29"/>
+ <method name="width()I" deprecated="29"/>
</class>
<class name="android/graphics/NinePatch" since="1">
<extends name="java/lang/Object"/>
@@ -13798,8 +14150,11 @@
<method name="descent()F"/>
<method name="equalsForTextMeasurement(Landroid/graphics/Paint;)Z" since="28"/>
<method name="getAlpha()I"/>
+ <method name="getBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getColor()I"/>
<method name="getColorFilter()Landroid/graphics/ColorFilter;"/>
+ <method name="getColorLong()J" since="29"/>
+ <method name="getEndHyphenEdit()I" since="29"/>
<method name="getFillPath(Landroid/graphics/Path;Landroid/graphics/Path;)Z"/>
<method name="getFlags()I"/>
<method name="getFontFeatureSettings()Ljava/lang/String;" since="21"/>
@@ -13819,18 +14174,30 @@
<method name="getRunAdvance(Ljava/lang/CharSequence;IIIIZI)F" since="23"/>
<method name="getRunAdvance([CIIIIZI)F" since="23"/>
<method name="getShader()Landroid/graphics/Shader;"/>
+ <method name="getShadowLayerColor()I" since="29"/>
+ <method name="getShadowLayerColorLong()J" since="29"/>
+ <method name="getShadowLayerDx()F" since="29"/>
+ <method name="getShadowLayerDy()F" since="29"/>
+ <method name="getShadowLayerRadius()F" since="29"/>
+ <method name="getStartHyphenEdit()I" since="29"/>
+ <method name="getStrikeThruPosition()F" since="29"/>
+ <method name="getStrikeThruThickness()F" since="29"/>
<method name="getStrokeCap()Landroid/graphics/Paint$Cap;"/>
<method name="getStrokeJoin()Landroid/graphics/Paint$Join;"/>
<method name="getStrokeMiter()F"/>
<method name="getStrokeWidth()F"/>
<method name="getStyle()Landroid/graphics/Paint$Style;"/>
<method name="getTextAlign()Landroid/graphics/Paint$Align;"/>
+ <method name="getTextBounds(Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V" since="29"/>
<method name="getTextBounds(Ljava/lang/String;IILandroid/graphics/Rect;)V"/>
<method name="getTextBounds([CIILandroid/graphics/Rect;)V"/>
<method name="getTextLocale()Ljava/util/Locale;" since="17"/>
<method name="getTextLocales()Landroid/os/LocaleList;" since="24"/>
<method name="getTextPath(Ljava/lang/String;IIFFLandroid/graphics/Path;)V"/>
<method name="getTextPath([CIIFFLandroid/graphics/Path;)V"/>
+ <method name="getTextRunAdvances([CIIIIZ[FI)F" since="29"/>
+ <method name="getTextRunCursor(Ljava/lang/CharSequence;IIZII)I" since="29"/>
+ <method name="getTextRunCursor([CIIZII)I" since="29"/>
<method name="getTextScaleX()F"/>
<method name="getTextSize()F"/>
<method name="getTextSkewX()F"/>
@@ -13839,6 +14206,9 @@
<method name="getTextWidths(Ljava/lang/String;[F)I"/>
<method name="getTextWidths([CII[F)I"/>
<method name="getTypeface()Landroid/graphics/Typeface;"/>
+ <method name="getUnderlinePosition()F" since="29"/>
+ <method name="getUnderlineThickness()F" since="29"/>
+ <method name="getWordSpacing()F" since="29"/>
<method name="getXfermode()Landroid/graphics/Xfermode;"/>
<method name="hasGlyph(Ljava/lang/String;)Z" since="23"/>
<method name="isAntiAlias()Z"/>
@@ -13859,10 +14229,13 @@
<method name="setARGB(IIII)V"/>
<method name="setAlpha(I)V"/>
<method name="setAntiAlias(Z)V"/>
+ <method name="setBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setColor(I)V"/>
+ <method name="setColor(J)V" since="29"/>
<method name="setColorFilter(Landroid/graphics/ColorFilter;)Landroid/graphics/ColorFilter;"/>
<method name="setDither(Z)V"/>
<method name="setElegantTextHeight(Z)V" since="21"/>
+ <method name="setEndHyphenEdit(I)V" since="29"/>
<method name="setFakeBoldText(Z)V"/>
<method name="setFilterBitmap(Z)V"/>
<method name="setFlags(I)V"/>
@@ -13876,6 +14249,8 @@
<method name="setRasterizer(Landroid/graphics/Rasterizer;)Landroid/graphics/Rasterizer;" deprecated="21" removed="26"/>
<method name="setShader(Landroid/graphics/Shader;)Landroid/graphics/Shader;"/>
<method name="setShadowLayer(FFFI)V"/>
+ <method name="setShadowLayer(FFFJ)V" since="29"/>
+ <method name="setStartHyphenEdit(I)V" since="29"/>
<method name="setStrikeThruText(Z)V"/>
<method name="setStrokeCap(Landroid/graphics/Paint$Cap;)V"/>
<method name="setStrokeJoin(Landroid/graphics/Paint$Join;)V"/>
@@ -13891,16 +14266,32 @@
<method name="setTextSkewX(F)V"/>
<method name="setTypeface(Landroid/graphics/Typeface;)Landroid/graphics/Typeface;"/>
<method name="setUnderlineText(Z)V"/>
+ <method name="setWordSpacing(F)V" since="29"/>
<method name="setXfermode(Landroid/graphics/Xfermode;)Landroid/graphics/Xfermode;"/>
<field name="ANTI_ALIAS_FLAG"/>
+ <field name="CURSOR_AFTER" since="29"/>
+ <field name="CURSOR_AT" since="29"/>
+ <field name="CURSOR_AT_OR_AFTER" since="29"/>
+ <field name="CURSOR_AT_OR_BEFORE" since="29"/>
+ <field name="CURSOR_BEFORE" since="29"/>
<field name="DEV_KERN_TEXT_FLAG"/>
<field name="DITHER_FLAG"/>
<field name="EMBEDDED_BITMAP_TEXT_FLAG" since="19"/>
+ <field name="END_HYPHEN_EDIT_INSERT_ARMENIAN_HYPHEN" since="29"/>
+ <field name="END_HYPHEN_EDIT_INSERT_HYPHEN" since="29"/>
+ <field name="END_HYPHEN_EDIT_INSERT_MAQAF" since="29"/>
+ <field name="END_HYPHEN_EDIT_INSERT_UCAS_HYPHEN" since="29"/>
+ <field name="END_HYPHEN_EDIT_INSERT_ZWJ_AND_HYPHEN" since="29"/>
+ <field name="END_HYPHEN_EDIT_NO_EDIT" since="29"/>
+ <field name="END_HYPHEN_EDIT_REPLACE_WITH_HYPHEN" since="29"/>
<field name="FAKE_BOLD_TEXT_FLAG"/>
<field name="FILTER_BITMAP_FLAG"/>
<field name="HINTING_OFF" since="14"/>
<field name="HINTING_ON" since="14"/>
<field name="LINEAR_TEXT_FLAG"/>
+ <field name="START_HYPHEN_EDIT_INSERT_HYPHEN" since="29"/>
+ <field name="START_HYPHEN_EDIT_INSERT_ZWJ" since="29"/>
+ <field name="START_HYPHEN_EDIT_NO_EDIT" since="29"/>
<field name="STRIKE_THRU_TEXT_FLAG"/>
<field name="SUBPIXEL_TEXT_FLAG"/>
<field name="UNDERLINE_TEXT_FLAG"/>
@@ -14071,13 +14462,13 @@
<method name="&lt;init>()V"/>
<method name="&lt;init>(Landroid/graphics/Picture;)V"/>
<method name="beginRecording(II)Landroid/graphics/Canvas;"/>
- <method name="createFromStream(Ljava/io/InputStream;)Landroid/graphics/Picture;" deprecated="18"/>
+ <method name="createFromStream(Ljava/io/InputStream;)Landroid/graphics/Picture;" deprecated="18" removed="29"/>
<method name="draw(Landroid/graphics/Canvas;)V"/>
<method name="endRecording()V"/>
<method name="getHeight()I"/>
<method name="getWidth()I"/>
<method name="requiresHardwareAcceleration()Z" since="28"/>
- <method name="writeToStream(Ljava/io/OutputStream;)V" deprecated="18"/>
+ <method name="writeToStream(Ljava/io/OutputStream;)V" deprecated="18" removed="29"/>
</class>
<class name="android/graphics/PixelFormat" since="1">
<extends name="java/lang/Object"/>
@@ -14085,7 +14476,7 @@
<method name="formatHasAlpha(I)Z"/>
<method name="getPixelFormatInfo(ILandroid/graphics/PixelFormat;)V"/>
<field name="A_8" deprecated="19"/>
- <field name="JPEG" deprecated="16"/>
+ <field name="JPEG" deprecated="15"/>
<field name="LA_88" deprecated="16"/>
<field name="L_8" deprecated="19"/>
<field name="OPAQUE"/>
@@ -14101,9 +14492,9 @@
<field name="TRANSLUCENT"/>
<field name="TRANSPARENT"/>
<field name="UNKNOWN"/>
- <field name="YCbCr_420_SP" deprecated="16"/>
- <field name="YCbCr_422_I" since="5" deprecated="16"/>
- <field name="YCbCr_422_SP" deprecated="16"/>
+ <field name="YCbCr_420_SP" deprecated="15"/>
+ <field name="YCbCr_422_I" since="5" deprecated="15"/>
+ <field name="YCbCr_422_SP" deprecated="15"/>
<field name="bitsPerPixel"/>
<field name="bytesPerPixel"/>
</class>
@@ -14186,12 +14577,19 @@
<class name="android/graphics/RadialGradient" since="1">
<extends name="android/graphics/Shader"/>
<method name="&lt;init>(FFFIILandroid/graphics/Shader$TileMode;)V"/>
+ <method name="&lt;init>(FFFJJLandroid/graphics/Shader$TileMode;)V" since="29"/>
<method name="&lt;init>(FFF[I[FLandroid/graphics/Shader$TileMode;)V"/>
+ <method name="&lt;init>(FFF[J[FLandroid/graphics/Shader$TileMode;)V" since="29"/>
</class>
<class name="android/graphics/Rasterizer" since="1" deprecated="21" removed="26">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
</class>
+ <class name="android/graphics/RecordingCanvas" since="29">
+ <extends name="android/graphics/Canvas"/>
+ <method name="drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/Rect;Landroid/graphics/Paint;)V"/>
+ <method name="drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/RectF;Landroid/graphics/Paint;)V"/>
+ </class>
<class name="android/graphics/Rect" since="1">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
@@ -14325,6 +14723,77 @@
<method name="&lt;init>(Landroid/graphics/Region;)V"/>
<method name="next(Landroid/graphics/Rect;)Z"/>
</class>
+ <class name="android/graphics/RenderNode" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="beginRecording()Landroid/graphics/RecordingCanvas;"/>
+ <method name="beginRecording(II)Landroid/graphics/RecordingCanvas;"/>
+ <method name="computeApproximateMemoryUsage()J"/>
+ <method name="discardDisplayList()V"/>
+ <method name="endRecording()V"/>
+ <method name="getAlpha()F"/>
+ <method name="getAmbientShadowColor()I"/>
+ <method name="getBottom()I"/>
+ <method name="getCameraDistance()F"/>
+ <method name="getClipToBounds()Z"/>
+ <method name="getClipToOutline()Z"/>
+ <method name="getElevation()F"/>
+ <method name="getHeight()I"/>
+ <method name="getInverseMatrix(Landroid/graphics/Matrix;)V"/>
+ <method name="getLeft()I"/>
+ <method name="getMatrix(Landroid/graphics/Matrix;)V"/>
+ <method name="getPivotX()F"/>
+ <method name="getPivotY()F"/>
+ <method name="getRight()I"/>
+ <method name="getRotationX()F"/>
+ <method name="getRotationY()F"/>
+ <method name="getRotationZ()F"/>
+ <method name="getScaleX()F"/>
+ <method name="getScaleY()F"/>
+ <method name="getSpotShadowColor()I"/>
+ <method name="getTop()I"/>
+ <method name="getTranslationX()F"/>
+ <method name="getTranslationY()F"/>
+ <method name="getTranslationZ()F"/>
+ <method name="getUniqueId()J"/>
+ <method name="getUseCompositingLayer()Z"/>
+ <method name="getWidth()I"/>
+ <method name="hasDisplayList()Z"/>
+ <method name="hasIdentityMatrix()Z"/>
+ <method name="hasOverlappingRendering()Z"/>
+ <method name="hasShadow()Z"/>
+ <method name="isForceDarkAllowed()Z"/>
+ <method name="isPivotExplicitlySet()Z"/>
+ <method name="offsetLeftAndRight(I)Z"/>
+ <method name="offsetTopAndBottom(I)Z"/>
+ <method name="resetPivot()Z"/>
+ <method name="setAlpha(F)Z"/>
+ <method name="setAmbientShadowColor(I)Z"/>
+ <method name="setCameraDistance(F)Z"/>
+ <method name="setClipRect(Landroid/graphics/Rect;)Z"/>
+ <method name="setClipToBounds(Z)Z"/>
+ <method name="setClipToOutline(Z)Z"/>
+ <method name="setElevation(F)Z"/>
+ <method name="setForceDarkAllowed(Z)Z"/>
+ <method name="setHasOverlappingRendering(Z)Z"/>
+ <method name="setOutline(Landroid/graphics/Outline;)Z"/>
+ <method name="setPivotX(F)Z"/>
+ <method name="setPivotY(F)Z"/>
+ <method name="setPosition(IIII)Z"/>
+ <method name="setPosition(Landroid/graphics/Rect;)Z"/>
+ <method name="setProjectBackwards(Z)Z"/>
+ <method name="setProjectionReceiver(Z)Z"/>
+ <method name="setRotationX(F)Z"/>
+ <method name="setRotationY(F)Z"/>
+ <method name="setRotationZ(F)Z"/>
+ <method name="setScaleX(F)Z"/>
+ <method name="setScaleY(F)Z"/>
+ <method name="setSpotShadowColor(I)Z"/>
+ <method name="setTranslationX(F)Z"/>
+ <method name="setTranslationY(F)Z"/>
+ <method name="setTranslationZ(F)Z"/>
+ <method name="setUseCompositingLayer(ZLandroid/graphics/Paint;)Z"/>
+ </class>
<class name="android/graphics/Shader" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V" deprecated="26"/>
@@ -14366,18 +14835,18 @@
</class>
<class name="android/graphics/SurfaceTexture$OutOfResourcesException" since="11" deprecated="19">
<extends name="java/lang/Exception"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
</class>
<class name="android/graphics/SweepGradient" since="1">
<extends name="android/graphics/Shader"/>
<method name="&lt;init>(FFII)V"/>
+ <method name="&lt;init>(FFJJ)V" since="29"/>
<method name="&lt;init>(FF[I[F)V"/>
+ <method name="&lt;init>(FF[J[F)V" since="29"/>
</class>
<class name="android/graphics/Typeface" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(J)V" since="29"/>
<method name="create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;"/>
<method name="create(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;" since="28"/>
<method name="create(Ljava/lang/String;I)Landroid/graphics/Typeface;"/>
@@ -14413,6 +14882,15 @@
<method name="setTtcIndex(I)Landroid/graphics/Typeface$Builder;"/>
<method name="setWeight(I)Landroid/graphics/Typeface$Builder;"/>
</class>
+ <class name="android/graphics/Typeface$CustomFallbackBuilder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/graphics/fonts/FontFamily;)V"/>
+ <method name="addCustomFallback(Landroid/graphics/fonts/FontFamily;)Landroid/graphics/Typeface$CustomFallbackBuilder;"/>
+ <method name="build()Landroid/graphics/Typeface;"/>
+ <method name="getMaxCustomFallbackCount()I"/>
+ <method name="setStyle(Landroid/graphics/fonts/FontStyle;)Landroid/graphics/Typeface$CustomFallbackBuilder;"/>
+ <method name="setSystemFallback(Ljava/lang/String;)Landroid/graphics/Typeface$CustomFallbackBuilder;"/>
+ </class>
<class name="android/graphics/Xfermode" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
@@ -14494,14 +14972,14 @@
</class>
<class name="android/graphics/drawable/BitmapDrawable" since="1">
<extends name="android/graphics/drawable/Drawable"/>
- <method name="&lt;init>()V" deprecated="16"/>
+ <method name="&lt;init>()V" deprecated="15"/>
<method name="&lt;init>(Landroid/content/res/Resources;)V" since="4" deprecated="18"/>
<method name="&lt;init>(Landroid/content/res/Resources;Landroid/graphics/Bitmap;)V" since="4"/>
<method name="&lt;init>(Landroid/content/res/Resources;Ljava/io/InputStream;)V" since="5"/>
<method name="&lt;init>(Landroid/content/res/Resources;Ljava/lang/String;)V" since="5"/>
- <method name="&lt;init>(Landroid/graphics/Bitmap;)V" deprecated="16"/>
- <method name="&lt;init>(Ljava/io/InputStream;)V" deprecated="16"/>
- <method name="&lt;init>(Ljava/lang/String;)V" deprecated="16"/>
+ <method name="&lt;init>(Landroid/graphics/Bitmap;)V" deprecated="15"/>
+ <method name="&lt;init>(Ljava/io/InputStream;)V" deprecated="15"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" deprecated="15"/>
<method name="getBitmap()Landroid/graphics/Bitmap;"/>
<method name="getGravity()I"/>
<method name="getPaint()Landroid/graphics/Paint;"/>
@@ -14535,6 +15013,16 @@
<method name="getColor()I" since="11"/>
<method name="setColor(I)V" since="11"/>
</class>
+ <class name="android/graphics/drawable/ColorStateListDrawable" since="29">
+ <extends name="android/graphics/drawable/Drawable"/>
+ <implements name="android/graphics/drawable/Drawable$Callback"/>
+ <method name="&lt;init>()V"/>
+ <method name="&lt;init>(Landroid/content/res/ColorStateList;)V"/>
+ <method name="clearAlpha()V"/>
+ <method name="getColorStateList()Landroid/content/res/ColorStateList;"/>
+ <method name="hasFocusStateSpecified()Z"/>
+ <method name="setColorStateList(Landroid/content/res/ColorStateList;)V"/>
+ </class>
<class name="android/graphics/drawable/Drawable" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
@@ -14567,7 +15055,8 @@
<method name="getLevel()I"/>
<method name="getMinimumHeight()I"/>
<method name="getMinimumWidth()I"/>
- <method name="getOpacity()I"/>
+ <method name="getOpacity()I" deprecated="29"/>
+ <method name="getOpticalInsets()Landroid/graphics/Insets;" since="29"/>
<method name="getOutline(Landroid/graphics/Outline;)V" since="21"/>
<method name="getPadding(Landroid/graphics/Rect;)Z"/>
<method name="getState()[I"/>
@@ -14577,6 +15066,7 @@
<method name="invalidateSelf()V"/>
<method name="isAutoMirrored()Z" since="19"/>
<method name="isFilterBitmap()Z" since="23"/>
+ <method name="isProjected()Z" since="29"/>
<method name="isStateful()Z"/>
<method name="isVisible()Z"/>
<method name="jumpToCurrentState()V" since="11"/>
@@ -14593,7 +15083,7 @@
<method name="setBounds(Landroid/graphics/Rect;)V"/>
<method name="setCallback(Landroid/graphics/drawable/Drawable$Callback;)V"/>
<method name="setChangingConfigurations(I)V"/>
- <method name="setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V"/>
+ <method name="setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V" deprecated="29"/>
<method name="setColorFilter(Landroid/graphics/ColorFilter;)V"/>
<method name="setDither(Z)V" deprecated="23"/>
<method name="setFilterBitmap(Z)V"/>
@@ -14603,6 +15093,7 @@
<method name="setLevel(I)Z"/>
<method name="setState([I)Z"/>
<method name="setTint(I)V" since="21"/>
+ <method name="setTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
<method name="setTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
<method name="setVisible(ZZ)Z"/>
@@ -14634,8 +15125,6 @@
</class>
<class name="android/graphics/drawable/DrawableContainer$DrawableContainerState" since="1">
<extends name="android/graphics/drawable/Drawable$ConstantState"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/DrawableContainer;Landroid/content/res/Resources;)V" since="29"/>
<method name="addChild(Landroid/graphics/drawable/Drawable;)I"/>
<method name="canConstantState()Z"/>
<method name="computeConstantSize()V" since="11"/>
@@ -14677,24 +15166,34 @@
<method name="getGradientCenterY()F" since="24"/>
<method name="getGradientRadius()F" since="21"/>
<method name="getGradientType()I" since="24"/>
+ <method name="getInnerRadius()I" since="29"/>
+ <method name="getInnerRadiusRatio()F" since="29"/>
<method name="getOrientation()Landroid/graphics/drawable/GradientDrawable$Orientation;" since="16"/>
<method name="getShape()I" since="24"/>
+ <method name="getThickness()I" since="29"/>
+ <method name="getThicknessRatio()F" since="29"/>
<method name="getUseLevel()Z" since="24"/>
<method name="setColor(I)V"/>
<method name="setColor(Landroid/content/res/ColorStateList;)V" since="21"/>
<method name="setColors([I)V" since="16"/>
+ <method name="setColors([I[F)V" since="29"/>
<method name="setCornerRadii([F)V"/>
<method name="setCornerRadius(F)V"/>
<method name="setGradientCenter(FF)V"/>
<method name="setGradientRadius(F)V"/>
<method name="setGradientType(I)V"/>
+ <method name="setInnerRadius(I)V" since="29"/>
+ <method name="setInnerRadiusRatio(F)V" since="29"/>
<method name="setOrientation(Landroid/graphics/drawable/GradientDrawable$Orientation;)V" since="16"/>
+ <method name="setPadding(IIII)V" since="29"/>
<method name="setShape(I)V"/>
<method name="setSize(II)V"/>
<method name="setStroke(II)V"/>
<method name="setStroke(IIFF)V"/>
<method name="setStroke(ILandroid/content/res/ColorStateList;)V" since="21"/>
<method name="setStroke(ILandroid/content/res/ColorStateList;FF)V" since="21"/>
+ <method name="setThickness(I)V" since="29"/>
+ <method name="setThicknessRatio(F)V" since="29"/>
<method name="setUseLevel(Z)V"/>
<field name="LINE"/>
<field name="LINEAR_GRADIENT"/>
@@ -14720,8 +15219,6 @@
<class name="android/graphics/drawable/Icon" since="23">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="createWithAdaptiveBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/drawable/Icon;" since="26"/>
<method name="createWithBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/drawable/Icon;"/>
<method name="createWithContentUri(Landroid/net/Uri;)Landroid/graphics/drawable/Icon;"/>
@@ -14738,6 +15235,7 @@
<method name="loadDrawableAsync(Landroid/content/Context;Landroid/graphics/drawable/Icon$OnDrawableLoadedListener;Landroid/os/Handler;)V"/>
<method name="loadDrawableAsync(Landroid/content/Context;Landroid/os/Message;)V"/>
<method name="setTint(I)Landroid/graphics/drawable/Icon;"/>
+ <method name="setTintBlendMode(Landroid/graphics/BlendMode;)Landroid/graphics/drawable/Icon;" since="29"/>
<method name="setTintList(Landroid/content/res/ColorStateList;)Landroid/graphics/drawable/Icon;"/>
<method name="setTintMode(Landroid/graphics/PorterDuff$Mode;)Landroid/graphics/drawable/Icon;"/>
<field name="CREATOR"/>
@@ -14819,8 +15317,8 @@
<extends name="android/graphics/drawable/Drawable"/>
<method name="&lt;init>(Landroid/content/res/Resources;Landroid/graphics/Bitmap;[BLandroid/graphics/Rect;Ljava/lang/String;)V" since="4"/>
<method name="&lt;init>(Landroid/content/res/Resources;Landroid/graphics/NinePatch;)V" since="4"/>
- <method name="&lt;init>(Landroid/graphics/Bitmap;[BLandroid/graphics/Rect;Ljava/lang/String;)V" deprecated="16"/>
- <method name="&lt;init>(Landroid/graphics/NinePatch;)V" deprecated="16"/>
+ <method name="&lt;init>(Landroid/graphics/Bitmap;[BLandroid/graphics/Rect;Ljava/lang/String;)V" deprecated="15"/>
+ <method name="&lt;init>(Landroid/graphics/NinePatch;)V" deprecated="15"/>
<method name="getPaint()Landroid/graphics/Paint;"/>
<method name="setTargetDensity(I)V" since="4"/>
<method name="setTargetDensity(Landroid/graphics/Canvas;)V" since="4"/>
@@ -14899,10 +15397,13 @@
<extends name="android/graphics/drawable/DrawableContainer"/>
<method name="&lt;init>()V"/>
<method name="addState([ILandroid/graphics/drawable/Drawable;)V"/>
+ <method name="findStateDrawableIndex([I)I" since="29"/>
+ <method name="getStateCount()I" since="29"/>
+ <method name="getStateDrawable(I)Landroid/graphics/drawable/Drawable;" since="29"/>
+ <method name="getStateSet(I)[I" since="29"/>
</class>
<class name="android/graphics/drawable/TransitionDrawable" since="1">
<extends name="android/graphics/drawable/LayerDrawable"/>
- <method name="&lt;init>()V" removed="3"/>
<method name="&lt;init>([Landroid/graphics/drawable/Drawable;)V" since="3"/>
<method name="isCrossFadeEnabled()Z"/>
<method name="resetTransition()V"/>
@@ -14955,6 +15456,61 @@
<method name="onResize(FF)V"/>
<method name="resize(FF)V"/>
</class>
+ <class name="android/graphics/fonts/Font" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getAxes()[Landroid/graphics/fonts/FontVariationAxis;"/>
+ <method name="getBuffer()Ljava/nio/ByteBuffer;"/>
+ <method name="getFile()Ljava/io/File;"/>
+ <method name="getLocaleList()Landroid/os/LocaleList;"/>
+ <method name="getStyle()Landroid/graphics/fonts/FontStyle;"/>
+ <method name="getTtcIndex()I"/>
+ </class>
+ <class name="android/graphics/fonts/Font$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/content/res/AssetManager;Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Landroid/content/res/Resources;I)V"/>
+ <method name="&lt;init>(Landroid/os/ParcelFileDescriptor;)V"/>
+ <method name="&lt;init>(Landroid/os/ParcelFileDescriptor;JJ)V"/>
+ <method name="&lt;init>(Ljava/io/File;)V"/>
+ <method name="&lt;init>(Ljava/nio/ByteBuffer;)V"/>
+ <method name="build()Landroid/graphics/fonts/Font;"/>
+ <method name="setFontVariationSettings(Ljava/lang/String;)Landroid/graphics/fonts/Font$Builder;"/>
+ <method name="setFontVariationSettings([Landroid/graphics/fonts/FontVariationAxis;)Landroid/graphics/fonts/Font$Builder;"/>
+ <method name="setSlant(I)Landroid/graphics/fonts/Font$Builder;"/>
+ <method name="setTtcIndex(I)Landroid/graphics/fonts/Font$Builder;"/>
+ <method name="setWeight(I)Landroid/graphics/fonts/Font$Builder;"/>
+ </class>
+ <class name="android/graphics/fonts/FontFamily" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getFont(I)Landroid/graphics/fonts/Font;"/>
+ <method name="getSize()I"/>
+ </class>
+ <class name="android/graphics/fonts/FontFamily$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/graphics/fonts/Font;)V"/>
+ <method name="addFont(Landroid/graphics/fonts/Font;)Landroid/graphics/fonts/FontFamily$Builder;"/>
+ <method name="build()Landroid/graphics/fonts/FontFamily;"/>
+ </class>
+ <class name="android/graphics/fonts/FontStyle" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="&lt;init>(II)V"/>
+ <method name="getSlant()I"/>
+ <method name="getWeight()I"/>
+ <field name="FONT_SLANT_ITALIC"/>
+ <field name="FONT_SLANT_UPRIGHT"/>
+ <field name="FONT_WEIGHT_BLACK"/>
+ <field name="FONT_WEIGHT_BOLD"/>
+ <field name="FONT_WEIGHT_EXTRA_BOLD"/>
+ <field name="FONT_WEIGHT_EXTRA_LIGHT"/>
+ <field name="FONT_WEIGHT_LIGHT"/>
+ <field name="FONT_WEIGHT_MAX"/>
+ <field name="FONT_WEIGHT_MEDIUM"/>
+ <field name="FONT_WEIGHT_MIN"/>
+ <field name="FONT_WEIGHT_NORMAL"/>
+ <field name="FONT_WEIGHT_SEMI_BOLD"/>
+ <field name="FONT_WEIGHT_THIN"/>
+ </class>
<class name="android/graphics/fonts/FontVariationAxis" since="26">
<extends name="java/lang/Object"/>
<method name="&lt;init>(Ljava/lang/String;F)V"/>
@@ -14963,6 +15519,10 @@
<method name="getTag()Ljava/lang/String;"/>
<method name="toFontVariationSettings([Landroid/graphics/fonts/FontVariationAxis;)Ljava/lang/String;"/>
</class>
+ <class name="android/graphics/fonts/SystemFonts" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getAvailableFonts()Ljava/util/Set;"/>
+ </class>
<class name="android/graphics/pdf/PdfDocument" since="19">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
@@ -14974,14 +15534,11 @@
</class>
<class name="android/graphics/pdf/PdfDocument$Page" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/graphics/Canvas;Landroid/graphics/pdf/PdfDocument$PageInfo;)V" since="29"/>
<method name="getCanvas()Landroid/graphics/Canvas;"/>
<method name="getInfo()Landroid/graphics/pdf/PdfDocument$PageInfo;"/>
</class>
<class name="android/graphics/pdf/PdfDocument$PageInfo" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getContentRect()Landroid/graphics/Rect;"/>
<method name="getPageHeight()I"/>
<method name="getPageNumber()I"/>
@@ -15004,8 +15561,6 @@
<class name="android/graphics/pdf/PdfRenderer$Page" since="21">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>(Landroid/graphics/pdf/PdfRenderer;)V" removed="29"/>
- <method name="&lt;init>(Landroid/graphics/pdf/PdfRenderer;I)V" since="29"/>
<method name="getHeight()I"/>
<method name="getIndex()I"/>
<method name="getWidth()I"/>
@@ -15013,264 +15568,321 @@
<field name="RENDER_MODE_FOR_DISPLAY"/>
<field name="RENDER_MODE_FOR_PRINT"/>
</class>
- <class name="android/hardware/Camera" since="1" deprecated="21">
+ <class name="android/graphics/text/LineBreaker" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="computeLineBreaks(Landroid/graphics/text/MeasuredText;Landroid/graphics/text/LineBreaker$ParagraphConstraints;I)Landroid/graphics/text/LineBreaker$Result;"/>
+ <field name="BREAK_STRATEGY_BALANCED"/>
+ <field name="BREAK_STRATEGY_HIGH_QUALITY"/>
+ <field name="BREAK_STRATEGY_SIMPLE"/>
+ <field name="HYPHENATION_FREQUENCY_FULL"/>
+ <field name="HYPHENATION_FREQUENCY_NONE"/>
+ <field name="HYPHENATION_FREQUENCY_NORMAL"/>
+ <field name="JUSTIFICATION_MODE_INTER_WORD"/>
+ <field name="JUSTIFICATION_MODE_NONE"/>
+ </class>
+ <class name="android/graphics/text/LineBreaker$Builder" since="29">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
- <method name="addCallbackBuffer([B)V" since="8"/>
- <method name="autoFocus(Landroid/hardware/Camera$AutoFocusCallback;)V"/>
- <method name="cancelAutoFocus()V" since="5"/>
- <method name="enableShutterSound(Z)Z" since="17"/>
- <method name="getCameraInfo(ILandroid/hardware/Camera$CameraInfo;)V" since="9"/>
- <method name="getNumberOfCameras()I" since="9"/>
- <method name="getParameters()Landroid/hardware/Camera$Parameters;"/>
- <method name="lock()V" since="5"/>
- <method name="open()Landroid/hardware/Camera;"/>
- <method name="open(I)Landroid/hardware/Camera;" since="9"/>
- <method name="reconnect()V" since="8"/>
- <method name="release()V"/>
- <method name="setAutoFocusMoveCallback(Landroid/hardware/Camera$AutoFocusMoveCallback;)V" since="16"/>
- <method name="setDisplayOrientation(I)V" since="8"/>
- <method name="setErrorCallback(Landroid/hardware/Camera$ErrorCallback;)V"/>
- <method name="setFaceDetectionListener(Landroid/hardware/Camera$FaceDetectionListener;)V" since="14"/>
- <method name="setOneShotPreviewCallback(Landroid/hardware/Camera$PreviewCallback;)V" since="3"/>
- <method name="setParameters(Landroid/hardware/Camera$Parameters;)V"/>
- <method name="setPreviewCallback(Landroid/hardware/Camera$PreviewCallback;)V"/>
- <method name="setPreviewCallbackWithBuffer(Landroid/hardware/Camera$PreviewCallback;)V" since="8"/>
- <method name="setPreviewDisplay(Landroid/view/SurfaceHolder;)V"/>
- <method name="setPreviewTexture(Landroid/graphics/SurfaceTexture;)V" since="11"/>
- <method name="setZoomChangeListener(Landroid/hardware/Camera$OnZoomChangeListener;)V" since="8"/>
- <method name="startFaceDetection()V" since="14"/>
- <method name="startPreview()V"/>
- <method name="startSmoothZoom(I)V" since="8"/>
- <method name="stopFaceDetection()V" since="14"/>
- <method name="stopPreview()V"/>
- <method name="stopSmoothZoom()V" since="8"/>
- <method name="takePicture(Landroid/hardware/Camera$ShutterCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;)V"/>
- <method name="takePicture(Landroid/hardware/Camera$ShutterCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;)V" since="5"/>
- <method name="unlock()V" since="5"/>
+ <method name="build()Landroid/graphics/text/LineBreaker;"/>
+ <method name="setBreakStrategy(I)Landroid/graphics/text/LineBreaker$Builder;"/>
+ <method name="setHyphenationFrequency(I)Landroid/graphics/text/LineBreaker$Builder;"/>
+ <method name="setIndents([I)Landroid/graphics/text/LineBreaker$Builder;"/>
+ <method name="setJustificationMode(I)Landroid/graphics/text/LineBreaker$Builder;"/>
+ </class>
+ <class name="android/graphics/text/LineBreaker$ParagraphConstraints" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="getDefaultTabStop()F"/>
+ <method name="getFirstWidth()F"/>
+ <method name="getFirstWidthLineCount()I"/>
+ <method name="getTabStops()[F"/>
+ <method name="getWidth()F"/>
+ <method name="setIndent(FI)V"/>
+ <method name="setTabStops([FF)V"/>
+ <method name="setWidth(F)V"/>
+ </class>
+ <class name="android/graphics/text/LineBreaker$Result" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getEndLineHyphenEdit(I)I"/>
+ <method name="getLineAscent(I)F"/>
+ <method name="getLineBreakOffset(I)I"/>
+ <method name="getLineCount()I"/>
+ <method name="getLineDescent(I)F"/>
+ <method name="getLineWidth(I)F"/>
+ <method name="getStartLineHyphenEdit(I)I"/>
+ <method name="hasLineTab(I)Z"/>
+ </class>
+ <class name="android/graphics/text/MeasuredText" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getBounds(IILandroid/graphics/Rect;)V"/>
+ <method name="getCharWidthAt(I)F"/>
+ <method name="getWidth(II)F"/>
+ </class>
+ <class name="android/graphics/text/MeasuredText$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/graphics/text/MeasuredText;)V"/>
+ <method name="&lt;init>([C)V"/>
+ <method name="appendReplacementRun(Landroid/graphics/Paint;IF)Landroid/graphics/text/MeasuredText$Builder;"/>
+ <method name="appendStyleRun(Landroid/graphics/Paint;IZ)Landroid/graphics/text/MeasuredText$Builder;"/>
+ <method name="build()Landroid/graphics/text/MeasuredText;"/>
+ <method name="setComputeHyphenation(Z)Landroid/graphics/text/MeasuredText$Builder;"/>
+ <method name="setComputeLayout(Z)Landroid/graphics/text/MeasuredText$Builder;"/>
+ </class>
+ <class name="android/hardware/Camera" since="1" deprecated="21">
+ <extends name="java/lang/Object"/>
+ <method name="addCallbackBuffer([B)V" since="8" deprecated="29"/>
+ <method name="autoFocus(Landroid/hardware/Camera$AutoFocusCallback;)V" deprecated="29"/>
+ <method name="cancelAutoFocus()V" since="5" deprecated="29"/>
+ <method name="enableShutterSound(Z)Z" since="17" deprecated="29"/>
+ <method name="getCameraInfo(ILandroid/hardware/Camera$CameraInfo;)V" since="9" deprecated="29"/>
+ <method name="getNumberOfCameras()I" since="9" deprecated="29"/>
+ <method name="getParameters()Landroid/hardware/Camera$Parameters;" deprecated="29"/>
+ <method name="lock()V" since="5" deprecated="29"/>
+ <method name="open()Landroid/hardware/Camera;" deprecated="29"/>
+ <method name="open(I)Landroid/hardware/Camera;" since="9" deprecated="29"/>
+ <method name="reconnect()V" since="8" deprecated="29"/>
+ <method name="release()V" deprecated="29"/>
+ <method name="setAutoFocusMoveCallback(Landroid/hardware/Camera$AutoFocusMoveCallback;)V" since="16" deprecated="29"/>
+ <method name="setDisplayOrientation(I)V" since="8" deprecated="29"/>
+ <method name="setErrorCallback(Landroid/hardware/Camera$ErrorCallback;)V" deprecated="29"/>
+ <method name="setFaceDetectionListener(Landroid/hardware/Camera$FaceDetectionListener;)V" since="14" deprecated="29"/>
+ <method name="setOneShotPreviewCallback(Landroid/hardware/Camera$PreviewCallback;)V" since="3" deprecated="29"/>
+ <method name="setParameters(Landroid/hardware/Camera$Parameters;)V" deprecated="29"/>
+ <method name="setPreviewCallback(Landroid/hardware/Camera$PreviewCallback;)V" deprecated="29"/>
+ <method name="setPreviewCallbackWithBuffer(Landroid/hardware/Camera$PreviewCallback;)V" since="8" deprecated="29"/>
+ <method name="setPreviewDisplay(Landroid/view/SurfaceHolder;)V" deprecated="29"/>
+ <method name="setPreviewTexture(Landroid/graphics/SurfaceTexture;)V" since="11" deprecated="29"/>
+ <method name="setZoomChangeListener(Landroid/hardware/Camera$OnZoomChangeListener;)V" since="8" deprecated="29"/>
+ <method name="startFaceDetection()V" since="14" deprecated="29"/>
+ <method name="startPreview()V" deprecated="29"/>
+ <method name="startSmoothZoom(I)V" since="8" deprecated="29"/>
+ <method name="stopFaceDetection()V" since="14" deprecated="29"/>
+ <method name="stopPreview()V" deprecated="29"/>
+ <method name="stopSmoothZoom()V" since="8" deprecated="29"/>
+ <method name="takePicture(Landroid/hardware/Camera$ShutterCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;)V" deprecated="29"/>
+ <method name="takePicture(Landroid/hardware/Camera$ShutterCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;)V" since="5" deprecated="29"/>
+ <method name="unlock()V" since="5" deprecated="29"/>
<field name="ACTION_NEW_PICTURE" since="14" deprecated="24"/>
<field name="ACTION_NEW_VIDEO" since="14" deprecated="24"/>
- <field name="CAMERA_ERROR_EVICTED" since="23"/>
- <field name="CAMERA_ERROR_SERVER_DIED"/>
- <field name="CAMERA_ERROR_UNKNOWN"/>
+ <field name="CAMERA_ERROR_EVICTED" since="23" deprecated="29"/>
+ <field name="CAMERA_ERROR_SERVER_DIED" deprecated="29"/>
+ <field name="CAMERA_ERROR_UNKNOWN" deprecated="29"/>
</class>
<class name="android/hardware/Camera$Area" since="14" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/graphics/Rect;I)V"/>
- <field name="rect"/>
- <field name="weight"/>
+ <method name="&lt;init>(Landroid/graphics/Rect;I)V" deprecated="29"/>
+ <field name="rect" deprecated="29"/>
+ <field name="weight" deprecated="29"/>
</class>
<class name="android/hardware/Camera$AutoFocusCallback" since="1" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="onAutoFocus(ZLandroid/hardware/Camera;)V"/>
+ <method name="onAutoFocus(ZLandroid/hardware/Camera;)V" deprecated="29"/>
</class>
<class name="android/hardware/Camera$AutoFocusMoveCallback" since="16" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="onAutoFocusMoving(ZLandroid/hardware/Camera;)V"/>
+ <method name="onAutoFocusMoving(ZLandroid/hardware/Camera;)V" deprecated="29"/>
</class>
<class name="android/hardware/Camera$CameraInfo" since="9" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <field name="CAMERA_FACING_BACK"/>
- <field name="CAMERA_FACING_FRONT"/>
- <field name="canDisableShutterSound" since="17"/>
- <field name="facing"/>
- <field name="orientation"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <field name="CAMERA_FACING_BACK" deprecated="29"/>
+ <field name="CAMERA_FACING_FRONT" deprecated="29"/>
+ <field name="canDisableShutterSound" since="17" deprecated="29"/>
+ <field name="facing" deprecated="29"/>
+ <field name="orientation" deprecated="29"/>
</class>
<class name="android/hardware/Camera$ErrorCallback" since="1" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="onError(ILandroid/hardware/Camera;)V"/>
+ <method name="onError(ILandroid/hardware/Camera;)V" deprecated="29"/>
</class>
<class name="android/hardware/Camera$Face" since="14" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <field name="id"/>
- <field name="leftEye"/>
- <field name="mouth"/>
- <field name="rect"/>
- <field name="rightEye"/>
- <field name="score"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <field name="id" deprecated="29"/>
+ <field name="leftEye" deprecated="29"/>
+ <field name="mouth" deprecated="29"/>
+ <field name="rect" deprecated="29"/>
+ <field name="rightEye" deprecated="29"/>
+ <field name="score" deprecated="29"/>
</class>
<class name="android/hardware/Camera$FaceDetectionListener" since="14" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="onFaceDetection([Landroid/hardware/Camera$Face;Landroid/hardware/Camera;)V"/>
+ <method name="onFaceDetection([Landroid/hardware/Camera$Face;Landroid/hardware/Camera;)V" deprecated="29"/>
</class>
<class name="android/hardware/Camera$OnZoomChangeListener" since="8" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="onZoomChange(IZLandroid/hardware/Camera;)V"/>
+ <method name="onZoomChange(IZLandroid/hardware/Camera;)V" deprecated="29"/>
</class>
<class name="android/hardware/Camera$Parameters" since="1" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/hardware/Camera;)V"/>
- <method name="flatten()Ljava/lang/String;"/>
- <method name="get(Ljava/lang/String;)Ljava/lang/String;"/>
- <method name="getAntibanding()Ljava/lang/String;" since="5"/>
- <method name="getAutoExposureLock()Z" since="14"/>
- <method name="getAutoWhiteBalanceLock()Z" since="14"/>
- <method name="getColorEffect()Ljava/lang/String;" since="5"/>
- <method name="getExposureCompensation()I" since="8"/>
- <method name="getExposureCompensationStep()F" since="8"/>
- <method name="getFlashMode()Ljava/lang/String;" since="5"/>
- <method name="getFocalLength()F" since="8"/>
- <method name="getFocusAreas()Ljava/util/List;" since="14"/>
- <method name="getFocusDistances([F)V" since="9"/>
- <method name="getFocusMode()Ljava/lang/String;" since="5"/>
- <method name="getHorizontalViewAngle()F" since="8"/>
- <method name="getInt(Ljava/lang/String;)I"/>
- <method name="getJpegQuality()I" since="5"/>
- <method name="getJpegThumbnailQuality()I" since="5"/>
- <method name="getJpegThumbnailSize()Landroid/hardware/Camera$Size;" since="5"/>
- <method name="getMaxExposureCompensation()I" since="8"/>
- <method name="getMaxNumDetectedFaces()I" since="14"/>
- <method name="getMaxNumFocusAreas()I" since="14"/>
- <method name="getMaxNumMeteringAreas()I" since="14"/>
- <method name="getMaxZoom()I" since="8"/>
- <method name="getMeteringAreas()Ljava/util/List;" since="14"/>
- <method name="getMinExposureCompensation()I" since="8"/>
- <method name="getPictureFormat()I"/>
- <method name="getPictureSize()Landroid/hardware/Camera$Size;"/>
- <method name="getPreferredPreviewSizeForVideo()Landroid/hardware/Camera$Size;" since="11"/>
- <method name="getPreviewFormat()I"/>
- <method name="getPreviewFpsRange([I)V" since="9"/>
- <method name="getPreviewFrameRate()I" deprecated="16"/>
- <method name="getPreviewSize()Landroid/hardware/Camera$Size;"/>
- <method name="getSceneMode()Ljava/lang/String;" since="5"/>
- <method name="getSupportedAntibanding()Ljava/util/List;" since="5"/>
- <method name="getSupportedColorEffects()Ljava/util/List;" since="5"/>
- <method name="getSupportedFlashModes()Ljava/util/List;" since="5"/>
- <method name="getSupportedFocusModes()Ljava/util/List;" since="5"/>
- <method name="getSupportedJpegThumbnailSizes()Ljava/util/List;" since="8"/>
- <method name="getSupportedPictureFormats()Ljava/util/List;" since="5"/>
- <method name="getSupportedPictureSizes()Ljava/util/List;" since="5"/>
- <method name="getSupportedPreviewFormats()Ljava/util/List;" since="5"/>
- <method name="getSupportedPreviewFpsRange()Ljava/util/List;" since="9"/>
- <method name="getSupportedPreviewFrameRates()Ljava/util/List;" since="5" deprecated="16"/>
- <method name="getSupportedPreviewSizes()Ljava/util/List;" since="5"/>
- <method name="getSupportedSceneModes()Ljava/util/List;" since="5"/>
- <method name="getSupportedVideoSizes()Ljava/util/List;" since="11"/>
- <method name="getSupportedWhiteBalance()Ljava/util/List;" since="5"/>
- <method name="getVerticalViewAngle()F" since="8"/>
- <method name="getVideoStabilization()Z" since="15"/>
- <method name="getWhiteBalance()Ljava/lang/String;" since="5"/>
- <method name="getZoom()I" since="8"/>
- <method name="getZoomRatios()Ljava/util/List;" since="8"/>
- <method name="isAutoExposureLockSupported()Z" since="14"/>
- <method name="isAutoWhiteBalanceLockSupported()Z" since="14"/>
- <method name="isSmoothZoomSupported()Z" since="8"/>
- <method name="isVideoSnapshotSupported()Z" since="14"/>
- <method name="isVideoStabilizationSupported()Z" since="15"/>
- <method name="isZoomSupported()Z" since="8"/>
- <method name="remove(Ljava/lang/String;)V"/>
- <method name="removeGpsData()V" since="5"/>
- <method name="set(Ljava/lang/String;I)V"/>
- <method name="set(Ljava/lang/String;Ljava/lang/String;)V"/>
- <method name="setAntibanding(Ljava/lang/String;)V" since="5"/>
- <method name="setAutoExposureLock(Z)V" since="14"/>
- <method name="setAutoWhiteBalanceLock(Z)V" since="14"/>
- <method name="setColorEffect(Ljava/lang/String;)V" since="5"/>
- <method name="setExposureCompensation(I)V" since="8"/>
- <method name="setFlashMode(Ljava/lang/String;)V" since="5"/>
- <method name="setFocusAreas(Ljava/util/List;)V" since="14"/>
- <method name="setFocusMode(Ljava/lang/String;)V" since="5"/>
- <method name="setGpsAltitude(D)V" since="5"/>
- <method name="setGpsLatitude(D)V" since="5"/>
- <method name="setGpsLongitude(D)V" since="5"/>
- <method name="setGpsProcessingMethod(Ljava/lang/String;)V" since="8"/>
- <method name="setGpsTimestamp(J)V" since="5"/>
- <method name="setJpegQuality(I)V" since="5"/>
- <method name="setJpegThumbnailQuality(I)V" since="5"/>
- <method name="setJpegThumbnailSize(II)V" since="5"/>
- <method name="setMeteringAreas(Ljava/util/List;)V" since="14"/>
- <method name="setPictureFormat(I)V"/>
- <method name="setPictureSize(II)V"/>
- <method name="setPreviewFormat(I)V"/>
- <method name="setPreviewFpsRange(II)V" since="9"/>
- <method name="setPreviewFrameRate(I)V" deprecated="16"/>
- <method name="setPreviewSize(II)V"/>
- <method name="setRecordingHint(Z)V" since="14"/>
- <method name="setRotation(I)V" since="5"/>
- <method name="setSceneMode(Ljava/lang/String;)V" since="5"/>
- <method name="setVideoStabilization(Z)V" since="15"/>
- <method name="setWhiteBalance(Ljava/lang/String;)V" since="5"/>
- <method name="setZoom(I)V" since="8"/>
- <method name="unflatten(Ljava/lang/String;)V"/>
- <field name="ANTIBANDING_50HZ" since="5"/>
- <field name="ANTIBANDING_60HZ" since="5"/>
- <field name="ANTIBANDING_AUTO" since="5"/>
- <field name="ANTIBANDING_OFF" since="5"/>
- <field name="EFFECT_AQUA" since="5"/>
- <field name="EFFECT_BLACKBOARD" since="5"/>
- <field name="EFFECT_MONO" since="5"/>
- <field name="EFFECT_NEGATIVE" since="5"/>
- <field name="EFFECT_NONE" since="5"/>
- <field name="EFFECT_POSTERIZE" since="5"/>
- <field name="EFFECT_SEPIA" since="5"/>
- <field name="EFFECT_SOLARIZE" since="5"/>
- <field name="EFFECT_WHITEBOARD" since="5"/>
- <field name="FLASH_MODE_AUTO" since="5"/>
- <field name="FLASH_MODE_OFF" since="5"/>
- <field name="FLASH_MODE_ON" since="5"/>
- <field name="FLASH_MODE_RED_EYE" since="5"/>
- <field name="FLASH_MODE_TORCH" since="5"/>
- <field name="FOCUS_DISTANCE_FAR_INDEX" since="9"/>
- <field name="FOCUS_DISTANCE_NEAR_INDEX" since="9"/>
- <field name="FOCUS_DISTANCE_OPTIMAL_INDEX" since="9"/>
- <field name="FOCUS_MODE_AUTO" since="5"/>
- <field name="FOCUS_MODE_CONTINUOUS_PICTURE" since="14"/>
- <field name="FOCUS_MODE_CONTINUOUS_VIDEO" since="9"/>
- <field name="FOCUS_MODE_EDOF" since="8"/>
- <field name="FOCUS_MODE_FIXED" since="5"/>
- <field name="FOCUS_MODE_INFINITY" since="5"/>
- <field name="FOCUS_MODE_MACRO" since="5"/>
- <field name="PREVIEW_FPS_MAX_INDEX" since="9"/>
- <field name="PREVIEW_FPS_MIN_INDEX" since="9"/>
- <field name="SCENE_MODE_ACTION" since="5"/>
- <field name="SCENE_MODE_AUTO" since="5"/>
- <field name="SCENE_MODE_BARCODE" since="8"/>
- <field name="SCENE_MODE_BEACH" since="5"/>
- <field name="SCENE_MODE_CANDLELIGHT" since="5"/>
- <field name="SCENE_MODE_FIREWORKS" since="5"/>
- <field name="SCENE_MODE_HDR" since="17"/>
- <field name="SCENE_MODE_LANDSCAPE" since="5"/>
- <field name="SCENE_MODE_NIGHT" since="5"/>
- <field name="SCENE_MODE_NIGHT_PORTRAIT" since="5"/>
- <field name="SCENE_MODE_PARTY" since="5"/>
- <field name="SCENE_MODE_PORTRAIT" since="5"/>
- <field name="SCENE_MODE_SNOW" since="5"/>
- <field name="SCENE_MODE_SPORTS" since="5"/>
- <field name="SCENE_MODE_STEADYPHOTO" since="5"/>
- <field name="SCENE_MODE_SUNSET" since="5"/>
- <field name="SCENE_MODE_THEATRE" since="5"/>
- <field name="WHITE_BALANCE_AUTO" since="5"/>
- <field name="WHITE_BALANCE_CLOUDY_DAYLIGHT" since="5"/>
- <field name="WHITE_BALANCE_DAYLIGHT" since="5"/>
- <field name="WHITE_BALANCE_FLUORESCENT" since="5"/>
- <field name="WHITE_BALANCE_INCANDESCENT" since="5"/>
- <field name="WHITE_BALANCE_SHADE" since="5"/>
- <field name="WHITE_BALANCE_TWILIGHT" since="5"/>
- <field name="WHITE_BALANCE_WARM_FLUORESCENT" since="5"/>
+ <method name="flatten()Ljava/lang/String;" deprecated="29"/>
+ <method name="get(Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+ <method name="getAntibanding()Ljava/lang/String;" since="5" deprecated="29"/>
+ <method name="getAutoExposureLock()Z" since="14" deprecated="29"/>
+ <method name="getAutoWhiteBalanceLock()Z" since="14" deprecated="29"/>
+ <method name="getColorEffect()Ljava/lang/String;" since="5" deprecated="29"/>
+ <method name="getExposureCompensation()I" since="8" deprecated="29"/>
+ <method name="getExposureCompensationStep()F" since="8" deprecated="29"/>
+ <method name="getFlashMode()Ljava/lang/String;" since="5" deprecated="29"/>
+ <method name="getFocalLength()F" since="8" deprecated="29"/>
+ <method name="getFocusAreas()Ljava/util/List;" since="14" deprecated="29"/>
+ <method name="getFocusDistances([F)V" since="9" deprecated="29"/>
+ <method name="getFocusMode()Ljava/lang/String;" since="5" deprecated="29"/>
+ <method name="getHorizontalViewAngle()F" since="8" deprecated="29"/>
+ <method name="getInt(Ljava/lang/String;)I" deprecated="29"/>
+ <method name="getJpegQuality()I" since="5" deprecated="29"/>
+ <method name="getJpegThumbnailQuality()I" since="5" deprecated="29"/>
+ <method name="getJpegThumbnailSize()Landroid/hardware/Camera$Size;" since="5" deprecated="29"/>
+ <method name="getMaxExposureCompensation()I" since="8" deprecated="29"/>
+ <method name="getMaxNumDetectedFaces()I" since="14" deprecated="29"/>
+ <method name="getMaxNumFocusAreas()I" since="14" deprecated="29"/>
+ <method name="getMaxNumMeteringAreas()I" since="14" deprecated="29"/>
+ <method name="getMaxZoom()I" since="8" deprecated="29"/>
+ <method name="getMeteringAreas()Ljava/util/List;" since="14" deprecated="29"/>
+ <method name="getMinExposureCompensation()I" since="8" deprecated="29"/>
+ <method name="getPictureFormat()I" deprecated="29"/>
+ <method name="getPictureSize()Landroid/hardware/Camera$Size;" deprecated="29"/>
+ <method name="getPreferredPreviewSizeForVideo()Landroid/hardware/Camera$Size;" since="11" deprecated="29"/>
+ <method name="getPreviewFormat()I" deprecated="29"/>
+ <method name="getPreviewFpsRange([I)V" since="9" deprecated="29"/>
+ <method name="getPreviewFrameRate()I" deprecated="15"/>
+ <method name="getPreviewSize()Landroid/hardware/Camera$Size;" deprecated="29"/>
+ <method name="getSceneMode()Ljava/lang/String;" since="5" deprecated="29"/>
+ <method name="getSupportedAntibanding()Ljava/util/List;" since="5" deprecated="29"/>
+ <method name="getSupportedColorEffects()Ljava/util/List;" since="5" deprecated="29"/>
+ <method name="getSupportedFlashModes()Ljava/util/List;" since="5" deprecated="29"/>
+ <method name="getSupportedFocusModes()Ljava/util/List;" since="5" deprecated="29"/>
+ <method name="getSupportedJpegThumbnailSizes()Ljava/util/List;" since="8" deprecated="29"/>
+ <method name="getSupportedPictureFormats()Ljava/util/List;" since="5" deprecated="29"/>
+ <method name="getSupportedPictureSizes()Ljava/util/List;" since="5" deprecated="29"/>
+ <method name="getSupportedPreviewFormats()Ljava/util/List;" since="5" deprecated="29"/>
+ <method name="getSupportedPreviewFpsRange()Ljava/util/List;" since="9" deprecated="29"/>
+ <method name="getSupportedPreviewFrameRates()Ljava/util/List;" since="5" deprecated="15"/>
+ <method name="getSupportedPreviewSizes()Ljava/util/List;" since="5" deprecated="29"/>
+ <method name="getSupportedSceneModes()Ljava/util/List;" since="5" deprecated="29"/>
+ <method name="getSupportedVideoSizes()Ljava/util/List;" since="11" deprecated="29"/>
+ <method name="getSupportedWhiteBalance()Ljava/util/List;" since="5" deprecated="29"/>
+ <method name="getVerticalViewAngle()F" since="8" deprecated="29"/>
+ <method name="getVideoStabilization()Z" since="15" deprecated="29"/>
+ <method name="getWhiteBalance()Ljava/lang/String;" since="5" deprecated="29"/>
+ <method name="getZoom()I" since="8" deprecated="29"/>
+ <method name="getZoomRatios()Ljava/util/List;" since="8" deprecated="29"/>
+ <method name="isAutoExposureLockSupported()Z" since="14" deprecated="29"/>
+ <method name="isAutoWhiteBalanceLockSupported()Z" since="14" deprecated="29"/>
+ <method name="isSmoothZoomSupported()Z" since="8" deprecated="29"/>
+ <method name="isVideoSnapshotSupported()Z" since="14" deprecated="29"/>
+ <method name="isVideoStabilizationSupported()Z" since="15" deprecated="29"/>
+ <method name="isZoomSupported()Z" since="8" deprecated="29"/>
+ <method name="remove(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="removeGpsData()V" since="5" deprecated="29"/>
+ <method name="set(Ljava/lang/String;I)V" deprecated="29"/>
+ <method name="set(Ljava/lang/String;Ljava/lang/String;)V" deprecated="29"/>
+ <method name="setAntibanding(Ljava/lang/String;)V" since="5" deprecated="29"/>
+ <method name="setAutoExposureLock(Z)V" since="14" deprecated="29"/>
+ <method name="setAutoWhiteBalanceLock(Z)V" since="14" deprecated="29"/>
+ <method name="setColorEffect(Ljava/lang/String;)V" since="5" deprecated="29"/>
+ <method name="setExposureCompensation(I)V" since="8" deprecated="29"/>
+ <method name="setFlashMode(Ljava/lang/String;)V" since="5" deprecated="29"/>
+ <method name="setFocusAreas(Ljava/util/List;)V" since="14" deprecated="29"/>
+ <method name="setFocusMode(Ljava/lang/String;)V" since="5" deprecated="29"/>
+ <method name="setGpsAltitude(D)V" since="5" deprecated="29"/>
+ <method name="setGpsLatitude(D)V" since="5" deprecated="29"/>
+ <method name="setGpsLongitude(D)V" since="5" deprecated="29"/>
+ <method name="setGpsProcessingMethod(Ljava/lang/String;)V" since="8" deprecated="29"/>
+ <method name="setGpsTimestamp(J)V" since="5" deprecated="29"/>
+ <method name="setJpegQuality(I)V" since="5" deprecated="29"/>
+ <method name="setJpegThumbnailQuality(I)V" since="5" deprecated="29"/>
+ <method name="setJpegThumbnailSize(II)V" since="5" deprecated="29"/>
+ <method name="setMeteringAreas(Ljava/util/List;)V" since="14" deprecated="29"/>
+ <method name="setPictureFormat(I)V" deprecated="29"/>
+ <method name="setPictureSize(II)V" deprecated="29"/>
+ <method name="setPreviewFormat(I)V" deprecated="29"/>
+ <method name="setPreviewFpsRange(II)V" since="9" deprecated="29"/>
+ <method name="setPreviewFrameRate(I)V" deprecated="15"/>
+ <method name="setPreviewSize(II)V" deprecated="29"/>
+ <method name="setRecordingHint(Z)V" since="14" deprecated="29"/>
+ <method name="setRotation(I)V" since="5" deprecated="29"/>
+ <method name="setSceneMode(Ljava/lang/String;)V" since="5" deprecated="29"/>
+ <method name="setVideoStabilization(Z)V" since="15" deprecated="29"/>
+ <method name="setWhiteBalance(Ljava/lang/String;)V" since="5" deprecated="29"/>
+ <method name="setZoom(I)V" since="8" deprecated="29"/>
+ <method name="unflatten(Ljava/lang/String;)V" deprecated="29"/>
+ <field name="ANTIBANDING_50HZ" since="5" deprecated="29"/>
+ <field name="ANTIBANDING_60HZ" since="5" deprecated="29"/>
+ <field name="ANTIBANDING_AUTO" since="5" deprecated="29"/>
+ <field name="ANTIBANDING_OFF" since="5" deprecated="29"/>
+ <field name="EFFECT_AQUA" since="5" deprecated="29"/>
+ <field name="EFFECT_BLACKBOARD" since="5" deprecated="29"/>
+ <field name="EFFECT_MONO" since="5" deprecated="29"/>
+ <field name="EFFECT_NEGATIVE" since="5" deprecated="29"/>
+ <field name="EFFECT_NONE" since="5" deprecated="29"/>
+ <field name="EFFECT_POSTERIZE" since="5" deprecated="29"/>
+ <field name="EFFECT_SEPIA" since="5" deprecated="29"/>
+ <field name="EFFECT_SOLARIZE" since="5" deprecated="29"/>
+ <field name="EFFECT_WHITEBOARD" since="5" deprecated="29"/>
+ <field name="FLASH_MODE_AUTO" since="5" deprecated="29"/>
+ <field name="FLASH_MODE_OFF" since="5" deprecated="29"/>
+ <field name="FLASH_MODE_ON" since="5" deprecated="29"/>
+ <field name="FLASH_MODE_RED_EYE" since="5" deprecated="29"/>
+ <field name="FLASH_MODE_TORCH" since="5" deprecated="29"/>
+ <field name="FOCUS_DISTANCE_FAR_INDEX" since="9" deprecated="29"/>
+ <field name="FOCUS_DISTANCE_NEAR_INDEX" since="9" deprecated="29"/>
+ <field name="FOCUS_DISTANCE_OPTIMAL_INDEX" since="9" deprecated="29"/>
+ <field name="FOCUS_MODE_AUTO" since="5" deprecated="29"/>
+ <field name="FOCUS_MODE_CONTINUOUS_PICTURE" since="14" deprecated="29"/>
+ <field name="FOCUS_MODE_CONTINUOUS_VIDEO" since="9" deprecated="29"/>
+ <field name="FOCUS_MODE_EDOF" since="8" deprecated="29"/>
+ <field name="FOCUS_MODE_FIXED" since="5" deprecated="29"/>
+ <field name="FOCUS_MODE_INFINITY" since="5" deprecated="29"/>
+ <field name="FOCUS_MODE_MACRO" since="5" deprecated="29"/>
+ <field name="PREVIEW_FPS_MAX_INDEX" since="9" deprecated="29"/>
+ <field name="PREVIEW_FPS_MIN_INDEX" since="9" deprecated="29"/>
+ <field name="SCENE_MODE_ACTION" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_AUTO" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_BARCODE" since="8" deprecated="29"/>
+ <field name="SCENE_MODE_BEACH" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_CANDLELIGHT" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_FIREWORKS" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_HDR" since="17" deprecated="29"/>
+ <field name="SCENE_MODE_LANDSCAPE" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_NIGHT" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_NIGHT_PORTRAIT" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_PARTY" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_PORTRAIT" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_SNOW" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_SPORTS" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_STEADYPHOTO" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_SUNSET" since="5" deprecated="29"/>
+ <field name="SCENE_MODE_THEATRE" since="5" deprecated="29"/>
+ <field name="WHITE_BALANCE_AUTO" since="5" deprecated="29"/>
+ <field name="WHITE_BALANCE_CLOUDY_DAYLIGHT" since="5" deprecated="29"/>
+ <field name="WHITE_BALANCE_DAYLIGHT" since="5" deprecated="29"/>
+ <field name="WHITE_BALANCE_FLUORESCENT" since="5" deprecated="29"/>
+ <field name="WHITE_BALANCE_INCANDESCENT" since="5" deprecated="29"/>
+ <field name="WHITE_BALANCE_SHADE" since="5" deprecated="29"/>
+ <field name="WHITE_BALANCE_TWILIGHT" since="5" deprecated="29"/>
+ <field name="WHITE_BALANCE_WARM_FLUORESCENT" since="5" deprecated="29"/>
</class>
<class name="android/hardware/Camera$PictureCallback" since="1" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="onPictureTaken([BLandroid/hardware/Camera;)V"/>
+ <method name="onPictureTaken([BLandroid/hardware/Camera;)V" deprecated="29"/>
</class>
<class name="android/hardware/Camera$PreviewCallback" since="1" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="onPreviewFrame([BLandroid/hardware/Camera;)V"/>
+ <method name="onPreviewFrame([BLandroid/hardware/Camera;)V" deprecated="29"/>
</class>
<class name="android/hardware/Camera$ShutterCallback" since="1" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="onShutter()V"/>
+ <method name="onShutter()V" deprecated="29"/>
</class>
<class name="android/hardware/Camera$Size" since="1" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/hardware/Camera;II)V"/>
- <field name="height"/>
- <field name="width"/>
+ <method name="&lt;init>(Landroid/hardware/Camera;II)V" deprecated="29"/>
+ <field name="height" deprecated="29"/>
+ <field name="width" deprecated="29"/>
</class>
<class name="android/hardware/ConsumerIrManager" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getCarrierFrequencies()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;"/>
<method name="hasIrEmitter()Z"/>
<method name="transmit(I[I)V"/>
@@ -15296,8 +15908,6 @@
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(J)V" since="29"/>
<method name="create(IIIIJ)Landroid/hardware/HardwareBuffer;"/>
<method name="getFormat()I"/>
<method name="getHeight()I"/>
@@ -15305,6 +15915,7 @@
<method name="getUsage()J"/>
<method name="getWidth()I"/>
<method name="isClosed()Z"/>
+ <method name="isSupported(IIIIJ)Z" since="29"/>
<field name="BLOB"/>
<field name="CREATOR"/>
<field name="DS_24UI8" since="28"/>
@@ -15334,7 +15945,6 @@
</class>
<class name="android/hardware/Sensor" since="3">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getFifoMaxEventCount()I" since="19"/>
<method name="getFifoReservedEventCount()I" since="19"/>
<method name="getHighestDirectReportRateLevel()I" since="26"/>
@@ -15403,7 +16013,7 @@
<field name="TYPE_MAGNETIC_FIELD"/>
<field name="TYPE_MAGNETIC_FIELD_UNCALIBRATED" since="18"/>
<field name="TYPE_MOTION_DETECT" since="24"/>
- <field name="TYPE_ORIENTATION" deprecated="16"/>
+ <field name="TYPE_ORIENTATION" deprecated="15"/>
<field name="TYPE_POSE_6DOF" since="24"/>
<field name="TYPE_PRESSURE"/>
<field name="TYPE_PROXIMITY"/>
@@ -15413,12 +16023,10 @@
<field name="TYPE_STATIONARY_DETECT" since="24"/>
<field name="TYPE_STEP_COUNTER" since="19"/>
<field name="TYPE_STEP_DETECTOR" since="19"/>
- <field name="TYPE_TEMPERATURE" deprecated="16"/>
+ <field name="TYPE_TEMPERATURE" deprecated="15"/>
</class>
<class name="android/hardware/SensorAdditionalInfo" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/hardware/Sensor;II[I[F)V" since="29"/>
<field name="TYPE_FRAME_BEGIN"/>
<field name="TYPE_FRAME_END"/>
<field name="TYPE_INTERNAL_TEMPERATURE"/>
@@ -15435,8 +16043,6 @@
<class name="android/hardware/SensorDirectChannel" since="26">
<extends name="java/lang/Object"/>
<implements name="java/nio/channels/Channel"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/hardware/SensorManager;IIJ)V" since="29"/>
<method name="configure(Landroid/hardware/Sensor;I)I"/>
<field name="RATE_FAST"/>
<field name="RATE_NORMAL"/>
@@ -15447,8 +16053,6 @@
</class>
<class name="android/hardware/SensorEvent" since="3">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<field name="accuracy"/>
<field name="sensor"/>
<field name="timestamp"/>
@@ -15472,12 +16076,11 @@
</class>
<class name="android/hardware/SensorListener" since="1" deprecated="3">
<extends name="java/lang/Object"/>
- <method name="onAccuracyChanged(II)V"/>
- <method name="onSensorChanged(I[F)V"/>
+ <method name="onAccuracyChanged(II)V" deprecated="29"/>
+ <method name="onSensorChanged(I[F)V" deprecated="29"/>
</class>
<class name="android/hardware/SensorManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="cancelTriggerSensor(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z" since="18"/>
<method name="createDirectChannel(Landroid/hardware/HardwareBuffer;)Landroid/hardware/SensorDirectChannel;" since="26"/>
<method name="createDirectChannel(Landroid/os/MemoryFile;)Landroid/hardware/SensorDirectChannel;" since="26"/>
@@ -15493,7 +16096,7 @@
<method name="getRotationMatrix([F[F[F[F)Z" since="3"/>
<method name="getRotationMatrixFromVector([F[F)V" since="9"/>
<method name="getSensorList(I)Ljava/util/List;" since="3"/>
- <method name="getSensors()I" deprecated="16"/>
+ <method name="getSensors()I" deprecated="15"/>
<method name="isDynamicSensorDiscoverySupported()Z" since="24"/>
<method name="registerDynamicSensorCallback(Landroid/hardware/SensorManager$DynamicSensorCallback;)V" since="24"/>
<method name="registerDynamicSensorCallback(Landroid/hardware/SensorManager$DynamicSensorCallback;Landroid/os/Handler;)V" since="24"/>
@@ -15501,24 +16104,24 @@
<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;II)Z" since="19"/>
<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;IILandroid/os/Handler;)Z" since="19"/>
<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;ILandroid/os/Handler;)Z" since="3"/>
- <method name="registerListener(Landroid/hardware/SensorListener;I)Z" deprecated="16"/>
- <method name="registerListener(Landroid/hardware/SensorListener;II)Z" deprecated="16"/>
+ <method name="registerListener(Landroid/hardware/SensorListener;I)Z" deprecated="15"/>
+ <method name="registerListener(Landroid/hardware/SensorListener;II)Z" deprecated="15"/>
<method name="remapCoordinateSystem([FII[F)Z" since="3"/>
<method name="requestTriggerSensor(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z" since="18"/>
<method name="unregisterDynamicSensorCallback(Landroid/hardware/SensorManager$DynamicSensorCallback;)V" since="24"/>
<method name="unregisterListener(Landroid/hardware/SensorEventListener;)V" since="3"/>
<method name="unregisterListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;)V" since="3"/>
- <method name="unregisterListener(Landroid/hardware/SensorListener;)V" deprecated="16"/>
- <method name="unregisterListener(Landroid/hardware/SensorListener;I)V" deprecated="16"/>
+ <method name="unregisterListener(Landroid/hardware/SensorListener;)V" deprecated="15"/>
+ <method name="unregisterListener(Landroid/hardware/SensorListener;I)V" deprecated="15"/>
<field name="AXIS_MINUS_X" since="3"/>
<field name="AXIS_MINUS_Y" since="3"/>
<field name="AXIS_MINUS_Z" since="3"/>
<field name="AXIS_X" since="3"/>
<field name="AXIS_Y" since="3"/>
<field name="AXIS_Z" since="3"/>
- <field name="DATA_X" deprecated="16"/>
- <field name="DATA_Y" deprecated="16"/>
- <field name="DATA_Z" deprecated="16"/>
+ <field name="DATA_X" deprecated="15"/>
+ <field name="DATA_Y" deprecated="15"/>
+ <field name="DATA_Z" deprecated="15"/>
<field name="GRAVITY_DEATH_STAR_I"/>
<field name="GRAVITY_EARTH"/>
<field name="GRAVITY_JUPITER"/>
@@ -15543,30 +16146,30 @@
<field name="MAGNETIC_FIELD_EARTH_MAX"/>
<field name="MAGNETIC_FIELD_EARTH_MIN"/>
<field name="PRESSURE_STANDARD_ATMOSPHERE" since="9"/>
- <field name="RAW_DATA_INDEX" deprecated="16"/>
- <field name="RAW_DATA_X" deprecated="16"/>
- <field name="RAW_DATA_Y" deprecated="16"/>
- <field name="RAW_DATA_Z" deprecated="16"/>
- <field name="SENSOR_ACCELEROMETER" deprecated="16"/>
- <field name="SENSOR_ALL" deprecated="16"/>
+ <field name="RAW_DATA_INDEX" deprecated="15"/>
+ <field name="RAW_DATA_X" deprecated="15"/>
+ <field name="RAW_DATA_Y" deprecated="15"/>
+ <field name="RAW_DATA_Z" deprecated="15"/>
+ <field name="SENSOR_ACCELEROMETER" deprecated="15"/>
+ <field name="SENSOR_ALL" deprecated="15"/>
<field name="SENSOR_DELAY_FASTEST"/>
<field name="SENSOR_DELAY_GAME"/>
<field name="SENSOR_DELAY_NORMAL"/>
<field name="SENSOR_DELAY_UI"/>
- <field name="SENSOR_LIGHT" deprecated="16"/>
- <field name="SENSOR_MAGNETIC_FIELD" deprecated="16"/>
- <field name="SENSOR_MAX" deprecated="16"/>
- <field name="SENSOR_MIN" deprecated="16"/>
- <field name="SENSOR_ORIENTATION" deprecated="16"/>
- <field name="SENSOR_ORIENTATION_RAW" deprecated="16"/>
- <field name="SENSOR_PROXIMITY" deprecated="16"/>
+ <field name="SENSOR_LIGHT" deprecated="15"/>
+ <field name="SENSOR_MAGNETIC_FIELD" deprecated="15"/>
+ <field name="SENSOR_MAX" deprecated="15"/>
+ <field name="SENSOR_MIN" deprecated="15"/>
+ <field name="SENSOR_ORIENTATION" deprecated="15"/>
+ <field name="SENSOR_ORIENTATION_RAW" deprecated="15"/>
+ <field name="SENSOR_PROXIMITY" deprecated="15"/>
<field name="SENSOR_STATUS_ACCURACY_HIGH"/>
<field name="SENSOR_STATUS_ACCURACY_LOW"/>
<field name="SENSOR_STATUS_ACCURACY_MEDIUM"/>
<field name="SENSOR_STATUS_NO_CONTACT" since="20"/>
<field name="SENSOR_STATUS_UNRELIABLE"/>
- <field name="SENSOR_TEMPERATURE" deprecated="16"/>
- <field name="SENSOR_TRICORDER" deprecated="16"/>
+ <field name="SENSOR_TEMPERATURE" deprecated="15"/>
+ <field name="SENSOR_TRICORDER" deprecated="15"/>
<field name="STANDARD_GRAVITY"/>
</class>
<class name="android/hardware/SensorManager$DynamicSensorCallback" since="24">
@@ -15577,8 +16180,6 @@
</class>
<class name="android/hardware/TriggerEvent" since="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<field name="sensor"/>
<field name="timestamp"/>
<field name="values"/>
@@ -15588,9 +16189,16 @@
<method name="&lt;init>()V"/>
<method name="onTrigger(Landroid/hardware/TriggerEvent;)V"/>
</class>
+ <class name="android/hardware/biometrics/BiometricManager" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="canAuthenticate()I"/>
+ <field name="BIOMETRIC_ERROR_HW_UNAVAILABLE"/>
+ <field name="BIOMETRIC_ERROR_NONE_ENROLLED"/>
+ <field name="BIOMETRIC_ERROR_NO_HARDWARE"/>
+ <field name="BIOMETRIC_SUCCESS"/>
+ </class>
<class name="android/hardware/biometrics/BiometricPrompt" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="authenticate(Landroid/hardware/biometrics/BiometricPrompt$CryptoObject;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/hardware/biometrics/BiometricPrompt$AuthenticationCallback;)V"/>
<method name="authenticate(Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/hardware/biometrics/BiometricPrompt$AuthenticationCallback;)V"/>
<field name="BIOMETRIC_ACQUIRED_GOOD"/>
@@ -15605,6 +16213,7 @@
<field name="BIOMETRIC_ERROR_LOCKOUT"/>
<field name="BIOMETRIC_ERROR_LOCKOUT_PERMANENT"/>
<field name="BIOMETRIC_ERROR_NO_BIOMETRICS"/>
+ <field name="BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL" since="29"/>
<field name="BIOMETRIC_ERROR_NO_SPACE"/>
<field name="BIOMETRIC_ERROR_TIMEOUT"/>
<field name="BIOMETRIC_ERROR_UNABLE_TO_PROCESS"/>
@@ -15621,24 +16230,27 @@
</class>
<class name="android/hardware/biometrics/BiometricPrompt$AuthenticationResult" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getCryptoObject()Landroid/hardware/biometrics/BiometricPrompt$CryptoObject;"/>
</class>
<class name="android/hardware/biometrics/BiometricPrompt$Builder" since="28">
<extends name="java/lang/Object"/>
<method name="&lt;init>(Landroid/content/Context;)V"/>
<method name="build()Landroid/hardware/biometrics/BiometricPrompt;"/>
+ <method name="setConfirmationRequired(Z)Landroid/hardware/biometrics/BiometricPrompt$Builder;" since="29"/>
<method name="setDescription(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt$Builder;"/>
+ <method name="setDeviceCredentialAllowed(Z)Landroid/hardware/biometrics/BiometricPrompt$Builder;" since="29"/>
<method name="setNegativeButton(Ljava/lang/CharSequence;Ljava/util/concurrent/Executor;Landroid/content/DialogInterface$OnClickListener;)Landroid/hardware/biometrics/BiometricPrompt$Builder;"/>
<method name="setSubtitle(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt$Builder;"/>
<method name="setTitle(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt$Builder;"/>
</class>
<class name="android/hardware/biometrics/BiometricPrompt$CryptoObject" since="28">
<extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/security/identity/IdentityCredential;)V" since="30"/>
<method name="&lt;init>(Ljava/security/Signature;)V"/>
<method name="&lt;init>(Ljavax/crypto/Cipher;)V"/>
<method name="&lt;init>(Ljavax/crypto/Mac;)V"/>
<method name="getCipher()Ljavax/crypto/Cipher;"/>
+ <method name="getIdentityCredential()Landroid/security/identity/IdentityCredential;" since="30"/>
<method name="getMac()Ljavax/crypto/Mac;"/>
<method name="getSignature()Ljava/security/Signature;"/>
</class>
@@ -15700,13 +16312,14 @@
</class>
<class name="android/hardware/camera2/CameraCharacteristics" since="21">
<extends name="android/hardware/camera2/CameraMetadata"/>
- <method name="&lt;init>()V"/>
<method name="get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;"/>
<method name="getAvailableCaptureRequestKeys()Ljava/util/List;"/>
<method name="getAvailableCaptureResultKeys()Ljava/util/List;"/>
<method name="getAvailablePhysicalCameraRequestKeys()Ljava/util/List;" since="28"/>
<method name="getAvailableSessionKeys()Ljava/util/List;" since="28"/>
+ <method name="getKeysNeedingPermission()Ljava/util/List;" since="29"/>
<method name="getPhysicalCameraIds()Ljava/util/Set;" since="28"/>
+ <method name="getRecommendedStreamConfigurationMap(I)Landroid/hardware/camera2/params/RecommendedStreamConfigurationMap;" since="29"/>
<field name="COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES"/>
<field name="CONTROL_AE_AVAILABLE_ANTIBANDING_MODES"/>
<field name="CONTROL_AE_AVAILABLE_MODES"/>
@@ -15759,6 +16372,7 @@
<field name="REQUEST_PIPELINE_MAX_DEPTH"/>
<field name="SCALER_AVAILABLE_MAX_DIGITAL_ZOOM"/>
<field name="SCALER_CROPPING_TYPE"/>
+ <field name="SCALER_MANDATORY_STREAM_COMBINATIONS" since="29"/>
<field name="SCALER_STREAM_CONFIGURATION_MAP"/>
<field name="SENSOR_AVAILABLE_TEST_PATTERN_MODES"/>
<field name="SENSOR_BLACK_LEVEL_PATTERN"/>
@@ -15796,7 +16410,6 @@
</class>
<class name="android/hardware/camera2/CameraCharacteristics$Key" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="29"/>
<method name="getName()Ljava/lang/String;"/>
</class>
@@ -15808,7 +16421,6 @@
<class name="android/hardware/camera2/CameraDevice" since="21">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V"/>
<method name="createCaptureRequest(I)Landroid/hardware/camera2/CaptureRequest$Builder;"/>
<method name="createCaptureRequest(ILjava/util/Set;)Landroid/hardware/camera2/CaptureRequest$Builder;" since="28"/>
<method name="createCaptureSession(Landroid/hardware/camera2/params/SessionConfiguration;)V" since="28"/>
@@ -15819,6 +16431,7 @@
<method name="createReprocessableCaptureSession(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="23"/>
<method name="createReprocessableCaptureSessionByConfigurations(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="24"/>
<method name="getId()Ljava/lang/String;"/>
+ <method name="isSessionConfigurationSupported(Landroid/hardware/camera2/params/SessionConfiguration;)Z" since="29"/>
<field name="TEMPLATE_MANUAL"/>
<field name="TEMPLATE_PREVIEW"/>
<field name="TEMPLATE_RECORD"/>
@@ -15841,8 +16454,6 @@
</class>
<class name="android/hardware/camera2/CameraManager" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="getCameraCharacteristics(Ljava/lang/String;)Landroid/hardware/camera2/CameraCharacteristics;"/>
<method name="getCameraIdList()[Ljava/lang/String;"/>
<method name="openCamera(Ljava/lang/String;Landroid/hardware/camera2/CameraDevice$StateCallback;Landroid/os/Handler;)V"/>
@@ -15858,6 +16469,7 @@
<class name="android/hardware/camera2/CameraManager$AvailabilityCallback" since="21">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
+ <method name="onCameraAccessPrioritiesChanged()V" since="29"/>
<method name="onCameraAvailable(Ljava/lang/String;)V"/>
<method name="onCameraUnavailable(Ljava/lang/String;)V"/>
</class>
@@ -15869,7 +16481,6 @@
</class>
<class name="android/hardware/camera2/CameraMetadata" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getKeys()Ljava/util/List;"/>
<field name="COLOR_CORRECTION_ABERRATION_MODE_FAST"/>
<field name="COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY"/>
@@ -16023,12 +16634,15 @@
<field name="REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING" since="23"/>
<field name="REQUEST_AVAILABLE_CAPABILITIES_RAW"/>
<field name="REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS" since="22"/>
+ <field name="REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA" since="29"/>
<field name="REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING" since="23"/>
<field name="SCALER_CROPPING_TYPE_CENTER_ONLY"/>
<field name="SCALER_CROPPING_TYPE_FREEFORM"/>
<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR"/>
<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG"/>
<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG"/>
+ <field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO" since="29"/>
+ <field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR" since="29"/>
<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB"/>
<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB"/>
<field name="SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME"/>
@@ -16083,9 +16697,8 @@
</class>
<class name="android/hardware/camera2/CaptureFailure" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/hardware/camera2/CaptureRequest;IZIJ)V" since="29"/>
<method name="getFrameNumber()J"/>
+ <method name="getPhysicalCameraId()Ljava/lang/String;" since="29"/>
<method name="getReason()I"/>
<method name="getRequest()Landroid/hardware/camera2/CaptureRequest;"/>
<method name="getSequenceId()I"/>
@@ -16096,7 +16709,6 @@
<class name="android/hardware/camera2/CaptureRequest" since="21">
<extends name="android/hardware/camera2/CameraMetadata"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="get(Landroid/hardware/camera2/CaptureRequest$Key;)Ljava/lang/Object;"/>
<method name="getTag()Ljava/lang/Object;"/>
<method name="isReprocess()Z" since="23"/>
@@ -16160,7 +16772,6 @@
</class>
<class name="android/hardware/camera2/CaptureRequest$Builder" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="addTarget(Landroid/view/Surface;)V"/>
<method name="build()Landroid/hardware/camera2/CaptureRequest;"/>
<method name="get(Landroid/hardware/camera2/CaptureRequest$Key;)Ljava/lang/Object;"/>
@@ -16172,13 +16783,11 @@
</class>
<class name="android/hardware/camera2/CaptureRequest$Key" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="29"/>
<method name="getName()Ljava/lang/String;"/>
</class>
<class name="android/hardware/camera2/CaptureResult" since="21">
<extends name="android/hardware/camera2/CameraMetadata"/>
- <method name="&lt;init>()V"/>
<method name="get(Landroid/hardware/camera2/CaptureResult$Key;)Ljava/lang/Object;"/>
<method name="getFrameNumber()J"/>
<method name="getRequest()Landroid/hardware/camera2/CaptureRequest;"/>
@@ -16234,6 +16843,7 @@
<field name="LENS_POSE_TRANSLATION" since="23"/>
<field name="LENS_RADIAL_DISTORTION" since="23" deprecated="28"/>
<field name="LENS_STATE"/>
+ <field name="LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID" since="29"/>
<field name="NOISE_REDUCTION_MODE"/>
<field name="REPROCESS_EFFECTIVE_EXPOSURE_FACTOR" since="23"/>
<field name="REQUEST_PIPELINE_DEPTH"/>
@@ -16267,7 +16877,6 @@
</class>
<class name="android/hardware/camera2/CaptureResult$Key" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="29"/>
<method name="getName()Ljava/lang/String;"/>
</class>
@@ -16287,14 +16896,11 @@
</class>
<class name="android/hardware/camera2/TotalCaptureResult" since="21">
<extends name="android/hardware/camera2/CaptureResult"/>
- <method name="&lt;init>()V"/>
<method name="getPartialResults()Ljava/util/List;"/>
<method name="getPhysicalCameraResults()Ljava/util/Map;" since="28"/>
</class>
<class name="android/hardware/camera2/params/BlackLevelPattern" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>([I)V" since="29"/>
<method name="copyTo([II)V"/>
<method name="getOffsetForIndex(II)I"/>
<field name="COUNT"/>
@@ -16309,8 +16915,6 @@
</class>
<class name="android/hardware/camera2/params/Face" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/graphics/Rect;I)V" since="29"/>
<method name="getBounds()Landroid/graphics/Rect;"/>
<method name="getId()I"/>
<method name="getLeftEyePosition()Landroid/graphics/Point;"/>
@@ -16330,8 +16934,6 @@
</class>
<class name="android/hardware/camera2/params/LensShadingMap" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>([FII)V" since="29"/>
<method name="copyGainFactors([FI)V"/>
<method name="getColumnCount()I"/>
<method name="getGainFactor(III)F"/>
@@ -16340,6 +16942,18 @@
<method name="getRowCount()I"/>
<field name="MINIMUM_GAIN_FACTOR"/>
</class>
+ <class name="android/hardware/camera2/params/MandatoryStreamCombination" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getDescription()Ljava/lang/CharSequence;"/>
+ <method name="getStreamsInformation()Ljava/util/List;"/>
+ <method name="isReprocessable()Z"/>
+ </class>
+ <class name="android/hardware/camera2/params/MandatoryStreamCombination$MandatoryStreamInformation" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getAvailableSizes()Ljava/util/List;"/>
+ <method name="getFormat()I"/>
+ <method name="isInput()Z"/>
+ </class>
<class name="android/hardware/camera2/params/MeteringRectangle" since="21">
<extends name="java/lang/Object"/>
<method name="&lt;init>(IIIII)V"/>
@@ -16382,6 +16996,34 @@
<field name="CREATOR"/>
<field name="SURFACE_GROUP_ID_NONE"/>
</class>
+ <class name="android/hardware/camera2/params/RecommendedStreamConfigurationMap" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getHighResolutionOutputSizes(I)Ljava/util/Set;"/>
+ <method name="getHighSpeedVideoFpsRanges()Ljava/util/Set;"/>
+ <method name="getHighSpeedVideoFpsRangesFor(Landroid/util/Size;)Ljava/util/Set;"/>
+ <method name="getHighSpeedVideoSizes()Ljava/util/Set;"/>
+ <method name="getHighSpeedVideoSizesFor(Landroid/util/Range;)Ljava/util/Set;"/>
+ <method name="getInputFormats()Ljava/util/Set;"/>
+ <method name="getInputSizes(I)Ljava/util/Set;"/>
+ <method name="getOutputFormats()Ljava/util/Set;"/>
+ <method name="getOutputMinFrameDuration(ILandroid/util/Size;)J"/>
+ <method name="getOutputMinFrameDuration(Ljava/lang/Class;Landroid/util/Size;)J"/>
+ <method name="getOutputSizes(I)Ljava/util/Set;"/>
+ <method name="getOutputSizes(Ljava/lang/Class;)Ljava/util/Set;"/>
+ <method name="getOutputStallDuration(ILandroid/util/Size;)J"/>
+ <method name="getOutputStallDuration(Ljava/lang/Class;Landroid/util/Size;)J"/>
+ <method name="getRecommendedUseCase()I"/>
+ <method name="getValidOutputFormatsForInput(I)Ljava/util/Set;"/>
+ <method name="isOutputSupportedFor(I)Z"/>
+ <method name="isOutputSupportedFor(Landroid/view/Surface;)Z"/>
+ <field name="USECASE_LOW_LATENCY_SNAPSHOT"/>
+ <field name="USECASE_PREVIEW"/>
+ <field name="USECASE_RAW"/>
+ <field name="USECASE_RECORD"/>
+ <field name="USECASE_SNAPSHOT"/>
+ <field name="USECASE_VIDEO_SNAPSHOT"/>
+ <field name="USECASE_ZSL"/>
+ </class>
<class name="android/hardware/camera2/params/RggbChannelVector" since="21">
<extends name="java/lang/Object"/>
<method name="&lt;init>(FFFF)V"/>
@@ -16399,6 +17041,7 @@
</class>
<class name="android/hardware/camera2/params/SessionConfiguration" since="28">
<extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable" since="29"/>
<method name="&lt;init>(ILjava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;)V"/>
<method name="getExecutor()Ljava/util/concurrent/Executor;"/>
<method name="getInputConfiguration()Landroid/hardware/camera2/params/InputConfiguration;"/>
@@ -16408,12 +17051,12 @@
<method name="getStateCallback()Landroid/hardware/camera2/CameraCaptureSession$StateCallback;"/>
<method name="setInputConfiguration(Landroid/hardware/camera2/params/InputConfiguration;)V"/>
<method name="setSessionParameters(Landroid/hardware/camera2/CaptureRequest;)V"/>
+ <field name="CREATOR" since="29"/>
<field name="SESSION_HIGH_SPEED"/>
<field name="SESSION_REGULAR"/>
</class>
<class name="android/hardware/camera2/params/StreamConfigurationMap" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getHighResolutionOutputSizes(I)[Landroid/util/Size;" since="23"/>
<method name="getHighSpeedVideoFpsRanges()[Landroid/util/Range;"/>
<method name="getHighSpeedVideoFpsRangesFor(Landroid/util/Size;)[Landroid/util/Range;"/>
@@ -16448,8 +17091,6 @@
</class>
<class name="android/hardware/display/DisplayManager" since="17">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="createVirtualDisplay(Ljava/lang/String;IIILandroid/view/Surface;I)Landroid/hardware/display/VirtualDisplay;" since="19"/>
<method name="createVirtualDisplay(Ljava/lang/String;IIILandroid/view/Surface;ILandroid/hardware/display/VirtualDisplay$Callback;Landroid/os/Handler;)Landroid/hardware/display/VirtualDisplay;" since="21"/>
<method name="getDisplay(I)Landroid/view/Display;"/>
@@ -16472,7 +17113,6 @@
</class>
<class name="android/hardware/display/VirtualDisplay" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getDisplay()Landroid/view/Display;"/>
<method name="getSurface()Landroid/view/Surface;" since="20"/>
<method name="release()V"/>
@@ -16488,7 +17128,6 @@
</class>
<class name="android/hardware/fingerprint/FingerprintManager" since="23" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="authenticate(Landroid/hardware/fingerprint/FingerprintManager$CryptoObject;Landroid/os/CancellationSignal;ILandroid/hardware/fingerprint/FingerprintManager$AuthenticationCallback;Landroid/os/Handler;)V" deprecated="28"/>
<method name="hasEnrolledFingerprints()Z" deprecated="28"/>
<method name="isHardwareDetected()Z" deprecated="28"/>
@@ -16512,29 +17151,27 @@
</class>
<class name="android/hardware/fingerprint/FingerprintManager$AuthenticationCallback" since="23" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="onAuthenticationError(ILjava/lang/CharSequence;)V"/>
- <method name="onAuthenticationFailed()V"/>
- <method name="onAuthenticationHelp(ILjava/lang/CharSequence;)V"/>
- <method name="onAuthenticationSucceeded(Landroid/hardware/fingerprint/FingerprintManager$AuthenticationResult;)V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="onAuthenticationError(ILjava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="onAuthenticationFailed()V" deprecated="29"/>
+ <method name="onAuthenticationHelp(ILjava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="onAuthenticationSucceeded(Landroid/hardware/fingerprint/FingerprintManager$AuthenticationResult;)V" deprecated="29"/>
</class>
<class name="android/hardware/fingerprint/FingerprintManager$AuthenticationResult" since="23" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="getCryptoObject()Landroid/hardware/fingerprint/FingerprintManager$CryptoObject;"/>
+ <method name="getCryptoObject()Landroid/hardware/fingerprint/FingerprintManager$CryptoObject;" deprecated="29"/>
</class>
<class name="android/hardware/fingerprint/FingerprintManager$CryptoObject" since="23" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Ljava/security/Signature;)V"/>
- <method name="&lt;init>(Ljavax/crypto/Cipher;)V"/>
- <method name="&lt;init>(Ljavax/crypto/Mac;)V"/>
- <method name="getCipher()Ljavax/crypto/Cipher;"/>
- <method name="getMac()Ljavax/crypto/Mac;"/>
- <method name="getSignature()Ljava/security/Signature;"/>
+ <method name="&lt;init>(Ljava/security/Signature;)V" deprecated="29"/>
+ <method name="&lt;init>(Ljavax/crypto/Cipher;)V" deprecated="29"/>
+ <method name="&lt;init>(Ljavax/crypto/Mac;)V" deprecated="29"/>
+ <method name="getCipher()Ljavax/crypto/Cipher;" deprecated="29"/>
+ <method name="getMac()Ljavax/crypto/Mac;" deprecated="29"/>
+ <method name="getSignature()Ljava/security/Signature;" deprecated="29"/>
</class>
<class name="android/hardware/input/InputManager" since="16">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getInputDevice(I)Landroid/view/InputDevice;"/>
<method name="getInputDeviceIds()[I"/>
<method name="registerInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;Landroid/os/Handler;)V"/>
@@ -16550,7 +17187,6 @@
</class>
<class name="android/hardware/location/GeofenceHardware" since="18" removed="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="addGeofence(IILandroid/hardware/location/GeofenceHardwareRequest;Landroid/hardware/location/GeofenceHardwareCallback;)Z"/>
<method name="getMonitoringTypes()[I"/>
<method name="getStatusOfMonitoringType(I)I"/>
@@ -16606,8 +17242,6 @@
<class name="android/hardware/usb/UsbAccessory" since="12">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>([Ljava/lang/String;)V" since="29"/>
<method name="getDescription()Ljava/lang/String;"/>
<method name="getManufacturer()Ljava/lang/String;"/>
<method name="getModel()Ljava/lang/String;"/>
@@ -16619,8 +17253,6 @@
<class name="android/hardware/usb/UsbConfiguration" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILjava/lang/String;II)V" since="29"/>
<method name="getId()I"/>
<method name="getInterface(I)Landroid/hardware/usb/UsbInterface;"/>
<method name="getInterfaceCount()I"/>
@@ -16670,8 +17302,6 @@
<class name="android/hardware/usb/UsbDevice" since="12">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;IIIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="29"/>
<method name="getConfiguration(I)Landroid/hardware/usb/UsbConfiguration;" since="21"/>
<method name="getConfigurationCount()I" since="21"/>
<method name="getDeviceClass()I"/>
@@ -16693,8 +17323,6 @@
</class>
<class name="android/hardware/usb/UsbDeviceConnection" since="12">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/hardware/usb/UsbDevice;)V" since="29"/>
<method name="bulkTransfer(Landroid/hardware/usb/UsbEndpoint;[BII)I"/>
<method name="bulkTransfer(Landroid/hardware/usb/UsbEndpoint;[BIII)I" since="18"/>
<method name="claimInterface(Landroid/hardware/usb/UsbInterface;Z)Z"/>
@@ -16713,8 +17341,6 @@
<class name="android/hardware/usb/UsbEndpoint" since="12">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIII)V" since="29"/>
<method name="getAddress()I"/>
<method name="getAttributes()I"/>
<method name="getDirection()I"/>
@@ -16727,8 +17353,6 @@
<class name="android/hardware/usb/UsbInterface" since="12">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IILjava/lang/String;III)V" since="29"/>
<method name="getAlternateSetting()I" since="21"/>
<method name="getEndpoint(I)Landroid/hardware/usb/UsbEndpoint;"/>
<method name="getEndpointCount()I"/>
@@ -16741,7 +17365,6 @@
</class>
<class name="android/hardware/usb/UsbManager" since="12">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getAccessoryList()[Landroid/hardware/usb/UsbAccessory;"/>
<method name="getDeviceList()Ljava/util/HashMap;"/>
<method name="hasPermission(Landroid/hardware/usb/UsbAccessory;)Z"/>
@@ -16774,7 +17397,6 @@
<extends name="java/lang/Object"/>
<implements name="android/icu/lang/UCharacterEnums$ECharacterCategory"/>
<implements name="android/icu/lang/UCharacterEnums$ECharacterDirection"/>
- <method name="&lt;init>()V"/>
<method name="charCount(I)I"/>
<method name="codePointAt(Ljava/lang/CharSequence;I)I"/>
<method name="codePointAt([CI)I"/>
@@ -16960,6 +17582,64 @@
<field name="TRAILING_JAMO"/>
<field name="VOWEL_JAMO"/>
</class>
+ <class name="android/icu/lang/UCharacter$IndicPositionalCategory" since="29">
+ <extends name="java/lang/Object"/>
+ <field name="BOTTOM"/>
+ <field name="BOTTOM_AND_LEFT"/>
+ <field name="BOTTOM_AND_RIGHT"/>
+ <field name="LEFT"/>
+ <field name="LEFT_AND_RIGHT"/>
+ <field name="NA"/>
+ <field name="OVERSTRUCK"/>
+ <field name="RIGHT"/>
+ <field name="TOP"/>
+ <field name="TOP_AND_BOTTOM"/>
+ <field name="TOP_AND_BOTTOM_AND_LEFT" since="30"/>
+ <field name="TOP_AND_BOTTOM_AND_RIGHT"/>
+ <field name="TOP_AND_LEFT"/>
+ <field name="TOP_AND_LEFT_AND_RIGHT"/>
+ <field name="TOP_AND_RIGHT"/>
+ <field name="VISUAL_ORDER_LEFT"/>
+ </class>
+ <class name="android/icu/lang/UCharacter$IndicSyllabicCategory" since="29">
+ <extends name="java/lang/Object"/>
+ <field name="AVAGRAHA"/>
+ <field name="BINDU"/>
+ <field name="BRAHMI_JOINING_NUMBER"/>
+ <field name="CANTILLATION_MARK"/>
+ <field name="CONSONANT"/>
+ <field name="CONSONANT_DEAD"/>
+ <field name="CONSONANT_FINAL"/>
+ <field name="CONSONANT_HEAD_LETTER"/>
+ <field name="CONSONANT_INITIAL_POSTFIXED"/>
+ <field name="CONSONANT_KILLER"/>
+ <field name="CONSONANT_MEDIAL"/>
+ <field name="CONSONANT_PLACEHOLDER"/>
+ <field name="CONSONANT_PRECEDING_REPHA"/>
+ <field name="CONSONANT_PREFIXED"/>
+ <field name="CONSONANT_SUBJOINED"/>
+ <field name="CONSONANT_SUCCEEDING_REPHA"/>
+ <field name="CONSONANT_WITH_STACKER"/>
+ <field name="GEMINATION_MARK"/>
+ <field name="INVISIBLE_STACKER"/>
+ <field name="JOINER"/>
+ <field name="MODIFYING_LETTER"/>
+ <field name="NON_JOINER"/>
+ <field name="NUKTA"/>
+ <field name="NUMBER"/>
+ <field name="NUMBER_JOINER"/>
+ <field name="OTHER"/>
+ <field name="PURE_KILLER"/>
+ <field name="REGISTER_SHIFTER"/>
+ <field name="SYLLABLE_MODIFIER"/>
+ <field name="TONE_LETTER"/>
+ <field name="TONE_MARK"/>
+ <field name="VIRAMA"/>
+ <field name="VISARGA"/>
+ <field name="VOWEL"/>
+ <field name="VOWEL_DEPENDENT"/>
+ <field name="VOWEL_INDEPENDENT"/>
+ </class>
<class name="android/icu/lang/UCharacter$JoiningGroup" since="24">
<extends name="java/lang/Object"/>
<field name="AFRICAN_FEH" since="26"/>
@@ -17149,8 +17829,6 @@
</class>
<class name="android/icu/lang/UCharacter$UnicodeBlock" since="24">
<extends name="java/lang/Character$Subset"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;I)V" since="29"/>
<method name="forName(Ljava/lang/String;)Landroid/icu/lang/UCharacter$UnicodeBlock;"/>
<method name="getID()I"/>
<method name="getInstance(I)Landroid/icu/lang/UCharacter$UnicodeBlock;"/>
@@ -17239,6 +17917,8 @@
<field name="CHEROKEE_SUPPLEMENT_ID"/>
<field name="CHESS_SYMBOLS" since="29"/>
<field name="CHESS_SYMBOLS_ID" since="29"/>
+ <field name="CHORASMIAN" since="30"/>
+ <field name="CHORASMIAN_ID" since="30"/>
<field name="CJK_COMPATIBILITY"/>
<field name="CJK_COMPATIBILITY_FORMS"/>
<field name="CJK_COMPATIBILITY_FORMS_ID"/>
@@ -17266,6 +17946,8 @@
<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E_ID"/>
<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F" since="28"/>
<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F_ID" since="28"/>
+ <field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G" since="30"/>
+ <field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G_ID" since="30"/>
<field name="CJK_UNIFIED_IDEOGRAPHS_ID"/>
<field name="COMBINING_DIACRITICAL_MARKS"/>
<field name="COMBINING_DIACRITICAL_MARKS_EXTENDED"/>
@@ -17315,6 +17997,8 @@
<field name="DEVANAGARI_ID"/>
<field name="DINGBATS"/>
<field name="DINGBATS_ID"/>
+ <field name="DIVES_AKURU" since="30"/>
+ <field name="DIVES_AKURU_ID" since="30"/>
<field name="DOGRA" since="29"/>
<field name="DOGRA_ID" since="29"/>
<field name="DOMINO_TILES"/>
@@ -17325,8 +18009,12 @@
<field name="EARLY_DYNASTIC_CUNEIFORM_ID"/>
<field name="EGYPTIAN_HIEROGLYPHS"/>
<field name="EGYPTIAN_HIEROGLYPHS_ID"/>
+ <field name="EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS" since="30"/>
+ <field name="EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS_ID" since="30"/>
<field name="ELBASAN"/>
<field name="ELBASAN_ID"/>
+ <field name="ELYMAIC" since="30"/>
+ <field name="ELYMAIC_ID" since="30"/>
<field name="EMOTICONS"/>
<field name="EMOTICONS_ID"/>
<field name="ENCLOSED_ALPHANUMERICS"/>
@@ -17439,6 +18127,8 @@
<field name="KAYAH_LI_ID"/>
<field name="KHAROSHTHI"/>
<field name="KHAROSHTHI_ID"/>
+ <field name="KHITAN_SMALL_SCRIPT" since="30"/>
+ <field name="KHITAN_SMALL_SCRIPT_ID" since="30"/>
<field name="KHMER"/>
<field name="KHMER_ID"/>
<field name="KHMER_SYMBOLS"/>
@@ -17477,6 +18167,8 @@
<field name="LINEAR_B_SYLLABARY_ID"/>
<field name="LISU"/>
<field name="LISU_ID"/>
+ <field name="LISU_SUPPLEMENT" since="30"/>
+ <field name="LISU_SUPPLEMENT_ID" since="30"/>
<field name="LOW_SURROGATES"/>
<field name="LOW_SURROGATES_ID"/>
<field name="LYCIAN"/>
@@ -17553,6 +18245,8 @@
<field name="MYANMAR_ID"/>
<field name="NABATAEAN"/>
<field name="NABATAEAN_ID"/>
+ <field name="NANDINAGARI" since="30"/>
+ <field name="NANDINAGARI_ID" since="30"/>
<field name="NEWA" since="26"/>
<field name="NEWA_ID" since="26"/>
<field name="NEW_TAI_LUE"/>
@@ -17564,6 +18258,8 @@
<field name="NUMBER_FORMS_ID"/>
<field name="NUSHU" since="28"/>
<field name="NUSHU_ID" since="28"/>
+ <field name="NYIAKENG_PUACHUE_HMONG" since="30"/>
+ <field name="NYIAKENG_PUACHUE_HMONG_ID" since="30"/>
<field name="OGHAM"/>
<field name="OGHAM_ID"/>
<field name="OLD_HUNGARIAN"/>
@@ -17594,6 +18290,8 @@
<field name="OSAGE_ID" since="26"/>
<field name="OSMANYA"/>
<field name="OSMANYA_ID"/>
+ <field name="OTTOMAN_SIYAQ_NUMBERS" since="30"/>
+ <field name="OTTOMAN_SIYAQ_NUMBERS_ID" since="30"/>
<field name="PAHAWH_HMONG"/>
<field name="PAHAWH_HMONG_ID"/>
<field name="PALMYRENE"/>
@@ -17642,6 +18340,8 @@
<field name="SINHALA_ID"/>
<field name="SMALL_FORM_VARIANTS"/>
<field name="SMALL_FORM_VARIANTS_ID"/>
+ <field name="SMALL_KANA_EXTENSION" since="30"/>
+ <field name="SMALL_KANA_EXTENSION_ID" since="30"/>
<field name="SOGDIAN" since="29"/>
<field name="SOGDIAN_ID" since="29"/>
<field name="SORA_SOMPENG"/>
@@ -17678,6 +18378,10 @@
<field name="SUTTON_SIGNWRITING_ID"/>
<field name="SYLOTI_NAGRI"/>
<field name="SYLOTI_NAGRI_ID"/>
+ <field name="SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A" since="30"/>
+ <field name="SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A_ID" since="30"/>
+ <field name="SYMBOLS_FOR_LEGACY_COMPUTING" since="30"/>
+ <field name="SYMBOLS_FOR_LEGACY_COMPUTING_ID" since="30"/>
<field name="SYRIAC"/>
<field name="SYRIAC_ID"/>
<field name="SYRIAC_SUPPLEMENT" since="28"/>
@@ -17700,10 +18404,14 @@
<field name="TAKRI_ID"/>
<field name="TAMIL"/>
<field name="TAMIL_ID"/>
+ <field name="TAMIL_SUPPLEMENT" since="30"/>
+ <field name="TAMIL_SUPPLEMENT_ID" since="30"/>
<field name="TANGUT" since="26"/>
<field name="TANGUT_COMPONENTS" since="26"/>
<field name="TANGUT_COMPONENTS_ID" since="26"/>
<field name="TANGUT_ID" since="26"/>
+ <field name="TANGUT_SUPPLEMENT" since="30"/>
+ <field name="TANGUT_SUPPLEMENT_ID" since="30"/>
<field name="TELUGU"/>
<field name="TELUGU_ID"/>
<field name="THAANA"/>
@@ -17734,8 +18442,12 @@
<field name="VEDIC_EXTENSIONS_ID"/>
<field name="VERTICAL_FORMS"/>
<field name="VERTICAL_FORMS_ID"/>
+ <field name="WANCHO" since="30"/>
+ <field name="WANCHO_ID" since="30"/>
<field name="WARANG_CITI"/>
<field name="WARANG_CITI_ID"/>
+ <field name="YEZIDI" since="30"/>
+ <field name="YEZIDI_ID" since="30"/>
<field name="YIJING_HEXAGRAM_SYMBOLS"/>
<field name="YIJING_HEXAGRAM_SYMBOLS_ID"/>
<field name="YI_RADICALS"/>
@@ -17745,6 +18457,13 @@
<field name="ZANABAZAR_SQUARE" since="28"/>
<field name="ZANABAZAR_SQUARE_ID" since="28"/>
</class>
+ <class name="android/icu/lang/UCharacter$VerticalOrientation" since="29">
+ <extends name="java/lang/Object"/>
+ <field name="ROTATED"/>
+ <field name="TRANSFORMED_ROTATED"/>
+ <field name="TRANSFORMED_UPRIGHT"/>
+ <field name="UPRIGHT"/>
+ </class>
<class name="android/icu/lang/UCharacter$WordBreak" since="24">
<extends name="java/lang/Object"/>
<field name="ALETTER"/>
@@ -17774,18 +18493,15 @@
<class name="android/icu/lang/UCharacterCategory" since="24">
<extends name="java/lang/Object"/>
<implements name="android/icu/lang/UCharacterEnums$ECharacterCategory"/>
- <method name="&lt;init>()V"/>
<method name="toString(I)Ljava/lang/String;"/>
</class>
<class name="android/icu/lang/UCharacterDirection" since="24">
<extends name="java/lang/Object"/>
<implements name="android/icu/lang/UCharacterEnums$ECharacterDirection"/>
- <method name="&lt;init>()V"/>
<method name="toString(I)Ljava/lang/String;"/>
</class>
<class name="android/icu/lang/UCharacterEnums" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/icu/lang/UCharacterEnums$ECharacterCategory" since="24">
<extends name="java/lang/Object"/>
@@ -17922,6 +18638,8 @@
<field name="IDS_TRINARY_OPERATOR"/>
<field name="ID_CONTINUE"/>
<field name="ID_START"/>
+ <field name="INDIC_POSITIONAL_CATEGORY" since="29"/>
+ <field name="INDIC_SYLLABIC_CATEGORY" since="29"/>
<field name="INT_START"/>
<field name="JOINING_GROUP"/>
<field name="JOINING_TYPE"/>
@@ -17975,6 +18693,7 @@
<field name="UPPERCASE"/>
<field name="UPPERCASE_MAPPING"/>
<field name="VARIATION_SELECTOR"/>
+ <field name="VERTICAL_ORIENTATION" since="29"/>
<field name="WHITE_SPACE"/>
<field name="WORD_BREAK"/>
<field name="XID_CONTINUE"/>
@@ -17987,7 +18706,6 @@
</class>
<class name="android/icu/lang/UScript" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="breaksBetweenLetters(I)Z"/>
<method name="getCode(Landroid/icu/util/ULocale;)[I"/>
<method name="getCode(Ljava/lang/String;)[I"/>
@@ -18028,6 +18746,7 @@
<field name="CHAKMA"/>
<field name="CHAM"/>
<field name="CHEROKEE"/>
+ <field name="CHORASMIAN" since="30"/>
<field name="CIRTH"/>
<field name="COMMON"/>
<field name="COPTIC"/>
@@ -18037,11 +18756,13 @@
<field name="DEMOTIC_EGYPTIAN"/>
<field name="DESERET"/>
<field name="DEVANAGARI"/>
+ <field name="DIVES_AKURU" since="30"/>
<field name="DOGRA" since="29"/>
<field name="DUPLOYAN"/>
<field name="EASTERN_SYRIAC"/>
<field name="EGYPTIAN_HIEROGLYPHS"/>
<field name="ELBASAN"/>
+ <field name="ELYMAIC" since="30"/>
<field name="ESTRANGELO_SYRIAC"/>
<field name="ETHIOPIC"/>
<field name="GEORGIAN"/>
@@ -18077,6 +18798,7 @@
<field name="KATAKANA_OR_HIRAGANA"/>
<field name="KAYAH_LI"/>
<field name="KHAROSHTHI"/>
+ <field name="KHITAN_SMALL_SCRIPT" since="30"/>
<field name="KHMER"/>
<field name="KHOJKI"/>
<field name="KHUDAWADI"/>
@@ -18121,10 +18843,12 @@
<field name="MYANMAR"/>
<field name="NABATAEAN"/>
<field name="NAKHI_GEBA"/>
+ <field name="NANDINAGARI" since="30"/>
<field name="NEWA" since="26"/>
<field name="NEW_TAI_LUE"/>
<field name="NKO"/>
<field name="NUSHU"/>
+ <field name="NYIAKENG_PUACHUE_HMONG" since="30"/>
<field name="OGHAM"/>
<field name="OLD_CHURCH_SLAVONIC_CYRILLIC"/>
<field name="OLD_HUNGARIAN"/>
@@ -18188,9 +18912,11 @@
<field name="UNWRITTEN_LANGUAGES"/>
<field name="VAI"/>
<field name="VISIBLE_SPEECH"/>
+ <field name="WANCHO" since="30"/>
<field name="WARANG_CITI"/>
<field name="WESTERN_SYRIAC"/>
<field name="WOLEAI"/>
+ <field name="YEZIDI" since="30"/>
<field name="YI"/>
<field name="ZANABAZAR_SQUARE" since="28"/>
</class>
@@ -18301,6 +19027,201 @@
<field name="ROUND_UP"/>
<field name="SCIENTIFIC"/>
</class>
+ <class name="android/icu/number/CompactNotation" since="30">
+ <extends name="android/icu/number/Notation"/>
+ </class>
+ <class name="android/icu/number/CurrencyPrecision" since="30">
+ <extends name="android/icu/number/Precision"/>
+ <method name="withCurrency(Landroid/icu/util/Currency;)Landroid/icu/number/Precision;"/>
+ </class>
+ <class name="android/icu/number/FormattedNumber" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="java/lang/CharSequence"/>
+ <method name="toBigDecimal()Ljava/math/BigDecimal;"/>
+ <method name="toCharacterIterator()Ljava/text/AttributedCharacterIterator;"/>
+ </class>
+ <class name="android/icu/number/FormattedNumberRange" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="java/lang/CharSequence"/>
+ <method name="getFirstBigDecimal()Ljava/math/BigDecimal;"/>
+ <method name="getIdentityResult()Landroid/icu/number/NumberRangeFormatter$RangeIdentityResult;"/>
+ <method name="getSecondBigDecimal()Ljava/math/BigDecimal;"/>
+ <method name="toCharacterIterator()Ljava/text/AttributedCharacterIterator;"/>
+ </class>
+ <class name="android/icu/number/FractionPrecision" since="30">
+ <extends name="android/icu/number/Precision"/>
+ <method name="withMaxDigits(I)Landroid/icu/number/Precision;"/>
+ <method name="withMinDigits(I)Landroid/icu/number/Precision;"/>
+ </class>
+ <class name="android/icu/number/IntegerWidth" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="truncateAt(I)Landroid/icu/number/IntegerWidth;"/>
+ <method name="zeroFillTo(I)Landroid/icu/number/IntegerWidth;"/>
+ </class>
+ <class name="android/icu/number/LocalizedNumberFormatter" since="30">
+ <extends name="android/icu/number/NumberFormatterSettings"/>
+ <method name="format(D)Landroid/icu/number/FormattedNumber;"/>
+ <method name="format(J)Landroid/icu/number/FormattedNumber;"/>
+ <method name="format(Landroid/icu/util/Measure;)Landroid/icu/number/FormattedNumber;"/>
+ <method name="format(Ljava/lang/Number;)Landroid/icu/number/FormattedNumber;"/>
+ <method name="toFormat()Ljava/text/Format;"/>
+ </class>
+ <class name="android/icu/number/LocalizedNumberRangeFormatter" since="30">
+ <extends name="android/icu/number/NumberRangeFormatterSettings"/>
+ <method name="formatRange(DD)Landroid/icu/number/FormattedNumberRange;"/>
+ <method name="formatRange(II)Landroid/icu/number/FormattedNumberRange;"/>
+ <method name="formatRange(Ljava/lang/Number;Ljava/lang/Number;)Landroid/icu/number/FormattedNumberRange;"/>
+ </class>
+ <class name="android/icu/number/Notation" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="compactLong()Landroid/icu/number/CompactNotation;"/>
+ <method name="compactShort()Landroid/icu/number/CompactNotation;"/>
+ <method name="engineering()Landroid/icu/number/ScientificNotation;"/>
+ <method name="scientific()Landroid/icu/number/ScientificNotation;"/>
+ <method name="simple()Landroid/icu/number/SimpleNotation;"/>
+ </class>
+ <class name="android/icu/number/NumberFormatter" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="with()Landroid/icu/number/UnlocalizedNumberFormatter;"/>
+ <method name="withLocale(Landroid/icu/util/ULocale;)Landroid/icu/number/LocalizedNumberFormatter;"/>
+ <method name="withLocale(Ljava/util/Locale;)Landroid/icu/number/LocalizedNumberFormatter;"/>
+ </class>
+ <class name="android/icu/number/NumberFormatter$DecimalSeparatorDisplay" since="30">
+ <extends name="java/lang/Enum"/>
+ <method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberFormatter$DecimalSeparatorDisplay;"/>
+ <method name="values()[Landroid/icu/number/NumberFormatter$DecimalSeparatorDisplay;"/>
+ <field name="ALWAYS"/>
+ <field name="AUTO"/>
+ </class>
+ <class name="android/icu/number/NumberFormatter$GroupingStrategy" since="30">
+ <extends name="java/lang/Enum"/>
+ <method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberFormatter$GroupingStrategy;"/>
+ <method name="values()[Landroid/icu/number/NumberFormatter$GroupingStrategy;"/>
+ <field name="AUTO"/>
+ <field name="MIN2"/>
+ <field name="OFF"/>
+ <field name="ON_ALIGNED"/>
+ <field name="THOUSANDS"/>
+ </class>
+ <class name="android/icu/number/NumberFormatter$SignDisplay" since="30">
+ <extends name="java/lang/Enum"/>
+ <method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberFormatter$SignDisplay;"/>
+ <method name="values()[Landroid/icu/number/NumberFormatter$SignDisplay;"/>
+ <field name="ACCOUNTING"/>
+ <field name="ACCOUNTING_ALWAYS"/>
+ <field name="ACCOUNTING_EXCEPT_ZERO"/>
+ <field name="ALWAYS"/>
+ <field name="AUTO"/>
+ <field name="EXCEPT_ZERO"/>
+ <field name="NEVER"/>
+ </class>
+ <class name="android/icu/number/NumberFormatter$UnitWidth" since="30">
+ <extends name="java/lang/Enum"/>
+ <method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberFormatter$UnitWidth;"/>
+ <method name="values()[Landroid/icu/number/NumberFormatter$UnitWidth;"/>
+ <field name="FULL_NAME"/>
+ <field name="HIDDEN"/>
+ <field name="ISO_CODE"/>
+ <field name="NARROW"/>
+ <field name="SHORT"/>
+ </class>
+ <class name="android/icu/number/NumberFormatterSettings" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="decimal(Landroid/icu/number/NumberFormatter$DecimalSeparatorDisplay;)Landroid/icu/number/NumberFormatterSettings;"/>
+ <method name="grouping(Landroid/icu/number/NumberFormatter$GroupingStrategy;)Landroid/icu/number/NumberFormatterSettings;"/>
+ <method name="integerWidth(Landroid/icu/number/IntegerWidth;)Landroid/icu/number/NumberFormatterSettings;"/>
+ <method name="notation(Landroid/icu/number/Notation;)Landroid/icu/number/NumberFormatterSettings;"/>
+ <method name="perUnit(Landroid/icu/util/MeasureUnit;)Landroid/icu/number/NumberFormatterSettings;"/>
+ <method name="precision(Landroid/icu/number/Precision;)Landroid/icu/number/NumberFormatterSettings;"/>
+ <method name="roundingMode(Ljava/math/RoundingMode;)Landroid/icu/number/NumberFormatterSettings;"/>
+ <method name="scale(Landroid/icu/number/Scale;)Landroid/icu/number/NumberFormatterSettings;"/>
+ <method name="sign(Landroid/icu/number/NumberFormatter$SignDisplay;)Landroid/icu/number/NumberFormatterSettings;"/>
+ <method name="symbols(Landroid/icu/text/DecimalFormatSymbols;)Landroid/icu/number/NumberFormatterSettings;"/>
+ <method name="symbols(Landroid/icu/text/NumberingSystem;)Landroid/icu/number/NumberFormatterSettings;"/>
+ <method name="unit(Landroid/icu/util/MeasureUnit;)Landroid/icu/number/NumberFormatterSettings;"/>
+ <method name="unitWidth(Landroid/icu/number/NumberFormatter$UnitWidth;)Landroid/icu/number/NumberFormatterSettings;"/>
+ </class>
+ <class name="android/icu/number/NumberRangeFormatter" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="with()Landroid/icu/number/UnlocalizedNumberRangeFormatter;"/>
+ <method name="withLocale(Landroid/icu/util/ULocale;)Landroid/icu/number/LocalizedNumberRangeFormatter;"/>
+ <method name="withLocale(Ljava/util/Locale;)Landroid/icu/number/LocalizedNumberRangeFormatter;"/>
+ </class>
+ <class name="android/icu/number/NumberRangeFormatter$RangeCollapse" since="30">
+ <extends name="java/lang/Enum"/>
+ <method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberRangeFormatter$RangeCollapse;"/>
+ <method name="values()[Landroid/icu/number/NumberRangeFormatter$RangeCollapse;"/>
+ <field name="ALL"/>
+ <field name="AUTO"/>
+ <field name="NONE"/>
+ <field name="UNIT"/>
+ </class>
+ <class name="android/icu/number/NumberRangeFormatter$RangeIdentityFallback" since="30">
+ <extends name="java/lang/Enum"/>
+ <method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberRangeFormatter$RangeIdentityFallback;"/>
+ <method name="values()[Landroid/icu/number/NumberRangeFormatter$RangeIdentityFallback;"/>
+ <field name="APPROXIMATELY"/>
+ <field name="APPROXIMATELY_OR_SINGLE_VALUE"/>
+ <field name="RANGE"/>
+ <field name="SINGLE_VALUE"/>
+ </class>
+ <class name="android/icu/number/NumberRangeFormatter$RangeIdentityResult" since="30">
+ <extends name="java/lang/Enum"/>
+ <method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberRangeFormatter$RangeIdentityResult;"/>
+ <method name="values()[Landroid/icu/number/NumberRangeFormatter$RangeIdentityResult;"/>
+ <field name="EQUAL_AFTER_ROUNDING"/>
+ <field name="EQUAL_BEFORE_ROUNDING"/>
+ <field name="NOT_EQUAL"/>
+ </class>
+ <class name="android/icu/number/NumberRangeFormatterSettings" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="collapse(Landroid/icu/number/NumberRangeFormatter$RangeCollapse;)Landroid/icu/number/NumberRangeFormatterSettings;"/>
+ <method name="identityFallback(Landroid/icu/number/NumberRangeFormatter$RangeIdentityFallback;)Landroid/icu/number/NumberRangeFormatterSettings;"/>
+ <method name="numberFormatterBoth(Landroid/icu/number/UnlocalizedNumberFormatter;)Landroid/icu/number/NumberRangeFormatterSettings;"/>
+ <method name="numberFormatterFirst(Landroid/icu/number/UnlocalizedNumberFormatter;)Landroid/icu/number/NumberRangeFormatterSettings;"/>
+ <method name="numberFormatterSecond(Landroid/icu/number/UnlocalizedNumberFormatter;)Landroid/icu/number/NumberRangeFormatterSettings;"/>
+ </class>
+ <class name="android/icu/number/Precision" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="currency(Landroid/icu/util/Currency$CurrencyUsage;)Landroid/icu/number/CurrencyPrecision;"/>
+ <method name="fixedFraction(I)Landroid/icu/number/FractionPrecision;"/>
+ <method name="fixedSignificantDigits(I)Landroid/icu/number/Precision;"/>
+ <method name="increment(Ljava/math/BigDecimal;)Landroid/icu/number/Precision;"/>
+ <method name="integer()Landroid/icu/number/FractionPrecision;"/>
+ <method name="maxFraction(I)Landroid/icu/number/FractionPrecision;"/>
+ <method name="maxSignificantDigits(I)Landroid/icu/number/Precision;"/>
+ <method name="minFraction(I)Landroid/icu/number/FractionPrecision;"/>
+ <method name="minMaxFraction(II)Landroid/icu/number/FractionPrecision;"/>
+ <method name="minMaxSignificantDigits(II)Landroid/icu/number/Precision;"/>
+ <method name="minSignificantDigits(I)Landroid/icu/number/Precision;"/>
+ <method name="unlimited()Landroid/icu/number/Precision;"/>
+ </class>
+ <class name="android/icu/number/Scale" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="byBigDecimal(Ljava/math/BigDecimal;)Landroid/icu/number/Scale;"/>
+ <method name="byDouble(D)Landroid/icu/number/Scale;"/>
+ <method name="byDoubleAndPowerOfTen(DI)Landroid/icu/number/Scale;"/>
+ <method name="none()Landroid/icu/number/Scale;"/>
+ <method name="powerOfTen(I)Landroid/icu/number/Scale;"/>
+ </class>
+ <class name="android/icu/number/ScientificNotation" since="30">
+ <extends name="android/icu/number/Notation"/>
+ <method name="withExponentSignDisplay(Landroid/icu/number/NumberFormatter$SignDisplay;)Landroid/icu/number/ScientificNotation;"/>
+ <method name="withMinExponentDigits(I)Landroid/icu/number/ScientificNotation;"/>
+ </class>
+ <class name="android/icu/number/SimpleNotation" since="30">
+ <extends name="android/icu/number/Notation"/>
+ </class>
+ <class name="android/icu/number/UnlocalizedNumberFormatter" since="30">
+ <extends name="android/icu/number/NumberFormatterSettings"/>
+ <method name="locale(Landroid/icu/util/ULocale;)Landroid/icu/number/LocalizedNumberFormatter;"/>
+ <method name="locale(Ljava/util/Locale;)Landroid/icu/number/LocalizedNumberFormatter;"/>
+ </class>
+ <class name="android/icu/number/UnlocalizedNumberRangeFormatter" since="30">
+ <extends name="android/icu/number/NumberRangeFormatterSettings"/>
+ <method name="locale(Landroid/icu/util/ULocale;)Landroid/icu/number/LocalizedNumberRangeFormatter;"/>
+ <method name="locale(Ljava/util/Locale;)Landroid/icu/number/LocalizedNumberRangeFormatter;"/>
+ </class>
<class name="android/icu/text/AlphabeticIndex" since="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/Iterable"/>
@@ -18330,8 +19251,6 @@
<class name="android/icu/text/AlphabeticIndex$Bucket" since="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/Iterable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Landroid/icu/text/AlphabeticIndex$Bucket$LabelType;)V" since="29"/>
<method name="getLabel()Ljava/lang/String;"/>
<method name="getLabelType()Landroid/icu/text/AlphabeticIndex$Bucket$LabelType;"/>
<method name="size()I"/>
@@ -18348,18 +19267,123 @@
<class name="android/icu/text/AlphabeticIndex$ImmutableIndex" since="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/Iterable"/>
- <method name="&lt;init>()V"/>
<method name="getBucket(I)Landroid/icu/text/AlphabeticIndex$Bucket;"/>
<method name="getBucketCount()I"/>
<method name="getBucketIndex(Ljava/lang/CharSequence;)I"/>
</class>
<class name="android/icu/text/AlphabeticIndex$Record" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/CharSequence;Ljava/lang/Object;)V" since="29"/>
<method name="getData()Ljava/lang/Object;"/>
<method name="getName()Ljava/lang/CharSequence;"/>
</class>
+ <class name="android/icu/text/Bidi" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="&lt;init>(II)V"/>
+ <method name="&lt;init>(Ljava/lang/String;I)V"/>
+ <method name="&lt;init>(Ljava/text/AttributedCharacterIterator;)V"/>
+ <method name="&lt;init>([CI[BIII)V"/>
+ <method name="baseIsLeftToRight()Z"/>
+ <method name="countParagraphs()I"/>
+ <method name="countRuns()I"/>
+ <method name="createLineBidi(II)Landroid/icu/text/Bidi;"/>
+ <method name="getBaseDirection(Ljava/lang/CharSequence;)B"/>
+ <method name="getBaseLevel()I"/>
+ <method name="getCustomClassifier()Landroid/icu/text/BidiClassifier;"/>
+ <method name="getCustomizedClass(I)I"/>
+ <method name="getDirection()B"/>
+ <method name="getLength()I"/>
+ <method name="getLevelAt(I)B"/>
+ <method name="getLevels()[B"/>
+ <method name="getLogicalIndex(I)I"/>
+ <method name="getLogicalMap()[I"/>
+ <method name="getLogicalRun(I)Landroid/icu/text/BidiRun;"/>
+ <method name="getParaLevel()B"/>
+ <method name="getParagraph(I)Landroid/icu/text/BidiRun;"/>
+ <method name="getParagraphByIndex(I)Landroid/icu/text/BidiRun;"/>
+ <method name="getParagraphIndex(I)I"/>
+ <method name="getProcessedLength()I"/>
+ <method name="getReorderingMode()I"/>
+ <method name="getReorderingOptions()I"/>
+ <method name="getResultLength()I"/>
+ <method name="getRunCount()I"/>
+ <method name="getRunLevel(I)I"/>
+ <method name="getRunLimit(I)I"/>
+ <method name="getRunStart(I)I"/>
+ <method name="getText()[C"/>
+ <method name="getTextAsString()Ljava/lang/String;"/>
+ <method name="getVisualIndex(I)I"/>
+ <method name="getVisualMap()[I"/>
+ <method name="getVisualRun(I)Landroid/icu/text/BidiRun;"/>
+ <method name="invertMap([I)[I"/>
+ <method name="isInverse()Z"/>
+ <method name="isLeftToRight()Z"/>
+ <method name="isMixed()Z"/>
+ <method name="isOrderParagraphsLTR()Z"/>
+ <method name="isRightToLeft()Z"/>
+ <method name="orderParagraphsLTR(Z)V"/>
+ <method name="reorderLogical([B)[I"/>
+ <method name="reorderVisual([B)[I"/>
+ <method name="reorderVisually([BI[Ljava/lang/Object;II)V"/>
+ <method name="requiresBidi([CII)Z"/>
+ <method name="setContext(Ljava/lang/String;Ljava/lang/String;)V"/>
+ <method name="setCustomClassifier(Landroid/icu/text/BidiClassifier;)V"/>
+ <method name="setInverse(Z)V"/>
+ <method name="setLine(II)Landroid/icu/text/Bidi;"/>
+ <method name="setPara(Ljava/lang/String;B[B)V"/>
+ <method name="setPara(Ljava/text/AttributedCharacterIterator;)V"/>
+ <method name="setPara([CB[B)V"/>
+ <method name="setReorderingMode(I)V"/>
+ <method name="setReorderingOptions(I)V"/>
+ <method name="writeReordered(I)Ljava/lang/String;"/>
+ <method name="writeReverse(Ljava/lang/String;I)Ljava/lang/String;"/>
+ <field name="DIRECTION_DEFAULT_LEFT_TO_RIGHT"/>
+ <field name="DIRECTION_DEFAULT_RIGHT_TO_LEFT"/>
+ <field name="DIRECTION_LEFT_TO_RIGHT"/>
+ <field name="DIRECTION_RIGHT_TO_LEFT"/>
+ <field name="DO_MIRRORING"/>
+ <field name="INSERT_LRM_FOR_NUMERIC"/>
+ <field name="KEEP_BASE_COMBINING"/>
+ <field name="LEVEL_DEFAULT_LTR"/>
+ <field name="LEVEL_DEFAULT_RTL"/>
+ <field name="LEVEL_OVERRIDE"/>
+ <field name="LTR"/>
+ <field name="MAP_NOWHERE"/>
+ <field name="MAX_EXPLICIT_LEVEL"/>
+ <field name="MIXED"/>
+ <field name="NEUTRAL"/>
+ <field name="OPTION_DEFAULT"/>
+ <field name="OPTION_INSERT_MARKS"/>
+ <field name="OPTION_REMOVE_CONTROLS"/>
+ <field name="OPTION_STREAMING"/>
+ <field name="OUTPUT_REVERSE"/>
+ <field name="REMOVE_BIDI_CONTROLS"/>
+ <field name="REORDER_DEFAULT"/>
+ <field name="REORDER_GROUP_NUMBERS_WITH_R"/>
+ <field name="REORDER_INVERSE_FOR_NUMBERS_SPECIAL"/>
+ <field name="REORDER_INVERSE_LIKE_DIRECT"/>
+ <field name="REORDER_INVERSE_NUMBERS_AS_L"/>
+ <field name="REORDER_NUMBERS_SPECIAL"/>
+ <field name="REORDER_RUNS_ONLY"/>
+ <field name="RTL"/>
+ </class>
+ <class name="android/icu/text/BidiClassifier" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Ljava/lang/Object;)V"/>
+ <method name="classify(I)I"/>
+ <method name="getContext()Ljava/lang/Object;"/>
+ <method name="setContext(Ljava/lang/Object;)V"/>
+ </class>
+ <class name="android/icu/text/BidiRun" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getDirection()B"/>
+ <method name="getEmbeddingLevel()B"/>
+ <method name="getLength()I"/>
+ <method name="getLimit()I"/>
+ <method name="getStart()I"/>
+ <method name="isEvenRun()Z"/>
+ <method name="isOddRun()Z"/>
+ </class>
<class name="android/icu/text/BreakIterator" since="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/Cloneable"/>
@@ -18380,9 +19404,9 @@
<method name="getSentenceInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;"/>
<method name="getSentenceInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;"/>
<method name="getText()Ljava/text/CharacterIterator;"/>
- <method name="getTitleInstance()Landroid/icu/text/BreakIterator;"/>
- <method name="getTitleInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;"/>
- <method name="getTitleInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;"/>
+ <method name="getTitleInstance()Landroid/icu/text/BreakIterator;" deprecated="29"/>
+ <method name="getTitleInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;" deprecated="29"/>
+ <method name="getTitleInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;" deprecated="29"/>
<method name="getWordInstance()Landroid/icu/text/BreakIterator;"/>
<method name="getWordInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;"/>
<method name="getWordInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;"/>
@@ -18392,13 +19416,14 @@
<method name="next(I)I"/>
<method name="preceding(I)I"/>
<method name="previous()I"/>
+ <method name="setText(Ljava/lang/CharSequence;)V" since="29"/>
<method name="setText(Ljava/lang/String;)V"/>
<method name="setText(Ljava/text/CharacterIterator;)V"/>
<field name="DONE"/>
<field name="KIND_CHARACTER"/>
<field name="KIND_LINE"/>
<field name="KIND_SENTENCE"/>
- <field name="KIND_TITLE"/>
+ <field name="KIND_TITLE" deprecated="29"/>
<field name="KIND_WORD"/>
<field name="WORD_IDEO"/>
<field name="WORD_IDEO_LIMIT"/>
@@ -18411,10 +19436,46 @@
<field name="WORD_NUMBER"/>
<field name="WORD_NUMBER_LIMIT"/>
</class>
+ <class name="android/icu/text/CaseMap" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="fold()Landroid/icu/text/CaseMap$Fold;"/>
+ <method name="omitUnchangedText()Landroid/icu/text/CaseMap;"/>
+ <method name="toLower()Landroid/icu/text/CaseMap$Lower;"/>
+ <method name="toTitle()Landroid/icu/text/CaseMap$Title;"/>
+ <method name="toUpper()Landroid/icu/text/CaseMap$Upper;"/>
+ </class>
+ <class name="android/icu/text/CaseMap$Fold" since="29">
+ <extends name="android/icu/text/CaseMap"/>
+ <method name="apply(Ljava/lang/CharSequence;)Ljava/lang/String;"/>
+ <method name="apply(Ljava/lang/CharSequence;Ljava/lang/Appendable;Landroid/icu/text/Edits;)Ljava/lang/Appendable;"/>
+ <method name="omitUnchangedText()Landroid/icu/text/CaseMap$Fold;"/>
+ <method name="turkic()Landroid/icu/text/CaseMap$Fold;"/>
+ </class>
+ <class name="android/icu/text/CaseMap$Lower" since="29">
+ <extends name="android/icu/text/CaseMap"/>
+ <method name="apply(Ljava/util/Locale;Ljava/lang/CharSequence;)Ljava/lang/String;"/>
+ <method name="apply(Ljava/util/Locale;Ljava/lang/CharSequence;Ljava/lang/Appendable;Landroid/icu/text/Edits;)Ljava/lang/Appendable;"/>
+ <method name="omitUnchangedText()Landroid/icu/text/CaseMap$Lower;"/>
+ </class>
+ <class name="android/icu/text/CaseMap$Title" since="29">
+ <extends name="android/icu/text/CaseMap"/>
+ <method name="adjustToCased()Landroid/icu/text/CaseMap$Title;"/>
+ <method name="apply(Ljava/util/Locale;Landroid/icu/text/BreakIterator;Ljava/lang/CharSequence;)Ljava/lang/String;"/>
+ <method name="apply(Ljava/util/Locale;Landroid/icu/text/BreakIterator;Ljava/lang/CharSequence;Ljava/lang/Appendable;Landroid/icu/text/Edits;)Ljava/lang/Appendable;"/>
+ <method name="noBreakAdjustment()Landroid/icu/text/CaseMap$Title;"/>
+ <method name="noLowercase()Landroid/icu/text/CaseMap$Title;"/>
+ <method name="omitUnchangedText()Landroid/icu/text/CaseMap$Title;"/>
+ <method name="sentences()Landroid/icu/text/CaseMap$Title;"/>
+ <method name="wholeString()Landroid/icu/text/CaseMap$Title;"/>
+ </class>
+ <class name="android/icu/text/CaseMap$Upper" since="29">
+ <extends name="android/icu/text/CaseMap"/>
+ <method name="apply(Ljava/util/Locale;Ljava/lang/CharSequence;)Ljava/lang/String;"/>
+ <method name="apply(Ljava/util/Locale;Ljava/lang/CharSequence;Ljava/lang/Appendable;Landroid/icu/text/Edits;)Ljava/lang/Appendable;"/>
+ <method name="omitUnchangedText()Landroid/icu/text/CaseMap$Upper;"/>
+ </class>
<class name="android/icu/text/CollationElementIterator" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/icu/text/RuleBasedCollator;)V" since="29"/>
<method name="getMaxExpansion(I)I"/>
<method name="getOffset()I"/>
<method name="next()I"/>
@@ -18443,7 +19504,6 @@
</class>
<class name="android/icu/text/CollationKey$BoundMode" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="LOWER"/>
<field name="UPPER"/>
<field name="UPPER_LONG"/>
@@ -18509,8 +19569,6 @@
</class>
<class name="android/icu/text/CompactDecimalFormat" since="24">
<extends name="android/icu/text/DecimalFormat"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/text/CompactDecimalFormat$CompactStyle;)V" since="29"/>
<method name="getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/CompactDecimalFormat$CompactStyle;)Landroid/icu/text/CompactDecimalFormat;"/>
<method name="getInstance(Ljava/util/Locale;Landroid/icu/text/CompactDecimalFormat$CompactStyle;)Landroid/icu/text/CompactDecimalFormat;"/>
</class>
@@ -18697,6 +19755,7 @@
<field name="PARSE_ALLOW_WHITESPACE"/>
<field name="PARSE_MULTIPLE_PATTERNS_FOR_MATCH" since="26"/>
<field name="PARSE_PARTIAL_LITERAL_MATCH" since="26"/>
+ <field name="PARSE_PARTIAL_MATCH" since="28" removed="29"/>
</class>
<class name="android/icu/text/DateFormat$Field" since="24">
<extends name="java/text/Format$Field"/>
@@ -18785,7 +19844,6 @@
</class>
<class name="android/icu/text/DateIntervalFormat" since="24">
<extends name="android/icu/text/UFormat"/>
- <method name="&lt;init>()V"/>
<method name="format(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
<method name="format(Landroid/icu/util/DateInterval;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
<method name="getDateFormat()Landroid/icu/text/DateFormat;"/>
@@ -18841,6 +19899,7 @@
<method name="getDateTimeFormat()Ljava/lang/String;"/>
<method name="getDecimal()Ljava/lang/String;"/>
<method name="getEmptyInstance()Landroid/icu/text/DateTimePatternGenerator;"/>
+ <method name="getFieldDisplayName(ILandroid/icu/text/DateTimePatternGenerator$DisplayWidth;)Ljava/lang/String;" since="30"/>
<method name="getInstance()Landroid/icu/text/DateTimePatternGenerator;"/>
<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/DateTimePatternGenerator;"/>
<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/DateTimePatternGenerator;"/>
@@ -18872,6 +19931,14 @@
<field name="YEAR"/>
<field name="ZONE"/>
</class>
+ <class name="android/icu/text/DateTimePatternGenerator$DisplayWidth" since="30">
+ <extends name="java/lang/Enum"/>
+ <method name="valueOf(Ljava/lang/String;)Landroid/icu/text/DateTimePatternGenerator$DisplayWidth;"/>
+ <method name="values()[Landroid/icu/text/DateTimePatternGenerator$DisplayWidth;"/>
+ <field name="ABBREVIATED"/>
+ <field name="NARROW"/>
+ <field name="WIDE"/>
+ </class>
<class name="android/icu/text/DateTimePatternGenerator$PatternInfo" since="24">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
@@ -18957,6 +20024,8 @@
<method name="&lt;init>()V"/>
<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
<method name="&lt;init>(Ljava/util/Locale;)V"/>
+ <method name="forNumberingSystem(Landroid/icu/util/ULocale;Landroid/icu/text/NumberingSystem;)Landroid/icu/text/DecimalFormatSymbols;" since="29"/>
+ <method name="forNumberingSystem(Ljava/util/Locale;Landroid/icu/text/NumberingSystem;)Landroid/icu/text/DecimalFormatSymbols;" since="29"/>
<method name="getAvailableLocales()[Ljava/util/Locale;"/>
<method name="getCurrency()Landroid/icu/util/Currency;"/>
<method name="getCurrencySymbol()Ljava/lang/String;"/>
@@ -19055,9 +20124,37 @@
<field name="DISPLAY_LENGTH"/>
<field name="SUBSTITUTE_HANDLING" since="28"/>
</class>
+ <class name="android/icu/text/Edits" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="addReplace(II)V"/>
+ <method name="addUnchanged(I)V"/>
+ <method name="getCoarseChangesIterator()Landroid/icu/text/Edits$Iterator;"/>
+ <method name="getCoarseIterator()Landroid/icu/text/Edits$Iterator;"/>
+ <method name="getFineChangesIterator()Landroid/icu/text/Edits$Iterator;"/>
+ <method name="getFineIterator()Landroid/icu/text/Edits$Iterator;"/>
+ <method name="hasChanges()Z"/>
+ <method name="lengthDelta()I"/>
+ <method name="mergeAndAppend(Landroid/icu/text/Edits;Landroid/icu/text/Edits;)Landroid/icu/text/Edits;"/>
+ <method name="numberOfChanges()I"/>
+ <method name="reset()V"/>
+ </class>
+ <class name="android/icu/text/Edits$Iterator" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="destinationIndex()I"/>
+ <method name="destinationIndexFromSourceIndex(I)I"/>
+ <method name="findDestinationIndex(I)Z"/>
+ <method name="findSourceIndex(I)Z"/>
+ <method name="hasChange()Z"/>
+ <method name="newLength()I"/>
+ <method name="next()Z"/>
+ <method name="oldLength()I"/>
+ <method name="replacementIndex()I"/>
+ <method name="sourceIndex()I"/>
+ <method name="sourceIndexFromDestinationIndex(I)I"/>
+ </class>
<class name="android/icu/text/IDNA" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" deprecated="29"/>
<method name="getUTS46Instance(I)Landroid/icu/text/IDNA;"/>
<method name="labelToASCII(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;Landroid/icu/text/IDNA$Info;)Ljava/lang/StringBuilder;"/>
<method name="labelToUnicode(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;Landroid/icu/text/IDNA$Info;)Ljava/lang/StringBuilder;"/>
@@ -19100,8 +20197,6 @@
</class>
<class name="android/icu/text/ListFormatter" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="29" deprecated="29"/>
<method name="format(Ljava/util/Collection;)Ljava/lang/String;"/>
<method name="format([Ljava/lang/Object;)Ljava/lang/String;"/>
<method name="getInstance()Landroid/icu/text/ListFormatter;"/>
@@ -19111,7 +20206,6 @@
</class>
<class name="android/icu/text/LocaleDisplayNames" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" deprecated="29"/>
<method name="getContext(Landroid/icu/text/DisplayContext$Type;)Landroid/icu/text/DisplayContext;"/>
<method name="getDialectHandling()Landroid/icu/text/LocaleDisplayNames$DialectHandling;"/>
<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/LocaleDisplayNames;"/>
@@ -19151,8 +20245,6 @@
</class>
<class name="android/icu/text/MeasureFormat" since="24">
<extends name="android/icu/text/UFormat"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/text/MeasureFormat$FormatWidth;)V" since="29"/>
<method name="formatMeasurePerUnit(Landroid/icu/util/Measure;Landroid/icu/util/MeasureUnit;Ljava/lang/StringBuilder;Ljava/text/FieldPosition;)Ljava/lang/StringBuilder;" since="26"/>
<method name="formatMeasures(Ljava/lang/StringBuilder;Ljava/text/FieldPosition;[Landroid/icu/util/Measure;)Ljava/lang/StringBuilder;"/>
<method name="formatMeasures([Landroid/icu/util/Measure;)Ljava/lang/String;"/>
@@ -19167,7 +20259,7 @@
<method name="getNumberFormat()Landroid/icu/text/NumberFormat;"/>
<method name="getUnitDisplayName(Landroid/icu/util/MeasureUnit;)Ljava/lang/String;" since="28"/>
<method name="getWidth()Landroid/icu/text/MeasureFormat$FormatWidth;"/>
- <method name="parseObject(Ljava/lang/String;Ljava/text/ParsePosition;)Landroid/icu/util/Measure;"/>
+ <method name="parseObject(Ljava/lang/String;Ljava/text/ParsePosition;)Landroid/icu/util/Measure;" removed="30"/>
</class>
<class name="android/icu/text/MeasureFormat$FormatWidth" since="24">
<extends name="java/lang/Enum"/>
@@ -19272,8 +20364,6 @@
</class>
<class name="android/icu/text/MessagePattern$Part" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/icu/text/MessagePattern$Part$Type;III)V" since="29"/>
<method name="getArgType()Landroid/icu/text/MessagePattern$ArgType;"/>
<method name="getIndex()I"/>
<method name="getLength()I"/>
@@ -19304,7 +20394,6 @@
<class name="android/icu/text/Normalizer" since="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/Cloneable"/>
- <method name="&lt;init>()V"/>
<method name="compare(III)I"/>
<method name="compare(ILjava/lang/String;I)I"/>
<method name="compare(Ljava/lang/String;Ljava/lang/String;I)I"/>
@@ -19321,12 +20410,9 @@
</class>
<class name="android/icu/text/Normalizer$QuickCheckResult" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
</class>
<class name="android/icu/text/Normalizer2" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" deprecated="29"/>
<method name="append(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;"/>
<method name="composePair(II)I"/>
<method name="getCombiningClass(I)I"/>
@@ -19461,6 +20547,7 @@
<method name="getRadix()I"/>
<method name="isAlgorithmic()Z"/>
<method name="isValidDigitString(Ljava/lang/String;)Z"/>
+ <field name="LATIN" since="29"/>
</class>
<class name="android/icu/text/PluralFormat" since="24">
<extends name="android/icu/text/UFormat"/>
@@ -19487,7 +20574,6 @@
<class name="android/icu/text/PluralRules" since="24">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V"/>
<method name="createRules(Ljava/lang/String;)Landroid/icu/text/PluralRules;"/>
<method name="equals(Landroid/icu/text/PluralRules;)Z"/>
<method name="forLocale(Landroid/icu/util/ULocale;)Landroid/icu/text/PluralRules;"/>
@@ -19518,8 +20604,6 @@
</class>
<class name="android/icu/text/RelativeDateTimeFormatter" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/EnumMap;Ljava/util/EnumMap;Ljava/lang/String;Landroid/icu/text/PluralRules;Landroid/icu/text/NumberFormat;Landroid/icu/text/RelativeDateTimeFormatter$Style;Landroid/icu/text/DisplayContext;Landroid/icu/text/BreakIterator;Landroid/icu/util/ULocale;)V" since="29"/>
<method name="combineDateAndTime(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
<method name="format(DLandroid/icu/text/RelativeDateTimeFormatter$Direction;Landroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;)Ljava/lang/String;"/>
<method name="format(DLandroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeUnit;)Ljava/lang/String;" since="28"/>
@@ -19544,6 +20628,7 @@
<field name="MONDAY"/>
<field name="MONTH"/>
<field name="NOW"/>
+ <field name="QUARTER" since="28" removed="29"/>
<field name="SATURDAY"/>
<field name="SUNDAY"/>
<field name="THURSDAY"/>
@@ -19591,6 +20676,7 @@
<field name="HOURS"/>
<field name="MINUTES"/>
<field name="MONTHS"/>
+ <field name="QUARTERS" since="28" removed="29"/>
<field name="SECONDS"/>
<field name="WEEKS"/>
<field name="YEARS"/>
@@ -19647,7 +20733,6 @@
</class>
<class name="android/icu/text/ScientificNumberFormatter" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="format(Ljava/lang/Object;)Ljava/lang/String;"/>
<method name="getMarkupInstance(Landroid/icu/text/DecimalFormat;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/text/ScientificNumberFormatter;"/>
<method name="getMarkupInstance(Landroid/icu/util/ULocale;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/text/ScientificNumberFormatter;"/>
@@ -19856,7 +20941,6 @@
<class name="android/icu/text/TimeZoneNames" since="24">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V"/>
<method name="getAvailableMetaZoneIDs()Ljava/util/Set;"/>
<method name="getAvailableMetaZoneIDs(Ljava/lang/String;)Ljava/util/Set;"/>
<method name="getDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;J)Ljava/lang/String;"/>
@@ -19881,6 +20965,51 @@
<field name="SHORT_GENERIC"/>
<field name="SHORT_STANDARD"/>
</class>
+ <class name="android/icu/text/Transliterator" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="createFromRules(Ljava/lang/String;Ljava/lang/String;I)Landroid/icu/text/Transliterator;"/>
+ <method name="filteredTransliterate(Landroid/icu/text/Replaceable;Landroid/icu/text/Transliterator$Position;Z)V"/>
+ <method name="finishTransliteration(Landroid/icu/text/Replaceable;Landroid/icu/text/Transliterator$Position;)V"/>
+ <method name="getAvailableIDs()Ljava/util/Enumeration;"/>
+ <method name="getAvailableSources()Ljava/util/Enumeration;"/>
+ <method name="getAvailableTargets(Ljava/lang/String;)Ljava/util/Enumeration;"/>
+ <method name="getAvailableVariants(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Enumeration;"/>
+ <method name="getDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getDisplayName(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+ <method name="getDisplayName(Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String;"/>
+ <method name="getElements()[Landroid/icu/text/Transliterator;"/>
+ <method name="getFilter()Landroid/icu/text/UnicodeFilter;"/>
+ <method name="getID()Ljava/lang/String;"/>
+ <method name="getInstance(Ljava/lang/String;)Landroid/icu/text/Transliterator;"/>
+ <method name="getInstance(Ljava/lang/String;I)Landroid/icu/text/Transliterator;"/>
+ <method name="getInverse()Landroid/icu/text/Transliterator;"/>
+ <method name="getMaximumContextLength()I"/>
+ <method name="getSourceSet()Landroid/icu/text/UnicodeSet;"/>
+ <method name="getTargetSet()Landroid/icu/text/UnicodeSet;"/>
+ <method name="setFilter(Landroid/icu/text/UnicodeFilter;)V"/>
+ <method name="toRules(Z)Ljava/lang/String;"/>
+ <method name="transliterate(Landroid/icu/text/Replaceable;)V"/>
+ <method name="transliterate(Landroid/icu/text/Replaceable;II)I"/>
+ <method name="transliterate(Landroid/icu/text/Replaceable;Landroid/icu/text/Transliterator$Position;)V"/>
+ <method name="transliterate(Landroid/icu/text/Replaceable;Landroid/icu/text/Transliterator$Position;I)V"/>
+ <method name="transliterate(Landroid/icu/text/Replaceable;Landroid/icu/text/Transliterator$Position;Ljava/lang/String;)V"/>
+ <method name="transliterate(Ljava/lang/String;)Ljava/lang/String;"/>
+ <field name="FORWARD"/>
+ <field name="REVERSE"/>
+ </class>
+ <class name="android/icu/text/Transliterator$Position" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="&lt;init>(III)V"/>
+ <method name="&lt;init>(IIII)V"/>
+ <method name="&lt;init>(Landroid/icu/text/Transliterator$Position;)V"/>
+ <method name="set(Landroid/icu/text/Transliterator$Position;)V"/>
+ <method name="validate(I)V"/>
+ <field name="contextLimit"/>
+ <field name="contextStart"/>
+ <field name="limit"/>
+ <field name="start"/>
+ </class>
<class name="android/icu/text/UCharacterIterator" since="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/Cloneable"/>
@@ -19917,7 +21046,6 @@
<class name="android/icu/text/UnicodeFilter" since="24">
<extends name="java/lang/Object"/>
<implements name="android/icu/text/UnicodeMatcher"/>
- <method name="&lt;init>()V" deprecated="29"/>
<method name="contains(I)Z"/>
</class>
<class name="android/icu/text/UnicodeMatcher" since="24">
@@ -20039,7 +21167,6 @@
</class>
<class name="android/icu/text/UnicodeSet$EntryRange" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="codepoint"/>
<field name="codepointEnd"/>
</class>
@@ -20110,18 +21237,6 @@
<method name="&lt;init>(Ljava/util/Locale;)V"/>
<field name="BE"/>
</class>
- <class name="android/icu/util/CECalendar" since="24" removed="29">
- <extends name="android/icu/util/Calendar"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(III)V"/>
- <method name="&lt;init>(IIIIII)V"/>
- <method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
- <method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
- <method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
- <method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
- <method name="&lt;init>(Ljava/util/Date;)V"/>
- <method name="&lt;init>(Ljava/util/Locale;)V"/>
- </class>
<class name="android/icu/util/Calendar" since="24">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
@@ -20337,8 +21452,7 @@
<method name="handleGetDateFormat(Ljava/lang/String;Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
</class>
<class name="android/icu/util/CopticCalendar" since="24">
- <extends name="android/icu/util/CECalendar" removed="29"/>
- <extends name="android/icu/util/Calendar" since="29"/>
+ <extends name="android/icu/util/Calendar"/>
<method name="&lt;init>()V"/>
<method name="&lt;init>(III)V"/>
<method name="&lt;init>(IIIIII)V"/>
@@ -20365,6 +21479,7 @@
<class name="android/icu/util/Currency" since="24">
<extends name="android/icu/util/MeasureUnit"/>
<method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="fromJavaCurrency(Ljava/util/Currency;)Landroid/icu/util/Currency;" since="29"/>
<method name="getAvailableCurrencies()Ljava/util/Set;"/>
<method name="getAvailableCurrencyCodes(Landroid/icu/util/ULocale;Ljava/util/Date;)[Ljava/lang/String;"/>
<method name="getAvailableCurrencyCodes(Ljava/util/Locale;Ljava/util/Date;)[Ljava/lang/String;"/>
@@ -20390,7 +21505,9 @@
<method name="getSymbol(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
<method name="getSymbol(Ljava/util/Locale;)Ljava/lang/String;"/>
<method name="isAvailable(Ljava/lang/String;Ljava/util/Date;Ljava/util/Date;)Z"/>
+ <method name="toJavaCurrency()Ljava/util/Currency;" since="29"/>
<field name="LONG_NAME"/>
+ <field name="NARROW_SYMBOL_NAME" since="30"/>
<field name="PLURAL_LONG_NAME"/>
<field name="SYMBOL_NAME"/>
</class>
@@ -20404,7 +21521,9 @@
<class name="android/icu/util/CurrencyAmount" since="24">
<extends name="android/icu/util/Measure"/>
<method name="&lt;init>(DLandroid/icu/util/Currency;)V"/>
+ <method name="&lt;init>(DLjava/util/Currency;)V" since="29"/>
<method name="&lt;init>(Ljava/lang/Number;Landroid/icu/util/Currency;)V"/>
+ <method name="&lt;init>(Ljava/lang/Number;Ljava/util/Currency;)V" since="29"/>
<method name="getCurrency()Landroid/icu/util/Currency;"/>
</class>
<class name="android/icu/util/DateInterval" since="24">
@@ -20415,8 +21534,7 @@
<method name="getToDate()J"/>
</class>
<class name="android/icu/util/EthiopicCalendar" since="26">
- <extends name="android/icu/util/CECalendar" removed="29"/>
- <extends name="android/icu/util/Calendar" since="29"/>
+ <extends name="android/icu/util/Calendar"/>
<method name="&lt;init>()V"/>
<method name="&lt;init>(III)V"/>
<method name="&lt;init>(IIIIII)V"/>
@@ -20579,15 +21697,15 @@
<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
<method name="&lt;init>(Ljava/util/Date;)V"/>
<method name="&lt;init>(Ljava/util/Locale;)V"/>
- <field name="CURRENT_ERA"/>
+ <field name="CURRENT_ERA" deprecated="29" removed="30"/>
<field name="HEISEI"/>
<field name="MEIJI"/>
+ <field name="REIWA" since="30"/>
<field name="SHOWA"/>
<field name="TAISHO"/>
</class>
<class name="android/icu/util/LocaleData" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getCLDRVersion()Landroid/icu/util/VersionInfo;"/>
<method name="getDelimiter(I)Ljava/lang/String;"/>
<method name="getInstance()Landroid/icu/util/LocaleData;"/>
@@ -20603,15 +21721,12 @@
</class>
<class name="android/icu/util/LocaleData$MeasurementSystem" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="SI"/>
<field name="UK"/>
<field name="US"/>
</class>
<class name="android/icu/util/LocaleData$PaperSize" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(II)V" since="29"/>
<method name="getHeight()I"/>
<method name="getWidth()I"/>
</class>
@@ -20624,8 +21739,6 @@
<class name="android/icu/util/MeasureUnit" since="24">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V" since="29" deprecated="29"/>
<method name="getAvailable()Ljava/util/Set;"/>
<method name="getAvailable(Ljava/lang/String;)Ljava/util/Set;"/>
<method name="getAvailableTypes()Ljava/util/Set;"/>
@@ -20637,6 +21750,7 @@
<field name="ARC_MINUTE"/>
<field name="ARC_SECOND"/>
<field name="ASTRONOMICAL_UNIT"/>
+ <field name="ATMOSPHERE" since="30"/>
<field name="BIT"/>
<field name="BUSHEL"/>
<field name="BYTE"/>
@@ -20738,6 +21852,9 @@
<field name="OUNCE_TROY"/>
<field name="PARSEC"/>
<field name="PART_PER_MILLION" since="28"/>
+ <field name="PERCENT" since="30"/>
+ <field name="PERMILLE" since="30"/>
+ <field name="PETABYTE" since="30"/>
<field name="PICOMETER"/>
<field name="PINT"/>
<field name="PINT_METRIC" since="26"/>
@@ -20801,8 +21918,6 @@
</class>
<class name="android/icu/util/TimeUnit" since="24">
<extends name="android/icu/util/MeasureUnit"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V" since="29"/>
<method name="values()[Landroid/icu/util/TimeUnit;"/>
</class>
<class name="android/icu/util/TimeZone" since="24">
@@ -21016,7 +22131,6 @@
</class>
<class name="android/icu/util/UniversalTimeScale" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="bigDecimalFrom(DI)Landroid/icu/math/BigDecimal;"/>
<method name="bigDecimalFrom(JI)Landroid/icu/math/BigDecimal;"/>
<method name="bigDecimalFrom(Landroid/icu/math/BigDecimal;I)Landroid/icu/math/BigDecimal;"/>
@@ -21059,8 +22173,6 @@
<class name="android/icu/util/VersionInfo" since="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/Comparable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="compareTo(Landroid/icu/util/VersionInfo;)I"/>
<method name="getInstance(I)Landroid/icu/util/VersionInfo;"/>
<method name="getInstance(II)Landroid/icu/util/VersionInfo;"/>
@@ -21076,6 +22188,9 @@
<field name="UCOL_RUNTIME_VERSION"/>
<field name="UNICODE_10_0" since="28"/>
<field name="UNICODE_11_0" since="29"/>
+ <field name="UNICODE_12_0" since="30"/>
+ <field name="UNICODE_12_1" since="30"/>
+ <field name="UNICODE_13_0" since="30"/>
<field name="UNICODE_1_0"/>
<field name="UNICODE_1_0_1"/>
<field name="UNICODE_1_1_0"/>
@@ -21148,7 +22263,7 @@
<method name="getCurrentInputConnection()Landroid/view/inputmethod/InputConnection;"/>
<method name="getCurrentInputEditorInfo()Landroid/view/inputmethod/EditorInfo;"/>
<method name="getCurrentInputStarted()Z"/>
- <method name="getInputMethodWindowRecommendedHeight()I" since="21"/>
+ <method name="getInputMethodWindowRecommendedHeight()I" since="21" deprecated="29"/>
<method name="getLayoutInflater()Landroid/view/LayoutInflater;"/>
<method name="getMaxWidth()I"/>
<method name="getTextForImeAction(I)Ljava/lang/CharSequence;"/>
@@ -21190,7 +22305,7 @@
<method name="onUpdateExtractingViews(Landroid/view/inputmethod/EditorInfo;)V"/>
<method name="onUpdateExtractingVisibility(Landroid/view/inputmethod/EditorInfo;)V"/>
<method name="onUpdateSelection(IIIIII)V"/>
- <method name="onViewClicked(Z)V" since="14"/>
+ <method name="onViewClicked(Z)V" since="14" deprecated="29"/>
<method name="onWindowHidden()V"/>
<method name="onWindowShown()V"/>
<method name="requestHideSelf(I)V"/>
@@ -21238,119 +22353,119 @@
<field name="touchableRegion" since="11"/>
<field name="visibleTopInsets"/>
</class>
- <class name="android/inputmethodservice/Keyboard" since="3">
- <extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/content/Context;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;II)V"/>
- <method name="&lt;init>(Landroid/content/Context;IIII)V" since="11"/>
- <method name="&lt;init>(Landroid/content/Context;ILjava/lang/CharSequence;II)V"/>
- <method name="createKeyFromXml(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard$Row;IILandroid/content/res/XmlResourceParser;)Landroid/inputmethodservice/Keyboard$Key;"/>
- <method name="createRowFromXml(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/inputmethodservice/Keyboard$Row;"/>
- <method name="getHeight()I"/>
- <method name="getHorizontalGap()I"/>
- <method name="getKeyHeight()I"/>
- <method name="getKeyWidth()I"/>
- <method name="getKeys()Ljava/util/List;"/>
- <method name="getMinWidth()I"/>
- <method name="getModifierKeys()Ljava/util/List;"/>
- <method name="getNearestKeys(II)[I"/>
- <method name="getShiftKeyIndex()I"/>
- <method name="getVerticalGap()I"/>
- <method name="isShifted()Z"/>
- <method name="setHorizontalGap(I)V"/>
- <method name="setKeyHeight(I)V"/>
- <method name="setKeyWidth(I)V"/>
- <method name="setShifted(Z)Z"/>
- <method name="setVerticalGap(I)V"/>
- <field name="EDGE_BOTTOM"/>
- <field name="EDGE_LEFT"/>
- <field name="EDGE_RIGHT"/>
- <field name="EDGE_TOP"/>
- <field name="KEYCODE_ALT"/>
- <field name="KEYCODE_CANCEL"/>
- <field name="KEYCODE_DELETE"/>
- <field name="KEYCODE_DONE"/>
- <field name="KEYCODE_MODE_CHANGE"/>
- <field name="KEYCODE_SHIFT"/>
- </class>
- <class name="android/inputmethodservice/Keyboard$Key" since="3">
- <extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard$Row;IILandroid/content/res/XmlResourceParser;)V"/>
- <method name="&lt;init>(Landroid/inputmethodservice/Keyboard$Row;)V"/>
- <method name="getCurrentDrawableState()[I"/>
- <method name="isInside(II)Z"/>
- <method name="onPressed()V"/>
- <method name="onReleased(Z)V"/>
- <method name="squaredDistanceFrom(II)I"/>
- <field name="codes"/>
- <field name="edgeFlags"/>
- <field name="gap"/>
- <field name="height"/>
- <field name="icon"/>
- <field name="iconPreview"/>
- <field name="label"/>
- <field name="modifier"/>
- <field name="on"/>
- <field name="popupCharacters"/>
- <field name="popupResId"/>
- <field name="pressed"/>
- <field name="repeatable"/>
- <field name="sticky"/>
- <field name="text"/>
- <field name="width"/>
- <field name="x"/>
- <field name="y"/>
- </class>
- <class name="android/inputmethodservice/Keyboard$Row" since="3">
- <extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard;Landroid/content/res/XmlResourceParser;)V"/>
- <method name="&lt;init>(Landroid/inputmethodservice/Keyboard;)V"/>
- <field name="defaultHeight"/>
- <field name="defaultHorizontalGap"/>
- <field name="defaultWidth"/>
- <field name="mode"/>
- <field name="rowEdgeFlags"/>
- <field name="verticalGap"/>
- </class>
- <class name="android/inputmethodservice/KeyboardView" since="3">
+ <class name="android/inputmethodservice/Keyboard" since="3" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/content/Context;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;II)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;IIII)V" since="11" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;ILjava/lang/CharSequence;II)V" deprecated="29"/>
+ <method name="createKeyFromXml(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard$Row;IILandroid/content/res/XmlResourceParser;)Landroid/inputmethodservice/Keyboard$Key;" deprecated="29"/>
+ <method name="createRowFromXml(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/inputmethodservice/Keyboard$Row;" deprecated="29"/>
+ <method name="getHeight()I" deprecated="29"/>
+ <method name="getHorizontalGap()I" deprecated="29"/>
+ <method name="getKeyHeight()I" deprecated="29"/>
+ <method name="getKeyWidth()I" deprecated="29"/>
+ <method name="getKeys()Ljava/util/List;" deprecated="29"/>
+ <method name="getMinWidth()I" deprecated="29"/>
+ <method name="getModifierKeys()Ljava/util/List;" deprecated="29"/>
+ <method name="getNearestKeys(II)[I" deprecated="29"/>
+ <method name="getShiftKeyIndex()I" deprecated="29"/>
+ <method name="getVerticalGap()I" deprecated="29"/>
+ <method name="isShifted()Z" deprecated="29"/>
+ <method name="setHorizontalGap(I)V" deprecated="29"/>
+ <method name="setKeyHeight(I)V" deprecated="29"/>
+ <method name="setKeyWidth(I)V" deprecated="29"/>
+ <method name="setShifted(Z)Z" deprecated="29"/>
+ <method name="setVerticalGap(I)V" deprecated="29"/>
+ <field name="EDGE_BOTTOM" deprecated="29"/>
+ <field name="EDGE_LEFT" deprecated="29"/>
+ <field name="EDGE_RIGHT" deprecated="29"/>
+ <field name="EDGE_TOP" deprecated="29"/>
+ <field name="KEYCODE_ALT" deprecated="29"/>
+ <field name="KEYCODE_CANCEL" deprecated="29"/>
+ <field name="KEYCODE_DELETE" deprecated="29"/>
+ <field name="KEYCODE_DONE" deprecated="29"/>
+ <field name="KEYCODE_MODE_CHANGE" deprecated="29"/>
+ <field name="KEYCODE_SHIFT" deprecated="29"/>
+ </class>
+ <class name="android/inputmethodservice/Keyboard$Key" since="3" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard$Row;IILandroid/content/res/XmlResourceParser;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/inputmethodservice/Keyboard$Row;)V" deprecated="29"/>
+ <method name="getCurrentDrawableState()[I" deprecated="29"/>
+ <method name="isInside(II)Z" deprecated="29"/>
+ <method name="onPressed()V" deprecated="29"/>
+ <method name="onReleased(Z)V" deprecated="29"/>
+ <method name="squaredDistanceFrom(II)I" deprecated="29"/>
+ <field name="codes" deprecated="29"/>
+ <field name="edgeFlags" deprecated="29"/>
+ <field name="gap" deprecated="29"/>
+ <field name="height" deprecated="29"/>
+ <field name="icon" deprecated="29"/>
+ <field name="iconPreview" deprecated="29"/>
+ <field name="label" deprecated="29"/>
+ <field name="modifier" deprecated="29"/>
+ <field name="on" deprecated="29"/>
+ <field name="popupCharacters" deprecated="29"/>
+ <field name="popupResId" deprecated="29"/>
+ <field name="pressed" deprecated="29"/>
+ <field name="repeatable" deprecated="29"/>
+ <field name="sticky" deprecated="29"/>
+ <field name="text" deprecated="29"/>
+ <field name="width" deprecated="29"/>
+ <field name="x" deprecated="29"/>
+ <field name="y" deprecated="29"/>
+ </class>
+ <class name="android/inputmethodservice/Keyboard$Row" since="3" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard;Landroid/content/res/XmlResourceParser;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/inputmethodservice/Keyboard;)V" deprecated="29"/>
+ <field name="defaultHeight" deprecated="29"/>
+ <field name="defaultHorizontalGap" deprecated="29"/>
+ <field name="defaultWidth" deprecated="29"/>
+ <field name="mode" deprecated="29"/>
+ <field name="rowEdgeFlags" deprecated="29"/>
+ <field name="verticalGap" deprecated="29"/>
+ </class>
+ <class name="android/inputmethodservice/KeyboardView" since="3" deprecated="29">
<extends name="android/view/View"/>
<implements name="android/view/View$OnClickListener"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="closing()V"/>
- <method name="getKeyboard()Landroid/inputmethodservice/Keyboard;"/>
- <method name="getOnKeyboardActionListener()Landroid/inputmethodservice/KeyboardView$OnKeyboardActionListener;"/>
- <method name="handleBack()Z"/>
- <method name="invalidateAllKeys()V" since="4"/>
- <method name="invalidateKey(I)V" since="4"/>
- <method name="isPreviewEnabled()Z"/>
- <method name="isProximityCorrectionEnabled()Z"/>
- <method name="isShifted()Z"/>
- <method name="onLongPress(Landroid/inputmethodservice/Keyboard$Key;)Z"/>
- <method name="setKeyboard(Landroid/inputmethodservice/Keyboard;)V"/>
- <method name="setOnKeyboardActionListener(Landroid/inputmethodservice/KeyboardView$OnKeyboardActionListener;)V"/>
- <method name="setPopupOffset(II)V"/>
- <method name="setPopupParent(Landroid/view/View;)V"/>
- <method name="setPreviewEnabled(Z)V"/>
- <method name="setProximityCorrectionEnabled(Z)V"/>
- <method name="setShifted(Z)Z"/>
- <method name="setVerticalCorrection(I)V"/>
- <method name="swipeDown()V"/>
- <method name="swipeLeft()V"/>
- <method name="swipeRight()V"/>
- <method name="swipeUp()V"/>
- </class>
- <class name="android/inputmethodservice/KeyboardView$OnKeyboardActionListener" since="3">
- <extends name="java/lang/Object"/>
- <method name="onKey(I[I)V"/>
- <method name="onPress(I)V"/>
- <method name="onRelease(I)V"/>
- <method name="onText(Ljava/lang/CharSequence;)V"/>
- <method name="swipeDown()V"/>
- <method name="swipeLeft()V"/>
- <method name="swipeRight()V"/>
- <method name="swipeUp()V"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="closing()V" deprecated="29"/>
+ <method name="getKeyboard()Landroid/inputmethodservice/Keyboard;" deprecated="29"/>
+ <method name="getOnKeyboardActionListener()Landroid/inputmethodservice/KeyboardView$OnKeyboardActionListener;" deprecated="29"/>
+ <method name="handleBack()Z" deprecated="29"/>
+ <method name="invalidateAllKeys()V" since="4" deprecated="29"/>
+ <method name="invalidateKey(I)V" since="4" deprecated="29"/>
+ <method name="isPreviewEnabled()Z" deprecated="29"/>
+ <method name="isProximityCorrectionEnabled()Z" deprecated="29"/>
+ <method name="isShifted()Z" deprecated="29"/>
+ <method name="onLongPress(Landroid/inputmethodservice/Keyboard$Key;)Z" deprecated="29"/>
+ <method name="setKeyboard(Landroid/inputmethodservice/Keyboard;)V" deprecated="29"/>
+ <method name="setOnKeyboardActionListener(Landroid/inputmethodservice/KeyboardView$OnKeyboardActionListener;)V" deprecated="29"/>
+ <method name="setPopupOffset(II)V" deprecated="29"/>
+ <method name="setPopupParent(Landroid/view/View;)V" deprecated="29"/>
+ <method name="setPreviewEnabled(Z)V" deprecated="29"/>
+ <method name="setProximityCorrectionEnabled(Z)V" deprecated="29"/>
+ <method name="setShifted(Z)Z" deprecated="29"/>
+ <method name="setVerticalCorrection(I)V" deprecated="29"/>
+ <method name="swipeDown()V" deprecated="29"/>
+ <method name="swipeLeft()V" deprecated="29"/>
+ <method name="swipeRight()V" deprecated="29"/>
+ <method name="swipeUp()V" deprecated="29"/>
+ </class>
+ <class name="android/inputmethodservice/KeyboardView$OnKeyboardActionListener" since="3" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <method name="onKey(I[I)V" deprecated="29"/>
+ <method name="onPress(I)V" deprecated="29"/>
+ <method name="onRelease(I)V" deprecated="29"/>
+ <method name="onText(Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="swipeDown()V" deprecated="29"/>
+ <method name="swipeLeft()V" deprecated="29"/>
+ <method name="swipeRight()V" deprecated="29"/>
+ <method name="swipeUp()V" deprecated="29"/>
</class>
<class name="android/location/Address" since="1">
<extends name="java/lang/Object"/>
@@ -21446,11 +22561,12 @@
<class name="android/location/GnssClock" since="24">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getBiasNanos()D"/>
<method name="getBiasUncertaintyNanos()D"/>
<method name="getDriftNanosPerSecond()D"/>
<method name="getDriftUncertaintyNanosPerSecond()D"/>
+ <method name="getElapsedRealtimeNanos()J" since="29"/>
+ <method name="getElapsedRealtimeUncertaintyNanos()D" since="29"/>
<method name="getFullBiasNanos()J"/>
<method name="getHardwareClockDiscontinuityCount()I"/>
<method name="getLeapSecond()I"/>
@@ -21460,6 +22576,8 @@
<method name="hasBiasUncertaintyNanos()Z"/>
<method name="hasDriftNanosPerSecond()Z"/>
<method name="hasDriftUncertaintyNanosPerSecond()Z"/>
+ <method name="hasElapsedRealtimeNanos()Z" since="29"/>
+ <method name="hasElapsedRealtimeUncertaintyNanos()Z" since="29"/>
<method name="hasFullBiasNanos()Z"/>
<method name="hasLeapSecond()Z"/>
<method name="hasTimeUncertaintyNanos()Z"/>
@@ -21468,7 +22586,6 @@
<class name="android/location/GnssMeasurement" since="24">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getAccumulatedDeltaRangeMeters()D"/>
<method name="getAccumulatedDeltaRangeState()I"/>
<method name="getAccumulatedDeltaRangeUncertaintyMeters()D"/>
@@ -21478,6 +22595,7 @@
<method name="getCarrierPhase()D" deprecated="28"/>
<method name="getCarrierPhaseUncertainty()D" deprecated="28"/>
<method name="getCn0DbHz()D"/>
+ <method name="getCodeType()Ljava/lang/String;" since="29"/>
<method name="getConstellationType()I"/>
<method name="getMultipathIndicator()I"/>
<method name="getPseudorangeRateMetersPerSecond()D"/>
@@ -21493,6 +22611,7 @@
<method name="hasCarrierFrequencyHz()Z"/>
<method name="hasCarrierPhase()Z" deprecated="28"/>
<method name="hasCarrierPhaseUncertainty()Z" deprecated="28"/>
+ <method name="hasCodeType()Z" since="29"/>
<method name="hasSnrInDb()Z"/>
<field name="ADR_STATE_CYCLE_SLIP"/>
<field name="ADR_STATE_HALF_CYCLE_REPORTED" since="28"/>
@@ -21504,6 +22623,7 @@
<field name="MULTIPATH_INDICATOR_DETECTED"/>
<field name="MULTIPATH_INDICATOR_NOT_DETECTED"/>
<field name="MULTIPATH_INDICATOR_UNKNOWN"/>
+ <field name="STATE_2ND_CODE_LOCK" since="29"/>
<field name="STATE_BDS_D2_BIT_SYNC"/>
<field name="STATE_BDS_D2_SUBFRAME_SYNC"/>
<field name="STATE_BIT_SYNC"/>
@@ -21525,8 +22645,6 @@
<class name="android/location/GnssMeasurementsEvent" since="24">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/location/GnssClock;[Landroid/location/GnssMeasurement;)V" since="29"/>
<method name="getClock()Landroid/location/GnssClock;"/>
<method name="getMeasurements()Ljava/util/Collection;"/>
<field name="CREATOR"/>
@@ -21544,7 +22662,6 @@
<class name="android/location/GnssNavigationMessage" since="24">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getData()[B"/>
<method name="getMessageId()I"/>
<method name="getStatus()I"/>
@@ -21577,8 +22694,6 @@
</class>
<class name="android/location/GnssStatus" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I[I[F[F[F[F)V" since="29"/>
<method name="getAzimuthDegrees(I)F"/>
<method name="getCarrierFrequencyHz(I)F" since="26"/>
<method name="getCn0DbHz(I)F"/>
@@ -21594,6 +22709,7 @@
<field name="CONSTELLATION_GALILEO"/>
<field name="CONSTELLATION_GLONASS"/>
<field name="CONSTELLATION_GPS"/>
+ <field name="CONSTELLATION_IRNSS" since="29"/>
<field name="CONSTELLATION_QZSS"/>
<field name="CONSTELLATION_SBAS"/>
<field name="CONSTELLATION_UNKNOWN"/>
@@ -21608,34 +22724,31 @@
</class>
<class name="android/location/GpsSatellite" since="3" deprecated="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
- <method name="getAzimuth()F"/>
- <method name="getElevation()F"/>
- <method name="getPrn()I"/>
- <method name="getSnr()F"/>
- <method name="hasAlmanac()Z"/>
- <method name="hasEphemeris()Z"/>
- <method name="usedInFix()Z"/>
+ <method name="getAzimuth()F" deprecated="29"/>
+ <method name="getElevation()F" deprecated="29"/>
+ <method name="getPrn()I" deprecated="29"/>
+ <method name="getSnr()F" deprecated="29"/>
+ <method name="hasAlmanac()Z" deprecated="29"/>
+ <method name="hasEphemeris()Z" deprecated="29"/>
+ <method name="usedInFix()Z" deprecated="29"/>
</class>
<class name="android/location/GpsStatus" since="3" deprecated="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="getMaxSatellites()I"/>
- <method name="getSatellites()Ljava/lang/Iterable;"/>
- <method name="getTimeToFirstFix()I"/>
- <field name="GPS_EVENT_FIRST_FIX"/>
- <field name="GPS_EVENT_SATELLITE_STATUS"/>
- <field name="GPS_EVENT_STARTED"/>
- <field name="GPS_EVENT_STOPPED"/>
+ <method name="getMaxSatellites()I" deprecated="29"/>
+ <method name="getSatellites()Ljava/lang/Iterable;" deprecated="29"/>
+ <method name="getTimeToFirstFix()I" deprecated="29"/>
+ <field name="GPS_EVENT_FIRST_FIX" deprecated="29"/>
+ <field name="GPS_EVENT_SATELLITE_STATUS" deprecated="29"/>
+ <field name="GPS_EVENT_STARTED" deprecated="29"/>
+ <field name="GPS_EVENT_STOPPED" deprecated="29"/>
</class>
<class name="android/location/GpsStatus$Listener" since="3" deprecated="24">
<extends name="java/lang/Object"/>
- <method name="onGpsStatusChanged(I)V"/>
+ <method name="onGpsStatusChanged(I)V" deprecated="29"/>
</class>
<class name="android/location/GpsStatus$NmeaListener" since="5" deprecated="24">
<extends name="java/lang/Object"/>
- <method name="onNmeaReceived(JLjava/lang/String;)V"/>
+ <method name="onNmeaReceived(JLjava/lang/String;)V" deprecated="29"/>
</class>
<class name="android/location/Location" since="1">
<extends name="java/lang/Object"/>
@@ -21653,6 +22766,7 @@
<method name="getBearing()F"/>
<method name="getBearingAccuracyDegrees()F" since="26"/>
<method name="getElapsedRealtimeNanos()J" since="17"/>
+ <method name="getElapsedRealtimeUncertaintyNanos()D" since="29"/>
<method name="getExtras()Landroid/os/Bundle;"/>
<method name="getLatitude()D"/>
<method name="getLongitude()D"/>
@@ -21665,6 +22779,7 @@
<method name="hasAltitude()Z"/>
<method name="hasBearing()Z"/>
<method name="hasBearingAccuracy()Z" since="26"/>
+ <method name="hasElapsedRealtimeUncertaintyNanos()Z" since="29"/>
<method name="hasSpeed()Z"/>
<method name="hasSpeedAccuracy()Z" since="26"/>
<method name="hasVerticalAccuracy()Z" since="26"/>
@@ -21680,6 +22795,7 @@
<method name="setBearing(F)V"/>
<method name="setBearingAccuracyDegrees(F)V" since="26"/>
<method name="setElapsedRealtimeNanos(J)V" since="17"/>
+ <method name="setElapsedRealtimeUncertaintyNanos(D)V" since="29"/>
<method name="setExtras(Landroid/os/Bundle;)V"/>
<method name="setLatitude(D)V"/>
<method name="setLongitude(D)V"/>
@@ -21698,20 +22814,19 @@
<method name="onLocationChanged(Landroid/location/Location;)V"/>
<method name="onProviderDisabled(Ljava/lang/String;)V"/>
<method name="onProviderEnabled(Ljava/lang/String;)V"/>
- <method name="onStatusChanged(Ljava/lang/String;ILandroid/os/Bundle;)V"/>
+ <method name="onStatusChanged(Ljava/lang/String;ILandroid/os/Bundle;)V" deprecated="29"/>
</class>
<class name="android/location/LocationManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="addGpsStatusListener(Landroid/location/GpsStatus$Listener;)Z" since="3" deprecated="24"/>
- <method name="addNmeaListener(Landroid/location/GpsStatus$NmeaListener;)Z" since="5" deprecated="24"/>
+ <method name="addNmeaListener(Landroid/location/GpsStatus$NmeaListener;)Z" since="5" deprecated="24" removed="29"/>
<method name="addNmeaListener(Landroid/location/OnNmeaMessageListener;)Z" since="24"/>
<method name="addNmeaListener(Landroid/location/OnNmeaMessageListener;Landroid/os/Handler;)Z" since="24"/>
<method name="addProximityAlert(DDFJLandroid/app/PendingIntent;)V"/>
<method name="addTestProvider(Ljava/lang/String;ZZZZZZZII)V" since="3"/>
- <method name="clearTestProviderEnabled(Ljava/lang/String;)V" since="3"/>
- <method name="clearTestProviderLocation(Ljava/lang/String;)V" since="3"/>
- <method name="clearTestProviderStatus(Ljava/lang/String;)V" since="3"/>
+ <method name="clearTestProviderEnabled(Ljava/lang/String;)V" since="3" deprecated="29"/>
+ <method name="clearTestProviderLocation(Ljava/lang/String;)V" since="3" deprecated="29"/>
+ <method name="clearTestProviderStatus(Ljava/lang/String;)V" since="3" deprecated="29"/>
<method name="getAllProviders()Ljava/util/List;"/>
<method name="getBestProvider(Landroid/location/Criteria;Z)Ljava/lang/String;"/>
<method name="getGnssHardwareModelName()Ljava/lang/String;" since="28"/>
@@ -21730,7 +22845,7 @@
<method name="registerGnssStatusCallback(Landroid/location/GnssStatus$Callback;)Z" since="24"/>
<method name="registerGnssStatusCallback(Landroid/location/GnssStatus$Callback;Landroid/os/Handler;)Z" since="24"/>
<method name="removeGpsStatusListener(Landroid/location/GpsStatus$Listener;)V" since="3" deprecated="24"/>
- <method name="removeNmeaListener(Landroid/location/GpsStatus$NmeaListener;)V" since="5" deprecated="24"/>
+ <method name="removeNmeaListener(Landroid/location/GpsStatus$NmeaListener;)V" since="5" deprecated="24" removed="29"/>
<method name="removeNmeaListener(Landroid/location/OnNmeaMessageListener;)V" since="24"/>
<method name="removeProximityAlert(Landroid/app/PendingIntent;)V"/>
<method name="removeTestProvider(Ljava/lang/String;)V" since="3"/>
@@ -21748,15 +22863,16 @@
<method name="sendExtraCommand(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Z" since="3"/>
<method name="setTestProviderEnabled(Ljava/lang/String;Z)V" since="3"/>
<method name="setTestProviderLocation(Ljava/lang/String;Landroid/location/Location;)V" since="3"/>
- <method name="setTestProviderStatus(Ljava/lang/String;ILandroid/os/Bundle;J)V" since="3"/>
+ <method name="setTestProviderStatus(Ljava/lang/String;ILandroid/os/Bundle;J)V" since="3" deprecated="29"/>
<method name="unregisterGnssMeasurementsCallback(Landroid/location/GnssMeasurementsEvent$Callback;)V" since="24"/>
<method name="unregisterGnssNavigationMessageCallback(Landroid/location/GnssNavigationMessage$Callback;)V" since="24"/>
<method name="unregisterGnssStatusCallback(Landroid/location/GnssStatus$Callback;)V" since="24"/>
+ <field name="EXTRA_PROVIDER_NAME" since="29"/>
<field name="GPS_PROVIDER"/>
<field name="KEY_LOCATION_CHANGED" since="3"/>
<field name="KEY_PROVIDER_ENABLED" since="3"/>
<field name="KEY_PROXIMITY_ENTERING"/>
- <field name="KEY_STATUS_CHANGED" since="3"/>
+ <field name="KEY_STATUS_CHANGED" since="3" deprecated="29"/>
<field name="MODE_CHANGED_ACTION" since="19"/>
<field name="NETWORK_PROVIDER"/>
<field name="PASSIVE_PROVIDER" since="8"/>
@@ -21764,7 +22880,6 @@
</class>
<class name="android/location/LocationProvider" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getAccuracy()I"/>
<method name="getName()Ljava/lang/String;"/>
<method name="getPowerRequirement()I"/>
@@ -21776,9 +22891,9 @@
<method name="supportsAltitude()Z"/>
<method name="supportsBearing()Z"/>
<method name="supportsSpeed()Z"/>
- <field name="AVAILABLE"/>
- <field name="OUT_OF_SERVICE"/>
- <field name="TEMPORARILY_UNAVAILABLE"/>
+ <field name="AVAILABLE" deprecated="29"/>
+ <field name="OUT_OF_SERVICE" deprecated="29"/>
+ <field name="TEMPORARILY_UNAVAILABLE" deprecated="29"/>
</class>
<class name="android/location/OnNmeaMessageListener" since="24">
<extends name="java/lang/Object"/>
@@ -21789,6 +22904,7 @@
<method name="&lt;init>(Ljava/lang/String;)V"/>
<method name="onGetEnabled()Z"/>
<method name="onGetSummary()Ljava/lang/String;" deprecated="21"/>
+ <method name="refreshSettings(Landroid/content/Context;)V" since="29"/>
<field name="ACTION_INJECTED_SETTING_CHANGED"/>
<field name="ACTION_SERVICE_INTENT"/>
<field name="ATTRIBUTES_NAME"/>
@@ -21804,11 +22920,15 @@
<class name="android/media/AudioAttributes" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
+ <method name="areHapticChannelsMuted()Z" since="29"/>
+ <method name="getAllowedCapturePolicy()I" since="29"/>
<method name="getContentType()I"/>
<method name="getFlags()I"/>
<method name="getUsage()I"/>
<method name="getVolumeControlStream()I" since="26"/>
+ <field name="ALLOW_CAPTURE_BY_ALL" since="29"/>
+ <field name="ALLOW_CAPTURE_BY_NONE" since="29"/>
+ <field name="ALLOW_CAPTURE_BY_SYSTEM" since="29"/>
<field name="CONTENT_TYPE_MOVIE"/>
<field name="CONTENT_TYPE_MUSIC"/>
<field name="CONTENT_TYPE_SONIFICATION"/>
@@ -21840,8 +22960,10 @@
<method name="&lt;init>()V"/>
<method name="&lt;init>(Landroid/media/AudioAttributes;)V"/>
<method name="build()Landroid/media/AudioAttributes;"/>
+ <method name="setAllowedCapturePolicy(I)Landroid/media/AudioAttributes$Builder;" since="29"/>
<method name="setContentType(I)Landroid/media/AudioAttributes$Builder;"/>
<method name="setFlags(I)Landroid/media/AudioAttributes$Builder;"/>
+ <method name="setHapticChannelsMuted(Z)Landroid/media/AudioAttributes$Builder;" since="29"/>
<method name="setLegacyStreamType(I)Landroid/media/AudioAttributes$Builder;"/>
<method name="setUsage(I)Landroid/media/AudioAttributes$Builder;"/>
</class>
@@ -21853,7 +22975,6 @@
</class>
<class name="android/media/AudioDeviceInfo" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getAddress()Ljava/lang/String;" since="28"/>
<method name="getChannelCounts()[I"/>
<method name="getChannelIndexMasks()[I"/>
@@ -21892,8 +23013,6 @@
</class>
<class name="android/media/AudioFocusRequest" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/media/AudioManager$OnAudioFocusChangeListener;Landroid/os/Handler;Landroid/media/AudioAttributes;II)V" since="29"/>
<method name="acceptsDelayedFocusGain()Z"/>
<method name="getAudioAttributes()Landroid/media/AudioAttributes;"/>
<method name="getFocusGain()I"/>
@@ -21915,16 +23034,17 @@
<class name="android/media/AudioFormat" since="3">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable" since="24"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" removed="21"/>
<method name="getChannelCount()I" since="23"/>
<method name="getChannelIndexMask()I" since="23"/>
<method name="getChannelMask()I" since="21"/>
<method name="getEncoding()I" since="21"/>
+ <method name="getFrameSizeInBytes()I" since="29"/>
<method name="getSampleRate()I" since="21"/>
- <field name="CHANNEL_CONFIGURATION_DEFAULT" deprecated="16"/>
- <field name="CHANNEL_CONFIGURATION_INVALID" deprecated="16"/>
- <field name="CHANNEL_CONFIGURATION_MONO" deprecated="16"/>
- <field name="CHANNEL_CONFIGURATION_STEREO" deprecated="16"/>
+ <field name="CHANNEL_CONFIGURATION_DEFAULT" deprecated="15"/>
+ <field name="CHANNEL_CONFIGURATION_INVALID" deprecated="15"/>
+ <field name="CHANNEL_CONFIGURATION_MONO" deprecated="15"/>
+ <field name="CHANNEL_CONFIGURATION_STEREO" deprecated="15"/>
<field name="CHANNEL_INVALID" since="5"/>
<field name="CHANNEL_IN_BACK" since="5"/>
<field name="CHANNEL_IN_BACK_PROCESSED" since="5"/>
@@ -21971,6 +23091,7 @@
<field name="ENCODING_AC3" since="21"/>
<field name="ENCODING_AC4" since="28"/>
<field name="ENCODING_DEFAULT"/>
+ <field name="ENCODING_DOLBY_MAT" since="29"/>
<field name="ENCODING_DOLBY_TRUEHD" since="25"/>
<field name="ENCODING_DTS" since="23"/>
<field name="ENCODING_DTS_HD" since="23"/>
@@ -21979,6 +23100,7 @@
<field name="ENCODING_IEC61937" since="24"/>
<field name="ENCODING_INVALID"/>
<field name="ENCODING_MP3" since="28"/>
+ <field name="ENCODING_OPUS" since="30"/>
<field name="ENCODING_PCM_16BIT"/>
<field name="ENCODING_PCM_8BIT"/>
<field name="ENCODING_PCM_FLOAT" since="21"/>
@@ -21996,7 +23118,6 @@
</class>
<class name="android/media/AudioManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="abandonAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;)I" since="8" deprecated="26"/>
<method name="abandonAudioFocusRequest(Landroid/media/AudioFocusRequest;)I" since="26"/>
<method name="adjustStreamVolume(III)V"/>
@@ -22006,13 +23127,14 @@
<method name="generateAudioSessionId()I" since="21"/>
<method name="getActivePlaybackConfigurations()Ljava/util/List;" since="26"/>
<method name="getActiveRecordingConfigurations()Ljava/util/List;" since="24"/>
+ <method name="getAllowedCapturePolicy()I" since="29"/>
<method name="getDevices(I)[Landroid/media/AudioDeviceInfo;" since="23"/>
<method name="getMicrophones()Ljava/util/List;" since="28"/>
<method name="getMode()I"/>
<method name="getParameters(Ljava/lang/String;)Ljava/lang/String;" since="5"/>
<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;" since="17"/>
<method name="getRingerMode()I"/>
- <method name="getRouting(I)I" deprecated="16"/>
+ <method name="getRouting(I)I" deprecated="15"/>
<method name="getStreamMaxVolume(I)I"/>
<method name="getStreamMinVolume(I)I" since="28"/>
<method name="getStreamVolume(I)I"/>
@@ -22021,12 +23143,14 @@
<method name="isBluetoothA2dpOn()Z" since="3" deprecated="26"/>
<method name="isBluetoothScoAvailableOffCall()Z" since="8"/>
<method name="isBluetoothScoOn()Z"/>
+ <method name="isHapticPlaybackSupported()Z" since="29"/>
<method name="isMicrophoneMute()Z"/>
<method name="isMusicActive()Z"/>
+ <method name="isOffloadedPlaybackSupported(Landroid/media/AudioFormat;Landroid/media/AudioAttributes;)Z" since="29"/>
<method name="isSpeakerphoneOn()Z"/>
<method name="isStreamMute(I)Z" since="23"/>
<method name="isVolumeFixed()Z" since="21"/>
- <method name="isWiredHeadsetOn()Z" since="5" deprecated="16"/>
+ <method name="isWiredHeadsetOn()Z" since="5" deprecated="15"/>
<method name="loadSoundEffects()V"/>
<method name="playSoundEffect(I)V"/>
<method name="playSoundEffect(IF)V" since="3"/>
@@ -22039,19 +23163,20 @@
<method name="registerRemoteController(Landroid/media/RemoteController;)Z" since="19" deprecated="21"/>
<method name="requestAudioFocus(Landroid/media/AudioFocusRequest;)I" since="26"/>
<method name="requestAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;II)I" since="8" deprecated="26"/>
- <method name="setBluetoothA2dpOn(Z)V" since="3" deprecated="16"/>
+ <method name="setAllowedCapturePolicy(I)V" since="29"/>
+ <method name="setBluetoothA2dpOn(Z)V" since="3" deprecated="15"/>
<method name="setBluetoothScoOn(Z)V"/>
<method name="setMicrophoneMute(Z)V"/>
<method name="setMode(I)V"/>
<method name="setParameters(Ljava/lang/String;)V" since="5"/>
<method name="setRingerMode(I)V"/>
- <method name="setRouting(III)V" deprecated="16"/>
+ <method name="setRouting(III)V" deprecated="15"/>
<method name="setSpeakerphoneOn(Z)V"/>
<method name="setStreamMute(IZ)V" deprecated="23"/>
<method name="setStreamSolo(IZ)V" deprecated="23"/>
<method name="setStreamVolume(III)V"/>
<method name="setVibrateSetting(II)V" deprecated="16"/>
- <method name="setWiredHeadsetOn(Z)V" since="5" deprecated="16"/>
+ <method name="setWiredHeadsetOn(Z)V" since="5" deprecated="15"/>
<method name="shouldVibrate(I)Z" deprecated="16"/>
<method name="startBluetoothSco()V" since="8"/>
<method name="stopBluetoothSco()V" since="8"/>
@@ -22067,8 +23192,9 @@
<field name="ACTION_HDMI_AUDIO_PLUG" since="21"/>
<field name="ACTION_HEADSET_PLUG" since="21"/>
<field name="ACTION_MICROPHONE_MUTE_CHANGED" since="28"/>
- <field name="ACTION_SCO_AUDIO_STATE_CHANGED" since="8" deprecated="16"/>
+ <field name="ACTION_SCO_AUDIO_STATE_CHANGED" since="8" deprecated="15"/>
<field name="ACTION_SCO_AUDIO_STATE_UPDATED" since="14"/>
+ <field name="ACTION_SPEAKERPHONE_STATE_CHANGED" since="29"/>
<field name="ADJUST_LOWER"/>
<field name="ADJUST_MUTE" since="23"/>
<field name="ADJUST_RAISE"/>
@@ -22121,7 +23247,7 @@
<field name="MODE_IN_COMMUNICATION" since="11"/>
<field name="MODE_NORMAL"/>
<field name="MODE_RINGTONE"/>
- <field name="NUM_STREAMS" deprecated="16"/>
+ <field name="NUM_STREAMS" deprecated="15"/>
<field name="PROPERTY_OUTPUT_FRAMES_PER_BUFFER" since="17"/>
<field name="PROPERTY_OUTPUT_SAMPLE_RATE" since="17"/>
<field name="PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED" since="24"/>
@@ -22131,13 +23257,13 @@
<field name="RINGER_MODE_NORMAL"/>
<field name="RINGER_MODE_SILENT"/>
<field name="RINGER_MODE_VIBRATE"/>
- <field name="ROUTE_ALL" deprecated="16"/>
- <field name="ROUTE_BLUETOOTH" deprecated="16"/>
- <field name="ROUTE_BLUETOOTH_A2DP" since="3" deprecated="16"/>
- <field name="ROUTE_BLUETOOTH_SCO" since="3" deprecated="16"/>
- <field name="ROUTE_EARPIECE" deprecated="16"/>
- <field name="ROUTE_HEADSET" deprecated="16"/>
- <field name="ROUTE_SPEAKER" deprecated="16"/>
+ <field name="ROUTE_ALL" deprecated="15"/>
+ <field name="ROUTE_BLUETOOTH" deprecated="15"/>
+ <field name="ROUTE_BLUETOOTH_A2DP" since="3" deprecated="15"/>
+ <field name="ROUTE_BLUETOOTH_SCO" since="3" deprecated="15"/>
+ <field name="ROUTE_EARPIECE" deprecated="15"/>
+ <field name="ROUTE_HEADSET" deprecated="15"/>
+ <field name="ROUTE_SPEAKER" deprecated="15"/>
<field name="SCO_AUDIO_STATE_CONNECTED" since="8"/>
<field name="SCO_AUDIO_STATE_CONNECTING" since="14"/>
<field name="SCO_AUDIO_STATE_DISCONNECTED" since="8"/>
@@ -22172,21 +23298,36 @@
<extends name="java/lang/Object"/>
<method name="onAudioFocusChange(I)V"/>
</class>
+ <class name="android/media/AudioPlaybackCaptureConfiguration" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getExcludeUids()[I"/>
+ <method name="getExcludeUsages()[I"/>
+ <method name="getMatchingUids()[I"/>
+ <method name="getMatchingUsages()[I"/>
+ <method name="getMediaProjection()Landroid/media/projection/MediaProjection;"/>
+ </class>
+ <class name="android/media/AudioPlaybackCaptureConfiguration$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/media/projection/MediaProjection;)V"/>
+ <method name="addMatchingUid(I)Landroid/media/AudioPlaybackCaptureConfiguration$Builder;"/>
+ <method name="addMatchingUsage(I)Landroid/media/AudioPlaybackCaptureConfiguration$Builder;"/>
+ <method name="build()Landroid/media/AudioPlaybackCaptureConfiguration;"/>
+ <method name="excludeUid(I)Landroid/media/AudioPlaybackCaptureConfiguration$Builder;"/>
+ <method name="excludeUsage(I)Landroid/media/AudioPlaybackCaptureConfiguration$Builder;"/>
+ </class>
<class name="android/media/AudioPlaybackConfiguration" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="getAudioAttributes()Landroid/media/AudioAttributes;"/>
<field name="CREATOR"/>
</class>
<class name="android/media/AudioPresentation" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IILjava/util/Map;Ljava/lang/String;IZZZ)V" since="29"/>
<method name="getLabels()Ljava/util/Map;"/>
<method name="getLocale()Ljava/util/Locale;"/>
<method name="getMasteringIndication()I"/>
+ <method name="getPresentationId()I" since="29"/>
+ <method name="getProgramId()I" since="29"/>
<method name="hasAudioDescription()Z"/>
<method name="hasDialogueEnhancement()Z"/>
<method name="hasSpokenSubtitles()Z"/>
@@ -22196,9 +23337,23 @@
<field name="MASTERED_FOR_SURROUND"/>
<field name="MASTERING_NOT_INDICATED"/>
</class>
+ <class name="android/media/AudioPresentation$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(I)V"/>
+ <method name="build()Landroid/media/AudioPresentation;"/>
+ <method name="setHasAudioDescription(Z)Landroid/media/AudioPresentation$Builder;"/>
+ <method name="setHasDialogueEnhancement(Z)Landroid/media/AudioPresentation$Builder;"/>
+ <method name="setHasSpokenSubtitles(Z)Landroid/media/AudioPresentation$Builder;"/>
+ <method name="setLabels(Ljava/util/Map;)Landroid/media/AudioPresentation$Builder;"/>
+ <method name="setLocale(Landroid/icu/util/ULocale;)Landroid/media/AudioPresentation$Builder;"/>
+ <method name="setMasteringIndication(I)Landroid/media/AudioPresentation$Builder;"/>
+ <method name="setProgramId(I)Landroid/media/AudioPresentation$Builder;"/>
+ </class>
<class name="android/media/AudioRecord" since="3">
<extends name="java/lang/Object"/>
+ <implements name="android/media/AudioRecordingMonitor" since="29"/>
<implements name="android/media/AudioRouting" since="24"/>
+ <implements name="android/media/MicrophoneDirection" since="29"/>
<method name="&lt;init>(IIIII)V"/>
<method name="addOnRoutingChangedListener(Landroid/media/AudioRecord$OnRoutingChangedListener;Landroid/os/Handler;)V" since="23" deprecated="24"/>
<method name="getActiveMicrophones()Ljava/util/List;" since="28"/>
@@ -22253,15 +23408,15 @@
<method name="&lt;init>()V"/>
<method name="build()Landroid/media/AudioRecord;"/>
<method name="setAudioFormat(Landroid/media/AudioFormat;)Landroid/media/AudioRecord$Builder;"/>
+ <method name="setAudioPlaybackCaptureConfig(Landroid/media/AudioPlaybackCaptureConfiguration;)Landroid/media/AudioRecord$Builder;" since="29"/>
<method name="setAudioSource(I)Landroid/media/AudioRecord$Builder;"/>
<method name="setBufferSizeInBytes(I)Landroid/media/AudioRecord$Builder;"/>
</class>
<class name="android/media/AudioRecord$MetricsConstants" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="CHANNELS"/>
<field name="ENCODING"/>
- <field name="LATENCY"/>
+ <field name="LATENCY" deprecated="29"/>
<field name="SAMPLERATE"/>
<field name="SOURCE"/>
</class>
@@ -22273,20 +23428,28 @@
<class name="android/media/AudioRecord$OnRoutingChangedListener" since="23" deprecated="24">
<extends name="java/lang/Object"/>
<implements name="android/media/AudioRouting$OnRoutingChangedListener" since="24"/>
- <method name="onRoutingChanged(Landroid/media/AudioRecord;)V"/>
+ <method name="onRoutingChanged(Landroid/media/AudioRecord;)V" deprecated="29"/>
</class>
<class name="android/media/AudioRecordingConfiguration" since="24">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getAudioDevice()Landroid/media/AudioDeviceInfo;"/>
+ <method name="getAudioSource()I" since="29"/>
<method name="getClientAudioSessionId()I"/>
<method name="getClientAudioSource()I"/>
+ <method name="getClientEffects()Ljava/util/List;" since="29"/>
<method name="getClientFormat()Landroid/media/AudioFormat;"/>
+ <method name="getEffects()Ljava/util/List;" since="29"/>
<method name="getFormat()Landroid/media/AudioFormat;"/>
+ <method name="isClientSilenced()Z" since="29"/>
<field name="CREATOR"/>
</class>
+ <class name="android/media/AudioRecordingMonitor" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getActiveRecordingConfiguration()Landroid/media/AudioRecordingConfiguration;"/>
+ <method name="registerAudioRecordingCallback(Ljava/util/concurrent/Executor;Landroid/media/AudioManager$AudioRecordingCallback;)V"/>
+ <method name="unregisterAudioRecordingCallback(Landroid/media/AudioManager$AudioRecordingCallback;)V"/>
+ </class>
<class name="android/media/AudioRouting" since="24">
<extends name="java/lang/Object"/>
<method name="addOnRoutingChangedListener(Landroid/media/AudioRouting$OnRoutingChangedListener;Landroid/os/Handler;)V"/>
@@ -22317,6 +23480,7 @@
<method name="addOnRoutingChangedListener(Landroid/media/AudioTrack$OnRoutingChangedListener;Landroid/os/Handler;)V" since="23" deprecated="24"/>
<method name="attachAuxEffect(I)I" since="9"/>
<method name="flush()V"/>
+ <method name="getAudioAttributes()Landroid/media/AudioAttributes;" since="29"/>
<method name="getAudioFormat()I"/>
<method name="getAudioSessionId()I" since="9"/>
<method name="getBufferCapacityInFrames()I" since="24"/>
@@ -22331,6 +23495,8 @@
<method name="getNativeFrameCount()I" deprecated="19"/>
<method name="getNativeOutputSampleRate(I)I"/>
<method name="getNotificationMarkerPosition()I"/>
+ <method name="getOffloadDelay()I" since="29"/>
+ <method name="getOffloadPadding()I" since="29"/>
<method name="getPerformanceMode()I" since="26"/>
<method name="getPlayState()I"/>
<method name="getPlaybackHeadPosition()I"/>
@@ -22344,8 +23510,11 @@
<method name="getStreamType()I"/>
<method name="getTimestamp(Landroid/media/AudioTimestamp;)Z" since="19"/>
<method name="getUnderrunCount()I" since="24"/>
+ <method name="isDirectPlaybackSupported(Landroid/media/AudioFormat;Landroid/media/AudioAttributes;)Z" since="29"/>
+ <method name="isOffloadedPlayback()Z" since="29"/>
<method name="pause()V"/>
<method name="play()V"/>
+ <method name="registerStreamEventCallback(Ljava/util/concurrent/Executor;Landroid/media/AudioTrack$StreamEventCallback;)V" since="29"/>
<method name="release()V"/>
<method name="reloadStaticData()I"/>
<method name="removeOnRoutingChangedListener(Landroid/media/AudioTrack$OnRoutingChangedListener;)V" since="23" deprecated="24"/>
@@ -22353,6 +23522,8 @@
<method name="setBufferSizeInFrames(I)I" since="24"/>
<method name="setLoopPoints(III)I"/>
<method name="setNotificationMarkerPosition(I)I"/>
+ <method name="setOffloadDelayPadding(II)V" since="29"/>
+ <method name="setOffloadEndOfStream()V" since="29"/>
<method name="setPlaybackHeadPosition(I)I"/>
<method name="setPlaybackParams(Landroid/media/PlaybackParams;)V" since="23"/>
<method name="setPlaybackPositionUpdateListener(Landroid/media/AudioTrack$OnPlaybackPositionUpdateListener;)V"/>
@@ -22365,6 +23536,7 @@
<method name="setStereoVolume(FF)I" deprecated="21"/>
<method name="setVolume(F)I" since="21"/>
<method name="stop()V"/>
+ <method name="unregisterStreamEventCallback(Landroid/media/AudioTrack$StreamEventCallback;)V" since="29"/>
<method name="write(Ljava/nio/ByteBuffer;II)I" since="21"/>
<method name="write(Ljava/nio/ByteBuffer;IIJ)I" since="23"/>
<method name="write([BII)I"/>
@@ -22398,16 +23570,16 @@
<method name="setAudioAttributes(Landroid/media/AudioAttributes;)Landroid/media/AudioTrack$Builder;"/>
<method name="setAudioFormat(Landroid/media/AudioFormat;)Landroid/media/AudioTrack$Builder;"/>
<method name="setBufferSizeInBytes(I)Landroid/media/AudioTrack$Builder;"/>
+ <method name="setOffloadedPlayback(Z)Landroid/media/AudioTrack$Builder;" since="29"/>
<method name="setPerformanceMode(I)Landroid/media/AudioTrack$Builder;" since="26"/>
<method name="setSessionId(I)Landroid/media/AudioTrack$Builder;"/>
<method name="setTransferMode(I)Landroid/media/AudioTrack$Builder;"/>
</class>
<class name="android/media/AudioTrack$MetricsConstants" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <field name="CHANNELMASK"/>
+ <field name="CHANNELMASK" deprecated="29"/>
<field name="CONTENTTYPE"/>
- <field name="SAMPLERATE"/>
+ <field name="SAMPLERATE" deprecated="29"/>
<field name="STREAMTYPE"/>
<field name="USAGE"/>
</class>
@@ -22419,12 +23591,17 @@
<class name="android/media/AudioTrack$OnRoutingChangedListener" since="23" deprecated="24">
<extends name="java/lang/Object"/>
<implements name="android/media/AudioRouting$OnRoutingChangedListener" since="24"/>
- <method name="onRoutingChanged(Landroid/media/AudioTrack;)V"/>
+ <method name="onRoutingChanged(Landroid/media/AudioTrack;)V" deprecated="29"/>
+ </class>
+ <class name="android/media/AudioTrack$StreamEventCallback" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="onDataRequest(Landroid/media/AudioTrack;I)V"/>
+ <method name="onPresentationEnded(Landroid/media/AudioTrack;)V"/>
+ <method name="onTearDown(Landroid/media/AudioTrack;)V"/>
</class>
<class name="android/media/CamcorderProfile" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIIIIIIIIIII)V" since="29"/>
<method name="get(I)Landroid/media/CamcorderProfile;"/>
<method name="get(II)Landroid/media/CamcorderProfile;" since="9"/>
<method name="hasProfile(I)Z" since="11"/>
@@ -22481,30 +23658,31 @@
</class>
<class name="android/media/DrmInitData" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="get(Ljava/util/UUID;)Landroid/media/DrmInitData$SchemeInitData;"/>
</class>
<class name="android/media/DrmInitData$SchemeInitData" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;[B)V" since="29"/>
<field name="data"/>
<field name="mimeType"/>
</class>
<class name="android/media/ExifInterface" since="5">
<extends name="java/lang/Object"/>
+ <method name="&lt;init>(Ljava/io/File;)V" since="29"/>
<method name="&lt;init>(Ljava/io/FileDescriptor;)V" since="24"/>
<method name="&lt;init>(Ljava/io/InputStream;)V" since="24"/>
<method name="&lt;init>(Ljava/lang/String;)V"/>
<method name="getAltitude(D)D" since="9"/>
<method name="getAttribute(Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getAttributeBytes(Ljava/lang/String;)[B" since="29"/>
<method name="getAttributeDouble(Ljava/lang/String;D)D" since="8"/>
<method name="getAttributeInt(Ljava/lang/String;I)I"/>
+ <method name="getAttributeRange(Ljava/lang/String;)[J" since="29"/>
<method name="getLatLong([F)Z"/>
<method name="getThumbnail()[B"/>
<method name="getThumbnailBitmap()Landroid/graphics/Bitmap;" since="26"/>
<method name="getThumbnailBytes()[B" since="26"/>
<method name="getThumbnailRange()[J" since="24"/>
+ <method name="hasAttribute(Ljava/lang/String;)Z" since="29"/>
<method name="hasThumbnail()Z"/>
<method name="isThumbnailCompressed()Z" since="26"/>
<method name="saveAttributes()V"/>
@@ -22651,6 +23829,7 @@
<field name="TAG_USER_COMMENT" since="24"/>
<field name="TAG_WHITE_BALANCE"/>
<field name="TAG_WHITE_POINT" since="24"/>
+ <field name="TAG_XMP" since="29"/>
<field name="TAG_X_RESOLUTION" since="24"/>
<field name="TAG_Y_CB_CR_COEFFICIENTS" since="24"/>
<field name="TAG_Y_CB_CR_POSITIONING" since="24"/>
@@ -22666,7 +23845,6 @@
</class>
<class name="android/media/FaceDetector$Face" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/media/FaceDetector;)V"/>
<method name="confidence()F"/>
<method name="eyesDistance()F"/>
<method name="getMidPoint(Landroid/graphics/PointF;)V"/>
@@ -22679,7 +23857,6 @@
<class name="android/media/Image" since="19">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V"/>
<method name="getCropRect()Landroid/graphics/Rect;" since="21"/>
<method name="getFormat()I"/>
<method name="getHardwareBuffer()Landroid/hardware/HardwareBuffer;" since="28"/>
@@ -22692,7 +23869,6 @@
</class>
<class name="android/media/Image$Plane" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getBuffer()Ljava/nio/ByteBuffer;"/>
<method name="getPixelStride()I"/>
<method name="getRowStride()I"/>
@@ -22700,8 +23876,6 @@
<class name="android/media/ImageReader" since="19">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIIIJ)V" since="29"/>
<method name="acquireLatestImage()Landroid/media/Image;"/>
<method name="acquireNextImage()Landroid/media/Image;"/>
<method name="discardFreeBuffers()V" since="28"/>
@@ -22711,6 +23885,7 @@
<method name="getSurface()Landroid/view/Surface;"/>
<method name="getWidth()I"/>
<method name="newInstance(IIII)Landroid/media/ImageReader;"/>
+ <method name="newInstance(IIIIJ)Landroid/media/ImageReader;" since="29"/>
<method name="setOnImageAvailableListener(Landroid/media/ImageReader$OnImageAvailableListener;Landroid/os/Handler;)V"/>
</class>
<class name="android/media/ImageReader$OnImageAvailableListener" since="19">
@@ -22720,12 +23895,11 @@
<class name="android/media/ImageWriter" since="23">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/view/Surface;II)V" since="29"/>
<method name="dequeueInputImage()Landroid/media/Image;"/>
<method name="getFormat()I"/>
<method name="getMaxImages()I"/>
<method name="newInstance(Landroid/view/Surface;I)Landroid/media/ImageWriter;"/>
+ <method name="newInstance(Landroid/view/Surface;II)Landroid/media/ImageWriter;" since="29"/>
<method name="queueInputImage(Landroid/media/Image;)V"/>
<method name="setOnImageReleasedListener(Landroid/media/ImageWriter$OnImageReleasedListener;Landroid/os/Handler;)V"/>
</class>
@@ -22735,7 +23909,6 @@
</class>
<class name="android/media/JetPlayer" since="3">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="clearQueue()Z"/>
<method name="closeJetFile()Z"/>
<method name="getJetPlayer()Landroid/media/JetPlayer;"/>
@@ -22790,57 +23963,42 @@
<class name="android/media/MediaCas$EventListener" since="26">
<extends name="java/lang/Object"/>
<method name="onEvent(Landroid/media/MediaCas;II[B)V"/>
+ <method name="onSessionEvent(Landroid/media/MediaCas;Landroid/media/MediaCas$Session;II[B)V" since="29"/>
</class>
<class name="android/media/MediaCas$PluginDescriptor" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getName()Ljava/lang/String;"/>
<method name="getSystemId()I"/>
</class>
<class name="android/media/MediaCas$Session" since="26">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>(Landroid/media/MediaCas;)V" removed="29"/>
- <method name="&lt;init>(Landroid/media/MediaCas;Ljava/util/ArrayList;)V" since="29"/>
<method name="processEcm([B)V"/>
<method name="processEcm([BII)V"/>
+ <method name="sendSessionEvent(II[B)V" since="29"/>
<method name="setPrivateData([B)V"/>
</class>
<class name="android/media/MediaCasException" since="26">
<extends name="java/lang/Exception"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
</class>
<class name="android/media/MediaCasException$DeniedByServerException" since="26">
<extends name="android/media/MediaCasException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
</class>
<class name="android/media/MediaCasException$NotProvisionedException" since="26">
<extends name="android/media/MediaCasException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
</class>
<class name="android/media/MediaCasException$ResourceBusyException" since="26">
<extends name="android/media/MediaCasException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
</class>
<class name="android/media/MediaCasException$UnsupportedCasException" since="26">
<extends name="android/media/MediaCasException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
</class>
<class name="android/media/MediaCasStateException" since="26">
<extends name="java/lang/IllegalStateException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILjava/lang/String;Ljava/lang/String;)V" since="29"/>
<method name="getDiagnosticInfo()Ljava/lang/String;"/>
</class>
<class name="android/media/MediaCodec" since="16">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;ZZ)V" since="29"/>
<method name="configure(Landroid/media/MediaFormat;Landroid/view/Surface;ILandroid/media/MediaDescrambler;)V" since="26"/>
<method name="configure(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;I)V"/>
<method name="createByCodecName(Ljava/lang/String;)Landroid/media/MediaCodec;"/>
@@ -22851,6 +24009,7 @@
<method name="dequeueInputBuffer(J)I"/>
<method name="dequeueOutputBuffer(Landroid/media/MediaCodec$BufferInfo;J)I"/>
<method name="flush()V"/>
+ <method name="getCanonicalName()Ljava/lang/String;" since="29"/>
<method name="getCodecInfo()Landroid/media/MediaCodecInfo;" since="18"/>
<method name="getInputBuffer(I)Ljava/nio/ByteBuffer;" since="21"/>
<method name="getInputBuffers()[Ljava/nio/ByteBuffer;" deprecated="21"/>
@@ -22869,6 +24028,7 @@
<method name="releaseOutputBuffer(IJ)V" since="21"/>
<method name="releaseOutputBuffer(IZ)V"/>
<method name="reset()V" since="21"/>
+ <method name="setAudioPresentation(Landroid/media/AudioPresentation;)V" since="29"/>
<method name="setCallback(Landroid/media/MediaCodec$Callback;)V" since="21"/>
<method name="setCallback(Landroid/media/MediaCodec$Callback;Landroid/os/Handler;)V" since="23"/>
<method name="setInputSurface(Landroid/view/Surface;)V" since="23"/>
@@ -22891,8 +24051,11 @@
<field name="INFO_OUTPUT_BUFFERS_CHANGED" deprecated="21"/>
<field name="INFO_OUTPUT_FORMAT_CHANGED"/>
<field name="INFO_TRY_AGAIN_LATER"/>
+ <field name="PARAMETER_KEY_HDR10_PLUS_INFO" since="29"/>
+ <field name="PARAMETER_KEY_OFFSET_TIME" since="29"/>
<field name="PARAMETER_KEY_REQUEST_SYNC_FRAME" since="19"/>
<field name="PARAMETER_KEY_SUSPEND" since="19"/>
+ <field name="PARAMETER_KEY_SUSPEND_TIME" since="29"/>
<field name="PARAMETER_KEY_VIDEO_BITRATE" since="19"/>
<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT"/>
<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING"/>
@@ -22916,8 +24079,6 @@
</class>
<class name="android/media/MediaCodec$CodecException" since="21">
<extends name="java/lang/IllegalStateException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IILjava/lang/String;)V" since="29"/>
<method name="getDiagnosticInfo()Ljava/lang/String;"/>
<method name="getErrorCode()I" since="23"/>
<method name="isRecoverable()Z"/>
@@ -22929,8 +24090,11 @@
<extends name="java/lang/RuntimeException"/>
<method name="&lt;init>(ILjava/lang/String;)V"/>
<method name="getErrorCode()I"/>
+ <field name="ERROR_FRAME_TOO_LARGE" since="29"/>
<field name="ERROR_INSUFFICIENT_OUTPUT_PROTECTION" since="21"/>
+ <field name="ERROR_INSUFFICIENT_SECURITY" since="29"/>
<field name="ERROR_KEY_EXPIRED" since="19"/>
+ <field name="ERROR_LOST_STATE" since="29"/>
<field name="ERROR_NO_KEY" since="19"/>
<field name="ERROR_RESOURCE_BUSY" since="19"/>
<field name="ERROR_SESSION_NOT_OPENED" since="23"/>
@@ -22957,7 +24121,6 @@
</class>
<class name="android/media/MediaCodec$MetricsConstants" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="CODEC"/>
<field name="ENCODER"/>
<field name="HEIGHT"/>
@@ -22975,16 +24138,18 @@
</class>
<class name="android/media/MediaCodecInfo" since="16">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;Z[Landroid/media/MediaCodecInfo$CodecCapabilities;)V" since="29"/>
+ <method name="getCanonicalName()Ljava/lang/String;" since="29"/>
<method name="getCapabilitiesForType(Ljava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;"/>
<method name="getName()Ljava/lang/String;"/>
<method name="getSupportedTypes()[Ljava/lang/String;"/>
+ <method name="isAlias()Z" since="29"/>
<method name="isEncoder()Z"/>
+ <method name="isHardwareAccelerated()Z" since="29"/>
+ <method name="isSoftwareOnly()Z" since="29"/>
+ <method name="isVendor()Z" since="29"/>
</class>
<class name="android/media/MediaCodecInfo$AudioCapabilities" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getBitrateRange()Landroid/util/Range;"/>
<method name="getMaxInputChannelCount()I"/>
<method name="getSupportedSampleRateRanges()[Landroid/util/Range;"/>
@@ -23057,7 +24222,10 @@
<field name="COLOR_QCOM_FormatYUV420SemiPlanar" deprecated="23"/>
<field name="COLOR_TI_FormatYUV420PackedSemiPlanar" deprecated="23"/>
<field name="FEATURE_AdaptivePlayback" since="19"/>
+ <field name="FEATURE_DynamicTimestamp" since="29"/>
+ <field name="FEATURE_FrameParsing" since="29"/>
<field name="FEATURE_IntraRefresh" since="24"/>
+ <field name="FEATURE_MultipleFrames" since="29"/>
<field name="FEATURE_PartialFrame" since="26"/>
<field name="FEATURE_SecurePlayback" since="21"/>
<field name="FEATURE_TunneledPlayback" since="21"/>
@@ -23079,6 +24247,34 @@
<field name="AACObjectSSR"/>
<field name="AACObjectScalable"/>
<field name="AACObjectXHE" since="28"/>
+ <field name="AV1Level2" since="29"/>
+ <field name="AV1Level21" since="29"/>
+ <field name="AV1Level22" since="29"/>
+ <field name="AV1Level23" since="29"/>
+ <field name="AV1Level3" since="29"/>
+ <field name="AV1Level31" since="29"/>
+ <field name="AV1Level32" since="29"/>
+ <field name="AV1Level33" since="29"/>
+ <field name="AV1Level4" since="29"/>
+ <field name="AV1Level41" since="29"/>
+ <field name="AV1Level42" since="29"/>
+ <field name="AV1Level43" since="29"/>
+ <field name="AV1Level5" since="29"/>
+ <field name="AV1Level51" since="29"/>
+ <field name="AV1Level52" since="29"/>
+ <field name="AV1Level53" since="29"/>
+ <field name="AV1Level6" since="29"/>
+ <field name="AV1Level61" since="29"/>
+ <field name="AV1Level62" since="29"/>
+ <field name="AV1Level63" since="29"/>
+ <field name="AV1Level7" since="29"/>
+ <field name="AV1Level71" since="29"/>
+ <field name="AV1Level72" since="29"/>
+ <field name="AV1Level73" since="29"/>
+ <field name="AV1ProfileMain10" since="29"/>
+ <field name="AV1ProfileMain10HDR10" since="29"/>
+ <field name="AV1ProfileMain10HDR10Plus" since="29"/>
+ <field name="AV1ProfileMain8" since="29"/>
<field name="AVCLevel1"/>
<field name="AVCLevel11"/>
<field name="AVCLevel12"/>
@@ -23096,6 +24292,9 @@
<field name="AVCLevel5"/>
<field name="AVCLevel51"/>
<field name="AVCLevel52" since="21"/>
+ <field name="AVCLevel6" since="29"/>
+ <field name="AVCLevel61" since="29"/>
+ <field name="AVCLevel62" since="29"/>
<field name="AVCProfileBaseline"/>
<field name="AVCProfileConstrainedBaseline" since="27"/>
<field name="AVCProfileConstrainedHigh" since="27"/>
@@ -23170,6 +24369,7 @@
<field name="HEVCProfileMain" since="21"/>
<field name="HEVCProfileMain10" since="21"/>
<field name="HEVCProfileMain10HDR10" since="24"/>
+ <field name="HEVCProfileMain10HDR10Plus" since="29"/>
<field name="HEVCProfileMainStill" since="28"/>
<field name="MPEG2LevelH14" since="23"/>
<field name="MPEG2LevelHL" since="23"/>
@@ -23231,14 +24431,15 @@
<field name="VP9Profile1" since="24"/>
<field name="VP9Profile2" since="24"/>
<field name="VP9Profile2HDR" since="24"/>
+ <field name="VP9Profile2HDR10Plus" since="29"/>
<field name="VP9Profile3" since="24"/>
<field name="VP9Profile3HDR" since="24"/>
+ <field name="VP9Profile3HDR10Plus" since="29"/>
<field name="level"/>
<field name="profile"/>
</class>
<class name="android/media/MediaCodecInfo$EncoderCapabilities" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getComplexityRange()Landroid/util/Range;"/>
<method name="getQualityRange()Landroid/util/Range;" since="28"/>
<method name="isBitrateModeSupported(I)Z"/>
@@ -23248,7 +24449,6 @@
</class>
<class name="android/media/MediaCodecInfo$VideoCapabilities" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="areSizeAndRateSupported(IID)Z"/>
<method name="getAchievableFrameRatesFor(II)Landroid/util/Range;" since="23"/>
<method name="getBitrateRange()Landroid/util/Range;"/>
@@ -23257,14 +24457,53 @@
<method name="getSupportedFrameRatesFor(II)Landroid/util/Range;"/>
<method name="getSupportedHeights()Landroid/util/Range;"/>
<method name="getSupportedHeightsFor(I)Landroid/util/Range;"/>
+ <method name="getSupportedPerformancePoints()Ljava/util/List;" since="29"/>
<method name="getSupportedWidths()Landroid/util/Range;"/>
<method name="getSupportedWidthsFor(I)Landroid/util/Range;"/>
<method name="getWidthAlignment()I"/>
<method name="isSizeSupported(II)Z"/>
</class>
+ <class name="android/media/MediaCodecInfo$VideoCapabilities$PerformancePoint" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(III)V"/>
+ <method name="covers(Landroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;)Z"/>
+ <method name="covers(Landroid/media/MediaFormat;)Z"/>
+ <field name="FHD_100"/>
+ <field name="FHD_120"/>
+ <field name="FHD_200"/>
+ <field name="FHD_24"/>
+ <field name="FHD_240"/>
+ <field name="FHD_25"/>
+ <field name="FHD_30"/>
+ <field name="FHD_50"/>
+ <field name="FHD_60"/>
+ <field name="HD_100"/>
+ <field name="HD_120"/>
+ <field name="HD_200"/>
+ <field name="HD_24"/>
+ <field name="HD_240"/>
+ <field name="HD_25"/>
+ <field name="HD_30"/>
+ <field name="HD_50"/>
+ <field name="HD_60"/>
+ <field name="SD_24"/>
+ <field name="SD_25"/>
+ <field name="SD_30"/>
+ <field name="SD_48"/>
+ <field name="SD_50"/>
+ <field name="SD_60"/>
+ <field name="UHD_100"/>
+ <field name="UHD_120"/>
+ <field name="UHD_200"/>
+ <field name="UHD_24"/>
+ <field name="UHD_240"/>
+ <field name="UHD_25"/>
+ <field name="UHD_30"/>
+ <field name="UHD_50"/>
+ <field name="UHD_60"/>
+ </class>
<class name="android/media/MediaCodecList" since="16">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="21"/>
<method name="&lt;init>(I)V" since="21"/>
<method name="findDecoderForFormat(Landroid/media/MediaFormat;)Ljava/lang/String;" since="21"/>
<method name="findEncoderForFormat(Landroid/media/MediaFormat;)Ljava/lang/String;" since="21"/>
@@ -23274,6 +24513,30 @@
<field name="ALL_CODECS" since="21"/>
<field name="REGULAR_CODECS" since="21"/>
</class>
+ <class name="android/media/MediaController2" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="java/lang/AutoCloseable"/>
+ <method name="cancelSessionCommand(Ljava/lang/Object;)V"/>
+ <method name="getConnectedToken()Landroid/media/Session2Token;"/>
+ <method name="isPlaybackActive()Z"/>
+ <method name="sendSessionCommand(Landroid/media/Session2Command;Landroid/os/Bundle;)Ljava/lang/Object;"/>
+ </class>
+ <class name="android/media/MediaController2$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/media/Session2Token;)V"/>
+ <method name="build()Landroid/media/MediaController2;"/>
+ <method name="setConnectionHints(Landroid/os/Bundle;)Landroid/media/MediaController2$Builder;"/>
+ <method name="setControllerCallback(Ljava/util/concurrent/Executor;Landroid/media/MediaController2$ControllerCallback;)Landroid/media/MediaController2$Builder;"/>
+ </class>
+ <class name="android/media/MediaController2$ControllerCallback" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="onCommandResult(Landroid/media/MediaController2;Ljava/lang/Object;Landroid/media/Session2Command;Landroid/media/Session2Command$Result;)V"/>
+ <method name="onConnected(Landroid/media/MediaController2;Landroid/media/Session2CommandGroup;)V"/>
+ <method name="onDisconnected(Landroid/media/MediaController2;)V"/>
+ <method name="onPlaybackActiveChanged(Landroid/media/MediaController2;Z)V"/>
+ <method name="onSessionCommand(Landroid/media/MediaController2;Landroid/media/Session2Command;Landroid/os/Bundle;)Landroid/media/Session2Command$Result;"/>
+ </class>
<class name="android/media/MediaCrypto" since="16">
<extends name="java/lang/Object"/>
<method name="&lt;init>(Ljava/util/UUID;[B)V"/>
@@ -23309,8 +24572,6 @@
<class name="android/media/MediaDescription" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getDescription()Ljava/lang/CharSequence;"/>
<method name="getExtras()Landroid/os/Bundle;"/>
<method name="getIconBitmap()Landroid/graphics/Bitmap;"/>
@@ -23346,6 +24607,10 @@
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable" since="28"/>
<method name="&lt;init>(Ljava/util/UUID;)V"/>
+ <method name="clearOnEventListener()V" since="29"/>
+ <method name="clearOnExpirationUpdateListener()V" since="29"/>
+ <method name="clearOnKeyStatusChangeListener()V" since="29"/>
+ <method name="clearOnSessionLostStateListener()V" since="29"/>
<method name="closeSession([B)V"/>
<method name="getConnectedHdcpLevel()I" since="28"/>
<method name="getCryptoSession([BLjava/lang/String;Ljava/lang/String;)Landroid/media/MediaDrm$CryptoSession;"/>
@@ -23354,6 +24619,8 @@
<method name="getMaxSecurityLevel()I" since="28"/>
<method name="getMaxSessionCount()I" since="28"/>
<method name="getMetrics()Landroid/os/PersistableBundle;" since="28"/>
+ <method name="getOfflineLicenseKeySetIds()Ljava/util/List;" since="29"/>
+ <method name="getOfflineLicenseState([B)I" since="29"/>
<method name="getOpenSessionCount()I" since="28"/>
<method name="getPropertyByteArray(Ljava/lang/String;)[B"/>
<method name="getPropertyString(Ljava/lang/String;)Ljava/lang/String;"/>
@@ -23364,6 +24631,7 @@
<method name="getSecurityLevel([B)I" since="28"/>
<method name="isCryptoSchemeSupported(Ljava/util/UUID;)Z"/>
<method name="isCryptoSchemeSupported(Ljava/util/UUID;Ljava/lang/String;)Z" since="19"/>
+ <method name="isCryptoSchemeSupported(Ljava/util/UUID;Ljava/lang/String;I)Z" since="29"/>
<method name="openSession()[B"/>
<method name="openSession(I)[B" since="28"/>
<method name="provideKeyResponse([B[B)[B"/>
@@ -23374,11 +24642,18 @@
<method name="releaseSecureStops([B)V"/>
<method name="removeAllSecureStops()V" since="28"/>
<method name="removeKeys([B)V"/>
+ <method name="removeOfflineLicense([B)V" since="29"/>
<method name="removeSecureStop([B)V" since="28"/>
<method name="restoreKeys([B[B)V"/>
<method name="setOnEventListener(Landroid/media/MediaDrm$OnEventListener;)V"/>
+ <method name="setOnEventListener(Landroid/media/MediaDrm$OnEventListener;Landroid/os/Handler;)V" since="29"/>
+ <method name="setOnEventListener(Ljava/util/concurrent/Executor;Landroid/media/MediaDrm$OnEventListener;)V" since="29"/>
<method name="setOnExpirationUpdateListener(Landroid/media/MediaDrm$OnExpirationUpdateListener;Landroid/os/Handler;)V" since="23"/>
+ <method name="setOnExpirationUpdateListener(Ljava/util/concurrent/Executor;Landroid/media/MediaDrm$OnExpirationUpdateListener;)V" since="29"/>
<method name="setOnKeyStatusChangeListener(Landroid/media/MediaDrm$OnKeyStatusChangeListener;Landroid/os/Handler;)V" since="23"/>
+ <method name="setOnKeyStatusChangeListener(Ljava/util/concurrent/Executor;Landroid/media/MediaDrm$OnKeyStatusChangeListener;)V" since="29"/>
+ <method name="setOnSessionLostStateListener(Landroid/media/MediaDrm$OnSessionLostStateListener;Landroid/os/Handler;)V" since="29"/>
+ <method name="setOnSessionLostStateListener(Ljava/util/concurrent/Executor;Landroid/media/MediaDrm$OnSessionLostStateListener;)V" since="29"/>
<method name="setPropertyByteArray(Ljava/lang/String;[B)V"/>
<method name="setPropertyString(Ljava/lang/String;Ljava/lang/String;)V"/>
<field name="EVENT_KEY_EXPIRED" deprecated="26"/>
@@ -23393,9 +24668,13 @@
<field name="HDCP_V2" since="28"/>
<field name="HDCP_V2_1" since="28"/>
<field name="HDCP_V2_2" since="28"/>
+ <field name="HDCP_V2_3" since="29"/>
<field name="KEY_TYPE_OFFLINE"/>
<field name="KEY_TYPE_RELEASE"/>
<field name="KEY_TYPE_STREAMING"/>
+ <field name="OFFLINE_LICENSE_STATE_RELEASED" since="29"/>
+ <field name="OFFLINE_LICENSE_STATE_UNKNOWN" since="29"/>
+ <field name="OFFLINE_LICENSE_STATE_USABLE" since="29"/>
<field name="PROPERTY_ALGORITHMS"/>
<field name="PROPERTY_DESCRIPTION"/>
<field name="PROPERTY_DEVICE_UNIQUE_ID"/>
@@ -23410,20 +24689,17 @@
</class>
<class name="android/media/MediaDrm$CryptoSession" since="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/media/MediaDrm;)V" removed="29"/>
- <method name="&lt;init>(Landroid/media/MediaDrm;[BLjava/lang/String;Ljava/lang/String;)V" since="29"/>
<method name="decrypt([B[B[B)[B"/>
<method name="encrypt([B[B[B)[B"/>
<method name="sign([B[B)[B"/>
<method name="verify([B[B[B)Z"/>
</class>
- <class name="android/media/MediaDrm$HdcpLevel" since="28">
+ <class name="android/media/MediaDrm$HdcpLevel" since="28" deprecated="29">
<extends name="java/lang/Object"/>
<implements name="java/lang/annotation/Annotation"/>
</class>
<class name="android/media/MediaDrm$KeyRequest" since="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getData()[B"/>
<method name="getDefaultUrl()Ljava/lang/String;"/>
<method name="getRequestType()I" since="23"/>
@@ -23435,8 +24711,6 @@
</class>
<class name="android/media/MediaDrm$KeyStatus" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>([BI)V" since="29"/>
<method name="getKeyId()[B"/>
<method name="getStatusCode()I"/>
<field name="STATUS_EXPIRED"/>
@@ -23444,16 +24718,14 @@
<field name="STATUS_OUTPUT_NOT_ALLOWED"/>
<field name="STATUS_PENDING"/>
<field name="STATUS_USABLE"/>
+ <field name="STATUS_USABLE_IN_FUTURE" since="29"/>
</class>
<class name="android/media/MediaDrm$MediaDrmStateException" since="21">
<extends name="java/lang/IllegalStateException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILjava/lang/String;)V" since="29"/>
<method name="getDiagnosticInfo()Ljava/lang/String;"/>
</class>
<class name="android/media/MediaDrm$MetricsConstants" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="CLOSE_SESSION_ERROR_COUNT"/>
<field name="CLOSE_SESSION_ERROR_LIST"/>
<field name="CLOSE_SESSION_OK_COUNT"/>
@@ -23502,16 +24774,26 @@
<extends name="java/lang/Object"/>
<method name="onKeyStatusChange(Landroid/media/MediaDrm;[BLjava/util/List;Z)V"/>
</class>
+ <class name="android/media/MediaDrm$OnSessionLostStateListener" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="onSessionLostState(Landroid/media/MediaDrm;[B)V"/>
+ </class>
<class name="android/media/MediaDrm$ProvisionRequest" since="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getData()[B"/>
<method name="getDefaultUrl()Ljava/lang/String;"/>
</class>
- <class name="android/media/MediaDrm$SecurityLevel" since="28">
+ <class name="android/media/MediaDrm$SecurityLevel" since="28" deprecated="29">
<extends name="java/lang/Object"/>
<implements name="java/lang/annotation/Annotation"/>
</class>
+ <class name="android/media/MediaDrm$SessionException" since="29">
+ <extends name="java/lang/RuntimeException"/>
+ <method name="&lt;init>(ILjava/lang/String;)V"/>
+ <method name="getErrorCode()I"/>
+ <field name="ERROR_RESOURCE_CONTENTION"/>
+ <field name="ERROR_UNKNOWN"/>
+ </class>
<class name="android/media/MediaDrmException" since="18">
<extends name="java/lang/Exception"/>
<method name="&lt;init>(Ljava/lang/String;)V"/>
@@ -23560,14 +24842,12 @@
</class>
<class name="android/media/MediaExtractor$CasInfo" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILandroid/media/MediaCas$Session;)V" since="29"/>
+ <method name="getPrivateData()[B" since="29"/>
<method name="getSession()Landroid/media/MediaCas$Session;"/>
<method name="getSystemId()I"/>
</class>
<class name="android/media/MediaExtractor$MetricsConstants" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="FORMAT"/>
<field name="MIME_TYPE"/>
<field name="TRACKS"/>
@@ -23575,16 +24855,30 @@
<class name="android/media/MediaFormat" since="16">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
+ <method name="&lt;init>(Landroid/media/MediaFormat;)V" since="29"/>
+ <method name="containsFeature(Ljava/lang/String;)Z" since="29"/>
<method name="containsKey(Ljava/lang/String;)Z"/>
<method name="createAudioFormat(Ljava/lang/String;II)Landroid/media/MediaFormat;"/>
<method name="createSubtitleFormat(Ljava/lang/String;Ljava/lang/String;)Landroid/media/MediaFormat;" since="19"/>
<method name="createVideoFormat(Ljava/lang/String;II)Landroid/media/MediaFormat;"/>
<method name="getByteBuffer(Ljava/lang/String;)Ljava/nio/ByteBuffer;"/>
+ <method name="getByteBuffer(Ljava/lang/String;Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;" since="29"/>
<method name="getFeatureEnabled(Ljava/lang/String;)Z" since="21"/>
+ <method name="getFeatures()Ljava/util/Set;" since="29"/>
<method name="getFloat(Ljava/lang/String;)F"/>
+ <method name="getFloat(Ljava/lang/String;F)F" since="29"/>
<method name="getInteger(Ljava/lang/String;)I"/>
+ <method name="getInteger(Ljava/lang/String;I)I" since="29"/>
+ <method name="getKeys()Ljava/util/Set;" since="29"/>
<method name="getLong(Ljava/lang/String;)J"/>
+ <method name="getLong(Ljava/lang/String;J)J" since="29"/>
+ <method name="getNumber(Ljava/lang/String;)Ljava/lang/Number;" since="29"/>
+ <method name="getNumber(Ljava/lang/String;Ljava/lang/Number;)Ljava/lang/Number;" since="29"/>
<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="29"/>
+ <method name="getValueTypeForKey(Ljava/lang/String;)I" since="29"/>
+ <method name="removeFeature(Ljava/lang/String;)V" since="29"/>
+ <method name="removeKey(Ljava/lang/String;)V" since="29"/>
<method name="setByteBuffer(Ljava/lang/String;Ljava/nio/ByteBuffer;)V"/>
<method name="setFeatureEnabled(Ljava/lang/String;Z)V" since="21"/>
<method name="setFloat(Ljava/lang/String;F)V"/>
@@ -23621,11 +24915,14 @@
<field name="KEY_COLOR_STANDARD" since="24"/>
<field name="KEY_COLOR_TRANSFER" since="24"/>
<field name="KEY_COMPLEXITY" since="21"/>
+ <field name="KEY_CREATE_INPUT_SURFACE_SUSPENDED" since="29"/>
<field name="KEY_DURATION"/>
<field name="KEY_FLAC_COMPRESSION_LEVEL"/>
<field name="KEY_FRAME_RATE"/>
<field name="KEY_GRID_COLUMNS" since="28"/>
<field name="KEY_GRID_ROWS" since="28"/>
+ <field name="KEY_HAPTIC_CHANNEL_COUNT" since="29"/>
+ <field name="KEY_HDR10_PLUS_INFO" since="29"/>
<field name="KEY_HDR_STATIC_INFO" since="24"/>
<field name="KEY_HEIGHT"/>
<field name="KEY_INTRA_REFRESH_PERIOD" since="24"/>
@@ -23637,13 +24934,17 @@
<field name="KEY_LANGUAGE" since="19"/>
<field name="KEY_LATENCY" since="26"/>
<field name="KEY_LEVEL" since="23"/>
+ <field name="KEY_MAX_B_FRAMES" since="29"/>
+ <field name="KEY_MAX_FPS_TO_ENCODER" since="29"/>
<field name="KEY_MAX_HEIGHT" since="19"/>
<field name="KEY_MAX_INPUT_SIZE"/>
+ <field name="KEY_MAX_PTS_GAP_TO_ENCODER" since="29"/>
<field name="KEY_MAX_WIDTH" since="19"/>
<field name="KEY_MIME"/>
<field name="KEY_OPERATING_RATE" since="23"/>
<field name="KEY_OUTPUT_REORDER_DEPTH" since="28"/>
<field name="KEY_PCM_ENCODING" since="24"/>
+ <field name="KEY_PREPEND_HEADER_TO_SYNC_FRAMES" since="29"/>
<field name="KEY_PRIORITY" since="23"/>
<field name="KEY_PROFILE" since="21"/>
<field name="KEY_PUSH_BLANK_BUFFERS_ON_STOP" since="19"/>
@@ -23660,9 +24961,11 @@
<field name="KEY_WIDTH"/>
<field name="MIMETYPE_AUDIO_AAC" since="21"/>
<field name="MIMETYPE_AUDIO_AC3" since="21"/>
+ <field name="MIMETYPE_AUDIO_AC4" since="29"/>
<field name="MIMETYPE_AUDIO_AMR_NB" since="21"/>
<field name="MIMETYPE_AUDIO_AMR_WB" since="21"/>
<field name="MIMETYPE_AUDIO_EAC3" since="23"/>
+ <field name="MIMETYPE_AUDIO_EAC3_JOC" since="29"/>
<field name="MIMETYPE_AUDIO_FLAC" since="21"/>
<field name="MIMETYPE_AUDIO_G711_ALAW" since="21"/>
<field name="MIMETYPE_AUDIO_G711_MLAW" since="21"/>
@@ -23678,6 +24981,7 @@
<field name="MIMETYPE_TEXT_CEA_708" since="28"/>
<field name="MIMETYPE_TEXT_SUBRIP" since="28"/>
<field name="MIMETYPE_TEXT_VTT" since="21"/>
+ <field name="MIMETYPE_VIDEO_AV1" since="29"/>
<field name="MIMETYPE_VIDEO_AVC" since="21"/>
<field name="MIMETYPE_VIDEO_DOLBY_VISION" since="24"/>
<field name="MIMETYPE_VIDEO_H263" since="21"/>
@@ -23688,12 +24992,16 @@
<field name="MIMETYPE_VIDEO_SCRAMBLED" since="26"/>
<field name="MIMETYPE_VIDEO_VP8" since="21"/>
<field name="MIMETYPE_VIDEO_VP9" since="21"/>
+ <field name="TYPE_BYTE_BUFFER" since="29"/>
+ <field name="TYPE_FLOAT" since="29"/>
+ <field name="TYPE_INTEGER" since="29"/>
+ <field name="TYPE_LONG" since="29"/>
+ <field name="TYPE_NULL" since="29"/>
+ <field name="TYPE_STRING" since="29"/>
</class>
<class name="android/media/MediaMetadata" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Bundle;)V" since="29"/>
<method name="containsKey(Ljava/lang/String;)Z"/>
<method name="getBitmap(Ljava/lang/String;)Landroid/graphics/Bitmap;"/>
<method name="getDescription()Landroid/media/MediaDescription;"/>
@@ -23747,26 +25055,26 @@
</class>
<class name="android/media/MediaMetadataEditor" since="19" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="addEditableKey(I)V"/>
- <method name="apply()V"/>
- <method name="clear()V"/>
- <method name="getBitmap(ILandroid/graphics/Bitmap;)Landroid/graphics/Bitmap;"/>
- <method name="getEditableKeys()[I"/>
- <method name="getLong(IJ)J"/>
- <method name="getObject(ILjava/lang/Object;)Ljava/lang/Object;"/>
- <method name="getString(ILjava/lang/String;)Ljava/lang/String;"/>
- <method name="putBitmap(ILandroid/graphics/Bitmap;)Landroid/media/MediaMetadataEditor;"/>
- <method name="putLong(IJ)Landroid/media/MediaMetadataEditor;"/>
- <method name="putObject(ILjava/lang/Object;)Landroid/media/MediaMetadataEditor;"/>
- <method name="putString(ILjava/lang/String;)Landroid/media/MediaMetadataEditor;"/>
- <method name="removeEditableKeys()V"/>
- <field name="BITMAP_KEY_ARTWORK"/>
- <field name="RATING_KEY_BY_OTHERS"/>
- <field name="RATING_KEY_BY_USER"/>
+ <method name="addEditableKey(I)V" deprecated="29"/>
+ <method name="apply()V" deprecated="29"/>
+ <method name="clear()V" deprecated="29"/>
+ <method name="getBitmap(ILandroid/graphics/Bitmap;)Landroid/graphics/Bitmap;" deprecated="29"/>
+ <method name="getEditableKeys()[I" deprecated="29"/>
+ <method name="getLong(IJ)J" deprecated="29"/>
+ <method name="getObject(ILjava/lang/Object;)Ljava/lang/Object;" deprecated="29"/>
+ <method name="getString(ILjava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+ <method name="putBitmap(ILandroid/graphics/Bitmap;)Landroid/media/MediaMetadataEditor;" deprecated="29"/>
+ <method name="putLong(IJ)Landroid/media/MediaMetadataEditor;" deprecated="29"/>
+ <method name="putObject(ILjava/lang/Object;)Landroid/media/MediaMetadataEditor;" deprecated="29"/>
+ <method name="putString(ILjava/lang/String;)Landroid/media/MediaMetadataEditor;" deprecated="29"/>
+ <method name="removeEditableKeys()V" deprecated="29"/>
+ <field name="BITMAP_KEY_ARTWORK" deprecated="29"/>
+ <field name="RATING_KEY_BY_OTHERS" deprecated="29"/>
+ <field name="RATING_KEY_BY_USER" deprecated="29"/>
</class>
<class name="android/media/MediaMetadataRetriever" since="10">
<extends name="java/lang/Object"/>
+ <implements name="java/lang/AutoCloseable" since="29"/>
<method name="&lt;init>()V"/>
<method name="extractMetadata(I)Ljava/lang/String;"/>
<method name="getEmbeddedPicture()[B"/>
@@ -23801,6 +25109,8 @@
<field name="METADATA_KEY_DATE"/>
<field name="METADATA_KEY_DISC_NUMBER"/>
<field name="METADATA_KEY_DURATION"/>
+ <field name="METADATA_KEY_EXIF_LENGTH" since="29"/>
+ <field name="METADATA_KEY_EXIF_OFFSET" since="29"/>
<field name="METADATA_KEY_GENRE"/>
<field name="METADATA_KEY_HAS_AUDIO" since="14"/>
<field name="METADATA_KEY_HAS_IMAGE" since="28"/>
@@ -23846,10 +25156,10 @@
</class>
<class name="android/media/MediaMuxer$OutputFormat" since="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="MUXER_OUTPUT_3GPP" since="26"/>
<field name="MUXER_OUTPUT_HEIF" since="28"/>
<field name="MUXER_OUTPUT_MPEG_4"/>
+ <field name="MUXER_OUTPUT_OGG" since="29"/>
<field name="MUXER_OUTPUT_WEBM" since="21"/>
</class>
<class name="android/media/MediaPlayer" since="1">
@@ -23975,14 +25285,11 @@
</class>
<class name="android/media/MediaPlayer$DrmInfo" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getPssh()Ljava/util/Map;"/>
<method name="getSupportedSchemes()[Ljava/util/UUID;"/>
</class>
<class name="android/media/MediaPlayer$MetricsConstants" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="CODEC_AUDIO"/>
<field name="CODEC_VIDEO"/>
<field name="DURATION"/>
@@ -24067,8 +25374,6 @@
<class name="android/media/MediaPlayer$TrackInfo" since="16">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getFormat()Landroid/media/MediaFormat;" since="19"/>
<method name="getLanguage()Ljava/lang/String;"/>
<method name="getTrackType()I"/>
@@ -24081,7 +25386,9 @@
</class>
<class name="android/media/MediaRecorder" since="1">
<extends name="java/lang/Object"/>
+ <implements name="android/media/AudioRecordingMonitor" since="29"/>
<implements name="android/media/AudioRouting" since="28"/>
+ <implements name="android/media/MicrophoneDirection" since="29"/>
<method name="&lt;init>()V"/>
<method name="getActiveMicrophones()Ljava/util/List;" since="28"/>
<method name="getAudioSourceMax()I" since="4"/>
@@ -24098,8 +25405,8 @@
<method name="setAudioEncodingBitRate(I)V" since="8"/>
<method name="setAudioSamplingRate(I)V" since="8"/>
<method name="setAudioSource(I)V"/>
- <method name="setAuxiliaryOutputFile(Ljava/io/FileDescriptor;)V" since="11" removed="16"/>
- <method name="setAuxiliaryOutputFile(Ljava/lang/String;)V" since="11" removed="16"/>
+ <method name="setAuxiliaryOutputFile(Ljava/io/FileDescriptor;)V" since="11" deprecated="15" removed="16"/>
+ <method name="setAuxiliaryOutputFile(Ljava/lang/String;)V" since="11" deprecated="15" removed="16"/>
<method name="setCamera(Landroid/hardware/Camera;)V" since="3" deprecated="21"/>
<method name="setCaptureRate(D)V" since="11"/>
<method name="setInputSurface(Landroid/view/Surface;)V" since="23"/>
@@ -24135,18 +25442,17 @@
</class>
<class name="android/media/MediaRecorder$AudioEncoder" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/media/MediaRecorder;)V"/>
<field name="AAC" since="10"/>
<field name="AAC_ELD" since="16"/>
<field name="AMR_NB"/>
<field name="AMR_WB" since="10"/>
<field name="DEFAULT"/>
<field name="HE_AAC" since="16"/>
+ <field name="OPUS" since="29"/>
<field name="VORBIS" since="21"/>
</class>
<class name="android/media/MediaRecorder$AudioSource" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/media/MediaRecorder;)V"/>
<field name="CAMCORDER" since="7"/>
<field name="DEFAULT"/>
<field name="MIC"/>
@@ -24155,12 +25461,12 @@
<field name="VOICE_CALL" since="4"/>
<field name="VOICE_COMMUNICATION" since="11"/>
<field name="VOICE_DOWNLINK" since="4"/>
+ <field name="VOICE_PERFORMANCE" since="29"/>
<field name="VOICE_RECOGNITION" since="7"/>
<field name="VOICE_UPLINK" since="4"/>
</class>
<class name="android/media/MediaRecorder$MetricsConstants" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="AUDIO_BITRATE"/>
<field name="AUDIO_CHANNELS"/>
<field name="AUDIO_SAMPLERATE"/>
@@ -24188,20 +25494,19 @@
</class>
<class name="android/media/MediaRecorder$OutputFormat" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/media/MediaRecorder;)V"/>
<field name="AAC_ADTS" since="16"/>
<field name="AMR_NB" since="10"/>
<field name="AMR_WB" since="10"/>
<field name="DEFAULT"/>
<field name="MPEG_2_TS" since="26"/>
<field name="MPEG_4"/>
+ <field name="OGG" since="29"/>
<field name="RAW_AMR" since="3" deprecated="16"/>
<field name="THREE_GPP"/>
<field name="WEBM" since="21"/>
</class>
<class name="android/media/MediaRecorder$VideoEncoder" since="3">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/media/MediaRecorder;)V"/>
<field name="DEFAULT"/>
<field name="H263"/>
<field name="H264"/>
@@ -24211,15 +25516,12 @@
</class>
<class name="android/media/MediaRecorder$VideoSource" since="3">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/media/MediaRecorder;)V"/>
<field name="CAMERA"/>
<field name="DEFAULT"/>
<field name="SURFACE" since="21"/>
</class>
<class name="android/media/MediaRouter" since="16">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="addCallback(ILandroid/media/MediaRouter$Callback;)V"/>
<method name="addCallback(ILandroid/media/MediaRouter$Callback;I)V" since="18"/>
<method name="addUserRoute(Landroid/media/MediaRouter$UserRouteInfo;)V"/>
@@ -24257,8 +25559,6 @@
</class>
<class name="android/media/MediaRouter$RouteCategory" since="16">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/CharSequence;IZ)V" since="29"/>
<method name="getName()Ljava/lang/CharSequence;"/>
<method name="getName(Landroid/content/Context;)Ljava/lang/CharSequence;"/>
<method name="getRoutes(Ljava/util/List;)Ljava/util/List;"/>
@@ -24267,8 +25567,6 @@
</class>
<class name="android/media/MediaRouter$RouteGroup" since="16">
<extends name="android/media/MediaRouter$RouteInfo"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/media/MediaRouter$RouteCategory;)V" since="29"/>
<method name="addRoute(Landroid/media/MediaRouter$RouteInfo;)V"/>
<method name="addRoute(Landroid/media/MediaRouter$RouteInfo;I)V"/>
<method name="getRouteAt(I)Landroid/media/MediaRouter$RouteInfo;"/>
@@ -24280,8 +25578,6 @@
</class>
<class name="android/media/MediaRouter$RouteInfo" since="16">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/media/MediaRouter$RouteCategory;)V" since="29"/>
<method name="getCategory()Landroid/media/MediaRouter$RouteCategory;"/>
<method name="getDescription()Ljava/lang/CharSequence;" since="18"/>
<method name="getDeviceType()I" since="24"/>
@@ -24318,8 +25614,6 @@
</class>
<class name="android/media/MediaRouter$UserRouteInfo" since="16">
<extends name="android/media/MediaRouter$RouteInfo"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/media/MediaRouter$RouteCategory;)V" since="29"/>
<method name="getRemoteControlClient()Landroid/media/RemoteControlClient;"/>
<method name="setDescription(Ljava/lang/CharSequence;)V" since="18"/>
<method name="setIconDrawable(Landroid/graphics/drawable/Drawable;)V"/>
@@ -24361,6 +25655,59 @@
<extends name="java/lang/Object"/>
<method name="onScanCompleted(Ljava/lang/String;Landroid/net/Uri;)V"/>
</class>
+ <class name="android/media/MediaSession2" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="java/lang/AutoCloseable"/>
+ <method name="broadcastSessionCommand(Landroid/media/Session2Command;Landroid/os/Bundle;)V"/>
+ <method name="cancelSessionCommand(Landroid/media/MediaSession2$ControllerInfo;Ljava/lang/Object;)V"/>
+ <method name="getConnectedControllers()Ljava/util/List;"/>
+ <method name="getId()Ljava/lang/String;"/>
+ <method name="getToken()Landroid/media/Session2Token;"/>
+ <method name="isPlaybackActive()Z"/>
+ <method name="sendSessionCommand(Landroid/media/MediaSession2$ControllerInfo;Landroid/media/Session2Command;Landroid/os/Bundle;)Ljava/lang/Object;"/>
+ <method name="setPlaybackActive(Z)V"/>
+ </class>
+ <class name="android/media/MediaSession2$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/content/Context;)V"/>
+ <method name="build()Landroid/media/MediaSession2;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/media/MediaSession2$Builder;"/>
+ <method name="setId(Ljava/lang/String;)Landroid/media/MediaSession2$Builder;"/>
+ <method name="setSessionActivity(Landroid/app/PendingIntent;)Landroid/media/MediaSession2$Builder;"/>
+ <method name="setSessionCallback(Ljava/util/concurrent/Executor;Landroid/media/MediaSession2$SessionCallback;)Landroid/media/MediaSession2$Builder;"/>
+ </class>
+ <class name="android/media/MediaSession2$ControllerInfo" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getConnectionHints()Landroid/os/Bundle;"/>
+ <method name="getPackageName()Ljava/lang/String;"/>
+ <method name="getRemoteUserInfo()Landroid/media/session/MediaSessionManager$RemoteUserInfo;"/>
+ <method name="getUid()I"/>
+ </class>
+ <class name="android/media/MediaSession2$SessionCallback" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="onCommandResult(Landroid/media/MediaSession2;Landroid/media/MediaSession2$ControllerInfo;Ljava/lang/Object;Landroid/media/Session2Command;Landroid/media/Session2Command$Result;)V"/>
+ <method name="onConnect(Landroid/media/MediaSession2;Landroid/media/MediaSession2$ControllerInfo;)Landroid/media/Session2CommandGroup;"/>
+ <method name="onDisconnected(Landroid/media/MediaSession2;Landroid/media/MediaSession2$ControllerInfo;)V"/>
+ <method name="onPostConnect(Landroid/media/MediaSession2;Landroid/media/MediaSession2$ControllerInfo;)V"/>
+ <method name="onSessionCommand(Landroid/media/MediaSession2;Landroid/media/MediaSession2$ControllerInfo;Landroid/media/Session2Command;Landroid/os/Bundle;)Landroid/media/Session2Command$Result;"/>
+ </class>
+ <class name="android/media/MediaSession2Service" since="29">
+ <extends name="android/app/Service"/>
+ <method name="&lt;init>()V"/>
+ <method name="addSession(Landroid/media/MediaSession2;)V"/>
+ <method name="getSessions()Ljava/util/List;"/>
+ <method name="onGetSession(Landroid/media/MediaSession2$ControllerInfo;)Landroid/media/MediaSession2;"/>
+ <method name="onUpdateNotification(Landroid/media/MediaSession2;)Landroid/media/MediaSession2Service$MediaNotification;"/>
+ <method name="removeSession(Landroid/media/MediaSession2;)V"/>
+ <field name="SERVICE_INTERFACE"/>
+ </class>
+ <class name="android/media/MediaSession2Service$MediaNotification" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(ILandroid/app/Notification;)V"/>
+ <method name="getNotification()Landroid/app/Notification;"/>
+ <method name="getNotificationId()I"/>
+ </class>
<class name="android/media/MediaSync" since="23">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
@@ -24391,8 +25738,6 @@
</class>
<class name="android/media/MediaSyncEvent" since="16">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="createEvent(I)Landroid/media/MediaSyncEvent;"/>
<method name="getAudioSessionId()I"/>
<method name="getType()I"/>
@@ -24402,16 +25747,24 @@
</class>
<class name="android/media/MediaTimestamp" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>(JJF)V" since="29"/>
<method name="getAnchorMediaTimeUs()J"/>
- <method name="getAnchorSytemNanoTime()J"/>
+ <method name="getAnchorSystemNanoTime()J" since="29"/>
+ <method name="getAnchorSytemNanoTime()J" deprecated="29"/>
<method name="getMediaClockRate()F"/>
<field name="TIMESTAMP_UNKNOWN" since="28"/>
</class>
+ <class name="android/media/MicrophoneDirection" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="setPreferredMicrophoneDirection(I)Z"/>
+ <method name="setPreferredMicrophoneFieldDimension(F)Z"/>
+ <field name="MIC_DIRECTION_AWAY_FROM_USER"/>
+ <field name="MIC_DIRECTION_EXTERNAL"/>
+ <field name="MIC_DIRECTION_TOWARDS_USER"/>
+ <field name="MIC_DIRECTION_UNSPECIFIED"/>
+ </class>
<class name="android/media/MicrophoneInfo" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;IIILandroid/media/MicrophoneInfo$Coordinate3F;Landroid/media/MicrophoneInfo$Coordinate3F;Ljava/util/List;Ljava/util/List;FFFI)V" since="29"/>
<method name="getAddress()Ljava/lang/String;"/>
<method name="getChannelMapping()Ljava/util/List;"/>
<method name="getDescription()Ljava/lang/String;"/>
@@ -24448,8 +25801,6 @@
</class>
<class name="android/media/MicrophoneInfo$Coordinate3F" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(FFF)V" since="29"/>
<field name="x"/>
<field name="y"/>
<field name="z"/>
@@ -24477,8 +25828,6 @@
<class name="android/media/Rating" since="19">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IF)V" since="29"/>
<method name="getPercentRating()F"/>
<method name="getRatingStyle()I"/>
<method name="getStarRating()F"/>
@@ -24501,85 +25850,83 @@
</class>
<class name="android/media/RemoteControlClient" since="14" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/app/PendingIntent;)V"/>
- <method name="&lt;init>(Landroid/app/PendingIntent;Landroid/os/Looper;)V"/>
- <method name="editMetadata(Z)Landroid/media/RemoteControlClient$MetadataEditor;"/>
- <method name="getMediaSession()Landroid/media/session/MediaSession;" since="21"/>
- <method name="setMetadataUpdateListener(Landroid/media/RemoteControlClient$OnMetadataUpdateListener;)V" since="19"/>
- <method name="setOnGetPlaybackPositionListener(Landroid/media/RemoteControlClient$OnGetPlaybackPositionListener;)V" since="18"/>
- <method name="setPlaybackPositionUpdateListener(Landroid/media/RemoteControlClient$OnPlaybackPositionUpdateListener;)V" since="18"/>
- <method name="setPlaybackState(I)V"/>
- <method name="setPlaybackState(IJF)V" since="18"/>
- <method name="setTransportControlFlags(I)V"/>
- <field name="FLAG_KEY_MEDIA_FAST_FORWARD"/>
- <field name="FLAG_KEY_MEDIA_NEXT"/>
- <field name="FLAG_KEY_MEDIA_PAUSE"/>
- <field name="FLAG_KEY_MEDIA_PLAY"/>
- <field name="FLAG_KEY_MEDIA_PLAY_PAUSE"/>
- <field name="FLAG_KEY_MEDIA_POSITION_UPDATE" since="18"/>
- <field name="FLAG_KEY_MEDIA_PREVIOUS"/>
- <field name="FLAG_KEY_MEDIA_RATING" since="19"/>
- <field name="FLAG_KEY_MEDIA_REWIND"/>
- <field name="FLAG_KEY_MEDIA_STOP"/>
- <field name="PLAYSTATE_BUFFERING"/>
- <field name="PLAYSTATE_ERROR"/>
- <field name="PLAYSTATE_FAST_FORWARDING"/>
- <field name="PLAYSTATE_PAUSED"/>
- <field name="PLAYSTATE_PLAYING"/>
- <field name="PLAYSTATE_REWINDING"/>
- <field name="PLAYSTATE_SKIPPING_BACKWARDS"/>
- <field name="PLAYSTATE_SKIPPING_FORWARDS"/>
- <field name="PLAYSTATE_STOPPED"/>
+ <method name="&lt;init>(Landroid/app/PendingIntent;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/app/PendingIntent;Landroid/os/Looper;)V" deprecated="29"/>
+ <method name="editMetadata(Z)Landroid/media/RemoteControlClient$MetadataEditor;" deprecated="29"/>
+ <method name="getMediaSession()Landroid/media/session/MediaSession;" since="21" deprecated="29"/>
+ <method name="setMetadataUpdateListener(Landroid/media/RemoteControlClient$OnMetadataUpdateListener;)V" since="19" deprecated="29"/>
+ <method name="setOnGetPlaybackPositionListener(Landroid/media/RemoteControlClient$OnGetPlaybackPositionListener;)V" since="18" deprecated="29"/>
+ <method name="setPlaybackPositionUpdateListener(Landroid/media/RemoteControlClient$OnPlaybackPositionUpdateListener;)V" since="18" deprecated="29"/>
+ <method name="setPlaybackState(I)V" deprecated="29"/>
+ <method name="setPlaybackState(IJF)V" since="18" deprecated="29"/>
+ <method name="setTransportControlFlags(I)V" deprecated="29"/>
+ <field name="FLAG_KEY_MEDIA_FAST_FORWARD" deprecated="29"/>
+ <field name="FLAG_KEY_MEDIA_NEXT" deprecated="29"/>
+ <field name="FLAG_KEY_MEDIA_PAUSE" deprecated="29"/>
+ <field name="FLAG_KEY_MEDIA_PLAY" deprecated="29"/>
+ <field name="FLAG_KEY_MEDIA_PLAY_PAUSE" deprecated="29"/>
+ <field name="FLAG_KEY_MEDIA_POSITION_UPDATE" since="18" deprecated="29"/>
+ <field name="FLAG_KEY_MEDIA_PREVIOUS" deprecated="29"/>
+ <field name="FLAG_KEY_MEDIA_RATING" since="19" deprecated="29"/>
+ <field name="FLAG_KEY_MEDIA_REWIND" deprecated="29"/>
+ <field name="FLAG_KEY_MEDIA_STOP" deprecated="29"/>
+ <field name="PLAYSTATE_BUFFERING" deprecated="29"/>
+ <field name="PLAYSTATE_ERROR" deprecated="29"/>
+ <field name="PLAYSTATE_FAST_FORWARDING" deprecated="29"/>
+ <field name="PLAYSTATE_PAUSED" deprecated="29"/>
+ <field name="PLAYSTATE_PLAYING" deprecated="29"/>
+ <field name="PLAYSTATE_REWINDING" deprecated="29"/>
+ <field name="PLAYSTATE_SKIPPING_BACKWARDS" deprecated="29"/>
+ <field name="PLAYSTATE_SKIPPING_FORWARDS" deprecated="29"/>
+ <field name="PLAYSTATE_STOPPED" deprecated="29"/>
</class>
<class name="android/media/RemoteControlClient$MetadataEditor" since="14" deprecated="21">
<extends name="android/media/MediaMetadataEditor" since="19"/>
<extends name="java/lang/Object" removed="19"/>
- <method name="&lt;init>(Landroid/media/RemoteControlClient;)V"/>
- <method name="apply()V"/>
- <method name="clear()V"/>
- <method name="putBitmap(ILandroid/graphics/Bitmap;)Landroid/media/RemoteControlClient$MetadataEditor;"/>
- <method name="putLong(IJ)Landroid/media/RemoteControlClient$MetadataEditor;"/>
- <method name="putObject(ILjava/lang/Object;)Landroid/media/RemoteControlClient$MetadataEditor;" since="22"/>
- <method name="putString(ILjava/lang/String;)Landroid/media/RemoteControlClient$MetadataEditor;"/>
- <field name="BITMAP_KEY_ARTWORK"/>
+ <method name="apply()V" deprecated="29"/>
+ <method name="clear()V" deprecated="29"/>
+ <method name="putBitmap(ILandroid/graphics/Bitmap;)Landroid/media/RemoteControlClient$MetadataEditor;" deprecated="29"/>
+ <method name="putLong(IJ)Landroid/media/RemoteControlClient$MetadataEditor;" deprecated="29"/>
+ <method name="putObject(ILjava/lang/Object;)Landroid/media/RemoteControlClient$MetadataEditor;" since="21" deprecated="29"/>
+ <method name="putString(ILjava/lang/String;)Landroid/media/RemoteControlClient$MetadataEditor;" deprecated="29"/>
+ <field name="BITMAP_KEY_ARTWORK" deprecated="29"/>
</class>
- <class name="android/media/RemoteControlClient$OnGetPlaybackPositionListener" since="18">
+ <class name="android/media/RemoteControlClient$OnGetPlaybackPositionListener" since="18" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="onGetPlaybackPosition()J"/>
+ <method name="onGetPlaybackPosition()J" deprecated="29"/>
</class>
- <class name="android/media/RemoteControlClient$OnMetadataUpdateListener" since="19">
+ <class name="android/media/RemoteControlClient$OnMetadataUpdateListener" since="19" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="onMetadataUpdate(ILjava/lang/Object;)V"/>
+ <method name="onMetadataUpdate(ILjava/lang/Object;)V" deprecated="29"/>
</class>
- <class name="android/media/RemoteControlClient$OnPlaybackPositionUpdateListener" since="18">
+ <class name="android/media/RemoteControlClient$OnPlaybackPositionUpdateListener" since="18" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="onPlaybackPositionUpdate(J)V"/>
+ <method name="onPlaybackPositionUpdate(J)V" deprecated="29"/>
</class>
<class name="android/media/RemoteController" since="19" deprecated="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/media/RemoteController$OnClientUpdateListener;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/media/RemoteController$OnClientUpdateListener;Landroid/os/Looper;)V"/>
- <method name="clearArtworkConfiguration()Z"/>
- <method name="editMetadata()Landroid/media/RemoteController$MetadataEditor;"/>
- <method name="getEstimatedMediaPosition()J"/>
- <method name="seekTo(J)Z"/>
- <method name="sendMediaKeyEvent(Landroid/view/KeyEvent;)Z"/>
- <method name="setArtworkConfiguration(II)Z"/>
- <method name="setSynchronizationMode(I)Z"/>
- <field name="POSITION_SYNCHRONIZATION_CHECK"/>
- <field name="POSITION_SYNCHRONIZATION_NONE"/>
- </class>
- <class name="android/media/RemoteController$MetadataEditor" since="19">
+ <method name="&lt;init>(Landroid/content/Context;Landroid/media/RemoteController$OnClientUpdateListener;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/media/RemoteController$OnClientUpdateListener;Landroid/os/Looper;)V" deprecated="29"/>
+ <method name="clearArtworkConfiguration()Z" deprecated="29"/>
+ <method name="editMetadata()Landroid/media/RemoteController$MetadataEditor;" deprecated="29"/>
+ <method name="getEstimatedMediaPosition()J" deprecated="29"/>
+ <method name="seekTo(J)Z" deprecated="29"/>
+ <method name="sendMediaKeyEvent(Landroid/view/KeyEvent;)Z" deprecated="29"/>
+ <method name="setArtworkConfiguration(II)Z" deprecated="29"/>
+ <method name="setSynchronizationMode(I)Z" deprecated="29"/>
+ <field name="POSITION_SYNCHRONIZATION_CHECK" deprecated="29"/>
+ <field name="POSITION_SYNCHRONIZATION_NONE" deprecated="29"/>
+ </class>
+ <class name="android/media/RemoteController$MetadataEditor" since="19" deprecated="29">
<extends name="android/media/MediaMetadataEditor"/>
- <method name="&lt;init>(Landroid/media/RemoteController;)V"/>
</class>
- <class name="android/media/RemoteController$OnClientUpdateListener" since="19">
+ <class name="android/media/RemoteController$OnClientUpdateListener" since="19" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="onClientChange(Z)V"/>
- <method name="onClientMetadataUpdate(Landroid/media/RemoteController$MetadataEditor;)V"/>
- <method name="onClientPlaybackStateUpdate(I)V"/>
- <method name="onClientPlaybackStateUpdate(IJJF)V"/>
- <method name="onClientTransportControlUpdate(I)V"/>
+ <method name="onClientChange(Z)V" deprecated="29"/>
+ <method name="onClientMetadataUpdate(Landroid/media/RemoteController$MetadataEditor;)V" deprecated="29"/>
+ <method name="onClientPlaybackStateUpdate(I)V" deprecated="29"/>
+ <method name="onClientPlaybackStateUpdate(IJJF)V" deprecated="29"/>
+ <method name="onClientTransportControlUpdate(I)V" deprecated="29"/>
</class>
<class name="android/media/ResourceBusyException" since="19">
<extends name="android/media/MediaDrmException"/>
@@ -24587,8 +25934,6 @@
</class>
<class name="android/media/Ringtone" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Z)V" since="29"/>
<method name="getAudioAttributes()Landroid/media/AudioAttributes;" since="21"/>
<method name="getStreamType()I" deprecated="21"/>
<method name="getTitle(Landroid/content/Context;)Ljava/lang/String;"/>
@@ -24617,8 +25962,11 @@
<method name="getRingtoneUri(I)Landroid/net/Uri;"/>
<method name="getStopPreviousRingtone()Z"/>
<method name="getValidRingtoneUri(Landroid/content/Context;)Landroid/net/Uri;"/>
+ <method name="hasHapticChannels(I)Z" since="29"/>
+ <method name="hasHapticChannels(Landroid/net/Uri;)Z" since="29"/>
<method name="inferStreamType()I" since="3"/>
<method name="isDefault(Landroid/net/Uri;)Z"/>
+ <method name="openDefaultRingtoneUri(Landroid/content/Context;Landroid/net/Uri;)Landroid/content/res/AssetFileDescriptor;" since="29"/>
<method name="setActualDefaultRingtoneUri(Landroid/content/Context;ILandroid/net/Uri;)V"/>
<method name="setIncludeDrm(Z)V" deprecated="19"/>
<method name="setStopPreviousRingtone(Z)V"/>
@@ -24641,6 +25989,55 @@
<field name="TYPE_RINGTONE"/>
<field name="URI_COLUMN_INDEX"/>
</class>
+ <class name="android/media/Session2Command" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="&lt;init>(I)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+ <method name="getCommandCode()I"/>
+ <method name="getCustomAction()Ljava/lang/String;"/>
+ <method name="getCustomExtras()Landroid/os/Bundle;"/>
+ <field name="COMMAND_CODE_CUSTOM"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/media/Session2Command$Result" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(ILandroid/os/Bundle;)V"/>
+ <method name="getResultCode()I"/>
+ <method name="getResultData()Landroid/os/Bundle;"/>
+ <field name="RESULT_ERROR_UNKNOWN_ERROR"/>
+ <field name="RESULT_INFO_SKIPPED"/>
+ <field name="RESULT_SUCCESS"/>
+ </class>
+ <class name="android/media/Session2CommandGroup" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getCommands()Ljava/util/Set;"/>
+ <method name="hasCommand(I)Z"/>
+ <method name="hasCommand(Landroid/media/Session2Command;)Z"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/media/Session2CommandGroup$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="&lt;init>(Landroid/media/Session2CommandGroup;)V"/>
+ <method name="addCommand(Landroid/media/Session2Command;)Landroid/media/Session2CommandGroup$Builder;"/>
+ <method name="build()Landroid/media/Session2CommandGroup;"/>
+ <method name="removeCommand(Landroid/media/Session2Command;)Landroid/media/Session2CommandGroup$Builder;"/>
+ </class>
+ <class name="android/media/Session2Token" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/content/ComponentName;)V"/>
+ <method name="getExtras()Landroid/os/Bundle;"/>
+ <method name="getPackageName()Ljava/lang/String;"/>
+ <method name="getServiceName()Ljava/lang/String;"/>
+ <method name="getType()I"/>
+ <method name="getUid()I"/>
+ <field name="CREATOR"/>
+ <field name="TYPE_SESSION"/>
+ <field name="TYPE_SESSION_SERVICE"/>
+ </class>
<class name="android/media/SoundPool" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>(III)V" deprecated="21"/>
@@ -24675,8 +26072,7 @@
</class>
<class name="android/media/SubtitleData" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
+ <method name="&lt;init>(IJJ[B)V" since="29"/>
<method name="getData()[B"/>
<method name="getDurationUs()J"/>
<method name="getStartTimeUs()J"/>
@@ -24705,22 +26101,24 @@
<class name="android/media/ThumbnailUtils" since="8">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
- <method name="createVideoThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap;"/>
+ <method name="createAudioThumbnail(Ljava/io/File;Landroid/util/Size;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;" since="29"/>
+ <method name="createAudioThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap;" since="29" deprecated="29"/>
+ <method name="createImageThumbnail(Ljava/io/File;Landroid/util/Size;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;" since="29"/>
+ <method name="createImageThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap;" since="29" deprecated="29"/>
+ <method name="createVideoThumbnail(Ljava/io/File;Landroid/util/Size;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;" since="29"/>
+ <method name="createVideoThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap;" deprecated="29"/>
<method name="extractThumbnail(Landroid/graphics/Bitmap;II)Landroid/graphics/Bitmap;"/>
<method name="extractThumbnail(Landroid/graphics/Bitmap;III)Landroid/graphics/Bitmap;"/>
<field name="OPTIONS_RECYCLE_INPUT"/>
</class>
<class name="android/media/TimedMetaData" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
+ <method name="&lt;init>(J[B)V" since="29"/>
<method name="getMetaData()[B"/>
<method name="getTimestamp()J"/>
</class>
<class name="android/media/TimedText" since="16">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getBounds()Landroid/graphics/Rect;"/>
<method name="getText()Ljava/lang/String;"/>
</class>
@@ -24858,7 +26256,6 @@
<class name="android/media/VolumeShaper" since="26">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V"/>
<method name="apply(Landroid/media/VolumeShaper$Operation;)V"/>
<method name="getVolume()F"/>
<method name="replace(Landroid/media/VolumeShaper$Configuration;Landroid/media/VolumeShaper$Operation;Z)V"/>
@@ -24866,8 +26263,6 @@
<class name="android/media/VolumeShaper$Configuration" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="getDuration()J"/>
<method name="getInterpolatorType()I"/>
<method name="getMaximumCurvePoints()I"/>
@@ -24899,23 +26294,17 @@
<class name="android/media/VolumeShaper$Operation" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIF)V" since="29"/>
<field name="CREATOR"/>
<field name="PLAY"/>
<field name="REVERSE"/>
</class>
<class name="android/media/audiofx/AcousticEchoCanceler" since="16">
<extends name="android/media/audiofx/AudioEffect"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="create(I)Landroid/media/audiofx/AcousticEchoCanceler;"/>
<method name="isAvailable()Z"/>
</class>
<class name="android/media/audiofx/AudioEffect" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/UUID;Ljava/util/UUID;II)V" since="29"/>
<method name="getDescriptor()Landroid/media/audiofx/AudioEffect$Descriptor;"/>
<method name="getEnabled()Z"/>
<method name="getId()I"/>
@@ -24976,8 +26365,6 @@
</class>
<class name="android/media/audiofx/AutomaticGainControl" since="16">
<extends name="android/media/audiofx/AudioEffect"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="create(I)Landroid/media/audiofx/AutomaticGainControl;"/>
<method name="isAvailable()Z"/>
</class>
@@ -25075,8 +26462,6 @@
</class>
<class name="android/media/audiofx/DynamicsProcessing$Config" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$Config;)V" since="29"/>
<method name="getChannelByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Channel;"/>
<method name="getInputGainByChannelIndex(I)F"/>
<method name="getLimiterByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Limiter;"/>
@@ -25305,8 +26690,6 @@
</class>
<class name="android/media/audiofx/NoiseSuppressor" since="16">
<extends name="android/media/audiofx/AudioEffect"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="create(I)Landroid/media/audiofx/NoiseSuppressor;"/>
<method name="isAvailable()Z"/>
</class>
@@ -25476,15 +26859,12 @@
</class>
<class name="android/media/effect/EffectContext" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="createWithCurrentGlContext()Landroid/media/effect/EffectContext;"/>
<method name="getFactory()Landroid/media/effect/EffectFactory;"/>
<method name="release()V"/>
</class>
<class name="android/media/effect/EffectFactory" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/media/effect/EffectContext;)V" since="29"/>
<method name="createEffect(Ljava/lang/String;)Landroid/media/effect/Effect;"/>
<method name="isEffectSupported(Ljava/lang/String;)Z"/>
<field name="EFFECT_AUTOFIX"/>
@@ -25522,7 +26902,6 @@
<class name="android/media/midi/MidiDevice" since="23">
<extends name="java/lang/Object"/>
<implements name="java/io/Closeable"/>
- <method name="&lt;init>()V"/>
<method name="connectPorts(Landroid/media/midi/MidiInputPort;I)Landroid/media/midi/MidiDevice$MidiConnection;"/>
<method name="getInfo()Landroid/media/midi/MidiDeviceInfo;"/>
<method name="openInputPort(I)Landroid/media/midi/MidiInputPort;"/>
@@ -25531,14 +26910,10 @@
<class name="android/media/midi/MidiDevice$MidiConnection" since="23">
<extends name="java/lang/Object"/>
<implements name="java/io/Closeable"/>
- <method name="&lt;init>(Landroid/media/midi/MidiDevice;)V" removed="29"/>
- <method name="&lt;init>(Landroid/media/midi/MidiDevice;Landroid/os/IBinder;Landroid/media/midi/MidiInputPort;)V" since="29"/>
</class>
<class name="android/media/midi/MidiDeviceInfo" since="23">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIII[Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Z)V" since="29"/>
<method name="getId()I"/>
<method name="getInputPortCount()I"/>
<method name="getOutputPortCount()I"/>
@@ -25560,8 +26935,6 @@
</class>
<class name="android/media/midi/MidiDeviceInfo$PortInfo" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IILjava/lang/String;)V" since="29"/>
<method name="getName()Ljava/lang/String;"/>
<method name="getPortNumber()I"/>
<method name="getType()I"/>
@@ -25581,8 +26954,6 @@
<class name="android/media/midi/MidiDeviceStatus" since="23">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/media/midi/MidiDeviceInfo;)V" since="29"/>
<method name="getDeviceInfo()Landroid/media/midi/MidiDeviceInfo;"/>
<method name="getOutputPortOpenCount(I)I"/>
<method name="isInputPortOpen(I)Z"/>
@@ -25591,13 +26962,10 @@
<class name="android/media/midi/MidiInputPort" since="23">
<extends name="android/media/midi/MidiReceiver"/>
<implements name="java/io/Closeable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/io/FileDescriptor;I)V" since="29"/>
<method name="getPortNumber()I"/>
</class>
<class name="android/media/midi/MidiManager" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getDevices()[Landroid/media/midi/MidiDeviceInfo;"/>
<method name="openBluetoothDevice(Landroid/bluetooth/BluetoothDevice;Landroid/media/midi/MidiManager$OnDeviceOpenedListener;Landroid/os/Handler;)V"/>
<method name="openDevice(Landroid/media/midi/MidiDeviceInfo;Landroid/media/midi/MidiManager$OnDeviceOpenedListener;Landroid/os/Handler;)V"/>
@@ -25618,8 +26986,6 @@
<class name="android/media/midi/MidiOutputPort" since="23">
<extends name="android/media/midi/MidiSender"/>
<implements name="java/io/Closeable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/io/FileDescriptor;I)V" since="29"/>
<method name="getPortNumber()I"/>
</class>
<class name="android/media/midi/MidiReceiver" since="23">
@@ -25643,7 +27009,6 @@
</class>
<class name="android/media/projection/MediaProjection" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="createVirtualDisplay(Ljava/lang/String;IIIILandroid/view/Surface;Landroid/hardware/display/VirtualDisplay$Callback;Landroid/os/Handler;)Landroid/hardware/display/VirtualDisplay;"/>
<method name="registerCallback(Landroid/media/projection/MediaProjection$Callback;Landroid/os/Handler;)V"/>
<method name="stop()V"/>
@@ -25656,8 +27021,6 @@
</class>
<class name="android/media/projection/MediaProjectionManager" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="createScreenCaptureIntent()Landroid/content/Intent;"/>
<method name="getMediaProjection(ILandroid/content/Intent;)Landroid/media/projection/MediaProjection;"/>
</class>
@@ -25676,6 +27039,7 @@
<method name="getQueueTitle()Ljava/lang/CharSequence;"/>
<method name="getRatingType()I"/>
<method name="getSessionActivity()Landroid/app/PendingIntent;"/>
+ <method name="getSessionInfo()Landroid/os/Bundle;" since="29"/>
<method name="getSessionToken()Landroid/media/session/MediaSession$Token;"/>
<method name="getTransportControls()Landroid/media/session/MediaController$TransportControls;"/>
<method name="registerCallback(Landroid/media/session/MediaController$Callback;)V"/>
@@ -25698,19 +27062,18 @@
</class>
<class name="android/media/session/MediaController$PlaybackInfo" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILandroid/media/AudioAttributes;III)V" since="29"/>
+ <implements name="android/os/Parcelable" since="29"/>
<method name="getAudioAttributes()Landroid/media/AudioAttributes;"/>
<method name="getCurrentVolume()I"/>
<method name="getMaxVolume()I"/>
<method name="getPlaybackType()I"/>
<method name="getVolumeControl()I"/>
+ <field name="CREATOR" since="29"/>
<field name="PLAYBACK_TYPE_LOCAL"/>
<field name="PLAYBACK_TYPE_REMOTE"/>
</class>
<class name="android/media/session/MediaController$TransportControls" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/media/session/MediaController;)V"/>
<method name="fastForward()V"/>
<method name="pause()V"/>
<method name="play()V"/>
@@ -25725,6 +27088,7 @@
<method name="seekTo(J)V"/>
<method name="sendCustomAction(Landroid/media/session/PlaybackState$CustomAction;Landroid/os/Bundle;)V"/>
<method name="sendCustomAction(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+ <method name="setPlaybackSpeed(F)V" since="29"/>
<method name="setRating(Landroid/media/Rating;)V"/>
<method name="skipToNext()V"/>
<method name="skipToPrevious()V"/>
@@ -25734,6 +27098,7 @@
<class name="android/media/session/MediaSession" since="21">
<extends name="java/lang/Object"/>
<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)V" since="29"/>
<method name="getController()Landroid/media/session/MediaController;"/>
<method name="getCurrentControllerInfo()Landroid/media/session/MediaSessionManager$RemoteUserInfo;" since="28"/>
<method name="getSessionToken()Landroid/media/session/MediaSession$Token;"/>
@@ -25775,6 +27140,7 @@
<method name="onPrepareFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V" since="24"/>
<method name="onRewind()V"/>
<method name="onSeekTo(J)V"/>
+ <method name="onSetPlaybackSpeed(F)V" since="29"/>
<method name="onSetRating(Landroid/media/Rating;)V"/>
<method name="onSkipToNext()V"/>
<method name="onSkipToPrevious()V"/>
@@ -25793,23 +27159,29 @@
<class name="android/media/session/MediaSession$Token" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<field name="CREATOR"/>
</class>
<class name="android/media/session/MediaSessionManager" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="addOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;Landroid/content/ComponentName;)V"/>
<method name="addOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;Landroid/content/ComponentName;Landroid/os/Handler;)V"/>
+ <method name="addOnSession2TokensChangedListener(Landroid/media/session/MediaSessionManager$OnSession2TokensChangedListener;)V" since="29"/>
+ <method name="addOnSession2TokensChangedListener(Landroid/media/session/MediaSessionManager$OnSession2TokensChangedListener;Landroid/os/Handler;)V" since="29"/>
<method name="getActiveSessions(Landroid/content/ComponentName;)Ljava/util/List;"/>
+ <method name="getSession2Tokens()Ljava/util/List;" since="29"/>
<method name="isTrustedForMediaControl(Landroid/media/session/MediaSessionManager$RemoteUserInfo;)Z" since="28"/>
+ <method name="notifySession2Created(Landroid/media/Session2Token;)V" since="29"/>
<method name="removeOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;)V"/>
+ <method name="removeOnSession2TokensChangedListener(Landroid/media/session/MediaSessionManager$OnSession2TokensChangedListener;)V" since="29"/>
</class>
<class name="android/media/session/MediaSessionManager$OnActiveSessionsChangedListener" since="21">
<extends name="java/lang/Object"/>
<method name="onActiveSessionsChanged(Ljava/util/List;)V"/>
</class>
+ <class name="android/media/session/MediaSessionManager$OnSession2TokensChangedListener" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="onSession2TokensChanged(Ljava/util/List;)V"/>
+ </class>
<class name="android/media/session/MediaSessionManager$RemoteUserInfo" since="28">
<extends name="java/lang/Object"/>
<method name="&lt;init>(Ljava/lang/String;II)V"/>
@@ -25820,8 +27192,6 @@
<class name="android/media/session/PlaybackState" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getActions()J"/>
<method name="getActiveQueueItemId()J"/>
<method name="getBufferedPosition()J"/>
@@ -25883,8 +27253,6 @@
<class name="android/media/session/PlaybackState$CustomAction" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getAction()Ljava/lang/String;"/>
<method name="getExtras()Landroid/os/Bundle;"/>
<method name="getIcon()I"/>
@@ -25899,8 +27267,6 @@
</class>
<class name="android/media/tv/TvContentRating" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V" since="29"/>
<method name="contains(Landroid/media/tv/TvContentRating;)Z" since="24"/>
<method name="createRating(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Landroid/media/tv/TvContentRating;"/>
<method name="flattenToString()Ljava/lang/String;"/>
@@ -25913,7 +27279,6 @@
</class>
<class name="android/media/tv/TvContract" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="buildChannelLogoUri(J)Landroid/net/Uri;"/>
<method name="buildChannelLogoUri(Landroid/net/Uri;)Landroid/net/Uri;"/>
<method name="buildChannelUri(J)Landroid/net/Uri;"/>
@@ -25954,7 +27319,6 @@
<class name="android/media/tv/TvContract$Channels" since="21">
<extends name="java/lang/Object"/>
<implements name="android/media/tv/TvContract$BaseTvColumns"/>
- <method name="&lt;init>()V"/>
<method name="getVideoResolution(Ljava/lang/String;)Ljava/lang/String;"/>
<field name="COLUMN_APP_LINK_COLOR" since="23"/>
<field name="COLUMN_APP_LINK_ICON_URI" since="23"/>
@@ -25965,6 +27329,7 @@
<field name="COLUMN_DESCRIPTION"/>
<field name="COLUMN_DISPLAY_NAME"/>
<field name="COLUMN_DISPLAY_NUMBER"/>
+ <field name="COLUMN_GLOBAL_CONTENT_ID" since="30"/>
<field name="COLUMN_INPUT_ID"/>
<field name="COLUMN_INTERNAL_PROVIDER_DATA"/>
<field name="COLUMN_INTERNAL_PROVIDER_FLAG1" since="23"/>
@@ -25990,6 +27355,7 @@
<field name="SERVICE_TYPE_AUDIO_VIDEO"/>
<field name="SERVICE_TYPE_OTHER"/>
<field name="TYPE_1SEG"/>
+ <field name="TYPE_ATSC3_T" since="30"/>
<field name="TYPE_ATSC_C"/>
<field name="TYPE_ATSC_M_H"/>
<field name="TYPE_ATSC_T"/>
@@ -26005,6 +27371,7 @@
<field name="TYPE_DVB_T2"/>
<field name="TYPE_ISDB_C"/>
<field name="TYPE_ISDB_S"/>
+ <field name="TYPE_ISDB_S3" since="29"/>
<field name="TYPE_ISDB_T"/>
<field name="TYPE_ISDB_TB"/>
<field name="TYPE_NTSC"/>
@@ -26033,13 +27400,11 @@
</class>
<class name="android/media/tv/TvContract$Channels$Logo" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_DIRECTORY"/>
</class>
<class name="android/media/tv/TvContract$PreviewPrograms" since="26">
<extends name="java/lang/Object"/>
<implements name="android/media/tv/TvContract$BaseTvColumns"/>
- <method name="&lt;init>()V"/>
<field name="ASPECT_RATIO_16_9"/>
<field name="ASPECT_RATIO_1_1"/>
<field name="ASPECT_RATIO_2_3"/>
@@ -26083,7 +27448,9 @@
<field name="COLUMN_SEARCHABLE"/>
<field name="COLUMN_SEASON_DISPLAY_NUMBER"/>
<field name="COLUMN_SEASON_TITLE"/>
+ <field name="COLUMN_SERIES_ID" since="29"/>
<field name="COLUMN_SHORT_DESCRIPTION"/>
+ <field name="COLUMN_SPLIT_ID" since="30"/>
<field name="COLUMN_STARTING_PRICE"/>
<field name="COLUMN_THUMBNAIL_ASPECT_RATIO"/>
<field name="COLUMN_THUMBNAIL_URI"/>
@@ -26123,7 +27490,6 @@
<class name="android/media/tv/TvContract$Programs" since="21">
<extends name="java/lang/Object"/>
<implements name="android/media/tv/TvContract$BaseTvColumns"/>
- <method name="&lt;init>()V"/>
<field name="COLUMN_AUDIO_LANGUAGE"/>
<field name="COLUMN_BROADCAST_GENRE"/>
<field name="COLUMN_CANONICAL_GENRE"/>
@@ -26133,6 +27499,8 @@
<field name="COLUMN_EPISODE_DISPLAY_NUMBER" since="24"/>
<field name="COLUMN_EPISODE_NUMBER" deprecated="24"/>
<field name="COLUMN_EPISODE_TITLE"/>
+ <field name="COLUMN_EVENT_ID" since="30"/>
+ <field name="COLUMN_GLOBAL_CONTENT_ID" since="30"/>
<field name="COLUMN_INTERNAL_PROVIDER_DATA"/>
<field name="COLUMN_INTERNAL_PROVIDER_FLAG1" since="23"/>
<field name="COLUMN_INTERNAL_PROVIDER_FLAG2" since="23"/>
@@ -26147,7 +27515,9 @@
<field name="COLUMN_SEASON_DISPLAY_NUMBER" since="24"/>
<field name="COLUMN_SEASON_NUMBER" deprecated="24"/>
<field name="COLUMN_SEASON_TITLE" since="24"/>
+ <field name="COLUMN_SERIES_ID" since="29"/>
<field name="COLUMN_SHORT_DESCRIPTION"/>
+ <field name="COLUMN_SPLIT_ID" since="30"/>
<field name="COLUMN_START_TIME_UTC_MILLIS"/>
<field name="COLUMN_THUMBNAIL_URI"/>
<field name="COLUMN_TITLE"/>
@@ -26163,7 +27533,6 @@
</class>
<class name="android/media/tv/TvContract$Programs$Genres" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="decode(Ljava/lang/String;)[Ljava/lang/String;"/>
<method name="encode([Ljava/lang/String;)Ljava/lang/String;"/>
<method name="isCanonical(Ljava/lang/String;)Z" since="24"/>
@@ -26188,7 +27557,6 @@
<class name="android/media/tv/TvContract$RecordedPrograms" since="24">
<extends name="java/lang/Object"/>
<implements name="android/media/tv/TvContract$BaseTvColumns"/>
- <method name="&lt;init>()V"/>
<field name="COLUMN_AUDIO_LANGUAGE"/>
<field name="COLUMN_BROADCAST_GENRE"/>
<field name="COLUMN_CANONICAL_GENRE"/>
@@ -26214,7 +27582,9 @@
<field name="COLUMN_SEARCHABLE"/>
<field name="COLUMN_SEASON_DISPLAY_NUMBER"/>
<field name="COLUMN_SEASON_TITLE"/>
+ <field name="COLUMN_SERIES_ID" since="29"/>
<field name="COLUMN_SHORT_DESCRIPTION"/>
+ <field name="COLUMN_SPLIT_ID" since="30"/>
<field name="COLUMN_START_TIME_UTC_MILLIS"/>
<field name="COLUMN_THUMBNAIL_URI"/>
<field name="COLUMN_TITLE"/>
@@ -26231,7 +27601,6 @@
<class name="android/media/tv/TvContract$WatchNextPrograms" since="26">
<extends name="java/lang/Object"/>
<implements name="android/media/tv/TvContract$BaseTvColumns"/>
- <method name="&lt;init>()V"/>
<field name="ASPECT_RATIO_16_9"/>
<field name="ASPECT_RATIO_1_1"/>
<field name="ASPECT_RATIO_2_3"/>
@@ -26275,7 +27644,9 @@
<field name="COLUMN_SEARCHABLE"/>
<field name="COLUMN_SEASON_DISPLAY_NUMBER"/>
<field name="COLUMN_SEASON_TITLE"/>
+ <field name="COLUMN_SERIES_ID" since="29"/>
<field name="COLUMN_SHORT_DESCRIPTION"/>
+ <field name="COLUMN_SPLIT_ID" since="30"/>
<field name="COLUMN_STARTING_PRICE"/>
<field name="COLUMN_THUMBNAIL_ASPECT_RATIO"/>
<field name="COLUMN_THUMBNAIL_URI"/>
@@ -26319,8 +27690,6 @@
<class name="android/media/tv/TvInputInfo" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="canRecord()Z" since="24"/>
<method name="createSettingsIntent()Landroid/content/Intent;" deprecated="26"/>
<method name="createSetupIntent()Landroid/content/Intent;"/>
@@ -26358,7 +27727,6 @@
</class>
<class name="android/media/tv/TvInputManager" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getBlockedRatings()Ljava/util/List;" since="28"/>
<method name="getInputState(Ljava/lang/String;)I"/>
<method name="getTvInputInfo(Ljava/lang/String;)Landroid/media/tv/TvInputInfo;"/>
@@ -26487,11 +27855,10 @@
<class name="android/media/tv/TvTrackInfo" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getAudioChannelCount()I"/>
<method name="getAudioSampleRate()I"/>
<method name="getDescription()Ljava/lang/CharSequence;" since="23"/>
+ <method name="getEncoding()Ljava/lang/String;" since="30"/>
<method name="getExtra()Landroid/os/Bundle;"/>
<method name="getId()Ljava/lang/String;"/>
<method name="getLanguage()Ljava/lang/String;"/>
@@ -26501,6 +27868,10 @@
<method name="getVideoHeight()I"/>
<method name="getVideoPixelAspectRatio()F" since="23"/>
<method name="getVideoWidth()I"/>
+ <method name="isAudioDescription()Z" since="30"/>
+ <method name="isEncrypted()Z" since="30"/>
+ <method name="isHardOfHearing()Z" since="30"/>
+ <method name="isSpokenSubtitle()Z" since="30"/>
<field name="CREATOR"/>
<field name="TYPE_AUDIO"/>
<field name="TYPE_SUBTITLE"/>
@@ -26511,10 +27882,15 @@
<method name="&lt;init>(ILjava/lang/String;)V"/>
<method name="build()Landroid/media/tv/TvTrackInfo;"/>
<method name="setAudioChannelCount(I)Landroid/media/tv/TvTrackInfo$Builder;"/>
+ <method name="setAudioDescription(Z)Landroid/media/tv/TvTrackInfo$Builder;" since="30"/>
<method name="setAudioSampleRate(I)Landroid/media/tv/TvTrackInfo$Builder;"/>
<method name="setDescription(Ljava/lang/CharSequence;)Landroid/media/tv/TvTrackInfo$Builder;" since="23"/>
+ <method name="setEncoding(Ljava/lang/String;)Landroid/media/tv/TvTrackInfo$Builder;" since="30"/>
+ <method name="setEncrypted(Z)Landroid/media/tv/TvTrackInfo$Builder;" since="30"/>
<method name="setExtra(Landroid/os/Bundle;)Landroid/media/tv/TvTrackInfo$Builder;"/>
+ <method name="setHardOfHearing(Z)Landroid/media/tv/TvTrackInfo$Builder;" since="30"/>
<method name="setLanguage(Ljava/lang/String;)Landroid/media/tv/TvTrackInfo$Builder;"/>
+ <method name="setSpokenSubtitle(Z)Landroid/media/tv/TvTrackInfo$Builder;" since="30"/>
<method name="setVideoActiveFormatDescription(B)Landroid/media/tv/TvTrackInfo$Builder;" since="24"/>
<method name="setVideoFrameRate(F)Landroid/media/tv/TvTrackInfo$Builder;"/>
<method name="setVideoHeight(I)Landroid/media/tv/TvTrackInfo$Builder;"/>
@@ -26704,7 +28080,6 @@
</class>
<class name="android/mtp/MtpDeviceInfo" since="12">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getEventsSupported()[I" since="24"/>
<method name="getManufacturer()Ljava/lang/String;"/>
<method name="getModel()Ljava/lang/String;"/>
@@ -26716,7 +28091,6 @@
</class>
<class name="android/mtp/MtpEvent" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getDevicePropCode()I"/>
<method name="getEventCode()I"/>
<method name="getObjectFormatCode()I"/>
@@ -26748,7 +28122,6 @@
</class>
<class name="android/mtp/MtpObjectInfo" since="12">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getAssociationDesc()I"/>
<method name="getAssociationType()I"/>
<method name="getCompressedSize()I"/>
@@ -26806,7 +28179,6 @@
</class>
<class name="android/mtp/MtpStorageInfo" since="12">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getDescription()Ljava/lang/String;"/>
<method name="getFreeSpace()J"/>
<method name="getMaxCapacity()J"/>
@@ -26816,29 +28188,80 @@
<class name="android/net/CaptivePortal" since="23">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/IBinder;)V" since="29"/>
<method name="ignoreNetwork()V"/>
<method name="reportCaptivePortalDismissed()V"/>
<field name="CREATOR"/>
</class>
- <class name="android/net/ConnectivityManager" since="1">
+ <class name="android/net/ConnectivityDiagnosticsManager" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="registerConnectivityDiagnosticsCallback(Landroid/net/NetworkRequest;Ljava/util/concurrent/Executor;Landroid/net/ConnectivityDiagnosticsManager$ConnectivityDiagnosticsCallback;)V"/>
+ <method name="unregisterConnectivityDiagnosticsCallback(Landroid/net/ConnectivityDiagnosticsManager$ConnectivityDiagnosticsCallback;)V"/>
+ </class>
+ <class name="android/net/ConnectivityDiagnosticsManager$ConnectivityDiagnosticsCallback" since="30">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
+ <method name="onConnectivityReportAvailable(Landroid/net/ConnectivityDiagnosticsManager$ConnectivityReport;)V"/>
+ <method name="onDataStallSuspected(Landroid/net/ConnectivityDiagnosticsManager$DataStallReport;)V"/>
+ <method name="onNetworkConnectivityReported(Landroid/net/Network;Z)V"/>
+ </class>
+ <class name="android/net/ConnectivityDiagnosticsManager$ConnectivityReport" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="&lt;init>(Landroid/net/Network;JLandroid/net/LinkProperties;Landroid/net/NetworkCapabilities;Landroid/os/PersistableBundle;)V"/>
+ <method name="getAdditionalInfo()Landroid/os/PersistableBundle;"/>
+ <method name="getLinkProperties()Landroid/net/LinkProperties;"/>
+ <method name="getNetwork()Landroid/net/Network;"/>
+ <method name="getNetworkCapabilities()Landroid/net/NetworkCapabilities;"/>
+ <method name="getReportTimestamp()J"/>
+ <field name="CREATOR"/>
+ <field name="KEY_NETWORK_PROBES_ATTEMPTED_BITMASK"/>
+ <field name="KEY_NETWORK_PROBES_SUCCEEDED_BITMASK"/>
+ <field name="KEY_NETWORK_VALIDATION_RESULT"/>
+ <field name="NETWORK_PROBE_DNS"/>
+ <field name="NETWORK_PROBE_FALLBACK"/>
+ <field name="NETWORK_PROBE_HTTP"/>
+ <field name="NETWORK_PROBE_HTTPS"/>
+ <field name="NETWORK_PROBE_PRIVATE_DNS"/>
+ <field name="NETWORK_VALIDATION_RESULT_INVALID"/>
+ <field name="NETWORK_VALIDATION_RESULT_PARTIALLY_VALID"/>
+ <field name="NETWORK_VALIDATION_RESULT_SKIPPED"/>
+ <field name="NETWORK_VALIDATION_RESULT_VALID"/>
+ </class>
+ <class name="android/net/ConnectivityDiagnosticsManager$DataStallReport" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="&lt;init>(Landroid/net/Network;JILandroid/net/LinkProperties;Landroid/net/NetworkCapabilities;Landroid/os/PersistableBundle;)V"/>
+ <method name="getDetectionMethod()I"/>
+ <method name="getLinkProperties()Landroid/net/LinkProperties;"/>
+ <method name="getNetwork()Landroid/net/Network;"/>
+ <method name="getNetworkCapabilities()Landroid/net/NetworkCapabilities;"/>
+ <method name="getReportTimestamp()J"/>
+ <method name="getStallDetails()Landroid/os/PersistableBundle;"/>
+ <field name="CREATOR"/>
+ <field name="DETECTION_METHOD_DNS_EVENTS"/>
+ <field name="DETECTION_METHOD_TCP_METRICS"/>
+ <field name="KEY_DNS_CONSECUTIVE_TIMEOUTS"/>
+ <field name="KEY_TCP_METRICS_COLLECTION_PERIOD_MILLIS"/>
+ <field name="KEY_TCP_PACKET_FAIL_RATE"/>
+ </class>
+ <class name="android/net/ConnectivityManager" since="1">
+ <extends name="java/lang/Object"/>
<method name="addDefaultNetworkActiveListener(Landroid/net/ConnectivityManager$OnNetworkActiveListener;)V" since="21"/>
<method name="bindProcessToNetwork(Landroid/net/Network;)Z" since="23"/>
+ <method name="createSocketKeepalive(Landroid/net/Network;Landroid/net/IpSecManager$UdpEncapsulationSocket;Ljava/net/InetAddress;Ljava/net/InetAddress;Ljava/util/concurrent/Executor;Landroid/net/SocketKeepalive$Callback;)Landroid/net/SocketKeepalive;" since="29"/>
<method name="getActiveNetwork()Landroid/net/Network;" since="23"/>
- <method name="getActiveNetworkInfo()Landroid/net/NetworkInfo;"/>
+ <method name="getActiveNetworkInfo()Landroid/net/NetworkInfo;" deprecated="29"/>
<method name="getAllNetworkInfo()[Landroid/net/NetworkInfo;" deprecated="23"/>
<method name="getAllNetworks()[Landroid/net/Network;" since="21"/>
- <method name="getBackgroundDataSetting()Z" since="3" deprecated="16"/>
+ <method name="getBackgroundDataSetting()Z" since="3" deprecated="15"/>
<method name="getBoundNetworkForProcess()Landroid/net/Network;" since="23"/>
+ <method name="getConnectionOwnerUid(ILjava/net/InetSocketAddress;Ljava/net/InetSocketAddress;)I" since="29"/>
<method name="getDefaultProxy()Landroid/net/ProxyInfo;" since="23"/>
<method name="getLinkProperties(Landroid/net/Network;)Landroid/net/LinkProperties;" since="21"/>
<method name="getMultipathPreference(Landroid/net/Network;)I" since="26"/>
<method name="getNetworkCapabilities(Landroid/net/Network;)Landroid/net/NetworkCapabilities;" since="21"/>
<method name="getNetworkInfo(I)Landroid/net/NetworkInfo;" deprecated="23"/>
- <method name="getNetworkInfo(Landroid/net/Network;)Landroid/net/NetworkInfo;" since="21"/>
+ <method name="getNetworkInfo(Landroid/net/Network;)Landroid/net/NetworkInfo;" since="21" deprecated="29"/>
<method name="getNetworkPreference()I" deprecated="21"/>
<method name="getNetworkWatchlistConfigHash()[B" since="28"/>
<method name="getProcessDefaultNetwork()Landroid/net/Network;" since="21" deprecated="23"/>
@@ -26875,14 +28298,14 @@
<field name="DEFAULT_NETWORK_PREFERENCE" deprecated="18"/>
<field name="EXTRA_CAPTIVE_PORTAL" since="23"/>
<field name="EXTRA_CAPTIVE_PORTAL_URL" since="24"/>
- <field name="EXTRA_EXTRA_INFO"/>
- <field name="EXTRA_IS_FAILOVER"/>
+ <field name="EXTRA_EXTRA_INFO" deprecated="29"/>
+ <field name="EXTRA_IS_FAILOVER" deprecated="29"/>
<field name="EXTRA_NETWORK" since="22"/>
- <field name="EXTRA_NETWORK_INFO" deprecated="16"/>
+ <field name="EXTRA_NETWORK_INFO" deprecated="15"/>
<field name="EXTRA_NETWORK_REQUEST" since="22"/>
- <field name="EXTRA_NETWORK_TYPE" since="17"/>
+ <field name="EXTRA_NETWORK_TYPE" since="17" deprecated="29"/>
<field name="EXTRA_NO_CONNECTIVITY"/>
- <field name="EXTRA_OTHER_NETWORK_INFO"/>
+ <field name="EXTRA_OTHER_NETWORK_INFO" deprecated="29"/>
<field name="EXTRA_REASON"/>
<field name="MULTIPATH_PREFERENCE_HANDOVER" since="26"/>
<field name="MULTIPATH_PREFERENCE_PERFORMANCE" since="26"/>
@@ -26906,6 +28329,7 @@
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
<method name="onAvailable(Landroid/net/Network;)V"/>
+ <method name="onBlockedStatusChanged(Landroid/net/Network;Z)V" since="29"/>
<method name="onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V"/>
<method name="onLinkPropertiesChanged(Landroid/net/Network;Landroid/net/LinkProperties;)V"/>
<method name="onLosing(Landroid/net/Network;I)V"/>
@@ -26923,10 +28347,11 @@
<method name="getPid()I"/>
<method name="getUid()I"/>
</class>
- <class name="android/net/DhcpInfo" since="1" deprecated="18">
+ <class name="android/net/DhcpInfo" since="1">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
<method name="&lt;init>()V"/>
+ <field name="CREATOR" since="30"/>
<field name="dns1"/>
<field name="dns2"/>
<field name="gateway"/>
@@ -26935,11 +28360,69 @@
<field name="netmask"/>
<field name="serverAddress"/>
</class>
+ <class name="android/net/DnsResolver" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getInstance()Landroid/net/DnsResolver;"/>
+ <method name="query(Landroid/net/Network;Ljava/lang/String;IILjava/util/concurrent/Executor;Landroid/os/CancellationSignal;Landroid/net/DnsResolver$Callback;)V"/>
+ <method name="query(Landroid/net/Network;Ljava/lang/String;ILjava/util/concurrent/Executor;Landroid/os/CancellationSignal;Landroid/net/DnsResolver$Callback;)V"/>
+ <method name="rawQuery(Landroid/net/Network;Ljava/lang/String;IIILjava/util/concurrent/Executor;Landroid/os/CancellationSignal;Landroid/net/DnsResolver$Callback;)V"/>
+ <method name="rawQuery(Landroid/net/Network;[BILjava/util/concurrent/Executor;Landroid/os/CancellationSignal;Landroid/net/DnsResolver$Callback;)V"/>
+ <field name="CLASS_IN"/>
+ <field name="ERROR_PARSE"/>
+ <field name="ERROR_SYSTEM"/>
+ <field name="FLAG_EMPTY"/>
+ <field name="FLAG_NO_CACHE_LOOKUP"/>
+ <field name="FLAG_NO_CACHE_STORE"/>
+ <field name="FLAG_NO_RETRY"/>
+ <field name="TYPE_A"/>
+ <field name="TYPE_AAAA"/>
+ </class>
+ <class name="android/net/DnsResolver$Callback" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="onAnswer(Ljava/lang/Object;I)V"/>
+ <method name="onError(Landroid/net/DnsResolver$DnsException;)V"/>
+ </class>
+ <class name="android/net/DnsResolver$DnsException" since="29">
+ <extends name="java/lang/Exception"/>
+ <field name="code"/>
+ </class>
+ <class name="android/net/Ikev2VpnProfile" since="30">
+ <extends name="android/net/PlatformVpnProfile"/>
+ <method name="getAllowedAlgorithms()Ljava/util/List;"/>
+ <method name="getMaxMtu()I"/>
+ <method name="getPassword()Ljava/lang/String;"/>
+ <method name="getPresharedKey()[B"/>
+ <method name="getProxyInfo()Landroid/net/ProxyInfo;"/>
+ <method name="getRsaPrivateKey()Ljava/security/PrivateKey;"/>
+ <method name="getServerAddr()Ljava/lang/String;"/>
+ <method name="getServerRootCaCert()Ljava/security/cert/X509Certificate;"/>
+ <method name="getUserCert()Ljava/security/cert/X509Certificate;"/>
+ <method name="getUserIdentity()Ljava/lang/String;"/>
+ <method name="getUsername()Ljava/lang/String;"/>
+ <method name="isBypassable()Z"/>
+ <method name="isMetered()Z"/>
+ </class>
+ <class name="android/net/Ikev2VpnProfile$Builder" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+ <method name="build()Landroid/net/Ikev2VpnProfile;"/>
+ <method name="setAllowedAlgorithms(Ljava/util/List;)Landroid/net/Ikev2VpnProfile$Builder;"/>
+ <method name="setAuthDigitalSignature(Ljava/security/cert/X509Certificate;Ljava/security/PrivateKey;Ljava/security/cert/X509Certificate;)Landroid/net/Ikev2VpnProfile$Builder;"/>
+ <method name="setAuthPsk([B)Landroid/net/Ikev2VpnProfile$Builder;"/>
+ <method name="setAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;Ljava/security/cert/X509Certificate;)Landroid/net/Ikev2VpnProfile$Builder;"/>
+ <method name="setBypassable(Z)Landroid/net/Ikev2VpnProfile$Builder;"/>
+ <method name="setMaxMtu(I)Landroid/net/Ikev2VpnProfile$Builder;"/>
+ <method name="setMetered(Z)Landroid/net/Ikev2VpnProfile$Builder;"/>
+ <method name="setProxy(Landroid/net/ProxyInfo;)Landroid/net/Ikev2VpnProfile$Builder;"/>
+ </class>
+ <class name="android/net/InetAddresses" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="isNumericAddress(Ljava/lang/String;)Z"/>
+ <method name="parseNumericAddress(Ljava/lang/String;)Ljava/net/InetAddress;"/>
+ </class>
<class name="android/net/IpPrefix" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
<method name="contains(Ljava/net/InetAddress;)Z" since="23"/>
<method name="getAddress()Ljava/net/InetAddress;"/>
<method name="getPrefixLength()I"/>
@@ -26965,7 +28448,6 @@
</class>
<class name="android/net/IpSecManager" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="allocateSecurityParameterIndex(Ljava/net/InetAddress;)Landroid/net/IpSecManager$SecurityParameterIndex;"/>
<method name="allocateSecurityParameterIndex(Ljava/net/InetAddress;I)Landroid/net/IpSecManager$SecurityParameterIndex;"/>
<method name="applyTransportModeTransform(Ljava/io/FileDescriptor;ILandroid/net/IpSecTransform;)V"/>
@@ -26981,32 +28463,25 @@
</class>
<class name="android/net/IpSecManager$ResourceUnavailableException" since="28">
<extends name="android/util/AndroidException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
</class>
<class name="android/net/IpSecManager$SecurityParameterIndex" since="28">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V"/>
<method name="getSpi()I"/>
</class>
<class name="android/net/IpSecManager$SpiUnavailableException" since="28">
<extends name="android/util/AndroidException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;I)V" since="29"/>
<method name="getSpi()I"/>
</class>
<class name="android/net/IpSecManager$UdpEncapsulationSocket" since="28">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V"/>
<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
<method name="getPort()I"/>
</class>
<class name="android/net/IpSecTransform" since="28">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/net/IpSecTransform$Builder" since="28">
<extends name="java/lang/Object"/>
@@ -27020,8 +28495,6 @@
<class name="android/net/LinkAddress" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/net/InterfaceAddress;)V" since="29"/>
<method name="getAddress()Ljava/net/InetAddress;"/>
<method name="getFlags()I"/>
<method name="getPrefixLength()I"/>
@@ -27031,15 +28504,29 @@
<class name="android/net/LinkProperties" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" since="29"/>
+ <method name="addRoute(Landroid/net/RouteInfo;)Z" since="29"/>
+ <method name="clear()V" since="29"/>
+ <method name="getDhcpServerAddress()Ljava/net/Inet4Address;" since="30"/>
<method name="getDnsServers()Ljava/util/List;"/>
<method name="getDomains()Ljava/lang/String;"/>
<method name="getHttpProxy()Landroid/net/ProxyInfo;"/>
<method name="getInterfaceName()Ljava/lang/String;"/>
<method name="getLinkAddresses()Ljava/util/List;"/>
+ <method name="getMtu()I" since="29"/>
+ <method name="getNat64Prefix()Landroid/net/IpPrefix;" since="30"/>
<method name="getPrivateDnsServerName()Ljava/lang/String;" since="28"/>
<method name="getRoutes()Ljava/util/List;"/>
<method name="isPrivateDnsActive()Z" since="28"/>
+ <method name="isWakeOnLanSupported()Z" since="30"/>
+ <method name="setDhcpServerAddress(Ljava/net/Inet4Address;)V" since="30"/>
+ <method name="setDnsServers(Ljava/util/Collection;)V" since="29"/>
+ <method name="setDomains(Ljava/lang/String;)V" since="29"/>
+ <method name="setHttpProxy(Landroid/net/ProxyInfo;)V" since="29"/>
+ <method name="setInterfaceName(Ljava/lang/String;)V" since="29"/>
+ <method name="setLinkAddresses(Ljava/util/Collection;)V" since="29"/>
+ <method name="setMtu(I)V" since="29"/>
+ <method name="setNat64Prefix(Landroid/net/IpPrefix;)V" since="30"/>
<field name="CREATOR"/>
</class>
<class name="android/net/LocalServerSocket" since="1">
@@ -27104,12 +28591,12 @@
<class name="android/net/MacAddress" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(J)V" since="29"/>
<method name="fromBytes([B)Landroid/net/MacAddress;"/>
<method name="fromString(Ljava/lang/String;)Landroid/net/MacAddress;"/>
<method name="getAddressType()I"/>
+ <method name="getLinkLocalIpv6FromEui48Mac()Ljava/net/Inet6Address;" since="30"/>
<method name="isLocallyAssigned()Z"/>
+ <method name="matches(Landroid/net/MacAddress;Landroid/net/MacAddress;)Z" since="30"/>
<method name="toByteArray()[B"/>
<method name="toOuiString()Ljava/lang/String;"/>
<field name="BROADCAST_ADDRESS"/>
@@ -27120,7 +28607,6 @@
</class>
<class name="android/net/MailTo" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getBody()Ljava/lang/String;"/>
<method name="getCc()Ljava/lang/String;"/>
<method name="getHeaders()Ljava/util/Map;"/>
@@ -27133,8 +28619,6 @@
<class name="android/net/Network" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="bindSocket(Ljava/io/FileDescriptor;)V" since="23"/>
<method name="bindSocket(Ljava/net/DatagramSocket;)V" since="22"/>
<method name="bindSocket(Ljava/net/Socket;)V"/>
@@ -27150,9 +28634,14 @@
<class name="android/net/NetworkCapabilities" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
+ <method name="&lt;init>()V" since="30"/>
<method name="&lt;init>(Landroid/net/NetworkCapabilities;)V"/>
<method name="getLinkDownstreamBandwidthKbps()I"/>
<method name="getLinkUpstreamBandwidthKbps()I"/>
+ <method name="getNetworkSpecifier()Landroid/net/NetworkSpecifier;" since="30"/>
+ <method name="getOwnerUid()I" since="30"/>
+ <method name="getSignalStrength()I" since="29"/>
+ <method name="getTransportInfo()Landroid/net/TransportInfo;" since="29"/>
<method name="hasCapability(I)Z"/>
<method name="hasTransport(I)Z"/>
<field name="CREATOR"/>
@@ -27165,6 +28654,7 @@
<field name="NET_CAPABILITY_IA"/>
<field name="NET_CAPABILITY_IMS"/>
<field name="NET_CAPABILITY_INTERNET"/>
+ <field name="NET_CAPABILITY_MCX" since="29"/>
<field name="NET_CAPABILITY_MMS"/>
<field name="NET_CAPABILITY_NOT_CONGESTED" since="28"/>
<field name="NET_CAPABILITY_NOT_METERED"/>
@@ -27174,10 +28664,12 @@
<field name="NET_CAPABILITY_NOT_VPN"/>
<field name="NET_CAPABILITY_RCS"/>
<field name="NET_CAPABILITY_SUPL"/>
+ <field name="NET_CAPABILITY_TEMPORARILY_NOT_METERED" since="30"/>
<field name="NET_CAPABILITY_TRUSTED"/>
<field name="NET_CAPABILITY_VALIDATED" since="23"/>
<field name="NET_CAPABILITY_WIFI_P2P"/>
<field name="NET_CAPABILITY_XCAP"/>
+ <field name="SIGNAL_STRENGTH_UNSPECIFIED" since="29"/>
<field name="TRANSPORT_BLUETOOTH"/>
<field name="TRANSPORT_CELLULAR"/>
<field name="TRANSPORT_ETHERNET"/>
@@ -27186,61 +28678,61 @@
<field name="TRANSPORT_WIFI"/>
<field name="TRANSPORT_WIFI_AWARE" since="26"/>
</class>
- <class name="android/net/NetworkInfo" since="1">
+ <class name="android/net/NetworkInfo" since="1" deprecated="29">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" since="3" removed="29"/>
<method name="&lt;init>(I)V" removed="3"/>
- <method name="&lt;init>(Landroid/net/NetworkInfo;)V" since="29"/>
- <method name="getDetailedState()Landroid/net/NetworkInfo$DetailedState;"/>
- <method name="getExtraInfo()Ljava/lang/String;"/>
+ <method name="&lt;init>(IILjava/lang/String;Ljava/lang/String;)V" since="30" deprecated="30"/>
+ <method name="getDetailedState()Landroid/net/NetworkInfo$DetailedState;" deprecated="29"/>
+ <method name="getExtraInfo()Ljava/lang/String;" deprecated="29"/>
<method name="getReason()Ljava/lang/String;" deprecated="28"/>
<method name="getState()Landroid/net/NetworkInfo$State;" deprecated="28"/>
- <method name="getSubtype()I" since="3"/>
- <method name="getSubtypeName()Ljava/lang/String;" since="3"/>
+ <method name="getSubtype()I" since="3" deprecated="29"/>
+ <method name="getSubtypeName()Ljava/lang/String;" since="3" deprecated="29"/>
<method name="getType()I" deprecated="28"/>
<method name="getTypeName()Ljava/lang/String;" deprecated="28"/>
<method name="isAvailable()Z" deprecated="28"/>
- <method name="isConnected()Z"/>
+ <method name="isConnected()Z" deprecated="29"/>
<method name="isConnectedOrConnecting()Z" deprecated="28"/>
<method name="isFailover()Z" deprecated="28"/>
<method name="isRoaming()Z" since="3" deprecated="28"/>
- <field name="CREATOR" since="24"/>
+ <method name="setDetailedState(Landroid/net/NetworkInfo$DetailedState;Ljava/lang/String;Ljava/lang/String;)V" since="30" deprecated="30"/>
+ <field name="CREATOR" since="24" deprecated="29"/>
</class>
- <class name="android/net/NetworkInfo$DetailedState" since="1">
+ <class name="android/net/NetworkInfo$DetailedState" since="1" deprecated="29">
<extends name="java/lang/Enum"/>
<method name="valueOf(Ljava/lang/String;)Landroid/net/NetworkInfo$DetailedState;"/>
<method name="values()[Landroid/net/NetworkInfo$DetailedState;"/>
- <field name="AUTHENTICATING"/>
- <field name="BLOCKED" since="14"/>
- <field name="CAPTIVE_PORTAL_CHECK" since="17"/>
- <field name="CONNECTED"/>
- <field name="CONNECTING"/>
- <field name="DISCONNECTED"/>
- <field name="DISCONNECTING"/>
- <field name="FAILED"/>
- <field name="IDLE"/>
- <field name="OBTAINING_IPADDR"/>
- <field name="SCANNING"/>
- <field name="SUSPENDED"/>
- <field name="VERIFYING_POOR_LINK" since="16"/>
- </class>
- <class name="android/net/NetworkInfo$State" since="1">
+ <field name="AUTHENTICATING" deprecated="29"/>
+ <field name="BLOCKED" since="14" deprecated="29"/>
+ <field name="CAPTIVE_PORTAL_CHECK" since="17" deprecated="29"/>
+ <field name="CONNECTED" deprecated="29"/>
+ <field name="CONNECTING" deprecated="29"/>
+ <field name="DISCONNECTED" deprecated="29"/>
+ <field name="DISCONNECTING" deprecated="29"/>
+ <field name="FAILED" deprecated="29"/>
+ <field name="IDLE" deprecated="29"/>
+ <field name="OBTAINING_IPADDR" deprecated="29"/>
+ <field name="SCANNING" deprecated="29"/>
+ <field name="SUSPENDED" deprecated="29"/>
+ <field name="VERIFYING_POOR_LINK" since="16" deprecated="29"/>
+ </class>
+ <class name="android/net/NetworkInfo$State" since="1" deprecated="29">
<extends name="java/lang/Enum"/>
<method name="valueOf(Ljava/lang/String;)Landroid/net/NetworkInfo$State;"/>
<method name="values()[Landroid/net/NetworkInfo$State;"/>
- <field name="CONNECTED"/>
- <field name="CONNECTING"/>
- <field name="DISCONNECTED"/>
- <field name="DISCONNECTING"/>
- <field name="SUSPENDED"/>
- <field name="UNKNOWN"/>
+ <field name="CONNECTED" deprecated="29"/>
+ <field name="CONNECTING" deprecated="29"/>
+ <field name="DISCONNECTED" deprecated="29"/>
+ <field name="DISCONNECTING" deprecated="29"/>
+ <field name="SUSPENDED" deprecated="29"/>
+ <field name="UNKNOWN" deprecated="29"/>
</class>
<class name="android/net/NetworkRequest" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/net/NetworkRequest;)V" since="29"/>
+ <method name="canBeSatisfiedBy(Landroid/net/NetworkCapabilities;)Z" since="30"/>
+ <method name="getNetworkSpecifier()Landroid/net/NetworkSpecifier;" since="30"/>
<method name="hasCapability(I)Z" since="28"/>
<method name="hasTransport(I)Z" since="28"/>
<field name="CREATOR"/>
@@ -27251,43 +28743,51 @@
<method name="addCapability(I)Landroid/net/NetworkRequest$Builder;"/>
<method name="addTransportType(I)Landroid/net/NetworkRequest$Builder;"/>
<method name="build()Landroid/net/NetworkRequest;"/>
+ <method name="clearCapabilities()Landroid/net/NetworkRequest$Builder;" since="30"/>
<method name="removeCapability(I)Landroid/net/NetworkRequest$Builder;"/>
<method name="removeTransportType(I)Landroid/net/NetworkRequest$Builder;"/>
<method name="setNetworkSpecifier(Landroid/net/NetworkSpecifier;)Landroid/net/NetworkRequest$Builder;" since="26"/>
- <method name="setNetworkSpecifier(Ljava/lang/String;)Landroid/net/NetworkRequest$Builder;"/>
+ <method name="setNetworkSpecifier(Ljava/lang/String;)Landroid/net/NetworkRequest$Builder;" deprecated="30"/>
</class>
<class name="android/net/NetworkSpecifier" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" since="29"/>
</class>
<class name="android/net/ParseException" since="1">
<extends name="java/lang/RuntimeException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
<field name="response"/>
</class>
+ <class name="android/net/PlatformVpnProfile" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="getType()I"/>
+ <method name="getTypeString()Ljava/lang/String;"/>
+ <field name="TYPE_IKEV2_IPSEC_PSK"/>
+ <field name="TYPE_IKEV2_IPSEC_RSA"/>
+ <field name="TYPE_IKEV2_IPSEC_USER_PASS"/>
+ </class>
<class name="android/net/Proxy" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
- <method name="getDefaultHost()Ljava/lang/String;" deprecated="16"/>
- <method name="getDefaultPort()I" deprecated="16"/>
- <method name="getHost(Landroid/content/Context;)Ljava/lang/String;" deprecated="16"/>
- <method name="getPort(Landroid/content/Context;)I" deprecated="16"/>
+ <method name="getDefaultHost()Ljava/lang/String;" deprecated="15"/>
+ <method name="getDefaultPort()I" deprecated="15"/>
+ <method name="getHost(Landroid/content/Context;)Ljava/lang/String;" deprecated="15"/>
+ <method name="getPort(Landroid/content/Context;)I" deprecated="15"/>
<field name="EXTRA_PROXY_INFO" since="21" deprecated="23"/>
<field name="PROXY_CHANGE_ACTION"/>
</class>
<class name="android/net/ProxyInfo" since="21" deprecated="22">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/net/Uri;)V" since="29"/>
+ <method name="&lt;init>(Landroid/net/ProxyInfo;)V" since="30"/>
<method name="buildDirectProxy(Ljava/lang/String;I)Landroid/net/ProxyInfo;"/>
<method name="buildDirectProxy(Ljava/lang/String;ILjava/util/List;)Landroid/net/ProxyInfo;"/>
<method name="buildPacProxy(Landroid/net/Uri;)Landroid/net/ProxyInfo;"/>
+ <method name="buildPacProxy(Landroid/net/Uri;I)Landroid/net/ProxyInfo;" since="30"/>
<method name="getExclusionList()[Ljava/lang/String;"/>
<method name="getHost()Ljava/lang/String;"/>
<method name="getPacFileUrl()Landroid/net/Uri;"/>
<method name="getPort()I"/>
+ <method name="isValid()Z" since="30"/>
<field name="CREATOR"/>
</class>
<class name="android/net/PskKeyManager" since="21" removed="26">
@@ -27306,34 +28806,69 @@
<class name="android/net/RouteInfo" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/net/InetAddress;)V" since="29"/>
<method name="getDestination()Landroid/net/IpPrefix;"/>
<method name="getGateway()Ljava/net/InetAddress;"/>
<method name="getInterface()Ljava/lang/String;"/>
+ <method name="hasGateway()Z" since="29"/>
<method name="isDefaultRoute()Z"/>
<method name="matches(Ljava/net/InetAddress;)Z"/>
<field name="CREATOR"/>
</class>
- <class name="android/net/SSLCertificateSocketFactory" since="1">
+ <class name="android/net/SSLCertificateSocketFactory" since="1" deprecated="29">
<extends name="javax/net/ssl/SSLSocketFactory"/>
- <method name="&lt;init>(I)V" deprecated="16"/>
- <method name="getDefault(I)Ljavax/net/SocketFactory;"/>
- <method name="getDefault(ILandroid/net/SSLSessionCache;)Ljavax/net/ssl/SSLSocketFactory;" since="8"/>
+ <method name="&lt;init>(I)V" deprecated="15"/>
+ <method name="getDefault(I)Ljavax/net/SocketFactory;" deprecated="29"/>
+ <method name="getDefault(ILandroid/net/SSLSessionCache;)Ljavax/net/ssl/SSLSocketFactory;" since="8" deprecated="29"/>
<method name="getHttpSocketFactory(ILandroid/net/SSLSessionCache;)Lorg/apache/http/conn/ssl/SSLSocketFactory;" since="8" deprecated="22" removed="23"/>
- <method name="getInsecure(ILandroid/net/SSLSessionCache;)Ljavax/net/ssl/SSLSocketFactory;" since="8"/>
- <method name="getNpnSelectedProtocol(Ljava/net/Socket;)[B" since="16"/>
- <method name="setHostname(Ljava/net/Socket;Ljava/lang/String;)V" since="17"/>
- <method name="setKeyManagers([Ljavax/net/ssl/KeyManager;)V" since="14"/>
- <method name="setNpnProtocols([[B)V" since="16"/>
- <method name="setTrustManagers([Ljavax/net/ssl/TrustManager;)V" since="14"/>
- <method name="setUseSessionTickets(Ljava/net/Socket;Z)V" since="17"/>
+ <method name="getInsecure(ILandroid/net/SSLSessionCache;)Ljavax/net/ssl/SSLSocketFactory;" since="8" deprecated="29"/>
+ <method name="getNpnSelectedProtocol(Ljava/net/Socket;)[B" since="16" deprecated="29"/>
+ <method name="setHostname(Ljava/net/Socket;Ljava/lang/String;)V" since="17" deprecated="29"/>
+ <method name="setKeyManagers([Ljavax/net/ssl/KeyManager;)V" since="14" deprecated="29"/>
+ <method name="setNpnProtocols([[B)V" since="16" deprecated="29"/>
+ <method name="setTrustManagers([Ljavax/net/ssl/TrustManager;)V" since="14" deprecated="29"/>
+ <method name="setUseSessionTickets(Ljava/net/Socket;Z)V" since="17" deprecated="29"/>
</class>
<class name="android/net/SSLSessionCache" since="8">
<extends name="java/lang/Object"/>
<method name="&lt;init>(Landroid/content/Context;)V"/>
<method name="&lt;init>(Ljava/io/File;)V"/>
</class>
+ <class name="android/net/SocketKeepalive" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="java/lang/AutoCloseable"/>
+ <method name="start(I)V"/>
+ <method name="stop()V"/>
+ <field name="ERROR_HARDWARE_ERROR"/>
+ <field name="ERROR_INSUFFICIENT_RESOURCES"/>
+ <field name="ERROR_INVALID_INTERVAL"/>
+ <field name="ERROR_INVALID_IP_ADDRESS"/>
+ <field name="ERROR_INVALID_LENGTH"/>
+ <field name="ERROR_INVALID_NETWORK"/>
+ <field name="ERROR_INVALID_PORT"/>
+ <field name="ERROR_INVALID_SOCKET"/>
+ <field name="ERROR_SOCKET_NOT_IDLE"/>
+ <field name="ERROR_UNSUPPORTED"/>
+ </class>
+ <class name="android/net/SocketKeepalive$Callback" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="onDataReceived()V"/>
+ <method name="onError(I)V"/>
+ <method name="onStarted()V"/>
+ <method name="onStopped()V"/>
+ </class>
+ <class name="android/net/TelephonyNetworkSpecifier" since="30">
+ <extends name="android/net/NetworkSpecifier"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getSubscriptionId()I"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/net/TelephonyNetworkSpecifier$Builder" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="build()Landroid/net/TelephonyNetworkSpecifier;"/>
+ <method name="setSubscriptionId(I)Landroid/net/TelephonyNetworkSpecifier$Builder;"/>
+ </class>
<class name="android/net/TrafficStats" since="8">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
@@ -27344,12 +28879,14 @@
<method name="getMobileRxPackets()J"/>
<method name="getMobileTxBytes()J"/>
<method name="getMobileTxPackets()J"/>
+ <method name="getRxPackets(Ljava/lang/String;)J" since="30"/>
<method name="getThreadStatsTag()I" since="14"/>
<method name="getThreadStatsUid()I" since="28"/>
<method name="getTotalRxBytes()J"/>
<method name="getTotalRxPackets()J"/>
<method name="getTotalTxBytes()J"/>
<method name="getTotalTxPackets()J"/>
+ <method name="getTxPackets(Ljava/lang/String;)J" since="30"/>
<method name="getUidRxBytes(I)J"/>
<method name="getUidRxPackets(I)J" since="12"/>
<method name="getUidTcpRxBytes(I)J" since="12" deprecated="18"/>
@@ -27374,11 +28911,13 @@
<method name="untagSocket(Ljava/net/Socket;)V" since="14"/>
<field name="UNSUPPORTED"/>
</class>
+ <class name="android/net/TransportInfo" since="29">
+ <extends name="java/lang/Object"/>
+ </class>
<class name="android/net/Uri" since="1">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
<implements name="java/lang/Comparable"/>
- <method name="&lt;init>()V"/>
<method name="buildUpon()Landroid/net/Uri$Builder;"/>
<method name="compareTo(Landroid/net/Uri;)I"/>
<method name="decode(Ljava/lang/String;)Ljava/lang/String;"/>
@@ -27511,9 +29050,18 @@
<extends name="java/lang/Object"/>
<method name="sanitize(Ljava/lang/String;)Ljava/lang/String;"/>
</class>
+ <class name="android/net/VpnManager" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="deleteProvisionedVpnProfile()V"/>
+ <method name="provisionVpnProfile(Landroid/net/PlatformVpnProfile;)Landroid/content/Intent;"/>
+ <method name="startProvisionedVpnProfile()V"/>
+ <method name="stopProvisionedVpnProfile()V"/>
+ </class>
<class name="android/net/VpnService" since="14">
<extends name="android/app/Service"/>
<method name="&lt;init>()V"/>
+ <method name="isAlwaysOn()Z" since="29"/>
+ <method name="isLockdownEnabled()Z" since="29"/>
<method name="onRevoke()V"/>
<method name="prepare(Landroid/content/Context;)Landroid/content/Intent;"/>
<method name="protect(I)Z"/>
@@ -27540,6 +29088,8 @@
<method name="establish()Landroid/os/ParcelFileDescriptor;"/>
<method name="setBlocking(Z)Landroid/net/VpnService$Builder;" since="21"/>
<method name="setConfigureIntent(Landroid/app/PendingIntent;)Landroid/net/VpnService$Builder;"/>
+ <method name="setHttpProxy(Landroid/net/ProxyInfo;)Landroid/net/VpnService$Builder;" since="29"/>
+ <method name="setMetered(Z)Landroid/net/VpnService$Builder;" since="29"/>
<method name="setMtu(I)Landroid/net/VpnService$Builder;"/>
<method name="setSession(Ljava/lang/String;)Landroid/net/VpnService$Builder;"/>
<method name="setUnderlyingNetworks([Landroid/net/Network;)Landroid/net/VpnService$Builder;" since="22"/>
@@ -27547,7 +29097,6 @@
<class name="android/net/http/AndroidHttpClient" since="8" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
<implements name="org/apache/http/client/HttpClient"/>
- <method name="&lt;init>()V"/>
<method name="close()V"/>
<method name="disableCurlLogging()V"/>
<method name="enableCurlLogging(Ljava/lang/String;I)V"/>
@@ -27563,7 +29112,6 @@
<class name="android/net/http/HttpResponseCache" since="14">
<extends name="java/net/ResponseCache"/>
<implements name="java/io/Closeable"/>
- <method name="&lt;init>()V"/>
<method name="delete()V"/>
<method name="flush()V"/>
<method name="getHitCount()I"/>
@@ -27576,14 +29124,14 @@
</class>
<class name="android/net/http/SslCertificate" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="16"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Date;Ljava/util/Date;)V" since="8" deprecated="16"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="15"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Date;Ljava/util/Date;)V" since="8" deprecated="15"/>
<method name="&lt;init>(Ljava/security/cert/X509Certificate;)V"/>
<method name="getIssuedBy()Landroid/net/http/SslCertificate$DName;"/>
<method name="getIssuedTo()Landroid/net/http/SslCertificate$DName;"/>
- <method name="getValidNotAfter()Ljava/lang/String;" deprecated="16"/>
+ <method name="getValidNotAfter()Ljava/lang/String;" deprecated="15"/>
<method name="getValidNotAfterDate()Ljava/util/Date;" since="8"/>
- <method name="getValidNotBefore()Ljava/lang/String;" deprecated="16"/>
+ <method name="getValidNotBefore()Ljava/lang/String;" deprecated="15"/>
<method name="getValidNotBeforeDate()Ljava/util/Date;" since="8"/>
<method name="getX509Certificate()Ljava/security/cert/X509Certificate;" since="29"/>
<method name="restoreState(Landroid/os/Bundle;)Landroid/net/http/SslCertificate;"/>
@@ -27599,9 +29147,9 @@
</class>
<class name="android/net/http/SslError" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(ILandroid/net/http/SslCertificate;)V" deprecated="16"/>
+ <method name="&lt;init>(ILandroid/net/http/SslCertificate;)V" deprecated="15"/>
<method name="&lt;init>(ILandroid/net/http/SslCertificate;Ljava/lang/String;)V" since="14"/>
- <method name="&lt;init>(ILjava/security/cert/X509Certificate;)V" deprecated="16"/>
+ <method name="&lt;init>(ILjava/security/cert/X509Certificate;)V" deprecated="15"/>
<method name="&lt;init>(ILjava/security/cert/X509Certificate;Ljava/lang/String;)V" since="14"/>
<method name="addError(I)Z"/>
<method name="getCertificate()Landroid/net/http/SslCertificate;"/>
@@ -27612,7 +29160,7 @@
<field name="SSL_EXPIRED"/>
<field name="SSL_IDMISMATCH"/>
<field name="SSL_INVALID" since="14"/>
- <field name="SSL_MAX_ERROR" deprecated="16"/>
+ <field name="SSL_MAX_ERROR" deprecated="15"/>
<field name="SSL_NOTYETVALID"/>
<field name="SSL_UNTRUSTED"/>
</class>
@@ -27625,7 +29173,6 @@
</class>
<class name="android/net/nsd/NsdManager" since="16">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="discoverServices(Ljava/lang/String;ILandroid/net/nsd/NsdManager$DiscoveryListener;)V"/>
<method name="registerService(Landroid/net/nsd/NsdServiceInfo;ILandroid/net/nsd/NsdManager$RegistrationListener;)V"/>
<method name="resolveService(Landroid/net/nsd/NsdServiceInfo;Landroid/net/nsd/NsdManager$ResolveListener;)V"/>
@@ -27680,8 +29227,6 @@
</class>
<class name="android/net/rtp/AudioCodec" since="12">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILjava/lang/String;Ljava/lang/String;)V" since="29"/>
<method name="getCodec(ILjava/lang/String;Ljava/lang/String;)Landroid/net/rtp/AudioCodec;"/>
<method name="getCodecs()[Landroid/net/rtp/AudioCodec;"/>
<field name="AMR"/>
@@ -27695,7 +29240,8 @@
</class>
<class name="android/net/rtp/AudioGroup" since="12">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" since="30"/>
<method name="clear()V"/>
<method name="getMode()I"/>
<method name="getStreams()[Landroid/net/rtp/AudioStream;"/>
@@ -27718,8 +29264,6 @@
</class>
<class name="android/net/rtp/RtpStream" since="12">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/net/InetAddress;)V" since="29"/>
<method name="associate(Ljava/net/InetAddress;I)V"/>
<method name="getLocalAddress()Ljava/net/InetAddress;"/>
<method name="getLocalPort()I"/>
@@ -27773,7 +29317,6 @@
</class>
<class name="android/net/sip/SipErrorCode" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="toString(I)Ljava/lang/String;"/>
<field name="CLIENT_ERROR"/>
<field name="CROSS_DOMAIN_AUTHENTICATION"/>
@@ -27797,8 +29340,6 @@
</class>
<class name="android/net/sip/SipManager" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="close(Ljava/lang/String;)V"/>
<method name="createSipSession(Landroid/net/sip/SipProfile;Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;"/>
<method name="getCallId(Landroid/content/Intent;)Ljava/lang/String;"/>
@@ -27828,7 +29369,6 @@
<implements name="android/os/Parcelable"/>
<implements name="java/io/Serializable"/>
<implements name="java/lang/Cloneable"/>
- <method name="&lt;init>()V"/>
<method name="getAuthUserName()Ljava/lang/String;" since="12"/>
<method name="getAutoRegistration()Z"/>
<method name="getDisplayName()Ljava/lang/String;"/>
@@ -27841,6 +29381,7 @@
<method name="getSipDomain()Ljava/lang/String;"/>
<method name="getUriString()Ljava/lang/String;"/>
<method name="getUserName()Ljava/lang/String;"/>
+ <method name="setCallingUid(I)V" since="30"/>
<field name="CREATOR"/>
</class>
<class name="android/net/sip/SipProfile$Builder" since="9">
@@ -27867,7 +29408,6 @@
</class>
<class name="android/net/sip/SipSession" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="answerCall(Ljava/lang/String;I)V"/>
<method name="changeCall(Ljava/lang/String;I)V"/>
<method name="endCall()V"/>
@@ -27900,7 +29440,6 @@
</class>
<class name="android/net/sip/SipSession$State" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="toString(I)Ljava/lang/String;"/>
<field name="DEREGISTERING"/>
<field name="INCOMING_CALL"/>
@@ -27914,10 +29453,21 @@
<field name="READY_TO_CALL"/>
<field name="REGISTERING"/>
</class>
+ <class name="android/net/ssl/SSLEngines" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="isSupportedEngine(Ljavax/net/ssl/SSLEngine;)Z"/>
+ <method name="setUseSessionTickets(Ljavax/net/ssl/SSLEngine;Z)V"/>
+ </class>
+ <class name="android/net/ssl/SSLSockets" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="isSupportedSocket(Ljavax/net/ssl/SSLSocket;)Z"/>
+ <method name="setUseSessionTickets(Ljavax/net/ssl/SSLSocket;Z)V"/>
+ </class>
<class name="android/net/wifi/ScanResult" since="1">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>(Landroid/net/wifi/ScanResult;)V" since="30"/>
+ <method name="getInformationElements()Ljava/util/List;" since="30"/>
<method name="is80211mcResponder()Z" since="23"/>
<method name="isPasspointNetwork()Z" since="23"/>
<field name="BSSID"/>
@@ -27926,6 +29476,7 @@
<field name="CHANNEL_WIDTH_40MHZ" since="23"/>
<field name="CHANNEL_WIDTH_80MHZ" since="23"/>
<field name="CHANNEL_WIDTH_80MHZ_PLUS_MHZ" since="23"/>
+ <field name="CREATOR" since="30"/>
<field name="SSID"/>
<field name="capabilities"/>
<field name="centerFreq0" since="23"/>
@@ -27937,6 +29488,12 @@
<field name="timestamp" since="17"/>
<field name="venueName" since="23"/>
</class>
+ <class name="android/net/wifi/ScanResult$InformationElement" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/net/wifi/ScanResult$InformationElement;)V"/>
+ <method name="getBytes()Ljava/nio/ByteBuffer;"/>
+ <method name="getId()I"/>
+ </class>
<class name="android/net/wifi/SupplicantState" since="1">
<extends name="java/lang/Enum"/>
<implements name="android/os/Parcelable"/>
@@ -27957,86 +29514,94 @@
<field name="SCANNING"/>
<field name="UNINITIALIZED"/>
</class>
- <class name="android/net/wifi/WifiConfiguration" since="1">
+ <class name="android/net/wifi/WifiConfiguration" since="1" deprecated="29">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
- <method name="getHttpProxy()Landroid/net/ProxyInfo;" since="26"/>
- <method name="isPasspoint()Z" since="23"/>
- <method name="setHttpProxy(Landroid/net/ProxyInfo;)V" since="26"/>
- <field name="BSSID"/>
- <field name="FQDN" since="21"/>
- <field name="SSID"/>
- <field name="allowedAuthAlgorithms"/>
- <field name="allowedGroupCiphers"/>
- <field name="allowedKeyManagement"/>
- <field name="allowedPairwiseCiphers"/>
- <field name="allowedProtocols"/>
- <field name="enterpriseConfig" since="18"/>
- <field name="hiddenSSID"/>
- <field name="isHomeProviderNetwork" since="26"/>
- <field name="networkId"/>
- <field name="preSharedKey"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="getHttpProxy()Landroid/net/ProxyInfo;" since="26" deprecated="29"/>
+ <method name="getRandomizedMacAddress()Landroid/net/MacAddress;" since="29" deprecated="29"/>
+ <method name="isPasspoint()Z" since="23" deprecated="29"/>
+ <method name="setHttpProxy(Landroid/net/ProxyInfo;)V" since="26" deprecated="29"/>
+ <field name="BSSID" deprecated="29"/>
+ <field name="FQDN" since="21" deprecated="29"/>
+ <field name="SSID" deprecated="29"/>
+ <field name="allowedAuthAlgorithms" deprecated="29"/>
+ <field name="allowedGroupCiphers" deprecated="29"/>
+ <field name="allowedGroupManagementCiphers" since="29" deprecated="29"/>
+ <field name="allowedKeyManagement" deprecated="29"/>
+ <field name="allowedPairwiseCiphers" deprecated="29"/>
+ <field name="allowedProtocols" deprecated="29"/>
+ <field name="allowedSuiteBCiphers" since="29" deprecated="29"/>
+ <field name="enterpriseConfig" since="18" deprecated="29"/>
+ <field name="hiddenSSID" deprecated="29"/>
+ <field name="isHomeProviderNetwork" since="26" deprecated="29"/>
+ <field name="networkId" deprecated="29"/>
+ <field name="preSharedKey" deprecated="29"/>
<field name="priority" deprecated="26"/>
- <field name="providerFriendlyName" since="23"/>
- <field name="roamingConsortiumIds" since="23"/>
- <field name="status"/>
+ <field name="providerFriendlyName" since="23" deprecated="29"/>
+ <field name="roamingConsortiumIds" since="23" deprecated="29"/>
+ <field name="status" deprecated="29"/>
<field name="wepKeys" deprecated="28"/>
<field name="wepTxKeyIndex" deprecated="28"/>
</class>
- <class name="android/net/wifi/WifiConfiguration$AuthAlgorithm" since="1">
+ <class name="android/net/wifi/WifiConfiguration$AuthAlgorithm" since="1" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <field name="LEAP"/>
- <field name="OPEN"/>
+ <field name="LEAP" deprecated="29"/>
+ <field name="OPEN" deprecated="29"/>
<field name="SHARED" deprecated="28"/>
- <field name="strings"/>
- <field name="varName"/>
+ <field name="strings" deprecated="29"/>
+ <field name="varName" deprecated="29"/>
</class>
- <class name="android/net/wifi/WifiConfiguration$GroupCipher" since="1">
+ <class name="android/net/wifi/WifiConfiguration$GroupCipher" since="1" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <field name="CCMP"/>
- <field name="TKIP"/>
+ <field name="CCMP" deprecated="29"/>
+ <field name="GCMP_256" since="29" deprecated="29"/>
+ <field name="TKIP" deprecated="29"/>
<field name="WEP104" deprecated="28"/>
<field name="WEP40" deprecated="28"/>
- <field name="strings"/>
- <field name="varName"/>
+ <field name="strings" deprecated="29"/>
+ <field name="varName" deprecated="29"/>
</class>
- <class name="android/net/wifi/WifiConfiguration$KeyMgmt" since="1">
+ <class name="android/net/wifi/WifiConfiguration$GroupMgmtCipher" since="29" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <field name="IEEE8021X"/>
- <field name="NONE"/>
- <field name="WPA_EAP"/>
- <field name="WPA_PSK"/>
- <field name="strings"/>
- <field name="varName"/>
+ <field name="BIP_CMAC_256" deprecated="29"/>
+ <field name="BIP_GMAC_128" deprecated="29"/>
+ <field name="BIP_GMAC_256" deprecated="29"/>
</class>
- <class name="android/net/wifi/WifiConfiguration$PairwiseCipher" since="1">
+ <class name="android/net/wifi/WifiConfiguration$KeyMgmt" since="1" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <field name="CCMP"/>
- <field name="NONE"/>
+ <field name="IEEE8021X" deprecated="29"/>
+ <field name="NONE" deprecated="29"/>
+ <field name="OWE" since="29" deprecated="29"/>
+ <field name="SAE" since="29" deprecated="29"/>
+ <field name="SUITE_B_192" since="29" deprecated="29"/>
+ <field name="WPA_EAP" deprecated="29"/>
+ <field name="WPA_PSK" deprecated="29"/>
+ <field name="strings" deprecated="29"/>
+ <field name="varName" deprecated="29"/>
+ </class>
+ <class name="android/net/wifi/WifiConfiguration$PairwiseCipher" since="1" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <field name="CCMP" deprecated="29"/>
+ <field name="GCMP_256" since="29" deprecated="29"/>
+ <field name="NONE" deprecated="29"/>
<field name="TKIP" deprecated="28"/>
- <field name="strings"/>
- <field name="varName"/>
+ <field name="strings" deprecated="29"/>
+ <field name="varName" deprecated="29"/>
</class>
- <class name="android/net/wifi/WifiConfiguration$Protocol" since="1">
+ <class name="android/net/wifi/WifiConfiguration$Protocol" since="1" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <field name="RSN"/>
+ <field name="RSN" deprecated="29"/>
<field name="WPA" deprecated="28"/>
- <field name="strings"/>
- <field name="varName"/>
+ <field name="strings" deprecated="29"/>
+ <field name="varName" deprecated="29"/>
</class>
- <class name="android/net/wifi/WifiConfiguration$Status" since="1">
+ <class name="android/net/wifi/WifiConfiguration$Status" since="1" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <field name="CURRENT"/>
- <field name="DISABLED"/>
- <field name="ENABLED"/>
- <field name="strings"/>
+ <field name="CURRENT" deprecated="29"/>
+ <field name="DISABLED" deprecated="29"/>
+ <field name="ENABLED" deprecated="29"/>
+ <field name="strings" deprecated="29"/>
</class>
<class name="android/net/wifi/WifiEnterpriseConfig" since="18">
<extends name="java/lang/Object"/>
@@ -28075,7 +29640,6 @@
</class>
<class name="android/net/wifi/WifiEnterpriseConfig$Eap" since="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="AKA" since="21"/>
<field name="AKA_PRIME" since="23"/>
<field name="NONE"/>
@@ -28088,7 +29652,6 @@
</class>
<class name="android/net/wifi/WifiEnterpriseConfig$Phase2" since="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="AKA" since="26"/>
<field name="AKA_PRIME" since="26"/>
<field name="GTC"/>
@@ -28101,7 +29664,6 @@
<class name="android/net/wifi/WifiInfo" since="1">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getBSSID()Ljava/lang/String;"/>
<method name="getDetailedStateOf(Landroid/net/wifi/SupplicantState;)Landroid/net/NetworkInfo$DetailedState;"/>
<method name="getFrequency()I" since="21"/>
@@ -28110,58 +29672,71 @@
<method name="getLinkSpeed()I"/>
<method name="getMacAddress()Ljava/lang/String;"/>
<method name="getNetworkId()I"/>
+ <method name="getPasspointFqdn()Ljava/lang/String;" since="29"/>
+ <method name="getPasspointProviderFriendlyName()Ljava/lang/String;" since="29"/>
<method name="getRssi()I"/>
+ <method name="getRxLinkSpeedMbps()I" since="29"/>
<method name="getSSID()Ljava/lang/String;"/>
<method name="getSupplicantState()Landroid/net/wifi/SupplicantState;"/>
+ <method name="getTxLinkSpeedMbps()I" since="29"/>
<field name="FREQUENCY_UNITS" since="21"/>
<field name="LINK_SPEED_UNITS"/>
+ <field name="LINK_SPEED_UNKNOWN" since="29"/>
</class>
<class name="android/net/wifi/WifiManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="addNetwork(Landroid/net/wifi/WifiConfiguration;)I"/>
+ <method name="addNetwork(Landroid/net/wifi/WifiConfiguration;)I" deprecated="29"/>
+ <method name="addNetworkSuggestions(Ljava/util/List;)I" since="29"/>
<method name="addOrUpdatePasspointConfiguration(Landroid/net/wifi/hotspot2/PasspointConfiguration;)V" since="26"/>
<method name="calculateSignalLevel(II)I"/>
<method name="cancelWps(Landroid/net/wifi/WifiManager$WpsCallback;)V" since="21" deprecated="28"/>
<method name="compareSignalLevel(II)I"/>
<method name="createMulticastLock(Ljava/lang/String;)Landroid/net/wifi/WifiManager$MulticastLock;" since="4"/>
<method name="createWifiLock(ILjava/lang/String;)Landroid/net/wifi/WifiManager$WifiLock;" since="3"/>
- <method name="createWifiLock(Ljava/lang/String;)Landroid/net/wifi/WifiManager$WifiLock;"/>
- <method name="disableNetwork(I)Z"/>
- <method name="disconnect()Z"/>
- <method name="enableNetwork(IZ)Z"/>
- <method name="getConfiguredNetworks()Ljava/util/List;"/>
+ <method name="createWifiLock(Ljava/lang/String;)Landroid/net/wifi/WifiManager$WifiLock;" deprecated="29"/>
+ <method name="disableNetwork(I)Z" deprecated="29"/>
+ <method name="disconnect()Z" deprecated="29"/>
+ <method name="enableNetwork(IZ)Z" deprecated="29"/>
+ <method name="getConfiguredNetworks()Ljava/util/List;" deprecated="29"/>
<method name="getConnectionInfo()Landroid/net/wifi/WifiInfo;"/>
- <method name="getDhcpInfo()Landroid/net/DhcpInfo;" deprecated="18"/>
- <method name="getPasspointConfigurations()Ljava/util/List;" since="26"/>
+ <method name="getDhcpInfo()Landroid/net/DhcpInfo;"/>
+ <method name="getMaxNumberOfNetworkSuggestionsPerApp()I" since="29"/>
+ <method name="getPasspointConfigurations()Ljava/util/List;" since="26" deprecated="29"/>
<method name="getScanResults()Ljava/util/List;"/>
<method name="getWifiState()I"/>
<method name="is5GHzBandSupported()Z" since="21"/>
- <method name="isDeviceToApRttSupported()Z" since="21"/>
+ <method name="isDeviceToApRttSupported()Z" since="21" deprecated="29"/>
+ <method name="isEasyConnectSupported()Z" since="29"/>
+ <method name="isEnhancedOpenSupported()Z" since="29"/>
<method name="isEnhancedPowerReportingSupported()Z" since="21"/>
<method name="isP2pSupported()Z" since="21"/>
<method name="isPreferredNetworkOffloadSupported()Z" since="21"/>
- <method name="isScanAlwaysAvailable()Z" since="18"/>
+ <method name="isScanAlwaysAvailable()Z" since="18" deprecated="29"/>
<method name="isTdlsSupported()Z" since="21"/>
<method name="isWifiEnabled()Z"/>
+ <method name="isWpa3SaeSupported()Z" since="29"/>
+ <method name="isWpa3SuiteBSupported()Z" since="29"/>
<method name="pingSupplicant()Z" deprecated="26"/>
- <method name="reassociate()Z"/>
- <method name="reconnect()Z"/>
- <method name="removeNetwork(I)Z"/>
- <method name="removePasspointConfiguration(Ljava/lang/String;)V" since="26"/>
+ <method name="reassociate()Z" deprecated="29"/>
+ <method name="reconnect()Z" deprecated="29"/>
+ <method name="removeNetwork(I)Z" deprecated="29"/>
+ <method name="removeNetworkSuggestions(Ljava/util/List;)I" since="29"/>
+ <method name="removePasspointConfiguration(Ljava/lang/String;)V" since="26" deprecated="29"/>
<method name="saveConfiguration()Z" deprecated="26"/>
<method name="setTdlsEnabled(Ljava/net/InetAddress;Z)V" since="19"/>
<method name="setTdlsEnabledWithMacAddress(Ljava/lang/String;Z)V" since="19"/>
- <method name="setWifiEnabled(Z)Z"/>
+ <method name="setWifiEnabled(Z)Z" deprecated="29"/>
<method name="startLocalOnlyHotspot(Landroid/net/wifi/WifiManager$LocalOnlyHotspotCallback;Landroid/os/Handler;)V" since="26"/>
<method name="startScan()Z" deprecated="28"/>
<method name="startWps(Landroid/net/wifi/WpsInfo;Landroid/net/wifi/WifiManager$WpsCallback;)V" since="21" deprecated="28"/>
- <method name="updateNetwork(Landroid/net/wifi/WifiConfiguration;)I"/>
+ <method name="updateNetwork(Landroid/net/wifi/WifiConfiguration;)I" deprecated="29"/>
<field name="ACTION_PICK_WIFI_NETWORK"/>
<field name="ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE" since="18"/>
+ <field name="ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION" since="29"/>
<field name="ERROR_AUTHENTICATING" deprecated="28"/>
<field name="EXTRA_BSSID" deprecated="28"/>
<field name="EXTRA_NETWORK_INFO"/>
+ <field name="EXTRA_NETWORK_SUGGESTION" since="29"/>
<field name="EXTRA_NEW_RSSI"/>
<field name="EXTRA_NEW_STATE" deprecated="28"/>
<field name="EXTRA_PREVIOUS_WIFI_STATE"/>
@@ -28174,11 +29749,19 @@
<field name="NETWORK_STATE_CHANGED_ACTION"/>
<field name="RSSI_CHANGED_ACTION"/>
<field name="SCAN_RESULTS_AVAILABLE_ACTION"/>
+ <field name="STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_DUPLICATE" since="29"/>
+ <field name="STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_EXCEEDS_MAX_PER_APP" since="29"/>
+ <field name="STATUS_NETWORK_SUGGESTIONS_ERROR_APP_DISALLOWED" since="29"/>
+ <field name="STATUS_NETWORK_SUGGESTIONS_ERROR_INTERNAL" since="29"/>
+ <field name="STATUS_NETWORK_SUGGESTIONS_ERROR_REMOVE_INVALID" since="29"/>
+ <field name="STATUS_NETWORK_SUGGESTIONS_SUCCESS" since="29"/>
<field name="SUPPLICANT_CONNECTION_CHANGE_ACTION" deprecated="28"/>
<field name="SUPPLICANT_STATE_CHANGED_ACTION" deprecated="28"/>
- <field name="WIFI_MODE_FULL" since="3"/>
+ <field name="UNKNOWN_SSID" since="30"/>
+ <field name="WIFI_MODE_FULL" since="3" deprecated="29"/>
<field name="WIFI_MODE_FULL_HIGH_PERF" since="12"/>
- <field name="WIFI_MODE_SCAN_ONLY" since="3"/>
+ <field name="WIFI_MODE_FULL_LOW_LATENCY" since="29"/>
+ <field name="WIFI_MODE_SCAN_ONLY" since="3" deprecated="29"/>
<field name="WIFI_STATE_CHANGED_ACTION"/>
<field name="WIFI_STATE_DISABLED"/>
<field name="WIFI_STATE_DISABLING"/>
@@ -28205,14 +29788,10 @@
<class name="android/net/wifi/WifiManager$LocalOnlyHotspotReservation" since="26">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>(Landroid/net/wifi/WifiManager;)V" removed="29"/>
- <method name="&lt;init>(Landroid/net/wifi/WifiManager;Landroid/net/wifi/WifiConfiguration;)V" since="29"/>
<method name="getWifiConfiguration()Landroid/net/wifi/WifiConfiguration;"/>
</class>
<class name="android/net/wifi/WifiManager$MulticastLock" since="4">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/net/wifi/WifiManager;)V" removed="29"/>
- <method name="&lt;init>(Landroid/net/wifi/WifiManager;Ljava/lang/String;)V" since="29"/>
<method name="acquire()V"/>
<method name="isHeld()Z"/>
<method name="release()V"/>
@@ -28220,8 +29799,6 @@
</class>
<class name="android/net/wifi/WifiManager$WifiLock" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/net/wifi/WifiManager;)V" removed="29"/>
- <method name="&lt;init>(Landroid/net/wifi/WifiManager;ILjava/lang/String;)V" since="29"/>
<method name="acquire()V"/>
<method name="isHeld()Z"/>
<method name="release()V"/>
@@ -28230,11 +29807,53 @@
</class>
<class name="android/net/wifi/WifiManager$WpsCallback" since="21" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
<method name="onFailed(I)V" deprecated="28"/>
<method name="onStarted(Ljava/lang/String;)V" deprecated="28"/>
<method name="onSucceeded()V" deprecated="28"/>
</class>
+ <class name="android/net/wifi/WifiNetworkSpecifier" since="29">
+ <extends name="android/net/NetworkSpecifier"/>
+ <implements name="android/os/Parcelable"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/net/wifi/WifiNetworkSpecifier$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="build()Landroid/net/wifi/WifiNetworkSpecifier;"/>
+ <method name="setBssid(Landroid/net/MacAddress;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+ <method name="setBssidPattern(Landroid/net/MacAddress;Landroid/net/MacAddress;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+ <method name="setIsEnhancedOpen(Z)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+ <method name="setIsHiddenSsid(Z)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+ <method name="setSsid(Ljava/lang/String;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+ <method name="setSsidPattern(Landroid/os/PatternMatcher;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+ <method name="setWpa2EnterpriseConfig(Landroid/net/wifi/WifiEnterpriseConfig;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+ <method name="setWpa2Passphrase(Ljava/lang/String;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+ <method name="setWpa3EnterpriseConfig(Landroid/net/wifi/WifiEnterpriseConfig;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+ <method name="setWpa3Passphrase(Ljava/lang/String;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+ </class>
+ <class name="android/net/wifi/WifiNetworkSuggestion" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/net/wifi/WifiNetworkSuggestion$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="build()Landroid/net/wifi/WifiNetworkSuggestion;"/>
+ <method name="setBssid(Landroid/net/MacAddress;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+ <method name="setIsAppInteractionRequired(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+ <method name="setIsEnhancedOpen(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+ <method name="setIsHiddenSsid(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+ <method name="setIsMetered(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+ <method name="setIsUserInteractionRequired(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+ <method name="setPriority(I)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+ <method name="setSsid(Ljava/lang/String;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+ <method name="setWpa2EnterpriseConfig(Landroid/net/wifi/WifiEnterpriseConfig;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+ <method name="setWpa2Passphrase(Ljava/lang/String;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+ <method name="setWpa3EnterpriseConfig(Landroid/net/wifi/WifiEnterpriseConfig;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+ <method name="setWpa3Passphrase(Ljava/lang/String;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+ </class>
<class name="android/net/wifi/WpsInfo" since="14" deprecated="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
@@ -28259,8 +29878,6 @@
<class name="android/net/wifi/aware/Characteristics" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Bundle;)V" since="29"/>
<method name="getMaxMatchFilterLength()I"/>
<method name="getMaxServiceNameLength()I"/>
<method name="getMaxServiceSpecificInfoLength()I"/>
@@ -28269,10 +29886,8 @@
<class name="android/net/wifi/aware/DiscoverySession" since="26">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/net/wifi/aware/WifiAwareManager;II)V" since="29"/>
- <method name="createNetworkSpecifierOpen(Landroid/net/wifi/aware/PeerHandle;)Landroid/net/NetworkSpecifier;"/>
- <method name="createNetworkSpecifierPassphrase(Landroid/net/wifi/aware/PeerHandle;Ljava/lang/String;)Landroid/net/NetworkSpecifier;"/>
+ <method name="createNetworkSpecifierOpen(Landroid/net/wifi/aware/PeerHandle;)Landroid/net/NetworkSpecifier;" deprecated="29"/>
+ <method name="createNetworkSpecifierPassphrase(Landroid/net/wifi/aware/PeerHandle;Ljava/lang/String;)Landroid/net/NetworkSpecifier;" deprecated="29"/>
<method name="sendMessage(Landroid/net/wifi/aware/PeerHandle;I[B)V"/>
</class>
<class name="android/net/wifi/aware/DiscoverySessionCallback" since="26">
@@ -28294,16 +29909,18 @@
<method name="&lt;init>()V"/>
<method name="onIdentityChanged([B)V"/>
</class>
+ <class name="android/net/wifi/aware/ParcelablePeerHandle" since="29">
+ <extends name="android/net/wifi/aware/PeerHandle"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="&lt;init>(Landroid/net/wifi/aware/PeerHandle;)V"/>
+ <field name="CREATOR"/>
+ </class>
<class name="android/net/wifi/aware/PeerHandle" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
</class>
<class name="android/net/wifi/aware/PublishConfig" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>([B[B[BIIZZ)V" since="29"/>
<field name="CREATOR"/>
<field name="PUBLISH_TYPE_SOLICITED"/>
<field name="PUBLISH_TYPE_UNSOLICITED"/>
@@ -28322,15 +29939,11 @@
</class>
<class name="android/net/wifi/aware/PublishDiscoverySession" since="26">
<extends name="android/net/wifi/aware/DiscoverySession"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/net/wifi/aware/WifiAwareManager;II)V" since="29"/>
<method name="updatePublish(Landroid/net/wifi/aware/PublishConfig;)V"/>
</class>
<class name="android/net/wifi/aware/SubscribeConfig" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>([B[B[BIIZZIZI)V" since="29"/>
<field name="CREATOR"/>
<field name="SUBSCRIBE_TYPE_ACTIVE"/>
<field name="SUBSCRIBE_TYPE_PASSIVE"/>
@@ -28350,13 +29963,10 @@
</class>
<class name="android/net/wifi/aware/SubscribeDiscoverySession" since="26">
<extends name="android/net/wifi/aware/DiscoverySession"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/net/wifi/aware/WifiAwareManager;II)V" since="29"/>
<method name="updateSubscribe(Landroid/net/wifi/aware/SubscribeConfig;)V"/>
</class>
<class name="android/net/wifi/aware/WifiAwareManager" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="attach(Landroid/net/wifi/aware/AttachCallback;Landroid/net/wifi/aware/IdentityChangedListener;Landroid/os/Handler;)V"/>
<method name="attach(Landroid/net/wifi/aware/AttachCallback;Landroid/os/Handler;)V"/>
<method name="getCharacteristics()Landroid/net/wifi/aware/Characteristics;"/>
@@ -28365,11 +29975,31 @@
<field name="WIFI_AWARE_DATA_PATH_ROLE_INITIATOR"/>
<field name="WIFI_AWARE_DATA_PATH_ROLE_RESPONDER"/>
</class>
+ <class name="android/net/wifi/aware/WifiAwareNetworkInfo" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/net/TransportInfo"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getPeerIpv6Addr()Ljava/net/Inet6Address;"/>
+ <method name="getPort()I"/>
+ <method name="getTransportProtocol()I"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/net/wifi/aware/WifiAwareNetworkSpecifier" since="29">
+ <extends name="android/net/NetworkSpecifier"/>
+ <implements name="android/os/Parcelable"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/net/wifi/aware/WifiAwareNetworkSpecifier$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/net/wifi/aware/DiscoverySession;Landroid/net/wifi/aware/PeerHandle;)V"/>
+ <method name="build()Landroid/net/wifi/aware/WifiAwareNetworkSpecifier;"/>
+ <method name="setPort(I)Landroid/net/wifi/aware/WifiAwareNetworkSpecifier$Builder;"/>
+ <method name="setPskPassphrase(Ljava/lang/String;)Landroid/net/wifi/aware/WifiAwareNetworkSpecifier$Builder;"/>
+ <method name="setTransportProtocol(I)Landroid/net/wifi/aware/WifiAwareNetworkSpecifier$Builder;"/>
+ </class>
<class name="android/net/wifi/aware/WifiAwareSession" since="26">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/net/wifi/aware/WifiAwareManager;Landroid/os/Binder;I)V" since="29"/>
<method name="createNetworkSpecifierOpen(I[B)Landroid/net/NetworkSpecifier;"/>
<method name="createNetworkSpecifierPassphrase(I[BLjava/lang/String;)Landroid/net/NetworkSpecifier;"/>
<method name="publish(Landroid/net/wifi/aware/PublishConfig;Landroid/net/wifi/aware/DiscoverySessionCallback;Landroid/os/Handler;)V"/>
@@ -28377,7 +30007,6 @@
</class>
<class name="android/net/wifi/hotspot2/ConfigParser" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="parsePasspointConfig(Ljava/lang/String;[B)Landroid/net/wifi/hotspot2/PasspointConfiguration;"/>
</class>
<class name="android/net/wifi/hotspot2/PasspointConfiguration" since="26">
@@ -28393,7 +30022,6 @@
</class>
<class name="android/net/wifi/hotspot2/omadm/PpsMoParser" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="parseMoText(Ljava/lang/String;)Landroid/net/wifi/hotspot2/PasspointConfiguration;"/>
</class>
<class name="android/net/wifi/hotspot2/pps/Credential" since="26">
@@ -28473,10 +30101,24 @@
<method name="&lt;init>()V"/>
<method name="&lt;init>(Landroid/net/wifi/p2p/WifiP2pConfig;)V"/>
<field name="CREATOR"/>
+ <field name="GROUP_OWNER_BAND_2GHZ" since="29"/>
+ <field name="GROUP_OWNER_BAND_5GHZ" since="29"/>
+ <field name="GROUP_OWNER_BAND_AUTO" since="29"/>
<field name="deviceAddress"/>
<field name="groupOwnerIntent"/>
<field name="wps"/>
</class>
+ <class name="android/net/wifi/p2p/WifiP2pConfig$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="build()Landroid/net/wifi/p2p/WifiP2pConfig;"/>
+ <method name="enablePersistentMode(Z)Landroid/net/wifi/p2p/WifiP2pConfig$Builder;"/>
+ <method name="setDeviceAddress(Landroid/net/MacAddress;)Landroid/net/wifi/p2p/WifiP2pConfig$Builder;"/>
+ <method name="setGroupOperatingBand(I)Landroid/net/wifi/p2p/WifiP2pConfig$Builder;"/>
+ <method name="setGroupOperatingFrequency(I)Landroid/net/wifi/p2p/WifiP2pConfig$Builder;"/>
+ <method name="setNetworkName(Ljava/lang/String;)Landroid/net/wifi/p2p/WifiP2pConfig$Builder;"/>
+ <method name="setPassphrase(Ljava/lang/String;)Landroid/net/wifi/p2p/WifiP2pConfig$Builder;"/>
+ </class>
<class name="android/net/wifi/p2p/WifiP2pDevice" since="14">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
@@ -28514,6 +30156,7 @@
<method name="&lt;init>()V"/>
<method name="&lt;init>(Landroid/net/wifi/p2p/WifiP2pGroup;)V"/>
<method name="getClientList()Ljava/util/Collection;"/>
+ <method name="getFrequency()I" since="29"/>
<method name="getInterface()Ljava/lang/String;"/>
<method name="getNetworkName()Ljava/lang/String;"/>
<method name="getOwner()Landroid/net/wifi/p2p/WifiP2pDevice;"/>
@@ -28533,13 +30176,13 @@
</class>
<class name="android/net/wifi/p2p/WifiP2pManager" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="addLocalService(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/nsd/WifiP2pServiceInfo;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
<method name="addServiceRequest(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
<method name="cancelConnect(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
<method name="clearLocalServices(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
<method name="clearServiceRequests(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
<method name="connect(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pConfig;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
+ <method name="createGroup(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pConfig;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="29"/>
<method name="createGroup(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
<method name="discoverPeers(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
<method name="discoverServices(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
@@ -28548,7 +30191,11 @@
<method name="removeLocalService(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/nsd/WifiP2pServiceInfo;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
<method name="removeServiceRequest(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
<method name="requestConnectionInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ConnectionInfoListener;)V"/>
+ <method name="requestDeviceInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$DeviceInfoListener;)V" since="29"/>
+ <method name="requestDiscoveryState(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$DiscoveryStateListener;)V" since="29"/>
<method name="requestGroupInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$GroupInfoListener;)V"/>
+ <method name="requestNetworkInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$NetworkInfoListener;)V" since="29"/>
+ <method name="requestP2pState(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$P2pStateListener;)V" since="29"/>
<method name="requestPeers(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$PeerListListener;)V"/>
<method name="setDnsSdResponseListeners(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$DnsSdServiceResponseListener;Landroid/net/wifi/p2p/WifiP2pManager$DnsSdTxtRecordListener;)V" since="16"/>
<method name="setServiceResponseListener(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ServiceResponseListener;)V" since="16"/>
@@ -28583,8 +30230,6 @@
<class name="android/net/wifi/p2p/WifiP2pManager$Channel" since="14">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable" since="27"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/os/Looper;Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;Landroid/os/Binder;Landroid/net/wifi/p2p/WifiP2pManager;)V" since="29"/>
</class>
<class name="android/net/wifi/p2p/WifiP2pManager$ChannelListener" since="14">
<extends name="java/lang/Object"/>
@@ -28594,6 +30239,14 @@
<extends name="java/lang/Object"/>
<method name="onConnectionInfoAvailable(Landroid/net/wifi/p2p/WifiP2pInfo;)V"/>
</class>
+ <class name="android/net/wifi/p2p/WifiP2pManager$DeviceInfoListener" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="onDeviceInfoAvailable(Landroid/net/wifi/p2p/WifiP2pDevice;)V"/>
+ </class>
+ <class name="android/net/wifi/p2p/WifiP2pManager$DiscoveryStateListener" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="onDiscoveryStateAvailable(I)V"/>
+ </class>
<class name="android/net/wifi/p2p/WifiP2pManager$DnsSdServiceResponseListener" since="16">
<extends name="java/lang/Object"/>
<method name="onDnsSdServiceAvailable(Ljava/lang/String;Ljava/lang/String;Landroid/net/wifi/p2p/WifiP2pDevice;)V"/>
@@ -28606,6 +30259,14 @@
<extends name="java/lang/Object"/>
<method name="onGroupInfoAvailable(Landroid/net/wifi/p2p/WifiP2pGroup;)V"/>
</class>
+ <class name="android/net/wifi/p2p/WifiP2pManager$NetworkInfoListener" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="onNetworkInfoAvailable(Landroid/net/NetworkInfo;)V"/>
+ </class>
+ <class name="android/net/wifi/p2p/WifiP2pManager$P2pStateListener" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="onP2pStateAvailable(I)V"/>
+ </class>
<class name="android/net/wifi/p2p/WifiP2pManager$PeerListListener" since="14">
<extends name="java/lang/Object"/>
<method name="onPeersAvailable(Landroid/net/wifi/p2p/WifiP2pDeviceList;)V"/>
@@ -28620,13 +30281,10 @@
</class>
<class name="android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo" since="16">
<extends name="android/net/wifi/p2p/nsd/WifiP2pServiceInfo"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/List;)V" since="29"/>
<method name="newInstance(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Landroid/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo;"/>
</class>
<class name="android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest" since="16">
<extends name="android/net/wifi/p2p/nsd/WifiP2pServiceRequest"/>
- <method name="&lt;init>()V"/>
<method name="newInstance()Landroid/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest;"/>
<method name="newInstance(Ljava/lang/String;)Landroid/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest;"/>
<method name="newInstance(Ljava/lang/String;Ljava/lang/String;)Landroid/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest;"/>
@@ -28634,8 +30292,6 @@
<class name="android/net/wifi/p2p/nsd/WifiP2pServiceInfo" since="16">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/List;)V" since="29"/>
<field name="SERVICE_TYPE_ALL"/>
<field name="SERVICE_TYPE_BONJOUR"/>
<field name="SERVICE_TYPE_UPNP"/>
@@ -28644,27 +30300,56 @@
<class name="android/net/wifi/p2p/nsd/WifiP2pServiceRequest" since="16">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILjava/lang/String;)V" since="29"/>
<method name="newInstance(I)Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;"/>
<method name="newInstance(ILjava/lang/String;)Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;"/>
</class>
<class name="android/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfo" since="16">
<extends name="android/net/wifi/p2p/nsd/WifiP2pServiceInfo"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/List;)V" since="29"/>
<method name="newInstance(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)Landroid/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfo;"/>
</class>
<class name="android/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequest" since="16">
<extends name="android/net/wifi/p2p/nsd/WifiP2pServiceRequest"/>
- <method name="&lt;init>()V"/>
<method name="newInstance()Landroid/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequest;"/>
<method name="newInstance(Ljava/lang/String;)Landroid/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequest;"/>
</class>
+ <class name="android/net/wifi/rtt/CivicLocationKeys" since="29">
+ <extends name="java/lang/Object"/>
+ <field name="ADDITIONAL_CODE"/>
+ <field name="APT"/>
+ <field name="BOROUGH"/>
+ <field name="BRANCH_ROAD_NAME"/>
+ <field name="BUILDING"/>
+ <field name="CITY"/>
+ <field name="COUNTY"/>
+ <field name="DESK"/>
+ <field name="FLOOR"/>
+ <field name="GROUP_OF_STREETS"/>
+ <field name="HNO"/>
+ <field name="HNS"/>
+ <field name="LANGUAGE"/>
+ <field name="LMK"/>
+ <field name="LOC"/>
+ <field name="NAM"/>
+ <field name="NEIGHBORHOOD"/>
+ <field name="PCN"/>
+ <field name="POD"/>
+ <field name="POSTAL_CODE"/>
+ <field name="PO_BOX"/>
+ <field name="PRD"/>
+ <field name="PRIMARY_ROAD_NAME"/>
+ <field name="ROAD_SECTION"/>
+ <field name="ROOM"/>
+ <field name="SCRIPT"/>
+ <field name="STATE"/>
+ <field name="STREET_NAME_POST_MODIFIER"/>
+ <field name="STREET_NAME_PRE_MODIFIER"/>
+ <field name="STS"/>
+ <field name="SUBBRANCH_ROAD_NAME"/>
+ <field name="TYPE_OF_PLACE"/>
+ </class>
<class name="android/net/wifi/rtt/RangingRequest" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getMaxPeers()I"/>
<field name="CREATOR"/>
</class>
@@ -28680,8 +30365,6 @@
<class name="android/net/wifi/rtt/RangingResult" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILandroid/net/MacAddress;IIIII[B[BJ)V" since="29"/>
<method name="getDistanceMm()I"/>
<method name="getDistanceStdDevMm()I"/>
<method name="getMacAddress()Landroid/net/MacAddress;"/>
@@ -28691,6 +30374,7 @@
<method name="getRangingTimestampMillis()J"/>
<method name="getRssi()I"/>
<method name="getStatus()I"/>
+ <method name="getUnverifiedResponderLocation()Landroid/net/wifi/rtt/ResponderLocation;" since="29"/>
<field name="CREATOR"/>
<field name="STATUS_FAIL"/>
<field name="STATUS_RESPONDER_DOES_NOT_SUPPORT_IEEE80211MC"/>
@@ -28704,9 +30388,47 @@
<field name="STATUS_CODE_FAIL"/>
<field name="STATUS_CODE_FAIL_RTT_NOT_AVAILABLE"/>
</class>
+ <class name="android/net/wifi/rtt/ResponderLocation" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getAltitude()D"/>
+ <method name="getAltitudeType()I"/>
+ <method name="getAltitudeUncertainty()D"/>
+ <method name="getColocatedBssids()Ljava/util/List;"/>
+ <method name="getDatum()I"/>
+ <method name="getExpectedToMove()I"/>
+ <method name="getFloorNumber()D"/>
+ <method name="getHeightAboveFloorMeters()D"/>
+ <method name="getHeightAboveFloorUncertaintyMeters()D"/>
+ <method name="getLatitude()D"/>
+ <method name="getLatitudeUncertainty()D"/>
+ <method name="getLciVersion()I"/>
+ <method name="getLongitude()D"/>
+ <method name="getLongitudeUncertainty()D"/>
+ <method name="getMapImageMimeType()Ljava/lang/String;"/>
+ <method name="getMapImageUri()Landroid/net/Uri;"/>
+ <method name="getRegisteredLocationAgreementIndication()Z"/>
+ <method name="isLciSubelementValid()Z"/>
+ <method name="isZaxisSubelementValid()Z"/>
+ <method name="toCivicLocationAddress()Landroid/location/Address;"/>
+ <method name="toCivicLocationSparseArray()Landroid/util/SparseArray;"/>
+ <method name="toLocation()Landroid/location/Location;"/>
+ <field name="ALTITUDE_FLOORS"/>
+ <field name="ALTITUDE_METERS"/>
+ <field name="ALTITUDE_UNDEFINED"/>
+ <field name="CREATOR"/>
+ <field name="DATUM_NAD83_MLLW"/>
+ <field name="DATUM_NAD83_NAV88"/>
+ <field name="DATUM_UNDEFINED"/>
+ <field name="DATUM_WGS84"/>
+ <field name="LCI_VERSION_1"/>
+ <field name="LOCATION_FIXED"/>
+ <field name="LOCATION_MOVEMENT_UNKNOWN"/>
+ <field name="LOCATION_RESERVED"/>
+ <field name="LOCATION_VARIABLE"/>
+ </class>
<class name="android/net/wifi/rtt/WifiRttManager" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="isAvailable()Z"/>
<method name="startRanging(Landroid/net/wifi/rtt/RangingRequest;Ljava/util/concurrent/Executor;Landroid/net/wifi/rtt/RangingResultCallback;)V"/>
<field name="ACTION_WIFI_RTT_STATE_CHANGED"/>
@@ -28764,27 +30486,28 @@
</class>
<class name="android/nfc/NfcAdapter" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="disableForegroundDispatch(Landroid/app/Activity;)V" since="10"/>
- <method name="disableForegroundNdefPush(Landroid/app/Activity;)V" since="10" deprecated="16"/>
+ <method name="disableForegroundNdefPush(Landroid/app/Activity;)V" since="10" deprecated="15"/>
<method name="disableReaderMode(Landroid/app/Activity;)V" since="19"/>
<method name="enableForegroundDispatch(Landroid/app/Activity;Landroid/app/PendingIntent;[Landroid/content/IntentFilter;[[Ljava/lang/String;)V" since="10"/>
- <method name="enableForegroundNdefPush(Landroid/app/Activity;Landroid/nfc/NdefMessage;)V" since="10" deprecated="16"/>
+ <method name="enableForegroundNdefPush(Landroid/app/Activity;Landroid/nfc/NdefMessage;)V" since="10" deprecated="15"/>
<method name="enableReaderMode(Landroid/app/Activity;Landroid/nfc/NfcAdapter$ReaderCallback;ILandroid/os/Bundle;)V" since="19"/>
- <method name="getDefaultAdapter()Landroid/nfc/NfcAdapter;" removed="16"/>
+ <method name="getDefaultAdapter()Landroid/nfc/NfcAdapter;" deprecated="15" removed="16"/>
<method name="getDefaultAdapter(Landroid/content/Context;)Landroid/nfc/NfcAdapter;" since="10"/>
<method name="ignore(Landroid/nfc/Tag;ILandroid/nfc/NfcAdapter$OnTagRemovedListener;Landroid/os/Handler;)Z" since="24"/>
- <method name="invokeBeam(Landroid/app/Activity;)Z" since="21"/>
+ <method name="invokeBeam(Landroid/app/Activity;)Z" since="21" deprecated="29"/>
<method name="isEnabled()Z"/>
- <method name="isNdefPushEnabled()Z" since="16"/>
- <method name="setBeamPushUris([Landroid/net/Uri;Landroid/app/Activity;)V" since="16"/>
- <method name="setBeamPushUrisCallback(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback;Landroid/app/Activity;)V" since="16"/>
- <method name="setNdefPushMessage(Landroid/nfc/NdefMessage;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14"/>
- <method name="setNdefPushMessageCallback(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14"/>
- <method name="setOnNdefPushCompleteCallback(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14"/>
+ <method name="isNdefPushEnabled()Z" since="16" deprecated="29"/>
+ <method name="isSecureNfcEnabled()Z" since="29"/>
+ <method name="isSecureNfcSupported()Z" since="29"/>
+ <method name="setBeamPushUris([Landroid/net/Uri;Landroid/app/Activity;)V" since="16" deprecated="29"/>
+ <method name="setBeamPushUrisCallback(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback;Landroid/app/Activity;)V" since="16" deprecated="29"/>
+ <method name="setNdefPushMessage(Landroid/nfc/NdefMessage;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14" deprecated="29"/>
+ <method name="setNdefPushMessageCallback(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14" deprecated="29"/>
+ <method name="setOnNdefPushCompleteCallback(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14" deprecated="29"/>
<field name="ACTION_ADAPTER_STATE_CHANGED" since="18"/>
<field name="ACTION_NDEF_DISCOVERED" since="10"/>
+ <field name="ACTION_PREFERRED_PAYMENT_CHANGED" since="30"/>
<field name="ACTION_TAG_DISCOVERED"/>
<field name="ACTION_TECH_DISCOVERED" since="10"/>
<field name="ACTION_TRANSACTION_DETECTED" since="28"/>
@@ -28793,6 +30516,7 @@
<field name="EXTRA_DATA" since="28"/>
<field name="EXTRA_ID"/>
<field name="EXTRA_NDEF_MESSAGES"/>
+ <field name="EXTRA_PREFERRED_PAYMENT_CHANGED_REASON" since="30"/>
<field name="EXTRA_READER_PRESENCE_CHECK_DELAY" since="19"/>
<field name="EXTRA_SECURE_ELEMENT_NAME" since="28"/>
<field name="EXTRA_TAG" since="10"/>
@@ -28803,22 +30527,25 @@
<field name="FLAG_READER_NFC_V" since="19"/>
<field name="FLAG_READER_NO_PLATFORM_SOUNDS" since="19"/>
<field name="FLAG_READER_SKIP_NDEF_CHECK" since="19"/>
+ <field name="PREFERRED_PAYMENT_CHANGED" since="30"/>
+ <field name="PREFERRED_PAYMENT_LOADED" since="30"/>
+ <field name="PREFERRED_PAYMENT_UPDATED" since="30"/>
<field name="STATE_OFF" since="18"/>
<field name="STATE_ON" since="18"/>
<field name="STATE_TURNING_OFF" since="18"/>
<field name="STATE_TURNING_ON" since="18"/>
</class>
- <class name="android/nfc/NfcAdapter$CreateBeamUrisCallback" since="16">
+ <class name="android/nfc/NfcAdapter$CreateBeamUrisCallback" since="16" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="createBeamUris(Landroid/nfc/NfcEvent;)[Landroid/net/Uri;"/>
+ <method name="createBeamUris(Landroid/nfc/NfcEvent;)[Landroid/net/Uri;" deprecated="29"/>
</class>
- <class name="android/nfc/NfcAdapter$CreateNdefMessageCallback" since="14">
+ <class name="android/nfc/NfcAdapter$CreateNdefMessageCallback" since="14" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="createNdefMessage(Landroid/nfc/NfcEvent;)Landroid/nfc/NdefMessage;"/>
+ <method name="createNdefMessage(Landroid/nfc/NfcEvent;)Landroid/nfc/NdefMessage;" deprecated="29"/>
</class>
- <class name="android/nfc/NfcAdapter$OnNdefPushCompleteCallback" since="14">
+ <class name="android/nfc/NfcAdapter$OnNdefPushCompleteCallback" since="14" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="onNdefPushComplete(Landroid/nfc/NfcEvent;)V"/>
+ <method name="onNdefPushComplete(Landroid/nfc/NfcEvent;)V" deprecated="29"/>
</class>
<class name="android/nfc/NfcAdapter$OnTagRemovedListener" since="24">
<extends name="java/lang/Object"/>
@@ -28830,22 +30557,17 @@
</class>
<class name="android/nfc/NfcEvent" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/nfc/NfcAdapter;B)V" since="29"/>
<field name="nfcAdapter"/>
<field name="peerLlcpMajorVersion" since="23"/>
<field name="peerLlcpMinorVersion" since="23"/>
</class>
<class name="android/nfc/NfcManager" since="10">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="getDefaultAdapter()Landroid/nfc/NfcAdapter;"/>
</class>
<class name="android/nfc/Tag" since="10">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getId()[B"/>
<method name="getTechList()[Ljava/lang/String;"/>
<field name="CREATOR"/>
@@ -28857,17 +30579,21 @@
</class>
<class name="android/nfc/cardemulation/CardEmulation" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="categoryAllowsForegroundPreference(Ljava/lang/String;)Z" since="21"/>
+ <method name="getAidsForPreferredPaymentService()Ljava/util/List;" since="30"/>
<method name="getAidsForService(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;" since="21"/>
+ <method name="getDescriptionForPreferredPaymentService()Ljava/lang/CharSequence;" since="30"/>
<method name="getInstance(Landroid/nfc/NfcAdapter;)Landroid/nfc/cardemulation/CardEmulation;"/>
+ <method name="getRouteDestinationForPreferredPaymentService()Ljava/lang/String;" since="30"/>
<method name="getSelectionModeForCategory(Ljava/lang/String;)I"/>
<method name="isDefaultServiceForAid(Landroid/content/ComponentName;Ljava/lang/String;)Z"/>
<method name="isDefaultServiceForCategory(Landroid/content/ComponentName;Ljava/lang/String;)Z"/>
<method name="registerAidsForService(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)Z" since="21"/>
<method name="removeAidsForService(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21"/>
+ <method name="setOffHostForService(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="29"/>
<method name="setPreferredService(Landroid/app/Activity;Landroid/content/ComponentName;)Z" since="21"/>
<method name="supportsAidPrefixRegistration()Z" since="21"/>
+ <method name="unsetOffHostForService(Landroid/content/ComponentName;)Z" since="29"/>
<method name="unsetPreferredService(Landroid/app/Activity;)Z" since="21"/>
<field name="ACTION_CHANGE_DEFAULT"/>
<field name="CATEGORY_OTHER"/>
@@ -28902,7 +30628,6 @@
</class>
<class name="android/nfc/cardemulation/NfcFCardEmulation" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="disableService(Landroid/app/Activity;)Z"/>
<method name="enableService(Landroid/app/Activity;Landroid/content/ComponentName;)Z"/>
<method name="getInstance(Landroid/nfc/NfcAdapter;)Landroid/nfc/cardemulation/NfcFCardEmulation;"/>
@@ -28918,16 +30643,9 @@
<field name="SERVICE_INTERFACE"/>
<field name="SERVICE_META_DATA"/>
</class>
- <class name="android/nfc/tech/BasicTagTechnology" since="10" removed="29">
+ <class name="android/nfc/tech/IsoDep" since="10">
<extends name="java/lang/Object"/>
<implements name="android/nfc/tech/TagTechnology"/>
- <method name="&lt;init>()V"/>
- </class>
- <class name="android/nfc/tech/IsoDep" since="10">
- <extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/IsoDep;"/>
<method name="getHiLayerResponse()[B"/>
<method name="getHistoricalBytes()[B"/>
@@ -28938,10 +30656,8 @@
<method name="transceive([B)[B"/>
</class>
<class name="android/nfc/tech/MifareClassic" since="10">
- <extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
+ <extends name="java/lang/Object"/>
+ <implements name="android/nfc/tech/TagTechnology"/>
<method name="authenticateSectorWithKeyA(I[B)Z"/>
<method name="authenticateSectorWithKeyB(I[B)Z"/>
<method name="blockToSector(I)I"/>
@@ -28976,10 +30692,8 @@
<field name="TYPE_UNKNOWN"/>
</class>
<class name="android/nfc/tech/MifareUltralight" since="10">
- <extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
+ <extends name="java/lang/Object"/>
+ <implements name="android/nfc/tech/TagTechnology"/>
<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/MifareUltralight;"/>
<method name="getMaxTransceiveLength()I" since="14"/>
<method name="getTimeout()I" since="14"/>
@@ -28994,10 +30708,8 @@
<field name="TYPE_UNKNOWN"/>
</class>
<class name="android/nfc/tech/Ndef" since="10">
- <extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
+ <extends name="java/lang/Object"/>
+ <implements name="android/nfc/tech/TagTechnology"/>
<method name="canMakeReadOnly()Z"/>
<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/Ndef;"/>
<method name="getCachedNdefMessage()Landroid/nfc/NdefMessage;"/>
@@ -29014,19 +30726,15 @@
<field name="NFC_FORUM_TYPE_4"/>
</class>
<class name="android/nfc/tech/NdefFormatable" since="10">
- <extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
+ <extends name="java/lang/Object"/>
+ <implements name="android/nfc/tech/TagTechnology"/>
<method name="format(Landroid/nfc/NdefMessage;)V"/>
<method name="formatReadOnly(Landroid/nfc/NdefMessage;)V"/>
<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NdefFormatable;"/>
</class>
<class name="android/nfc/tech/NfcA" since="10">
- <extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
+ <extends name="java/lang/Object"/>
+ <implements name="android/nfc/tech/TagTechnology"/>
<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcA;"/>
<method name="getAtqa()[B"/>
<method name="getMaxTransceiveLength()I" since="14"/>
@@ -29036,10 +30744,8 @@
<method name="transceive([B)[B"/>
</class>
<class name="android/nfc/tech/NfcB" since="10">
- <extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
+ <extends name="java/lang/Object"/>
+ <implements name="android/nfc/tech/TagTechnology"/>
<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcB;"/>
<method name="getApplicationData()[B"/>
<method name="getMaxTransceiveLength()I" since="14"/>
@@ -29047,10 +30753,8 @@
<method name="transceive([B)[B"/>
</class>
<class name="android/nfc/tech/NfcBarcode" since="17">
- <extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
+ <extends name="java/lang/Object"/>
+ <implements name="android/nfc/tech/TagTechnology"/>
<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcBarcode;"/>
<method name="getBarcode()[B"/>
<method name="getType()I"/>
@@ -29058,10 +30762,8 @@
<field name="TYPE_UNKNOWN"/>
</class>
<class name="android/nfc/tech/NfcF" since="10">
- <extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
+ <extends name="java/lang/Object"/>
+ <implements name="android/nfc/tech/TagTechnology"/>
<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcF;"/>
<method name="getManufacturer()[B"/>
<method name="getMaxTransceiveLength()I" since="14"/>
@@ -29071,10 +30773,8 @@
<method name="transceive([B)[B"/>
</class>
<class name="android/nfc/tech/NfcV" since="10">
- <extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
+ <extends name="java/lang/Object"/>
+ <implements name="android/nfc/tech/TagTechnology"/>
<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcV;"/>
<method name="getDsfId()B"/>
<method name="getMaxTransceiveLength()I" since="14"/>
@@ -29239,20 +30939,74 @@
<field name="EGL_WIDTH"/>
<field name="EGL_WINDOW_BIT"/>
</class>
+ <class name="android/opengl/EGL15" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="eglClientWaitSync(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSync;IJ)I"/>
+ <method name="eglCreateImage(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLContext;IJ[JI)Landroid/opengl/EGLImage;"/>
+ <method name="eglCreatePlatformPixmapSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Ljava/nio/Buffer;[JI)Landroid/opengl/EGLSurface;"/>
+ <method name="eglCreatePlatformWindowSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Ljava/nio/Buffer;[JI)Landroid/opengl/EGLSurface;"/>
+ <method name="eglCreateSync(Landroid/opengl/EGLDisplay;I[JI)Landroid/opengl/EGLSync;"/>
+ <method name="eglDestroyImage(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLImage;)Z"/>
+ <method name="eglDestroySync(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSync;)Z"/>
+ <method name="eglGetPlatformDisplay(IJ[JI)Landroid/opengl/EGLDisplay;"/>
+ <method name="eglGetSyncAttrib(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSync;I[JI)Z"/>
+ <method name="eglWaitSync(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSync;I)Z"/>
+ <field name="EGL_CL_EVENT_HANDLE"/>
+ <field name="EGL_CONDITION_SATISFIED"/>
+ <field name="EGL_CONTEXT_MAJOR_VERSION"/>
+ <field name="EGL_CONTEXT_MINOR_VERSION"/>
+ <field name="EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT"/>
+ <field name="EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT"/>
+ <field name="EGL_CONTEXT_OPENGL_DEBUG"/>
+ <field name="EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE"/>
+ <field name="EGL_CONTEXT_OPENGL_PROFILE_MASK"/>
+ <field name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY"/>
+ <field name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS"/>
+ <field name="EGL_FOREVER"/>
+ <field name="EGL_GL_COLORSPACE"/>
+ <field name="EGL_GL_COLORSPACE_LINEAR"/>
+ <field name="EGL_GL_COLORSPACE_SRGB"/>
+ <field name="EGL_GL_RENDERBUFFER"/>
+ <field name="EGL_GL_TEXTURE_2D"/>
+ <field name="EGL_GL_TEXTURE_3D"/>
+ <field name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X"/>
+ <field name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"/>
+ <field name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"/>
+ <field name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X"/>
+ <field name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y"/>
+ <field name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z"/>
+ <field name="EGL_GL_TEXTURE_LEVEL"/>
+ <field name="EGL_GL_TEXTURE_ZOFFSET"/>
+ <field name="EGL_IMAGE_PRESERVED"/>
+ <field name="EGL_LOSE_CONTEXT_ON_RESET"/>
+ <field name="EGL_NO_CONTEXT"/>
+ <field name="EGL_NO_DISPLAY"/>
+ <field name="EGL_NO_IMAGE"/>
+ <field name="EGL_NO_RESET_NOTIFICATION"/>
+ <field name="EGL_NO_SURFACE"/>
+ <field name="EGL_NO_SYNC"/>
+ <field name="EGL_OPENGL_ES3_BIT"/>
+ <field name="EGL_PLATFORM_ANDROID_KHR"/>
+ <field name="EGL_SIGNALED"/>
+ <field name="EGL_SYNC_CL_EVENT"/>
+ <field name="EGL_SYNC_CL_EVENT_COMPLETE"/>
+ <field name="EGL_SYNC_CONDITION"/>
+ <field name="EGL_SYNC_FENCE"/>
+ <field name="EGL_SYNC_FLUSH_COMMANDS_BIT"/>
+ <field name="EGL_SYNC_PRIOR_COMMANDS_COMPLETE"/>
+ <field name="EGL_SYNC_STATUS"/>
+ <field name="EGL_SYNC_TYPE"/>
+ <field name="EGL_TIMEOUT_EXPIRED"/>
+ <field name="EGL_UNSIGNALED"/>
+ </class>
<class name="android/opengl/EGLConfig" since="17">
<extends name="android/opengl/EGLObjectHandle"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(J)V" since="29"/>
</class>
<class name="android/opengl/EGLContext" since="17">
<extends name="android/opengl/EGLObjectHandle"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(J)V" since="29"/>
</class>
<class name="android/opengl/EGLDisplay" since="17">
<extends name="android/opengl/EGLObjectHandle"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(J)V" since="29"/>
</class>
<class name="android/opengl/EGLExt" since="18">
<extends name="java/lang/Object"/>
@@ -29264,6 +31018,9 @@
<field name="EGL_OPENGL_ES3_BIT_KHR"/>
<field name="EGL_RECORDABLE_ANDROID" since="26"/>
</class>
+ <class name="android/opengl/EGLImage" since="29">
+ <extends name="android/opengl/EGLObjectHandle"/>
+ </class>
<class name="android/opengl/EGLObjectHandle" since="17">
<extends name="java/lang/Object"/>
<method name="&lt;init>(I)V" deprecated="21"/>
@@ -29273,8 +31030,9 @@
</class>
<class name="android/opengl/EGLSurface" since="17">
<extends name="android/opengl/EGLObjectHandle"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(J)V" since="29"/>
+ </class>
+ <class name="android/opengl/EGLSync" since="29">
+ <extends name="android/opengl/EGLObjectHandle"/>
</class>
<class name="android/opengl/ETC1" since="8">
<extends name="java/lang/Object"/>
@@ -31089,7 +32847,6 @@
</class>
<class name="android/opengl/GLES31" since="21">
<extends name="android/opengl/GLES30"/>
- <method name="&lt;init>()V"/>
<method name="glActiveShaderProgram(II)V"/>
<method name="glBindImageTexture(IIIZIII)V"/>
<method name="glBindProgramPipeline(I)V"/>
@@ -31365,7 +33122,6 @@
</class>
<class name="android/opengl/GLES31Ext" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="glBlendBarrierKHR()V"/>
<method name="glBlendEquationSeparateiEXT(III)V"/>
<method name="glBlendEquationiEXT(II)V"/>
@@ -31621,7 +33377,6 @@
</class>
<class name="android/opengl/GLES32" since="24">
<extends name="android/opengl/GLES31"/>
- <method name="&lt;init>()V"/>
<method name="glBlendBarrier()V"/>
<method name="glBlendEquationSeparatei(III)V"/>
<method name="glBlendEquationi(II)V"/>
@@ -31963,7 +33718,6 @@
</class>
<class name="android/opengl/GLUtils" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getEGLErrorString(I)Ljava/lang/String;" since="14"/>
<method name="getInternalFormat(Landroid/graphics/Bitmap;)I"/>
<method name="getType(Landroid/graphics/Bitmap;)I"/>
@@ -32002,34 +33756,34 @@
<method name="frustumCullSpheres([FI[FII[III)I"/>
<method name="visibilityTest([FI[FI[CII)I"/>
</class>
- <class name="android/os/AsyncTask" since="3">
- <extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="cancel(Z)Z"/>
- <method name="doInBackground([Ljava/lang/Object;)Ljava/lang/Object;"/>
- <method name="execute(Ljava/lang/Runnable;)V" since="11"/>
- <method name="execute([Ljava/lang/Object;)Landroid/os/AsyncTask;"/>
- <method name="executeOnExecutor(Ljava/util/concurrent/Executor;[Ljava/lang/Object;)Landroid/os/AsyncTask;" since="11"/>
- <method name="get()Ljava/lang/Object;"/>
- <method name="get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
- <method name="getStatus()Landroid/os/AsyncTask$Status;"/>
- <method name="isCancelled()Z"/>
- <method name="onCancelled()V"/>
- <method name="onCancelled(Ljava/lang/Object;)V" since="11"/>
- <method name="onPostExecute(Ljava/lang/Object;)V"/>
- <method name="onPreExecute()V"/>
- <method name="onProgressUpdate([Ljava/lang/Object;)V"/>
- <method name="publishProgress([Ljava/lang/Object;)V"/>
- <field name="SERIAL_EXECUTOR" since="11"/>
- <field name="THREAD_POOL_EXECUTOR" since="11"/>
- </class>
- <class name="android/os/AsyncTask$Status" since="3">
+ <class name="android/os/AsyncTask" since="3" deprecated="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="cancel(Z)Z" deprecated="30"/>
+ <method name="doInBackground([Ljava/lang/Object;)Ljava/lang/Object;" deprecated="30"/>
+ <method name="execute(Ljava/lang/Runnable;)V" since="11" deprecated="30"/>
+ <method name="execute([Ljava/lang/Object;)Landroid/os/AsyncTask;" deprecated="30"/>
+ <method name="executeOnExecutor(Ljava/util/concurrent/Executor;[Ljava/lang/Object;)Landroid/os/AsyncTask;" since="11" deprecated="30"/>
+ <method name="get()Ljava/lang/Object;" deprecated="30"/>
+ <method name="get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;" deprecated="30"/>
+ <method name="getStatus()Landroid/os/AsyncTask$Status;" deprecated="30"/>
+ <method name="isCancelled()Z" deprecated="30"/>
+ <method name="onCancelled()V" deprecated="30"/>
+ <method name="onCancelled(Ljava/lang/Object;)V" since="11" deprecated="30"/>
+ <method name="onPostExecute(Ljava/lang/Object;)V" deprecated="30"/>
+ <method name="onPreExecute()V" deprecated="30"/>
+ <method name="onProgressUpdate([Ljava/lang/Object;)V" deprecated="30"/>
+ <method name="publishProgress([Ljava/lang/Object;)V" deprecated="30"/>
+ <field name="SERIAL_EXECUTOR" since="11" deprecated="30"/>
+ <field name="THREAD_POOL_EXECUTOR" since="11" deprecated="30"/>
+ </class>
+ <class name="android/os/AsyncTask$Status" since="3" deprecated="30">
<extends name="java/lang/Enum"/>
<method name="valueOf(Ljava/lang/String;)Landroid/os/AsyncTask$Status;"/>
<method name="values()[Landroid/os/AsyncTask$Status;"/>
- <field name="FINISHED"/>
- <field name="PENDING"/>
- <field name="RUNNING"/>
+ <field name="FINISHED" deprecated="30"/>
+ <field name="PENDING" deprecated="30"/>
+ <field name="RUNNING" deprecated="30"/>
</class>
<class name="android/os/BadParcelableException" since="1">
<extends name="android/util/AndroidRuntimeException"/>
@@ -32038,7 +33792,6 @@
</class>
<class name="android/os/BaseBundle" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="clear()V"/>
<method name="containsKey(Ljava/lang/String;)Z"/>
<method name="get(Ljava/lang/String;)Ljava/lang/Object;"/>
@@ -32075,7 +33828,7 @@
</class>
<class name="android/os/BatteryManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" removed="23"/>
<method name="computeChargeTimeRemaining()J" since="28"/>
<method name="getIntProperty(I)I" since="21"/>
<method name="getLongProperty(I)J" since="21"/>
@@ -32119,20 +33872,27 @@
<extends name="java/lang/Object"/>
<implements name="android/os/IBinder"/>
<method name="&lt;init>()V"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
<method name="attachInterface(Landroid/os/IInterface;Ljava/lang/String;)V"/>
<method name="clearCallingIdentity()J"/>
+ <method name="clearCallingWorkSource()J" since="29"/>
<method name="dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
<method name="flushPendingCommands()V"/>
<method name="getCallingPid()I"/>
<method name="getCallingUid()I"/>
+ <method name="getCallingUidOrThrow()I" since="29"/>
<method name="getCallingUserHandle()Landroid/os/UserHandle;" since="17"/>
+ <method name="getCallingWorkSourceUid()I" since="29"/>
<method name="joinThreadPool()V"/>
<method name="onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z"/>
<method name="restoreCallingIdentity(J)V"/>
+ <method name="restoreCallingWorkSource(J)V" since="29"/>
+ <method name="setCallingWorkSourceUid(I)J" since="29"/>
</class>
<class name="android/os/Build" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
+ <method name="getFingerprintedPartitions()Ljava/util/List;" since="29"/>
<method name="getRadioVersion()Ljava/lang/String;" since="14"/>
<method name="getSerial()Ljava/lang/String;" since="26"/>
<field name="BOARD"/>
@@ -32149,8 +33909,9 @@
<field name="MANUFACTURER" since="4"/>
<field name="MODEL"/>
<field name="PRODUCT"/>
- <field name="RADIO" since="8" deprecated="16"/>
+ <field name="RADIO" since="8" deprecated="15"/>
<field name="SERIAL" since="9" deprecated="26"/>
+ <field name="SKU" since="30"/>
<field name="SUPPORTED_32_BIT_ABIS" since="21"/>
<field name="SUPPORTED_64_BIT_ABIS" since="21"/>
<field name="SUPPORTED_ABIS" since="21"/>
@@ -32160,6 +33921,13 @@
<field name="UNKNOWN" since="8"/>
<field name="USER"/>
</class>
+ <class name="android/os/Build$Partition" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getBuildTimeMillis()J"/>
+ <method name="getFingerprint()Ljava/lang/String;"/>
+ <method name="getName()Ljava/lang/String;"/>
+ <field name="PARTITION_NAME_SYSTEM"/>
+ </class>
<class name="android/os/Build$VERSION" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
@@ -32168,7 +33936,7 @@
<field name="INCREMENTAL"/>
<field name="PREVIEW_SDK_INT" since="23"/>
<field name="RELEASE"/>
- <field name="SDK" deprecated="16"/>
+ <field name="SDK" deprecated="15"/>
<field name="SDK_INT" since="4"/>
<field name="SECURITY_PATCH" since="23"/>
</class>
@@ -32196,7 +33964,6 @@
<field name="JELLY_BEAN_MR2" since="18"/>
<field name="KITKAT" since="19"/>
<field name="KITKAT_WATCH" since="20"/>
- <field name="L" since="21" removed="22"/>
<field name="LOLLIPOP" since="21"/>
<field name="LOLLIPOP_MR1" since="22"/>
<field name="M" since="23"/>
@@ -32205,6 +33972,8 @@
<field name="O" since="26"/>
<field name="O_MR1" since="27"/>
<field name="P" since="28"/>
+ <field name="Q" since="29"/>
+ <field name="R" since="30"/>
</class>
<class name="android/os/Bundle" since="1">
<extends name="android/os/BaseBundle" since="21"/>
@@ -32338,8 +34107,6 @@
<class name="android/os/CpuUsageInfo" since="24">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getActive()J"/>
<method name="getTotal()J"/>
<field name="CREATOR"/>
@@ -32355,9 +34122,8 @@
</class>
<class name="android/os/Debug" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="attachJvmtiAgent(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V" since="28"/>
- <method name="changeDebugPort(I)V" deprecated="16"/>
+ <method name="changeDebugPort(I)V" deprecated="15"/>
<method name="dumpHprofData(Ljava/lang/String;)V" since="3"/>
<method name="dumpService(Ljava/lang/String;Ljava/io/FileDescriptor;[Ljava/lang/String;)Z" since="8"/>
<method name="enableEmulatorTraceOutput()V"/>
@@ -32370,10 +34136,10 @@
<method name="getGlobalAllocSize()I" deprecated="23"/>
<method name="getGlobalClassInitCount()I" since="8" deprecated="23"/>
<method name="getGlobalClassInitTime()I" since="8" deprecated="23"/>
- <method name="getGlobalExternalAllocCount()I" deprecated="16"/>
- <method name="getGlobalExternalAllocSize()I" deprecated="16"/>
- <method name="getGlobalExternalFreedCount()I" deprecated="16"/>
- <method name="getGlobalExternalFreedSize()I" deprecated="16"/>
+ <method name="getGlobalExternalAllocCount()I" deprecated="15"/>
+ <method name="getGlobalExternalAllocSize()I" deprecated="15"/>
+ <method name="getGlobalExternalFreedCount()I" deprecated="15"/>
+ <method name="getGlobalExternalFreedSize()I" deprecated="15"/>
<method name="getGlobalFreedCount()I" deprecated="23"/>
<method name="getGlobalFreedSize()I" deprecated="23"/>
<method name="getGlobalGcInvocationCount()I" deprecated="23"/>
@@ -32387,8 +34153,8 @@
<method name="getRuntimeStats()Ljava/util/Map;" since="23"/>
<method name="getThreadAllocCount()I" deprecated="23"/>
<method name="getThreadAllocSize()I" deprecated="23"/>
- <method name="getThreadExternalAllocCount()I" deprecated="16"/>
- <method name="getThreadExternalAllocSize()I" deprecated="16"/>
+ <method name="getThreadExternalAllocCount()I" deprecated="15"/>
+ <method name="getThreadExternalAllocSize()I" deprecated="15"/>
<method name="getThreadGcInvocationCount()I" deprecated="23"/>
<method name="isDebuggerConnected()Z"/>
<method name="printLoadedClasses(I)V"/>
@@ -32397,20 +34163,20 @@
<method name="resetGlobalAllocSize()V" deprecated="23"/>
<method name="resetGlobalClassInitCount()V" since="8" deprecated="23"/>
<method name="resetGlobalClassInitTime()V" since="8" deprecated="23"/>
- <method name="resetGlobalExternalAllocCount()V" deprecated="16"/>
- <method name="resetGlobalExternalAllocSize()V" deprecated="16"/>
- <method name="resetGlobalExternalFreedCount()V" deprecated="16"/>
- <method name="resetGlobalExternalFreedSize()V" deprecated="16"/>
+ <method name="resetGlobalExternalAllocCount()V" deprecated="15"/>
+ <method name="resetGlobalExternalAllocSize()V" deprecated="15"/>
+ <method name="resetGlobalExternalFreedCount()V" deprecated="15"/>
+ <method name="resetGlobalExternalFreedSize()V" deprecated="15"/>
<method name="resetGlobalFreedCount()V" deprecated="23"/>
<method name="resetGlobalFreedSize()V" deprecated="23"/>
<method name="resetGlobalGcInvocationCount()V" deprecated="23"/>
<method name="resetThreadAllocCount()V" deprecated="23"/>
<method name="resetThreadAllocSize()V" deprecated="23"/>
- <method name="resetThreadExternalAllocCount()V" deprecated="16"/>
- <method name="resetThreadExternalAllocSize()V" deprecated="16"/>
+ <method name="resetThreadExternalAllocCount()V" deprecated="15"/>
+ <method name="resetThreadExternalAllocSize()V" deprecated="15"/>
<method name="resetThreadGcInvocationCount()V" deprecated="23"/>
- <method name="setAllocationLimit(I)I" deprecated="16"/>
- <method name="setGlobalAllocationLimit(I)I" deprecated="16"/>
+ <method name="setAllocationLimit(I)I" deprecated="15"/>
+ <method name="setGlobalAllocationLimit(I)I" deprecated="15"/>
<method name="startAllocCounting()V" deprecated="18"/>
<method name="startMethodTracing()V"/>
<method name="startMethodTracing(Ljava/lang/String;)V"/>
@@ -32431,11 +34197,11 @@
</class>
<class name="android/os/Debug$InstructionCount" since="1" deprecated="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="collect()Z"/>
- <method name="globalMethodInvocations()I"/>
- <method name="globalTotal()I"/>
- <method name="resetAndStart()Z"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="collect()Z" deprecated="29"/>
+ <method name="globalMethodInvocations()I" deprecated="29"/>
+ <method name="globalTotal()I" deprecated="29"/>
+ <method name="resetAndStart()Z" deprecated="29"/>
</class>
<class name="android/os/Debug$MemoryInfo" since="1">
<extends name="java/lang/Object"/>
@@ -32474,6 +34240,7 @@
<method name="getNextEntry(Ljava/lang/String;J)Landroid/os/DropBoxManager$Entry;"/>
<method name="isTagEnabled(Ljava/lang/String;)Z"/>
<field name="ACTION_DROPBOX_ENTRY_ADDED" since="11"/>
+ <field name="EXTRA_DROPPED_COUNT" since="29"/>
<field name="EXTRA_TAG" since="11"/>
<field name="EXTRA_TIME" since="11"/>
<field name="IS_EMPTY"/>
@@ -32502,17 +34269,20 @@
<method name="&lt;init>()V"/>
<method name="getDataDirectory()Ljava/io/File;"/>
<method name="getDownloadCacheDirectory()Ljava/io/File;"/>
- <method name="getExternalStorageDirectory()Ljava/io/File;"/>
- <method name="getExternalStoragePublicDirectory(Ljava/lang/String;)Ljava/io/File;" since="8"/>
+ <method name="getExternalStorageDirectory()Ljava/io/File;" deprecated="29"/>
+ <method name="getExternalStoragePublicDirectory(Ljava/lang/String;)Ljava/io/File;" since="8" deprecated="29"/>
<method name="getExternalStorageState()Ljava/lang/String;"/>
<method name="getExternalStorageState(Ljava/io/File;)Ljava/lang/String;" since="21"/>
<method name="getRootDirectory()Ljava/io/File;"/>
<method name="getStorageState(Ljava/io/File;)Ljava/lang/String;" since="19" deprecated="21"/>
<method name="isExternalStorageEmulated()Z" since="11"/>
<method name="isExternalStorageEmulated(Ljava/io/File;)Z" since="21"/>
+ <method name="isExternalStorageLegacy()Z" since="29"/>
+ <method name="isExternalStorageLegacy(Ljava/io/File;)Z" since="29"/>
<method name="isExternalStorageRemovable()Z" since="9"/>
<method name="isExternalStorageRemovable(Ljava/io/File;)Z" since="21"/>
<field name="DIRECTORY_ALARMS" since="8"/>
+ <field name="DIRECTORY_AUDIOBOOKS" since="29"/>
<field name="DIRECTORY_DCIM" since="8"/>
<field name="DIRECTORY_DOCUMENTS" since="19"/>
<field name="DIRECTORY_DOWNLOADS" since="8"/>
@@ -32522,6 +34292,7 @@
<field name="DIRECTORY_PICTURES" since="8"/>
<field name="DIRECTORY_PODCASTS" since="8"/>
<field name="DIRECTORY_RINGTONES" since="8"/>
+ <field name="DIRECTORY_SCREENSHOTS" since="29"/>
<field name="MEDIA_BAD_REMOVAL"/>
<field name="MEDIA_CHECKING" since="3"/>
<field name="MEDIA_EJECTING" since="23"/>
@@ -32536,8 +34307,12 @@
</class>
<class name="android/os/FileObserver" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Ljava/lang/String;)V"/>
- <method name="&lt;init>(Ljava/lang/String;I)V"/>
+ <method name="&lt;init>(Ljava/io/File;)V" since="29"/>
+ <method name="&lt;init>(Ljava/io/File;I)V" since="29"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/lang/String;I)V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/util/List;)V" since="29"/>
+ <method name="&lt;init>(Ljava/util/List;I)V" since="29"/>
<method name="onEvent(ILjava/lang/String;)V"/>
<method name="startWatching()V"/>
<method name="stopWatching()V"/>
@@ -32559,10 +34334,23 @@
<extends name="java/lang/RuntimeException"/>
<method name="&lt;init>(Ljava/lang/String;)V"/>
</class>
+ <class name="android/os/FileUtils" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="closeQuietly(Ljava/io/FileDescriptor;)V" deprecated="30"/>
+ <method name="closeQuietly(Ljava/lang/AutoCloseable;)V" deprecated="30"/>
+ <method name="copy(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;)J"/>
+ <method name="copy(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/os/FileUtils$ProgressListener;)J"/>
+ <method name="copy(Ljava/io/InputStream;Ljava/io/OutputStream;)J"/>
+ <method name="copy(Ljava/io/InputStream;Ljava/io/OutputStream;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/os/FileUtils$ProgressListener;)J"/>
+ </class>
+ <class name="android/os/FileUtils$ProgressListener" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="onProgress(J)V"/>
+ </class>
<class name="android/os/Handler" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Landroid/os/Handler$Callback;)V" since="3"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="&lt;init>(Landroid/os/Handler$Callback;)V" since="3" deprecated="30"/>
<method name="&lt;init>(Landroid/os/Looper;)V"/>
<method name="&lt;init>(Landroid/os/Looper;Landroid/os/Handler$Callback;)V" since="3"/>
<method name="createAsync(Landroid/os/Looper;)Landroid/os/Handler;" since="28"/>
@@ -32572,6 +34360,7 @@
<method name="getLooper()Landroid/os/Looper;"/>
<method name="getMessageName(Landroid/os/Message;)Ljava/lang/String;" since="14"/>
<method name="handleMessage(Landroid/os/Message;)V"/>
+ <method name="hasCallbacks(Ljava/lang/Runnable;)Z" since="29"/>
<method name="hasMessages(I)Z"/>
<method name="hasMessages(ILjava/lang/Object;)Z"/>
<method name="obtainMessage()Landroid/os/Message;"/>
@@ -32614,7 +34403,6 @@
</class>
<class name="android/os/HardwarePropertiesManager" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getCpuUsages()[Landroid/os/CpuUsageInfo;"/>
<method name="getDeviceTemperatures(II)[F"/>
<method name="getFanSpeeds()[F"/>
@@ -32668,6 +34456,7 @@
<method name="getFirstMatch([Ljava/lang/String;)Ljava/util/Locale;"/>
<method name="indexOf(Ljava/util/Locale;)I"/>
<method name="isEmpty()Z"/>
+ <method name="isPseudoLocale(Landroid/icu/util/ULocale;)Z" since="29"/>
<method name="setDefault(Landroid/os/LocaleList;)V"/>
<method name="size()I"/>
<method name="toLanguageTags()Ljava/lang/String;"/>
@@ -32675,8 +34464,6 @@
</class>
<class name="android/os/Looper" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Z)V" since="29"/>
<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
<method name="getMainLooper()Landroid/os/Looper;"/>
<method name="getQueue()Landroid/os/MessageQueue;" since="23"/>
@@ -32686,7 +34473,7 @@
<method name="myLooper()Landroid/os/Looper;"/>
<method name="myQueue()Landroid/os/MessageQueue;"/>
<method name="prepare()V"/>
- <method name="prepareMainLooper()V"/>
+ <method name="prepareMainLooper()V" deprecated="30"/>
<method name="quit()V"/>
<method name="quitSafely()V" since="18"/>
<method name="setMessageLogging(Landroid/util/Printer;)V"/>
@@ -32737,8 +34524,6 @@
</class>
<class name="android/os/MessageQueue" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Z)V" since="29"/>
<method name="addIdleHandler(Landroid/os/MessageQueue$IdleHandler;)V"/>
<method name="addOnFileDescriptorEventListener(Ljava/io/FileDescriptor;ILandroid/os/MessageQueue$OnFileDescriptorEventListener;)V" since="23"/>
<method name="isIdle()Z" since="23"/>
@@ -32778,8 +34563,6 @@
</class>
<class name="android/os/Parcel" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(J)V" since="29"/>
<method name="appendFrom(Landroid/os/Parcel;II)V"/>
<method name="createBinderArray()[Landroid/os/IBinder;"/>
<method name="createBinderArrayList()Ljava/util/ArrayList;"/>
@@ -32794,6 +34577,8 @@
<method name="createStringArrayList()Ljava/util/ArrayList;"/>
<method name="createTypedArray(Landroid/os/Parcelable$Creator;)[Ljava/lang/Object;"/>
<method name="createTypedArrayList(Landroid/os/Parcelable$Creator;)Ljava/util/ArrayList;"/>
+ <method name="createTypedArrayMap(Landroid/os/Parcelable$Creator;)Landroid/util/ArrayMap;" since="29"/>
+ <method name="createTypedSparseArray(Landroid/os/Parcelable$Creator;)Landroid/util/SparseArray;" since="29"/>
<method name="dataAvail()I"/>
<method name="dataCapacity()I"/>
<method name="dataPosition()I"/>
@@ -32807,6 +34592,7 @@
<method name="readArrayList(Ljava/lang/ClassLoader;)Ljava/util/ArrayList;"/>
<method name="readBinderArray([Landroid/os/IBinder;)V"/>
<method name="readBinderList(Ljava/util/List;)V"/>
+ <method name="readBoolean()Z" since="29"/>
<method name="readBooleanArray([Z)V"/>
<method name="readBundle()Landroid/os/Bundle;"/>
<method name="readBundle(Ljava/lang/ClassLoader;)Landroid/os/Bundle;"/>
@@ -32829,6 +34615,7 @@
<method name="readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V"/>
<method name="readParcelable(Ljava/lang/ClassLoader;)Landroid/os/Parcelable;"/>
<method name="readParcelableArray(Ljava/lang/ClassLoader;)[Landroid/os/Parcelable;"/>
+ <method name="readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List;" since="29"/>
<method name="readPersistableBundle()Landroid/os/PersistableBundle;" since="21"/>
<method name="readPersistableBundle(Ljava/lang/ClassLoader;)Landroid/os/PersistableBundle;" since="21"/>
<method name="readSerializable()Ljava/io/Serializable;"/>
@@ -32852,6 +34639,7 @@
<method name="writeArray([Ljava/lang/Object;)V"/>
<method name="writeBinderArray([Landroid/os/IBinder;)V"/>
<method name="writeBinderList(Ljava/util/List;)V"/>
+ <method name="writeBoolean(Z)V" since="29"/>
<method name="writeBooleanArray([Z)V"/>
<method name="writeBundle(Landroid/os/Bundle;)V"/>
<method name="writeByte(B)V"/>
@@ -32874,6 +34662,7 @@
<method name="writeNoException()V"/>
<method name="writeParcelable(Landroid/os/Parcelable;I)V"/>
<method name="writeParcelableArray([Landroid/os/Parcelable;I)V"/>
+ <method name="writeParcelableList(Ljava/util/List;I)V" since="29"/>
<method name="writePersistableBundle(Landroid/os/PersistableBundle;)V" since="21"/>
<method name="writeSerializable(Ljava/io/Serializable;)V"/>
<method name="writeSize(Landroid/util/Size;)V" since="21"/>
@@ -32886,8 +34675,10 @@
<method name="writeStrongBinder(Landroid/os/IBinder;)V"/>
<method name="writeStrongInterface(Landroid/os/IInterface;)V"/>
<method name="writeTypedArray([Landroid/os/Parcelable;I)V"/>
+ <method name="writeTypedArrayMap(Landroid/util/ArrayMap;I)V" since="29"/>
<method name="writeTypedList(Ljava/util/List;)V"/>
<method name="writeTypedObject(Landroid/os/Parcelable;I)V" since="23"/>
+ <method name="writeTypedSparseArray(Landroid/util/SparseArray;I)V" since="29"/>
<method name="writeValue(Ljava/lang/Object;)V"/>
<field name="STRING_CREATOR"/>
</class>
@@ -32997,23 +34788,29 @@
<method name="deepCopy()Landroid/os/PersistableBundle;" since="26"/>
<method name="getPersistableBundle(Ljava/lang/String;)Landroid/os/PersistableBundle;"/>
<method name="putPersistableBundle(Ljava/lang/String;Landroid/os/PersistableBundle;)V"/>
+ <method name="readFromStream(Ljava/io/InputStream;)Landroid/os/PersistableBundle;" since="30"/>
+ <method name="writeToStream(Ljava/io/OutputStream;)V" since="30"/>
<field name="CREATOR"/>
<field name="EMPTY"/>
</class>
<class name="android/os/PowerManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="addThermalStatusListener(Landroid/os/PowerManager$OnThermalStatusChangedListener;)V" since="29"/>
+ <method name="addThermalStatusListener(Ljava/util/concurrent/Executor;Landroid/os/PowerManager$OnThermalStatusChangedListener;)V" since="29"/>
+ <method name="getCurrentThermalStatus()I" since="29"/>
<method name="getLocationPowerSaveMode()I" since="28"/>
<method name="goToSleep(J)V" removed="21"/>
<method name="isDeviceIdleMode()Z" since="23"/>
<method name="isIgnoringBatteryOptimizations(Ljava/lang/String;)Z" since="23"/>
<method name="isInteractive()Z" since="20"/>
<method name="isPowerSaveMode()Z" since="21"/>
+ <method name="isRebootingUserspaceSupported()Z" since="30"/>
<method name="isScreenOn()Z" since="7" deprecated="20"/>
<method name="isSustainedPerformanceModeSupported()Z" since="24"/>
<method name="isWakeLockLevelSupported(I)Z" since="21"/>
<method name="newWakeLock(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;"/>
<method name="reboot(Ljava/lang/String;)V" since="8"/>
+ <method name="removeThermalStatusListener(Landroid/os/PowerManager$OnThermalStatusChangedListener;)V" since="29"/>
<method name="userActivity(JZ)V" removed="21"/>
<method name="wakeUp(J)V" since="17" removed="21"/>
<field name="ACQUIRE_CAUSES_WAKEUP"/>
@@ -33024,17 +34821,27 @@
<field name="LOCATION_MODE_FOREGROUND_ONLY" since="28"/>
<field name="LOCATION_MODE_GPS_DISABLED_WHEN_SCREEN_OFF" since="28"/>
<field name="LOCATION_MODE_NO_CHANGE" since="28"/>
+ <field name="LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF" since="29"/>
<field name="ON_AFTER_RELEASE"/>
<field name="PARTIAL_WAKE_LOCK"/>
<field name="PROXIMITY_SCREEN_OFF_WAKE_LOCK" since="21"/>
<field name="RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY" since="21"/>
- <field name="SCREEN_BRIGHT_WAKE_LOCK" deprecated="16"/>
+ <field name="SCREEN_BRIGHT_WAKE_LOCK" deprecated="15"/>
<field name="SCREEN_DIM_WAKE_LOCK" deprecated="17"/>
+ <field name="THERMAL_STATUS_CRITICAL" since="29"/>
+ <field name="THERMAL_STATUS_EMERGENCY" since="29"/>
+ <field name="THERMAL_STATUS_LIGHT" since="29"/>
+ <field name="THERMAL_STATUS_MODERATE" since="29"/>
+ <field name="THERMAL_STATUS_NONE" since="29"/>
+ <field name="THERMAL_STATUS_SEVERE" since="29"/>
+ <field name="THERMAL_STATUS_SHUTDOWN" since="29"/>
+ </class>
+ <class name="android/os/PowerManager$OnThermalStatusChangedListener" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="onThermalStatusChanged(I)V"/>
</class>
<class name="android/os/PowerManager$WakeLock" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/os/PowerManager;)V" removed="29"/>
- <method name="&lt;init>(Landroid/os/PowerManager;ILjava/lang/String;Ljava/lang/String;)V" since="29"/>
<method name="acquire()V"/>
<method name="acquire(J)V"/>
<method name="isHeld()Z"/>
@@ -33064,11 +34871,15 @@
<method name="sendSignal(II)V"/>
<method name="setThreadPriority(I)V"/>
<method name="setThreadPriority(II)V"/>
- <method name="supportsProcesses()Z" deprecated="16"/>
+ <method name="supportsProcesses()Z" deprecated="15"/>
<field name="BLUETOOTH_GID" removed="18"/>
+ <field name="BLUETOOTH_UID" since="29"/>
<field name="FIRST_APPLICATION_UID"/>
+ <field name="INVALID_UID" since="29"/>
<field name="LAST_APPLICATION_UID"/>
<field name="PHONE_UID"/>
+ <field name="ROOT_UID" since="29"/>
+ <field name="SHELL_UID" since="29"/>
<field name="SIGNAL_KILL"/>
<field name="SIGNAL_QUIT"/>
<field name="SIGNAL_USR1"/>
@@ -33096,7 +34907,7 @@
</class>
<class name="android/os/RecoverySystem" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" removed="23"/>
<method name="installPackage(Landroid/content/Context;Ljava/io/File;)V"/>
<method name="rebootWipeCache(Landroid/content/Context;)V" since="14"/>
<method name="rebootWipeUserData(Landroid/content/Context;)V"/>
@@ -33140,8 +34951,6 @@
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
<implements name="java/io/Closeable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/io/FileDescriptor;)V" since="29"/>
<method name="create(Ljava/lang/String;I)Landroid/os/SharedMemory;"/>
<method name="getSize()I"/>
<method name="map(III)Ljava/nio/ByteBuffer;"/>
@@ -33169,7 +34978,6 @@
</class>
<class name="android/os/StrictMode" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="allowThreadDiskReads()Landroid/os/StrictMode$ThreadPolicy;"/>
<method name="allowThreadDiskWrites()Landroid/os/StrictMode$ThreadPolicy;"/>
<method name="enableDefaults()V"/>
@@ -33189,8 +34997,6 @@
</class>
<class name="android/os/StrictMode$ThreadPolicy" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILandroid/os/StrictMode$OnThreadViolationListener;Ljava/util/concurrent/Executor;)V" since="29"/>
<field name="LAX"/>
</class>
<class name="android/os/StrictMode$ThreadPolicy$Builder" since="9">
@@ -33222,8 +35028,6 @@
</class>
<class name="android/os/StrictMode$VmPolicy" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILjava/util/HashMap;Landroid/os/StrictMode$OnVmViolationListener;Ljava/util/concurrent/Executor;)V" since="29"/>
<field name="LAX"/>
</class>
<class name="android/os/StrictMode$VmPolicy$Builder" since="9">
@@ -33235,7 +35039,9 @@
<method name="detectAll()Landroid/os/StrictMode$VmPolicy$Builder;"/>
<method name="detectCleartextNetwork()Landroid/os/StrictMode$VmPolicy$Builder;" since="23"/>
<method name="detectContentUriWithoutPermission()Landroid/os/StrictMode$VmPolicy$Builder;" since="26"/>
+ <method name="detectCredentialProtectedWhileLocked()Landroid/os/StrictMode$VmPolicy$Builder;" since="29"/>
<method name="detectFileUriExposure()Landroid/os/StrictMode$VmPolicy$Builder;" since="18"/>
+ <method name="detectImplicitDirectBoot()Landroid/os/StrictMode$VmPolicy$Builder;" since="29"/>
<method name="detectLeakedClosableObjects()Landroid/os/StrictMode$VmPolicy$Builder;" since="11"/>
<method name="detectLeakedRegistrationObjects()Landroid/os/StrictMode$VmPolicy$Builder;" since="16"/>
<method name="detectLeakedSqlLiteObjects()Landroid/os/StrictMode$VmPolicy$Builder;"/>
@@ -33252,7 +35058,7 @@
</class>
<class name="android/os/SystemClock" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="currentGnssTimeClock()Ljava/time/Clock;" since="29"/>
<method name="currentThreadTimeMillis()J"/>
<method name="elapsedRealtime()J"/>
<method name="elapsedRealtimeNanos()J" since="17"/>
@@ -33262,8 +35068,6 @@
</class>
<class name="android/os/TestLooperManager" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Looper;)V" since="29"/>
<method name="execute(Landroid/os/Message;)V"/>
<method name="getMessageQueue()Landroid/os/MessageQueue;"/>
<method name="hasMessages(Landroid/os/Handler;Ljava/lang/Object;I)Z"/>
@@ -33286,9 +35090,12 @@
</class>
<class name="android/os/Trace" since="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="beginAsyncSection(Ljava/lang/String;I)V" since="29"/>
<method name="beginSection(Ljava/lang/String;)V"/>
+ <method name="endAsyncSection(Ljava/lang/String;I)V" since="29"/>
<method name="endSection()V"/>
+ <method name="isEnabled()Z" since="29"/>
+ <method name="setCounter(Ljava/lang/String;J)V" since="29"/>
</class>
<class name="android/os/TransactionTooLargeException" since="15">
<extends name="android/os/RemoteException"/>
@@ -33306,7 +35113,6 @@
</class>
<class name="android/os/UserManager" since="17">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="createUserCreationIntent(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;)Landroid/content/Intent;" since="24"/>
<method name="getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;" since="18"/>
<method name="getSerialNumberForUser(Landroid/os/UserHandle;)J"/>
@@ -33350,10 +35156,13 @@
<field name="DISALLOW_CONFIG_LOCALE" since="28"/>
<field name="DISALLOW_CONFIG_LOCATION" since="28"/>
<field name="DISALLOW_CONFIG_MOBILE_NETWORKS" since="21"/>
+ <field name="DISALLOW_CONFIG_PRIVATE_DNS" since="29"/>
<field name="DISALLOW_CONFIG_SCREEN_TIMEOUT" since="28"/>
<field name="DISALLOW_CONFIG_TETHERING" since="21"/>
<field name="DISALLOW_CONFIG_VPN" since="21"/>
<field name="DISALLOW_CONFIG_WIFI" since="18"/>
+ <field name="DISALLOW_CONTENT_CAPTURE" since="29"/>
+ <field name="DISALLOW_CONTENT_SUGGESTIONS" since="29"/>
<field name="DISALLOW_CREATE_WINDOWS" since="21"/>
<field name="DISALLOW_CROSS_PROFILE_COPY_PASTE" since="21"/>
<field name="DISALLOW_DATA_ROAMING" since="24"/>
@@ -33362,6 +35171,7 @@
<field name="DISALLOW_FUN" since="23"/>
<field name="DISALLOW_INSTALL_APPS" since="18"/>
<field name="DISALLOW_INSTALL_UNKNOWN_SOURCES" since="18"/>
+ <field name="DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY" since="29"/>
<field name="DISALLOW_MODIFY_ACCOUNTS" since="18"/>
<field name="DISALLOW_MOUNT_PHYSICAL_MEDIA" since="21"/>
<field name="DISALLOW_NETWORK_RESET" since="23"/>
@@ -33396,23 +35206,24 @@
</class>
<class name="android/os/UserManager$UserOperationException" since="28">
<extends name="java/lang/RuntimeException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;I)V" since="29"/>
<method name="getUserOperationResult()I"/>
</class>
<class name="android/os/VibrationEffect" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="createOneShot(JI)Landroid/os/VibrationEffect;"/>
+ <method name="createPredefined(I)Landroid/os/VibrationEffect;" since="29"/>
<method name="createWaveform([JI)Landroid/os/VibrationEffect;"/>
<method name="createWaveform([J[II)Landroid/os/VibrationEffect;"/>
<field name="CREATOR"/>
<field name="DEFAULT_AMPLITUDE"/>
+ <field name="EFFECT_CLICK" since="29"/>
+ <field name="EFFECT_DOUBLE_CLICK" since="29"/>
+ <field name="EFFECT_HEAVY_CLICK" since="29"/>
+ <field name="EFFECT_TICK" since="29"/>
</class>
<class name="android/os/Vibrator" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="cancel()V"/>
<method name="hasAmplitudeControl()Z" since="26"/>
<method name="hasVibrator()Z" since="11"/>
@@ -33437,7 +35248,6 @@
</class>
<class name="android/os/health/HealthStats" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getDataType()Ljava/lang/String;"/>
<method name="getMeasurement(I)J"/>
<method name="getMeasurementKeyAt(I)I"/>
@@ -33464,20 +35274,17 @@
</class>
<class name="android/os/health/PackageHealthStats" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="MEASUREMENTS_WAKEUP_ALARMS_COUNT"/>
<field name="STATS_SERVICES"/>
</class>
<class name="android/os/health/PidHealthStats" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="MEASUREMENT_WAKE_NESTING_COUNT"/>
<field name="MEASUREMENT_WAKE_START_MS"/>
<field name="MEASUREMENT_WAKE_SUM_MS"/>
</class>
<class name="android/os/health/ProcessHealthStats" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="MEASUREMENT_ANR_COUNT"/>
<field name="MEASUREMENT_CRASHES_COUNT"/>
<field name="MEASUREMENT_FOREGROUND_MS"/>
@@ -33487,13 +35294,11 @@
</class>
<class name="android/os/health/ServiceHealthStats" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="MEASUREMENT_LAUNCH_COUNT"/>
<field name="MEASUREMENT_START_SERVICE_COUNT"/>
</class>
<class name="android/os/health/SystemHealthManager" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="takeMyUidSnapshot()Landroid/os/health/HealthStats;"/>
<method name="takeUidSnapshot(I)Landroid/os/health/HealthStats;"/>
<method name="takeUidSnapshots([I)[Landroid/os/health/HealthStats;"/>
@@ -33512,7 +35317,6 @@
</class>
<class name="android/os/health/UidHealthStats" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="MEASUREMENT_BLUETOOTH_IDLE_MS"/>
<field name="MEASUREMENT_BLUETOOTH_POWER_MAMS"/>
<field name="MEASUREMENT_BLUETOOTH_RX_BYTES"/>
@@ -33592,7 +35396,6 @@
</class>
<class name="android/os/storage/StorageManager" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="allocateBytes(Ljava/io/FileDescriptor;J)V" since="26"/>
<method name="allocateBytes(Ljava/util/UUID;J)V" since="26"/>
<method name="getAllocatableBytes(Ljava/util/UUID;)J" since="26"/>
@@ -33600,12 +35403,14 @@
<method name="getCacheSizeBytes(Ljava/util/UUID;)J" since="26"/>
<method name="getMountedObbPath(Ljava/lang/String;)Ljava/lang/String;"/>
<method name="getPrimaryStorageVolume()Landroid/os/storage/StorageVolume;" since="24"/>
+ <method name="getStorageVolume(Landroid/net/Uri;)Landroid/os/storage/StorageVolume;" since="29"/>
<method name="getStorageVolume(Ljava/io/File;)Landroid/os/storage/StorageVolume;" since="24"/>
<method name="getStorageVolumes()Ljava/util/List;" since="24"/>
<method name="getUuidForPath(Ljava/io/File;)Ljava/util/UUID;" since="26"/>
<method name="isAllocationSupported(Ljava/io/FileDescriptor;)Z" since="27"/>
<method name="isCacheBehaviorGroup(Ljava/io/File;)Z" since="26"/>
<method name="isCacheBehaviorTombstone(Ljava/io/File;)Z" since="26"/>
+ <method name="isCheckpointSupported()Z" since="30"/>
<method name="isEncrypted(Ljava/io/File;)Z" since="24"/>
<method name="isObbMounted(Ljava/lang/String;)Z"/>
<method name="mountObb(Ljava/lang/String;Ljava/lang/String;Landroid/os/storage/OnObbStateChangeListener;)Z"/>
@@ -33621,9 +35426,8 @@
<class name="android/os/storage/StorageVolume" since="24">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
- <method name="createAccessIntent(Ljava/lang/String;)Landroid/content/Intent;"/>
+ <method name="createAccessIntent(Ljava/lang/String;)Landroid/content/Intent;" deprecated="29"/>
+ <method name="createOpenDocumentTreeIntent()Landroid/content/Intent;" since="29"/>
<method name="getDescription(Landroid/content/Context;)Ljava/lang/String;"/>
<method name="getState()Ljava/lang/String;"/>
<method name="getUuid()Ljava/lang/String;"/>
@@ -33635,97 +35439,72 @@
</class>
<class name="android/os/strictmode/CleartextNetworkViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
</class>
<class name="android/os/strictmode/ContentUriWithoutPermissionViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/net/Uri;Ljava/lang/String;)V" since="29"/>
+ </class>
+ <class name="android/os/strictmode/CredentialProtectedWhileLockedViolation" since="29">
+ <extends name="android/os/strictmode/Violation"/>
</class>
<class name="android/os/strictmode/CustomViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
</class>
<class name="android/os/strictmode/DiskReadViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/os/strictmode/DiskWriteViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/os/strictmode/FileUriExposedViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
+ </class>
+ <class name="android/os/strictmode/ImplicitDirectBootViolation" since="29">
+ <extends name="android/os/strictmode/Violation"/>
</class>
<class name="android/os/strictmode/InstanceCountViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/Class;JI)V" since="29"/>
<method name="getNumberOfInstances()J"/>
</class>
<class name="android/os/strictmode/IntentReceiverLeakedViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/Throwable;)V" since="29"/>
</class>
<class name="android/os/strictmode/LeakedClosableViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="29"/>
</class>
<class name="android/os/strictmode/NetworkViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/os/strictmode/NonSdkApiUsedViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
</class>
<class name="android/os/strictmode/ResourceMismatchViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/Object;)V" since="29"/>
</class>
<class name="android/os/strictmode/ServiceConnectionLeakedViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/Throwable;)V" since="29"/>
</class>
<class name="android/os/strictmode/SqliteObjectLeakedViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="29"/>
</class>
<class name="android/os/strictmode/UnbufferedIoViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/os/strictmode/UntaggedSocketViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/os/strictmode/Violation" since="28">
<extends name="java/lang/Throwable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
</class>
<class name="android/os/strictmode/WebViewMethodCalledOnWrongThreadViolation" since="28">
<extends name="android/os/strictmode/Violation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/Throwable;)V" since="29"/>
</class>
- <class name="android/preference/CheckBoxPreference" since="1">
+ <class name="android/preference/CheckBoxPreference" since="1" deprecated="29">
<extends name="android/preference/Preference" removed="14"/>
<extends name="android/preference/TwoStatePreference" since="14"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
<method name="getDisableDependentsState()Z" removed="14"/>
<method name="getSummaryOff()Ljava/lang/CharSequence;" removed="14"/>
<method name="getSummaryOn()Ljava/lang/CharSequence;" removed="14"/>
@@ -33737,410 +35516,406 @@
<method name="setSummaryOn(I)V" removed="14"/>
<method name="setSummaryOn(Ljava/lang/CharSequence;)V" removed="14"/>
</class>
- <class name="android/preference/DialogPreference" since="1">
+ <class name="android/preference/DialogPreference" since="1" deprecated="29">
<extends name="android/preference/Preference"/>
<implements name="android/content/DialogInterface$OnClickListener"/>
<implements name="android/content/DialogInterface$OnDismissListener"/>
<implements name="android/preference/PreferenceManager$OnActivityDestroyListener"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="21"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="getDialog()Landroid/app/Dialog;" since="3"/>
- <method name="getDialogIcon()Landroid/graphics/drawable/Drawable;"/>
- <method name="getDialogLayoutResource()I"/>
- <method name="getDialogMessage()Ljava/lang/CharSequence;"/>
- <method name="getDialogTitle()Ljava/lang/CharSequence;"/>
- <method name="getNegativeButtonText()Ljava/lang/CharSequence;"/>
- <method name="getPositiveButtonText()Ljava/lang/CharSequence;"/>
- <method name="onBindDialogView(Landroid/view/View;)V"/>
- <method name="onCreateDialogView()Landroid/view/View;"/>
- <method name="onDialogClosed(Z)V"/>
- <method name="onPrepareDialogBuilder(Landroid/app/AlertDialog$Builder;)V"/>
- <method name="setDialogIcon(I)V"/>
- <method name="setDialogIcon(Landroid/graphics/drawable/Drawable;)V"/>
- <method name="setDialogLayoutResource(I)V"/>
- <method name="setDialogMessage(I)V"/>
- <method name="setDialogMessage(Ljava/lang/CharSequence;)V"/>
- <method name="setDialogTitle(I)V"/>
- <method name="setDialogTitle(Ljava/lang/CharSequence;)V"/>
- <method name="setNegativeButtonText(I)V"/>
- <method name="setNegativeButtonText(Ljava/lang/CharSequence;)V"/>
- <method name="setPositiveButtonText(I)V"/>
- <method name="setPositiveButtonText(Ljava/lang/CharSequence;)V"/>
- <method name="showDialog(Landroid/os/Bundle;)V"/>
- </class>
- <class name="android/preference/EditTextPreference" since="1">
+ <method name="&lt;init>(Landroid/content/Context;)V" since="21" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="getDialog()Landroid/app/Dialog;" since="3" deprecated="29"/>
+ <method name="getDialogIcon()Landroid/graphics/drawable/Drawable;" deprecated="29"/>
+ <method name="getDialogLayoutResource()I" deprecated="29"/>
+ <method name="getDialogMessage()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getDialogTitle()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getNegativeButtonText()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getPositiveButtonText()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="onBindDialogView(Landroid/view/View;)V" deprecated="29"/>
+ <method name="onCreateDialogView()Landroid/view/View;" deprecated="29"/>
+ <method name="onDialogClosed(Z)V" deprecated="29"/>
+ <method name="onPrepareDialogBuilder(Landroid/app/AlertDialog$Builder;)V" deprecated="29"/>
+ <method name="setDialogIcon(I)V" deprecated="29"/>
+ <method name="setDialogIcon(Landroid/graphics/drawable/Drawable;)V" deprecated="29"/>
+ <method name="setDialogLayoutResource(I)V" deprecated="29"/>
+ <method name="setDialogMessage(I)V" deprecated="29"/>
+ <method name="setDialogMessage(Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="setDialogTitle(I)V" deprecated="29"/>
+ <method name="setDialogTitle(Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="setNegativeButtonText(I)V" deprecated="29"/>
+ <method name="setNegativeButtonText(Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="setPositiveButtonText(I)V" deprecated="29"/>
+ <method name="setPositiveButtonText(Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="showDialog(Landroid/os/Bundle;)V" deprecated="29"/>
+ </class>
+ <class name="android/preference/EditTextPreference" since="1" deprecated="29">
<extends name="android/preference/DialogPreference"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="getEditText()Landroid/widget/EditText;"/>
- <method name="getText()Ljava/lang/String;"/>
- <method name="onAddEditTextToDialogView(Landroid/view/View;Landroid/widget/EditText;)V"/>
- <method name="setText(Ljava/lang/String;)V"/>
- </class>
- <class name="android/preference/ListPreference" since="1">
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="getEditText()Landroid/widget/EditText;" deprecated="29"/>
+ <method name="getText()Ljava/lang/String;" deprecated="29"/>
+ <method name="onAddEditTextToDialogView(Landroid/view/View;Landroid/widget/EditText;)V" deprecated="29"/>
+ <method name="setText(Ljava/lang/String;)V" deprecated="29"/>
+ </class>
+ <class name="android/preference/ListPreference" since="1" deprecated="29">
<extends name="android/preference/DialogPreference"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="findIndexOfValue(Ljava/lang/String;)I"/>
- <method name="getEntries()[Ljava/lang/CharSequence;"/>
- <method name="getEntry()Ljava/lang/CharSequence;"/>
- <method name="getEntryValues()[Ljava/lang/CharSequence;"/>
- <method name="getValue()Ljava/lang/String;"/>
- <method name="setEntries(I)V"/>
- <method name="setEntries([Ljava/lang/CharSequence;)V"/>
- <method name="setEntryValues(I)V"/>
- <method name="setEntryValues([Ljava/lang/CharSequence;)V"/>
- <method name="setValue(Ljava/lang/String;)V"/>
- <method name="setValueIndex(I)V"/>
- </class>
- <class name="android/preference/MultiSelectListPreference" since="11">
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="findIndexOfValue(Ljava/lang/String;)I" deprecated="29"/>
+ <method name="getEntries()[Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getEntry()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getEntryValues()[Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getValue()Ljava/lang/String;" deprecated="29"/>
+ <method name="setEntries(I)V" deprecated="29"/>
+ <method name="setEntries([Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="setEntryValues(I)V" deprecated="29"/>
+ <method name="setEntryValues([Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="setValue(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="setValueIndex(I)V" deprecated="29"/>
+ </class>
+ <class name="android/preference/MultiSelectListPreference" since="11" deprecated="29">
<extends name="android/preference/DialogPreference"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="findIndexOfValue(Ljava/lang/String;)I"/>
- <method name="getEntries()[Ljava/lang/CharSequence;"/>
- <method name="getEntryValues()[Ljava/lang/CharSequence;"/>
- <method name="getValues()Ljava/util/Set;"/>
- <method name="setEntries(I)V"/>
- <method name="setEntries([Ljava/lang/CharSequence;)V"/>
- <method name="setEntryValues(I)V"/>
- <method name="setEntryValues([Ljava/lang/CharSequence;)V"/>
- <method name="setValues(Ljava/util/Set;)V"/>
- </class>
- <class name="android/preference/Preference" since="1">
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="findIndexOfValue(Ljava/lang/String;)I" deprecated="29"/>
+ <method name="getEntries()[Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getEntryValues()[Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getValues()Ljava/util/Set;" deprecated="29"/>
+ <method name="setEntries(I)V" deprecated="29"/>
+ <method name="setEntries([Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="setEntryValues(I)V" deprecated="29"/>
+ <method name="setEntryValues([Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="setValues(Ljava/util/Set;)V" deprecated="29"/>
+ </class>
+ <class name="android/preference/Preference" since="1" deprecated="29">
<extends name="java/lang/Object"/>
<implements name="java/lang/Comparable"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="callChangeListener(Ljava/lang/Object;)Z"/>
- <method name="compareTo(Landroid/preference/Preference;)I"/>
- <method name="findPreferenceInHierarchy(Ljava/lang/String;)Landroid/preference/Preference;"/>
- <method name="getContext()Landroid/content/Context;"/>
- <method name="getDependency()Ljava/lang/String;"/>
- <method name="getEditor()Landroid/content/SharedPreferences$Editor;"/>
- <method name="getExtras()Landroid/os/Bundle;" since="11"/>
- <method name="getFragment()Ljava/lang/String;" since="11"/>
- <method name="getIcon()Landroid/graphics/drawable/Drawable;" since="11"/>
- <method name="getIntent()Landroid/content/Intent;"/>
- <method name="getKey()Ljava/lang/String;"/>
- <method name="getLayoutResource()I"/>
- <method name="getOnPreferenceChangeListener()Landroid/preference/Preference$OnPreferenceChangeListener;"/>
- <method name="getOnPreferenceClickListener()Landroid/preference/Preference$OnPreferenceClickListener;"/>
- <method name="getOrder()I"/>
- <method name="getParent()Landroid/preference/PreferenceGroup;" since="26"/>
- <method name="getPersistedBoolean(Z)Z"/>
- <method name="getPersistedFloat(F)F"/>
- <method name="getPersistedInt(I)I"/>
- <method name="getPersistedLong(J)J"/>
- <method name="getPersistedString(Ljava/lang/String;)Ljava/lang/String;"/>
- <method name="getPersistedStringSet(Ljava/util/Set;)Ljava/util/Set;" since="24"/>
- <method name="getPreferenceDataStore()Landroid/preference/PreferenceDataStore;" since="26"/>
- <method name="getPreferenceManager()Landroid/preference/PreferenceManager;"/>
- <method name="getSharedPreferences()Landroid/content/SharedPreferences;"/>
- <method name="getShouldDisableView()Z"/>
- <method name="getSummary()Ljava/lang/CharSequence;"/>
- <method name="getTitle()Ljava/lang/CharSequence;"/>
- <method name="getTitleRes()I" since="14"/>
- <method name="getView(Landroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;"/>
- <method name="getWidgetLayoutResource()I"/>
- <method name="hasKey()Z"/>
- <method name="isEnabled()Z"/>
- <method name="isIconSpaceReserved()Z" since="26"/>
- <method name="isPersistent()Z"/>
- <method name="isRecycleEnabled()Z" since="26"/>
- <method name="isSelectable()Z"/>
- <method name="isSingleLineTitle()Z" since="26"/>
- <method name="notifyChanged()V"/>
- <method name="notifyDependencyChange(Z)V"/>
- <method name="notifyHierarchyChanged()V"/>
- <method name="onAttachedToActivity()V"/>
- <method name="onAttachedToHierarchy(Landroid/preference/PreferenceManager;)V"/>
- <method name="onBindView(Landroid/view/View;)V"/>
- <method name="onClick()V"/>
- <method name="onCreateView(Landroid/view/ViewGroup;)Landroid/view/View;"/>
- <method name="onDependencyChanged(Landroid/preference/Preference;Z)V"/>
- <method name="onGetDefaultValue(Landroid/content/res/TypedArray;I)Ljava/lang/Object;"/>
- <method name="onParentChanged(Landroid/preference/Preference;Z)V" since="19"/>
- <method name="onPrepareForRemoval()V"/>
- <method name="onRestoreInstanceState(Landroid/os/Parcelable;)V"/>
- <method name="onSaveInstanceState()Landroid/os/Parcelable;"/>
- <method name="onSetInitialValue(ZLjava/lang/Object;)V"/>
- <method name="peekExtras()Landroid/os/Bundle;" since="11"/>
- <method name="persistBoolean(Z)Z"/>
- <method name="persistFloat(F)Z"/>
- <method name="persistInt(I)Z"/>
- <method name="persistLong(J)Z"/>
- <method name="persistString(Ljava/lang/String;)Z"/>
- <method name="persistStringSet(Ljava/util/Set;)Z" since="24"/>
- <method name="restoreHierarchyState(Landroid/os/Bundle;)V"/>
- <method name="saveHierarchyState(Landroid/os/Bundle;)V"/>
- <method name="setDefaultValue(Ljava/lang/Object;)V"/>
- <method name="setDependency(Ljava/lang/String;)V"/>
- <method name="setEnabled(Z)V"/>
- <method name="setFragment(Ljava/lang/String;)V" since="11"/>
- <method name="setIcon(I)V" since="11"/>
- <method name="setIcon(Landroid/graphics/drawable/Drawable;)V" since="11"/>
- <method name="setIconSpaceReserved(Z)V" since="26"/>
- <method name="setIntent(Landroid/content/Intent;)V"/>
- <method name="setKey(Ljava/lang/String;)V"/>
- <method name="setLayoutResource(I)V"/>
- <method name="setOnPreferenceChangeListener(Landroid/preference/Preference$OnPreferenceChangeListener;)V"/>
- <method name="setOnPreferenceClickListener(Landroid/preference/Preference$OnPreferenceClickListener;)V"/>
- <method name="setOrder(I)V"/>
- <method name="setPersistent(Z)V"/>
- <method name="setPreferenceDataStore(Landroid/preference/PreferenceDataStore;)V" since="26"/>
- <method name="setRecycleEnabled(Z)V" since="26"/>
- <method name="setSelectable(Z)V"/>
- <method name="setShouldDisableView(Z)V"/>
- <method name="setSingleLineTitle(Z)V" since="26"/>
- <method name="setSummary(I)V"/>
- <method name="setSummary(Ljava/lang/CharSequence;)V"/>
- <method name="setTitle(I)V"/>
- <method name="setTitle(Ljava/lang/CharSequence;)V"/>
- <method name="setWidgetLayoutResource(I)V"/>
- <method name="shouldCommit()Z"/>
- <method name="shouldDisableDependents()Z"/>
- <method name="shouldPersist()Z"/>
- <field name="DEFAULT_ORDER"/>
- </class>
- <class name="android/preference/Preference$BaseSavedState" since="1">
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="callChangeListener(Ljava/lang/Object;)Z" deprecated="29"/>
+ <method name="compareTo(Landroid/preference/Preference;)I" deprecated="29"/>
+ <method name="findPreferenceInHierarchy(Ljava/lang/String;)Landroid/preference/Preference;" deprecated="29"/>
+ <method name="getContext()Landroid/content/Context;" deprecated="29"/>
+ <method name="getDependency()Ljava/lang/String;" deprecated="29"/>
+ <method name="getEditor()Landroid/content/SharedPreferences$Editor;" deprecated="29"/>
+ <method name="getExtras()Landroid/os/Bundle;" since="11" deprecated="29"/>
+ <method name="getFragment()Ljava/lang/String;" since="11" deprecated="29"/>
+ <method name="getIcon()Landroid/graphics/drawable/Drawable;" since="11" deprecated="29"/>
+ <method name="getIntent()Landroid/content/Intent;" deprecated="29"/>
+ <method name="getKey()Ljava/lang/String;" deprecated="29"/>
+ <method name="getLayoutResource()I" deprecated="29"/>
+ <method name="getOnPreferenceChangeListener()Landroid/preference/Preference$OnPreferenceChangeListener;" deprecated="29"/>
+ <method name="getOnPreferenceClickListener()Landroid/preference/Preference$OnPreferenceClickListener;" deprecated="29"/>
+ <method name="getOrder()I" deprecated="29"/>
+ <method name="getParent()Landroid/preference/PreferenceGroup;" since="26" deprecated="29"/>
+ <method name="getPersistedBoolean(Z)Z" deprecated="29"/>
+ <method name="getPersistedFloat(F)F" deprecated="29"/>
+ <method name="getPersistedInt(I)I" deprecated="29"/>
+ <method name="getPersistedLong(J)J" deprecated="29"/>
+ <method name="getPersistedString(Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+ <method name="getPersistedStringSet(Ljava/util/Set;)Ljava/util/Set;" since="24" deprecated="29"/>
+ <method name="getPreferenceDataStore()Landroid/preference/PreferenceDataStore;" since="26" deprecated="29"/>
+ <method name="getPreferenceManager()Landroid/preference/PreferenceManager;" deprecated="29"/>
+ <method name="getSharedPreferences()Landroid/content/SharedPreferences;" deprecated="29"/>
+ <method name="getShouldDisableView()Z" deprecated="29"/>
+ <method name="getSummary()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getTitle()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getTitleRes()I" since="14" deprecated="29"/>
+ <method name="getView(Landroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;" deprecated="29"/>
+ <method name="getWidgetLayoutResource()I" deprecated="29"/>
+ <method name="hasKey()Z" deprecated="29"/>
+ <method name="isEnabled()Z" deprecated="29"/>
+ <method name="isIconSpaceReserved()Z" since="26" deprecated="29"/>
+ <method name="isPersistent()Z" deprecated="29"/>
+ <method name="isRecycleEnabled()Z" since="26" deprecated="29"/>
+ <method name="isSelectable()Z" deprecated="29"/>
+ <method name="isSingleLineTitle()Z" since="26" deprecated="29"/>
+ <method name="notifyChanged()V" deprecated="29"/>
+ <method name="notifyDependencyChange(Z)V" deprecated="29"/>
+ <method name="notifyHierarchyChanged()V" deprecated="29"/>
+ <method name="onAttachedToActivity()V" deprecated="29"/>
+ <method name="onAttachedToHierarchy(Landroid/preference/PreferenceManager;)V" deprecated="29"/>
+ <method name="onBindView(Landroid/view/View;)V" deprecated="29"/>
+ <method name="onClick()V" deprecated="29"/>
+ <method name="onCreateView(Landroid/view/ViewGroup;)Landroid/view/View;" deprecated="29"/>
+ <method name="onDependencyChanged(Landroid/preference/Preference;Z)V" deprecated="29"/>
+ <method name="onGetDefaultValue(Landroid/content/res/TypedArray;I)Ljava/lang/Object;" deprecated="29"/>
+ <method name="onParentChanged(Landroid/preference/Preference;Z)V" since="19" deprecated="29"/>
+ <method name="onPrepareForRemoval()V" deprecated="29"/>
+ <method name="onRestoreInstanceState(Landroid/os/Parcelable;)V" deprecated="29"/>
+ <method name="onSaveInstanceState()Landroid/os/Parcelable;" deprecated="29"/>
+ <method name="onSetInitialValue(ZLjava/lang/Object;)V" deprecated="29"/>
+ <method name="peekExtras()Landroid/os/Bundle;" since="11" deprecated="29"/>
+ <method name="persistBoolean(Z)Z" deprecated="29"/>
+ <method name="persistFloat(F)Z" deprecated="29"/>
+ <method name="persistInt(I)Z" deprecated="29"/>
+ <method name="persistLong(J)Z" deprecated="29"/>
+ <method name="persistString(Ljava/lang/String;)Z" deprecated="29"/>
+ <method name="persistStringSet(Ljava/util/Set;)Z" since="24" deprecated="29"/>
+ <method name="restoreHierarchyState(Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="saveHierarchyState(Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="setDefaultValue(Ljava/lang/Object;)V" deprecated="29"/>
+ <method name="setDependency(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="setEnabled(Z)V" deprecated="29"/>
+ <method name="setFragment(Ljava/lang/String;)V" since="11" deprecated="29"/>
+ <method name="setIcon(I)V" since="11" deprecated="29"/>
+ <method name="setIcon(Landroid/graphics/drawable/Drawable;)V" since="11" deprecated="29"/>
+ <method name="setIconSpaceReserved(Z)V" since="26" deprecated="29"/>
+ <method name="setIntent(Landroid/content/Intent;)V" deprecated="29"/>
+ <method name="setKey(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="setLayoutResource(I)V" deprecated="29"/>
+ <method name="setOnPreferenceChangeListener(Landroid/preference/Preference$OnPreferenceChangeListener;)V" deprecated="29"/>
+ <method name="setOnPreferenceClickListener(Landroid/preference/Preference$OnPreferenceClickListener;)V" deprecated="29"/>
+ <method name="setOrder(I)V" deprecated="29"/>
+ <method name="setPersistent(Z)V" deprecated="29"/>
+ <method name="setPreferenceDataStore(Landroid/preference/PreferenceDataStore;)V" since="26" deprecated="29"/>
+ <method name="setRecycleEnabled(Z)V" since="26" deprecated="29"/>
+ <method name="setSelectable(Z)V" deprecated="29"/>
+ <method name="setShouldDisableView(Z)V" deprecated="29"/>
+ <method name="setSingleLineTitle(Z)V" since="26" deprecated="29"/>
+ <method name="setSummary(I)V" deprecated="29"/>
+ <method name="setSummary(Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="setTitle(I)V" deprecated="29"/>
+ <method name="setTitle(Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="setWidgetLayoutResource(I)V" deprecated="29"/>
+ <method name="shouldCommit()Z" deprecated="29"/>
+ <method name="shouldDisableDependents()Z" deprecated="29"/>
+ <method name="shouldPersist()Z" deprecated="29"/>
+ <field name="DEFAULT_ORDER" deprecated="29"/>
+ </class>
+ <class name="android/preference/Preference$BaseSavedState" since="1" deprecated="29">
<extends name="android/view/AbsSavedState"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V"/>
- <method name="&lt;init>(Landroid/os/Parcelable;)V"/>
- <field name="CREATOR"/>
+ <method name="&lt;init>(Landroid/os/Parcel;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/os/Parcelable;)V" deprecated="29"/>
+ <field name="CREATOR" deprecated="29"/>
</class>
- <class name="android/preference/Preference$OnPreferenceChangeListener" since="1">
+ <class name="android/preference/Preference$OnPreferenceChangeListener" since="1" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="onPreferenceChange(Landroid/preference/Preference;Ljava/lang/Object;)Z"/>
+ <method name="onPreferenceChange(Landroid/preference/Preference;Ljava/lang/Object;)Z" deprecated="29"/>
</class>
- <class name="android/preference/Preference$OnPreferenceClickListener" since="1">
+ <class name="android/preference/Preference$OnPreferenceClickListener" since="1" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="onPreferenceClick(Landroid/preference/Preference;)Z"/>
+ <method name="onPreferenceClick(Landroid/preference/Preference;)Z" deprecated="29"/>
</class>
- <class name="android/preference/PreferenceActivity" since="1">
+ <class name="android/preference/PreferenceActivity" since="1" deprecated="29">
<extends name="android/app/ListActivity"/>
<implements name="android/preference/PreferenceFragment$OnPreferenceStartFragmentCallback" since="11"/>
- <method name="&lt;init>()V"/>
- <method name="addPreferencesFromIntent(Landroid/content/Intent;)V" deprecated="16"/>
- <method name="addPreferencesFromResource(I)V" deprecated="16"/>
- <method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="16"/>
- <method name="finishPreferencePanel(Landroid/app/Fragment;ILandroid/content/Intent;)V" since="11"/>
- <method name="getPreferenceManager()Landroid/preference/PreferenceManager;" deprecated="16"/>
- <method name="getPreferenceScreen()Landroid/preference/PreferenceScreen;" deprecated="16"/>
- <method name="hasHeaders()Z" since="11"/>
- <method name="invalidateHeaders()V" since="11"/>
- <method name="isMultiPane()Z" since="11"/>
- <method name="isValidFragment(Ljava/lang/String;)Z" since="19"/>
- <method name="loadHeadersFromResource(ILjava/util/List;)V" since="11"/>
- <method name="onBuildHeaders(Ljava/util/List;)V" since="11"/>
- <method name="onBuildStartFragmentIntent(Ljava/lang/String;Landroid/os/Bundle;II)Landroid/content/Intent;" since="14"/>
- <method name="onGetInitialHeader()Landroid/preference/PreferenceActivity$Header;" since="11"/>
- <method name="onGetNewHeader()Landroid/preference/PreferenceActivity$Header;" since="11"/>
- <method name="onHeaderClick(Landroid/preference/PreferenceActivity$Header;I)V" since="11"/>
- <method name="onIsHidingHeaders()Z" since="11"/>
- <method name="onIsMultiPane()Z" since="11"/>
- <method name="onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z" deprecated="16"/>
- <method name="setListFooter(Landroid/view/View;)V" since="11"/>
- <method name="setParentTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/view/View$OnClickListener;)V" since="11"/>
- <method name="setPreferenceScreen(Landroid/preference/PreferenceScreen;)V" deprecated="16"/>
- <method name="showBreadCrumbs(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V" since="11"/>
- <method name="startPreferenceFragment(Landroid/app/Fragment;Z)V" since="11"/>
- <method name="startPreferencePanel(Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/CharSequence;Landroid/app/Fragment;I)V" since="11"/>
- <method name="startWithFragment(Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Fragment;I)V" since="11"/>
- <method name="startWithFragment(Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Fragment;III)V" since="14"/>
- <method name="switchToHeader(Landroid/preference/PreferenceActivity$Header;)V" since="11"/>
- <method name="switchToHeader(Ljava/lang/String;Landroid/os/Bundle;)V" since="11"/>
- <field name="EXTRA_NO_HEADERS" since="11"/>
- <field name="EXTRA_SHOW_FRAGMENT" since="11"/>
- <field name="EXTRA_SHOW_FRAGMENT_ARGUMENTS" since="11"/>
- <field name="EXTRA_SHOW_FRAGMENT_SHORT_TITLE" since="14"/>
- <field name="EXTRA_SHOW_FRAGMENT_TITLE" since="14"/>
- <field name="HEADER_ID_UNDEFINED" since="11"/>
- </class>
- <class name="android/preference/PreferenceActivity$Header" since="11">
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="addPreferencesFromIntent(Landroid/content/Intent;)V" deprecated="15"/>
+ <method name="addPreferencesFromResource(I)V" deprecated="15"/>
+ <method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="15"/>
+ <method name="finishPreferencePanel(Landroid/app/Fragment;ILandroid/content/Intent;)V" since="11" deprecated="29"/>
+ <method name="getPreferenceManager()Landroid/preference/PreferenceManager;" deprecated="15"/>
+ <method name="getPreferenceScreen()Landroid/preference/PreferenceScreen;" deprecated="15"/>
+ <method name="hasHeaders()Z" since="11" deprecated="29"/>
+ <method name="invalidateHeaders()V" since="11" deprecated="29"/>
+ <method name="isMultiPane()Z" since="11" deprecated="29"/>
+ <method name="isValidFragment(Ljava/lang/String;)Z" since="19" deprecated="29"/>
+ <method name="loadHeadersFromResource(ILjava/util/List;)V" since="11" deprecated="29"/>
+ <method name="onBuildHeaders(Ljava/util/List;)V" since="11" deprecated="29"/>
+ <method name="onBuildStartFragmentIntent(Ljava/lang/String;Landroid/os/Bundle;II)Landroid/content/Intent;" since="14" deprecated="29"/>
+ <method name="onGetInitialHeader()Landroid/preference/PreferenceActivity$Header;" since="11" deprecated="29"/>
+ <method name="onGetNewHeader()Landroid/preference/PreferenceActivity$Header;" since="11" deprecated="29"/>
+ <method name="onHeaderClick(Landroid/preference/PreferenceActivity$Header;I)V" since="11" deprecated="29"/>
+ <method name="onIsHidingHeaders()Z" since="11" deprecated="29"/>
+ <method name="onIsMultiPane()Z" since="11" deprecated="29"/>
+ <method name="onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z" deprecated="15"/>
+ <method name="setListFooter(Landroid/view/View;)V" since="11" deprecated="29"/>
+ <method name="setParentTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/view/View$OnClickListener;)V" since="11" deprecated="29"/>
+ <method name="setPreferenceScreen(Landroid/preference/PreferenceScreen;)V" deprecated="15"/>
+ <method name="showBreadCrumbs(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V" since="11" deprecated="29"/>
+ <method name="startPreferenceFragment(Landroid/app/Fragment;Z)V" since="11" deprecated="29"/>
+ <method name="startPreferencePanel(Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/CharSequence;Landroid/app/Fragment;I)V" since="11" deprecated="29"/>
+ <method name="startWithFragment(Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Fragment;I)V" since="11" deprecated="29"/>
+ <method name="startWithFragment(Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Fragment;III)V" since="14" deprecated="29"/>
+ <method name="switchToHeader(Landroid/preference/PreferenceActivity$Header;)V" since="11" deprecated="29"/>
+ <method name="switchToHeader(Ljava/lang/String;Landroid/os/Bundle;)V" since="11" deprecated="29"/>
+ <field name="EXTRA_NO_HEADERS" since="11" deprecated="29"/>
+ <field name="EXTRA_SHOW_FRAGMENT" since="11" deprecated="29"/>
+ <field name="EXTRA_SHOW_FRAGMENT_ARGUMENTS" since="11" deprecated="29"/>
+ <field name="EXTRA_SHOW_FRAGMENT_SHORT_TITLE" since="14" deprecated="29"/>
+ <field name="EXTRA_SHOW_FRAGMENT_TITLE" since="14" deprecated="29"/>
+ <field name="HEADER_ID_UNDEFINED" since="11" deprecated="29"/>
+ </class>
+ <class name="android/preference/PreferenceActivity$Header" since="11" deprecated="29">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
- <method name="getBreadCrumbShortTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;"/>
- <method name="getBreadCrumbTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;"/>
- <method name="getSummary(Landroid/content/res/Resources;)Ljava/lang/CharSequence;"/>
- <method name="getTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;"/>
- <method name="readFromParcel(Landroid/os/Parcel;)V"/>
- <field name="CREATOR"/>
- <field name="breadCrumbShortTitle"/>
- <field name="breadCrumbShortTitleRes"/>
- <field name="breadCrumbTitle"/>
- <field name="breadCrumbTitleRes"/>
- <field name="extras"/>
- <field name="fragment"/>
- <field name="fragmentArguments"/>
- <field name="iconRes"/>
- <field name="id"/>
- <field name="intent"/>
- <field name="summary"/>
- <field name="summaryRes"/>
- <field name="title"/>
- <field name="titleRes"/>
- </class>
- <class name="android/preference/PreferenceCategory" since="1">
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="getBreadCrumbShortTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getBreadCrumbTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getSummary(Landroid/content/res/Resources;)Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="readFromParcel(Landroid/os/Parcel;)V" deprecated="29"/>
+ <field name="CREATOR" deprecated="29"/>
+ <field name="breadCrumbShortTitle" deprecated="29"/>
+ <field name="breadCrumbShortTitleRes" deprecated="29"/>
+ <field name="breadCrumbTitle" deprecated="29"/>
+ <field name="breadCrumbTitleRes" deprecated="29"/>
+ <field name="extras" deprecated="29"/>
+ <field name="fragment" deprecated="29"/>
+ <field name="fragmentArguments" deprecated="29"/>
+ <field name="iconRes" deprecated="29"/>
+ <field name="id" deprecated="29"/>
+ <field name="intent" deprecated="29"/>
+ <field name="summary" deprecated="29"/>
+ <field name="summaryRes" deprecated="29"/>
+ <field name="title" deprecated="29"/>
+ <field name="titleRes" deprecated="29"/>
+ </class>
+ <class name="android/preference/PreferenceCategory" since="1" deprecated="29">
<extends name="android/preference/PreferenceGroup"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- </class>
- <class name="android/preference/PreferenceDataStore" since="26">
- <extends name="java/lang/Object"/>
- <method name="getBoolean(Ljava/lang/String;Z)Z"/>
- <method name="getFloat(Ljava/lang/String;F)F"/>
- <method name="getInt(Ljava/lang/String;I)I"/>
- <method name="getLong(Ljava/lang/String;J)J"/>
- <method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
- <method name="getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;"/>
- <method name="putBoolean(Ljava/lang/String;Z)V"/>
- <method name="putFloat(Ljava/lang/String;F)V"/>
- <method name="putInt(Ljava/lang/String;I)V"/>
- <method name="putLong(Ljava/lang/String;J)V"/>
- <method name="putString(Ljava/lang/String;Ljava/lang/String;)V"/>
- <method name="putStringSet(Ljava/lang/String;Ljava/util/Set;)V"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ </class>
+ <class name="android/preference/PreferenceDataStore" since="26" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <method name="getBoolean(Ljava/lang/String;Z)Z" deprecated="29"/>
+ <method name="getFloat(Ljava/lang/String;F)F" deprecated="29"/>
+ <method name="getInt(Ljava/lang/String;I)I" deprecated="29"/>
+ <method name="getLong(Ljava/lang/String;J)J" deprecated="29"/>
+ <method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+ <method name="getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;" deprecated="29"/>
+ <method name="putBoolean(Ljava/lang/String;Z)V" deprecated="29"/>
+ <method name="putFloat(Ljava/lang/String;F)V" deprecated="29"/>
+ <method name="putInt(Ljava/lang/String;I)V" deprecated="29"/>
+ <method name="putLong(Ljava/lang/String;J)V" deprecated="29"/>
+ <method name="putString(Ljava/lang/String;Ljava/lang/String;)V" deprecated="29"/>
+ <method name="putStringSet(Ljava/lang/String;Ljava/util/Set;)V" deprecated="29"/>
</class>
<class name="android/preference/PreferenceFragment" since="11" deprecated="28">
<extends name="android/app/Fragment"/>
- <method name="&lt;init>()V"/>
- <method name="addPreferencesFromIntent(Landroid/content/Intent;)V"/>
- <method name="addPreferencesFromResource(I)V"/>
- <method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;"/>
- <method name="getPreferenceManager()Landroid/preference/PreferenceManager;"/>
- <method name="getPreferenceScreen()Landroid/preference/PreferenceScreen;"/>
- <method name="onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z"/>
- <method name="setPreferenceScreen(Landroid/preference/PreferenceScreen;)V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="addPreferencesFromIntent(Landroid/content/Intent;)V" deprecated="29"/>
+ <method name="addPreferencesFromResource(I)V" deprecated="29"/>
+ <method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="29"/>
+ <method name="getPreferenceManager()Landroid/preference/PreferenceManager;" deprecated="29"/>
+ <method name="getPreferenceScreen()Landroid/preference/PreferenceScreen;" deprecated="29"/>
+ <method name="onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z" deprecated="29"/>
+ <method name="setPreferenceScreen(Landroid/preference/PreferenceScreen;)V" deprecated="29"/>
</class>
<class name="android/preference/PreferenceFragment$OnPreferenceStartFragmentCallback" since="11" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="onPreferenceStartFragment(Landroid/preference/PreferenceFragment;Landroid/preference/Preference;)Z"/>
+ <method name="onPreferenceStartFragment(Landroid/preference/PreferenceFragment;Landroid/preference/Preference;)Z" deprecated="29"/>
</class>
- <class name="android/preference/PreferenceGroup" since="1">
+ <class name="android/preference/PreferenceGroup" since="1" deprecated="29">
<extends name="android/preference/Preference"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="addItemFromInflater(Landroid/preference/Preference;)V"/>
- <method name="addPreference(Landroid/preference/Preference;)Z"/>
- <method name="dispatchRestoreInstanceState(Landroid/os/Bundle;)V"/>
- <method name="dispatchSaveInstanceState(Landroid/os/Bundle;)V"/>
- <method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;"/>
- <method name="getPreference(I)Landroid/preference/Preference;"/>
- <method name="getPreferenceCount()I"/>
- <method name="isOnSameScreenAsChildren()Z"/>
- <method name="isOrderingAsAdded()Z"/>
- <method name="onPrepareAddPreference(Landroid/preference/Preference;)Z"/>
- <method name="removeAll()V"/>
- <method name="removePreference(Landroid/preference/Preference;)Z"/>
- <method name="setOrderingAsAdded(Z)V"/>
- </class>
- <class name="android/preference/PreferenceManager" since="1">
- <extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
- <method name="createPreferenceScreen(Landroid/content/Context;)Landroid/preference/PreferenceScreen;"/>
- <method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;"/>
- <method name="getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences;"/>
- <method name="getDefaultSharedPreferencesName(Landroid/content/Context;)Ljava/lang/String;" since="24"/>
- <method name="getPreferenceDataStore()Landroid/preference/PreferenceDataStore;" since="26"/>
- <method name="getSharedPreferences()Landroid/content/SharedPreferences;"/>
- <method name="getSharedPreferencesMode()I"/>
- <method name="getSharedPreferencesName()Ljava/lang/String;"/>
- <method name="isStorageDefault()Z" since="24"/>
- <method name="isStorageDeviceProtected()Z" since="24"/>
- <method name="setDefaultValues(Landroid/content/Context;IZ)V"/>
- <method name="setDefaultValues(Landroid/content/Context;Ljava/lang/String;IIZ)V"/>
- <method name="setPreferenceDataStore(Landroid/preference/PreferenceDataStore;)V" since="26"/>
- <method name="setSharedPreferencesMode(I)V"/>
- <method name="setSharedPreferencesName(Ljava/lang/String;)V"/>
- <method name="setStorageDefault()V" since="24"/>
- <method name="setStorageDeviceProtected()V" since="24"/>
- <field name="KEY_HAS_SET_DEFAULT_VALUES"/>
- <field name="METADATA_KEY_PREFERENCES"/>
- </class>
- <class name="android/preference/PreferenceManager$OnActivityDestroyListener" since="1">
- <extends name="java/lang/Object"/>
- <method name="onActivityDestroy()V"/>
- </class>
- <class name="android/preference/PreferenceManager$OnActivityResultListener" since="1">
- <extends name="java/lang/Object"/>
- <method name="onActivityResult(IILandroid/content/Intent;)Z"/>
- </class>
- <class name="android/preference/PreferenceManager$OnActivityStopListener" since="1">
- <extends name="java/lang/Object"/>
- <method name="onActivityStop()V"/>
- </class>
- <class name="android/preference/PreferenceScreen" since="1">
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="addItemFromInflater(Landroid/preference/Preference;)V" deprecated="29"/>
+ <method name="addPreference(Landroid/preference/Preference;)Z" deprecated="29"/>
+ <method name="dispatchRestoreInstanceState(Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="dispatchSaveInstanceState(Landroid/os/Bundle;)V" deprecated="29"/>
+ <method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="29"/>
+ <method name="getPreference(I)Landroid/preference/Preference;" deprecated="29"/>
+ <method name="getPreferenceCount()I" deprecated="29"/>
+ <method name="isOnSameScreenAsChildren()Z" deprecated="29"/>
+ <method name="isOrderingAsAdded()Z" deprecated="29"/>
+ <method name="onPrepareAddPreference(Landroid/preference/Preference;)Z" deprecated="29"/>
+ <method name="removeAll()V" deprecated="29"/>
+ <method name="removePreference(Landroid/preference/Preference;)Z" deprecated="29"/>
+ <method name="setOrderingAsAdded(Z)V" deprecated="29"/>
+ </class>
+ <class name="android/preference/PreferenceManager" since="1" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <method name="createPreferenceScreen(Landroid/content/Context;)Landroid/preference/PreferenceScreen;" deprecated="29"/>
+ <method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="29"/>
+ <method name="getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences;" deprecated="29"/>
+ <method name="getDefaultSharedPreferencesName(Landroid/content/Context;)Ljava/lang/String;" since="24" deprecated="29"/>
+ <method name="getPreferenceDataStore()Landroid/preference/PreferenceDataStore;" since="26" deprecated="29"/>
+ <method name="getSharedPreferences()Landroid/content/SharedPreferences;" deprecated="29"/>
+ <method name="getSharedPreferencesMode()I" deprecated="29"/>
+ <method name="getSharedPreferencesName()Ljava/lang/String;" deprecated="29"/>
+ <method name="isStorageDefault()Z" since="24" deprecated="29"/>
+ <method name="isStorageDeviceProtected()Z" since="24" deprecated="29"/>
+ <method name="setDefaultValues(Landroid/content/Context;IZ)V" deprecated="29"/>
+ <method name="setDefaultValues(Landroid/content/Context;Ljava/lang/String;IIZ)V" deprecated="29"/>
+ <method name="setPreferenceDataStore(Landroid/preference/PreferenceDataStore;)V" since="26" deprecated="29"/>
+ <method name="setSharedPreferencesMode(I)V" deprecated="29"/>
+ <method name="setSharedPreferencesName(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="setStorageDefault()V" since="24" deprecated="29"/>
+ <method name="setStorageDeviceProtected()V" since="24" deprecated="29"/>
+ <field name="KEY_HAS_SET_DEFAULT_VALUES" deprecated="29"/>
+ <field name="METADATA_KEY_PREFERENCES" deprecated="29"/>
+ </class>
+ <class name="android/preference/PreferenceManager$OnActivityDestroyListener" since="1" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <method name="onActivityDestroy()V" deprecated="29"/>
+ </class>
+ <class name="android/preference/PreferenceManager$OnActivityResultListener" since="1" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <method name="onActivityResult(IILandroid/content/Intent;)Z" deprecated="29"/>
+ </class>
+ <class name="android/preference/PreferenceManager$OnActivityStopListener" since="1" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <method name="onActivityStop()V" deprecated="29"/>
+ </class>
+ <class name="android/preference/PreferenceScreen" since="1" deprecated="29">
<extends name="android/preference/PreferenceGroup"/>
<implements name="android/content/DialogInterface$OnDismissListener"/>
<implements name="android/widget/AdapterView$OnItemClickListener"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="29"/>
- <method name="bind(Landroid/widget/ListView;)V"/>
- <method name="getDialog()Landroid/app/Dialog;"/>
- <method name="getRootAdapter()Landroid/widget/ListAdapter;"/>
- <method name="onCreateRootAdapter()Landroid/widget/ListAdapter;"/>
- </class>
- <class name="android/preference/RingtonePreference" since="1">
+ <method name="bind(Landroid/widget/ListView;)V" deprecated="29"/>
+ <method name="getDialog()Landroid/app/Dialog;" deprecated="29"/>
+ <method name="getRootAdapter()Landroid/widget/ListAdapter;" deprecated="29"/>
+ <method name="onCreateRootAdapter()Landroid/widget/ListAdapter;" deprecated="29"/>
+ </class>
+ <class name="android/preference/RingtonePreference" since="1" deprecated="29">
<extends name="android/preference/Preference"/>
<implements name="android/preference/PreferenceManager$OnActivityResultListener"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="getRingtoneType()I"/>
- <method name="getShowDefault()Z"/>
- <method name="getShowSilent()Z"/>
- <method name="onPrepareRingtonePickerIntent(Landroid/content/Intent;)V"/>
- <method name="onRestoreRingtone()Landroid/net/Uri;"/>
- <method name="onSaveRingtone(Landroid/net/Uri;)V"/>
- <method name="setRingtoneType(I)V"/>
- <method name="setShowDefault(Z)V"/>
- <method name="setShowSilent(Z)V"/>
- </class>
- <class name="android/preference/SwitchPreference" since="14">
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="getRingtoneType()I" deprecated="29"/>
+ <method name="getShowDefault()Z" deprecated="29"/>
+ <method name="getShowSilent()Z" deprecated="29"/>
+ <method name="onPrepareRingtonePickerIntent(Landroid/content/Intent;)V" deprecated="29"/>
+ <method name="onRestoreRingtone()Landroid/net/Uri;" deprecated="29"/>
+ <method name="onSaveRingtone(Landroid/net/Uri;)V" deprecated="29"/>
+ <method name="setRingtoneType(I)V" deprecated="29"/>
+ <method name="setShowDefault(Z)V" deprecated="29"/>
+ <method name="setShowSilent(Z)V" deprecated="29"/>
+ </class>
+ <class name="android/preference/SwitchPreference" since="14" deprecated="29">
<extends name="android/preference/TwoStatePreference"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="getSwitchTextOff()Ljava/lang/CharSequence;"/>
- <method name="getSwitchTextOn()Ljava/lang/CharSequence;"/>
- <method name="setSwitchTextOff(I)V"/>
- <method name="setSwitchTextOff(Ljava/lang/CharSequence;)V"/>
- <method name="setSwitchTextOn(I)V"/>
- <method name="setSwitchTextOn(Ljava/lang/CharSequence;)V"/>
- </class>
- <class name="android/preference/TwoStatePreference" since="14">
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="getSwitchTextOff()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getSwitchTextOn()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="setSwitchTextOff(I)V" deprecated="29"/>
+ <method name="setSwitchTextOff(Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="setSwitchTextOn(I)V" deprecated="29"/>
+ <method name="setSwitchTextOn(Ljava/lang/CharSequence;)V" deprecated="29"/>
+ </class>
+ <class name="android/preference/TwoStatePreference" since="14" deprecated="29">
<extends name="android/preference/Preference"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="getDisableDependentsState()Z"/>
- <method name="getSummaryOff()Ljava/lang/CharSequence;"/>
- <method name="getSummaryOn()Ljava/lang/CharSequence;"/>
- <method name="isChecked()Z"/>
- <method name="setChecked(Z)V"/>
- <method name="setDisableDependentsState(Z)V"/>
- <method name="setSummaryOff(I)V"/>
- <method name="setSummaryOff(Ljava/lang/CharSequence;)V"/>
- <method name="setSummaryOn(I)V"/>
- <method name="setSummaryOn(Ljava/lang/CharSequence;)V"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="getDisableDependentsState()Z" deprecated="29"/>
+ <method name="getSummaryOff()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getSummaryOn()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="isChecked()Z" deprecated="29"/>
+ <method name="setChecked(Z)V" deprecated="29"/>
+ <method name="setDisableDependentsState(Z)V" deprecated="29"/>
+ <method name="setSummaryOff(I)V" deprecated="29"/>
+ <method name="setSummaryOff(Ljava/lang/CharSequence;)V" deprecated="29"/>
+ <method name="setSummaryOn(I)V" deprecated="29"/>
+ <method name="setSummaryOn(Ljava/lang/CharSequence;)V" deprecated="29"/>
</class>
<class name="android/print/PageRange" since="19">
<extends name="java/lang/Object"/>
@@ -34154,7 +35929,6 @@
<class name="android/print/PrintAttributes" since="19">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getColorMode()I"/>
<method name="getDuplexMode()I" since="23"/>
<method name="getMediaSize()Landroid/print/PrintAttributes$MediaSize;"/>
@@ -34299,14 +36073,12 @@
</class>
<class name="android/print/PrintDocumentAdapter$LayoutResultCallback" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="onLayoutCancelled()V"/>
<method name="onLayoutFailed(Ljava/lang/CharSequence;)V"/>
<method name="onLayoutFinished(Landroid/print/PrintDocumentInfo;Z)V"/>
</class>
<class name="android/print/PrintDocumentAdapter$WriteResultCallback" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="onWriteCancelled()V"/>
<method name="onWriteFailed(Ljava/lang/CharSequence;)V"/>
<method name="onWriteFinished([Landroid/print/PageRange;)V"/>
@@ -34314,7 +36086,6 @@
<class name="android/print/PrintDocumentInfo" since="19">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getContentType()I"/>
<method name="getDataSize()J"/>
<method name="getName()Ljava/lang/String;"/>
@@ -34334,8 +36105,6 @@
</class>
<class name="android/print/PrintJob" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/print/PrintJobInfo;Landroid/print/PrintManager;)V" since="29"/>
<method name="cancel()V"/>
<method name="getId()Landroid/print/PrintJobId;"/>
<method name="getInfo()Landroid/print/PrintJobInfo;"/>
@@ -34350,13 +36119,11 @@
<class name="android/print/PrintJobId" since="19">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<field name="CREATOR"/>
</class>
<class name="android/print/PrintJobInfo" since="19">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getAdvancedIntOption(Ljava/lang/String;)I" since="26"/>
<method name="getAdvancedStringOption(Ljava/lang/String;)Ljava/lang/String;" since="26"/>
<method name="getAttributes()Landroid/print/PrintAttributes;"/>
@@ -34389,14 +36156,12 @@
</class>
<class name="android/print/PrintManager" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getPrintJobs()Ljava/util/List;"/>
<method name="print(Ljava/lang/String;Landroid/print/PrintDocumentAdapter;Landroid/print/PrintAttributes;)Landroid/print/PrintJob;"/>
</class>
<class name="android/print/PrinterCapabilitiesInfo" since="19">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getColorModes()I"/>
<method name="getDefaults()Landroid/print/PrintAttributes;"/>
<method name="getDuplexModes()I" since="23"/>
@@ -34418,16 +36183,12 @@
<class name="android/print/PrinterId" since="19">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getLocalId()Ljava/lang/String;"/>
<field name="CREATOR"/>
</class>
<class name="android/print/PrinterInfo" since="19">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getCapabilities()Landroid/print/PrinterCapabilitiesInfo;"/>
<method name="getDescription()Ljava/lang/String;"/>
<method name="getId()Landroid/print/PrinterId;"/>
@@ -34461,18 +36222,15 @@
</class>
<class name="android/printservice/CustomPrinterIconCallback" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="onCustomPrinterIconLoaded(Landroid/graphics/drawable/Icon;)Z"/>
</class>
<class name="android/printservice/PrintDocument" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getData()Landroid/os/ParcelFileDescriptor;"/>
<method name="getInfo()Landroid/print/PrintDocumentInfo;"/>
</class>
<class name="android/printservice/PrintJob" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="block(Ljava/lang/String;)Z"/>
<method name="cancel()Z"/>
<method name="complete()Z"/>
@@ -34565,7 +36323,6 @@
</class>
<class name="android/provider/BlockedNumberContract" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="canCurrentUserBlockNumbers(Landroid/content/Context;)Z"/>
<method name="isBlocked(Landroid/content/Context;Ljava/lang/String;)Z"/>
<method name="unblock(Landroid/content/Context;Ljava/lang/String;)I"/>
@@ -34574,7 +36331,6 @@
</class>
<class name="android/provider/BlockedNumberContract$BlockedNumbers" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="COLUMN_E164_NUMBER"/>
<field name="COLUMN_ID"/>
<field name="COLUMN_ORIGINAL_NUMBER"/>
@@ -34637,14 +36393,15 @@
<method name="&lt;init>()V"/>
<field name="DATE"/>
<field name="SEARCH"/>
- <field name="URL" deprecated="16"/>
+ <field name="URL" deprecated="15"/>
</class>
<class name="android/provider/CalendarContract" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="startViewCalendarEventInManagedProfile(Landroid/content/Context;JJJZI)Z" since="29"/>
<field name="ACCOUNT_TYPE_LOCAL"/>
<field name="ACTION_EVENT_REMINDER"/>
<field name="ACTION_HANDLE_CUSTOM_EVENT" since="16"/>
+ <field name="ACTION_VIEW_MANAGED_PROFILE_CALENDAR_EVENT" since="29"/>
<field name="AUTHORITY"/>
<field name="CALLER_IS_SYNCADAPTER"/>
<field name="CONTENT_URI"/>
@@ -34652,13 +36409,13 @@
<field name="EXTRA_EVENT_ALL_DAY"/>
<field name="EXTRA_EVENT_BEGIN_TIME"/>
<field name="EXTRA_EVENT_END_TIME"/>
+ <field name="EXTRA_EVENT_ID" since="29"/>
</class>
<class name="android/provider/CalendarContract$Attendees" since="14">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/CalendarContract$AttendeesColumns"/>
<implements name="android/provider/CalendarContract$EventsColumns"/>
- <method name="&lt;init>()V"/>
<method name="query(Landroid/content/ContentResolver;J[Ljava/lang/String;)Landroid/database/Cursor;"/>
<field name="CONTENT_URI"/>
</class>
@@ -34693,7 +36450,6 @@
<implements name="android/provider/CalendarContract$CalendarAlertsColumns"/>
<implements name="android/provider/CalendarContract$CalendarColumns"/>
<implements name="android/provider/CalendarContract$EventsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="CONTENT_URI_BY_INSTANCE"/>
</class>
@@ -34716,7 +36472,6 @@
<class name="android/provider/CalendarContract$CalendarCache" since="14">
<extends name="java/lang/Object"/>
<implements name="android/provider/CalendarContract$CalendarCacheColumns"/>
- <method name="&lt;init>()V"/>
<field name="KEY_TIMEZONE_INSTANCES"/>
<field name="KEY_TIMEZONE_INSTANCES_PREVIOUS"/>
<field name="KEY_TIMEZONE_TYPE"/>
@@ -34761,7 +36516,6 @@
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/CalendarContract$CalendarColumns"/>
<implements name="android/provider/CalendarContract$SyncColumns"/>
- <method name="&lt;init>()V"/>
<method name="newEntityIterator(Landroid/database/Cursor;)Landroid/content/EntityIterator;"/>
<field name="CONTENT_URI"/>
</class>
@@ -34783,16 +36537,15 @@
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/CalendarContract$CalendarColumns"/>
<implements name="android/provider/CalendarContract$SyncColumns"/>
- <method name="&lt;init>()V"/>
<field name="CALENDAR_LOCATION"/>
<field name="CONTENT_URI"/>
<field name="DEFAULT_SORT_ORDER"/>
+ <field name="ENTERPRISE_CONTENT_URI" since="29"/>
<field name="NAME"/>
</class>
<class name="android/provider/CalendarContract$Colors" since="15">
<extends name="java/lang/Object"/>
<implements name="android/provider/CalendarContract$ColorsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
</class>
<class name="android/provider/CalendarContract$ColorsColumns" since="15">
@@ -34807,7 +36560,6 @@
<class name="android/provider/CalendarContract$EventDays" since="14">
<extends name="java/lang/Object"/>
<implements name="android/provider/CalendarContract$EventDaysColumns"/>
- <method name="&lt;init>()V"/>
<method name="query(Landroid/content/ContentResolver;II[Ljava/lang/String;)Landroid/database/Cursor;"/>
<field name="CONTENT_URI"/>
</class>
@@ -34822,9 +36574,9 @@
<implements name="android/provider/CalendarContract$CalendarColumns"/>
<implements name="android/provider/CalendarContract$EventsColumns"/>
<implements name="android/provider/CalendarContract$SyncColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_EXCEPTION_URI"/>
<field name="CONTENT_URI"/>
+ <field name="ENTERPRISE_CONTENT_URI" since="29"/>
</class>
<class name="android/provider/CalendarContract$EventsColumns" since="14">
<extends name="java/lang/Object"/>
@@ -34893,7 +36645,6 @@
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/CalendarContract$EventsColumns"/>
<implements name="android/provider/CalendarContract$SyncColumns"/>
- <method name="&lt;init>()V"/>
<method name="newEntityIterator(Landroid/database/Cursor;Landroid/content/ContentProviderClient;)Landroid/content/EntityIterator;"/>
<method name="newEntityIterator(Landroid/database/Cursor;Landroid/content/ContentResolver;)Landroid/content/EntityIterator;"/>
<field name="CONTENT_URI"/>
@@ -34903,7 +36654,6 @@
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/CalendarContract$EventsColumns"/>
<implements name="android/provider/CalendarContract$ExtendedPropertiesColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
</class>
<class name="android/provider/CalendarContract$ExtendedPropertiesColumns" since="14">
@@ -34917,7 +36667,6 @@
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/CalendarContract$CalendarColumns"/>
<implements name="android/provider/CalendarContract$EventsColumns"/>
- <method name="&lt;init>()V"/>
<method name="query(Landroid/content/ContentResolver;[Ljava/lang/String;JJ)Landroid/database/Cursor;"/>
<method name="query(Landroid/content/ContentResolver;[Ljava/lang/String;JJLjava/lang/String;)Landroid/database/Cursor;"/>
<field name="BEGIN"/>
@@ -34928,6 +36677,10 @@
<field name="END"/>
<field name="END_DAY"/>
<field name="END_MINUTE"/>
+ <field name="ENTERPRISE_CONTENT_BY_DAY_URI" since="29"/>
+ <field name="ENTERPRISE_CONTENT_SEARCH_BY_DAY_URI" since="29"/>
+ <field name="ENTERPRISE_CONTENT_SEARCH_URI" since="29"/>
+ <field name="ENTERPRISE_CONTENT_URI" since="29"/>
<field name="EVENT_ID"/>
<field name="START_DAY"/>
<field name="START_MINUTE"/>
@@ -34937,7 +36690,6 @@
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/CalendarContract$EventsColumns"/>
<implements name="android/provider/CalendarContract$RemindersColumns"/>
- <method name="&lt;init>()V"/>
<method name="query(Landroid/content/ContentResolver;J[Ljava/lang/String;)Landroid/database/Cursor;"/>
<field name="CONTENT_URI"/>
</class>
@@ -34967,7 +36719,6 @@
<class name="android/provider/CalendarContract$SyncState" since="14">
<extends name="java/lang/Object"/>
<implements name="android/provider/SyncStateContract$Columns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
</class>
<class name="android/provider/CallLog" since="1">
@@ -34983,6 +36734,15 @@
<method name="getLastOutgoingCall(Landroid/content/Context;)Ljava/lang/String;" since="8"/>
<field name="ANSWERED_EXTERNALLY_TYPE" since="25"/>
<field name="BLOCKED_TYPE" since="24"/>
+ <field name="BLOCK_REASON" since="29"/>
+ <field name="BLOCK_REASON_BLOCKED_NUMBER" since="29"/>
+ <field name="BLOCK_REASON_CALL_SCREENING_SERVICE" since="29"/>
+ <field name="BLOCK_REASON_DIRECT_TO_VOICEMAIL" since="29"/>
+ <field name="BLOCK_REASON_NOT_BLOCKED" since="29"/>
+ <field name="BLOCK_REASON_NOT_IN_CONTACTS" since="29"/>
+ <field name="BLOCK_REASON_PAY_PHONE" since="29"/>
+ <field name="BLOCK_REASON_RESTRICTED_NUMBER" since="29"/>
+ <field name="BLOCK_REASON_UNKNOWN_NUMBER" since="29"/>
<field name="CACHED_FORMATTED_NUMBER" since="21"/>
<field name="CACHED_LOOKUP_URI" since="21"/>
<field name="CACHED_MATCHED_NUMBER" since="21"/>
@@ -34992,6 +36752,8 @@
<field name="CACHED_NUMBER_TYPE"/>
<field name="CACHED_PHOTO_ID" since="21"/>
<field name="CACHED_PHOTO_URI" since="23"/>
+ <field name="CALL_SCREENING_APP_NAME" since="29"/>
+ <field name="CALL_SCREENING_COMPONENT_NAME" since="29"/>
<field name="CONTENT_FILTER_URI"/>
<field name="CONTENT_ITEM_TYPE"/>
<field name="CONTENT_TYPE"/>
@@ -35004,10 +36766,12 @@
<field name="DURATION"/>
<field name="EXTRA_CALL_TYPE_FILTER" since="21"/>
<field name="FEATURES" since="21"/>
+ <field name="FEATURES_ASSISTED_DIALING_USED" since="30"/>
<field name="FEATURES_HD_CALL" since="26"/>
<field name="FEATURES_PULLED_EXTERNALLY" since="25"/>
<field name="FEATURES_RTT" since="28"/>
<field name="FEATURES_VIDEO" since="21"/>
+ <field name="FEATURES_VOLTE" since="30"/>
<field name="FEATURES_WIFI" since="26"/>
<field name="GEOCODED_LOCATION" since="21"/>
<field name="INCOMING_TYPE"/>
@@ -35036,191 +36800,185 @@
</class>
<class name="android/provider/Contacts" since="1" deprecated="5">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <field name="AUTHORITY" deprecated="16"/>
- <field name="CONTENT_URI" deprecated="16"/>
- <field name="KIND_EMAIL" deprecated="16"/>
- <field name="KIND_IM" deprecated="16"/>
- <field name="KIND_ORGANIZATION" deprecated="16"/>
- <field name="KIND_PHONE" deprecated="16"/>
- <field name="KIND_POSTAL" deprecated="16"/>
+ <field name="AUTHORITY" deprecated="15"/>
+ <field name="CONTENT_URI" deprecated="15"/>
+ <field name="KIND_EMAIL" deprecated="15"/>
+ <field name="KIND_IM" deprecated="15"/>
+ <field name="KIND_ORGANIZATION" deprecated="15"/>
+ <field name="KIND_PHONE" deprecated="15"/>
+ <field name="KIND_POSTAL" deprecated="15"/>
</class>
<class name="android/provider/Contacts$ContactMethods" since="1" deprecated="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Contacts$ContactMethodsColumns"/>
<implements name="android/provider/Contacts$PeopleColumns"/>
- <method name="&lt;init>()V"/>
- <method name="addPostalLocation(Landroid/content/Context;JDD)V" deprecated="16"/>
- <method name="decodeImProtocol(Ljava/lang/String;)Ljava/lang/Object;" deprecated="16"/>
- <method name="encodeCustomImProtocol(Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
- <method name="encodePredefinedImProtocol(I)Ljava/lang/String;" deprecated="16"/>
- <method name="getDisplayLabel(Landroid/content/Context;IILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="16"/>
- <field name="CONTENT_EMAIL_ITEM_TYPE" deprecated="16"/>
- <field name="CONTENT_EMAIL_TYPE" deprecated="16"/>
- <field name="CONTENT_EMAIL_URI" deprecated="16"/>
- <field name="CONTENT_IM_ITEM_TYPE" deprecated="16"/>
- <field name="CONTENT_POSTAL_ITEM_TYPE" deprecated="16"/>
- <field name="CONTENT_POSTAL_TYPE" deprecated="16"/>
- <field name="CONTENT_TYPE" deprecated="16"/>
- <field name="CONTENT_URI" deprecated="16"/>
- <field name="DEFAULT_SORT_ORDER" deprecated="16"/>
- <field name="PERSON_ID" deprecated="16"/>
- <field name="POSTAL_LOCATION_LATITUDE" deprecated="16"/>
- <field name="POSTAL_LOCATION_LONGITUDE" deprecated="16"/>
- <field name="PROTOCOL_AIM" deprecated="16"/>
- <field name="PROTOCOL_GOOGLE_TALK" deprecated="16"/>
- <field name="PROTOCOL_ICQ" deprecated="16"/>
- <field name="PROTOCOL_JABBER" deprecated="16"/>
- <field name="PROTOCOL_MSN" deprecated="16"/>
- <field name="PROTOCOL_QQ" deprecated="16"/>
- <field name="PROTOCOL_SKYPE" deprecated="16"/>
- <field name="PROTOCOL_YAHOO" deprecated="16"/>
+ <method name="addPostalLocation(Landroid/content/Context;JDD)V" deprecated="15"/>
+ <method name="decodeImProtocol(Ljava/lang/String;)Ljava/lang/Object;" deprecated="15"/>
+ <method name="encodeCustomImProtocol(Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
+ <method name="encodePredefinedImProtocol(I)Ljava/lang/String;" deprecated="15"/>
+ <method name="getDisplayLabel(Landroid/content/Context;IILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="15"/>
+ <field name="CONTENT_EMAIL_ITEM_TYPE" deprecated="15"/>
+ <field name="CONTENT_EMAIL_TYPE" deprecated="15"/>
+ <field name="CONTENT_EMAIL_URI" deprecated="15"/>
+ <field name="CONTENT_IM_ITEM_TYPE" deprecated="15"/>
+ <field name="CONTENT_POSTAL_ITEM_TYPE" deprecated="15"/>
+ <field name="CONTENT_POSTAL_TYPE" deprecated="15"/>
+ <field name="CONTENT_TYPE" deprecated="15"/>
+ <field name="CONTENT_URI" deprecated="15"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+ <field name="PERSON_ID" deprecated="15"/>
+ <field name="POSTAL_LOCATION_LATITUDE" deprecated="15"/>
+ <field name="POSTAL_LOCATION_LONGITUDE" deprecated="15"/>
+ <field name="PROTOCOL_AIM" deprecated="15"/>
+ <field name="PROTOCOL_GOOGLE_TALK" deprecated="15"/>
+ <field name="PROTOCOL_ICQ" deprecated="15"/>
+ <field name="PROTOCOL_JABBER" deprecated="15"/>
+ <field name="PROTOCOL_MSN" deprecated="15"/>
+ <field name="PROTOCOL_QQ" deprecated="15"/>
+ <field name="PROTOCOL_SKYPE" deprecated="15"/>
+ <field name="PROTOCOL_YAHOO" deprecated="15"/>
</class>
<class name="android/provider/Contacts$ContactMethodsColumns" since="1" deprecated="5">
<extends name="java/lang/Object"/>
- <field name="AUX_DATA" deprecated="16"/>
- <field name="DATA" deprecated="16"/>
- <field name="ISPRIMARY" deprecated="16"/>
- <field name="KIND" deprecated="16"/>
- <field name="LABEL" deprecated="16"/>
- <field name="TYPE" deprecated="16"/>
- <field name="TYPE_CUSTOM" deprecated="16"/>
- <field name="TYPE_HOME" deprecated="16"/>
- <field name="TYPE_OTHER" deprecated="16"/>
- <field name="TYPE_WORK" deprecated="16"/>
+ <field name="AUX_DATA" deprecated="15"/>
+ <field name="DATA" deprecated="15"/>
+ <field name="ISPRIMARY" deprecated="15"/>
+ <field name="KIND" deprecated="15"/>
+ <field name="LABEL" deprecated="15"/>
+ <field name="TYPE" deprecated="15"/>
+ <field name="TYPE_CUSTOM" deprecated="15"/>
+ <field name="TYPE_HOME" deprecated="15"/>
+ <field name="TYPE_OTHER" deprecated="15"/>
+ <field name="TYPE_WORK" deprecated="15"/>
</class>
<class name="android/provider/Contacts$Extensions" since="1" deprecated="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Contacts$ExtensionsColumns"/>
- <method name="&lt;init>()V"/>
- <field name="CONTENT_ITEM_TYPE" deprecated="16"/>
- <field name="CONTENT_TYPE" deprecated="16"/>
- <field name="CONTENT_URI" deprecated="16"/>
- <field name="DEFAULT_SORT_ORDER" deprecated="16"/>
- <field name="PERSON_ID" deprecated="16"/>
+ <field name="CONTENT_ITEM_TYPE" deprecated="15"/>
+ <field name="CONTENT_TYPE" deprecated="15"/>
+ <field name="CONTENT_URI" deprecated="15"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+ <field name="PERSON_ID" deprecated="15"/>
</class>
<class name="android/provider/Contacts$ExtensionsColumns" since="1" deprecated="5">
<extends name="java/lang/Object"/>
- <field name="NAME" deprecated="16"/>
- <field name="VALUE" deprecated="16"/>
+ <field name="NAME" deprecated="15"/>
+ <field name="VALUE" deprecated="15"/>
</class>
<class name="android/provider/Contacts$GroupMembership" since="1" deprecated="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Contacts$GroupsColumns"/>
- <method name="&lt;init>()V"/>
- <field name="CONTENT_DIRECTORY" deprecated="16"/>
- <field name="CONTENT_ITEM_TYPE" deprecated="16"/>
- <field name="CONTENT_TYPE" deprecated="16"/>
- <field name="CONTENT_URI" deprecated="16"/>
- <field name="DEFAULT_SORT_ORDER" deprecated="16"/>
- <field name="GROUP_ID" deprecated="16"/>
- <field name="GROUP_SYNC_ACCOUNT" deprecated="16"/>
- <field name="GROUP_SYNC_ACCOUNT_TYPE" since="5" deprecated="16"/>
- <field name="GROUP_SYNC_ID" deprecated="16"/>
- <field name="PERSON_ID" deprecated="16"/>
- <field name="RAW_CONTENT_URI" deprecated="16"/>
+ <field name="CONTENT_DIRECTORY" deprecated="15"/>
+ <field name="CONTENT_ITEM_TYPE" deprecated="15"/>
+ <field name="CONTENT_TYPE" deprecated="15"/>
+ <field name="CONTENT_URI" deprecated="15"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+ <field name="GROUP_ID" deprecated="15"/>
+ <field name="GROUP_SYNC_ACCOUNT" deprecated="15"/>
+ <field name="GROUP_SYNC_ACCOUNT_TYPE" since="5" deprecated="15"/>
+ <field name="GROUP_SYNC_ID" deprecated="15"/>
+ <field name="PERSON_ID" deprecated="15"/>
+ <field name="RAW_CONTENT_URI" deprecated="15"/>
</class>
<class name="android/provider/Contacts$Groups" since="1" deprecated="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Contacts$GroupsColumns"/>
- <method name="&lt;init>()V"/>
- <field name="CONTENT_ITEM_TYPE" deprecated="16"/>
- <field name="CONTENT_TYPE" deprecated="16"/>
- <field name="CONTENT_URI" deprecated="16"/>
- <field name="DEFAULT_SORT_ORDER" deprecated="16"/>
- <field name="DELETED_CONTENT_URI" deprecated="16"/>
- <field name="GROUP_ANDROID_STARRED" deprecated="16"/>
- <field name="GROUP_MY_CONTACTS" deprecated="16"/>
+ <field name="CONTENT_ITEM_TYPE" deprecated="15"/>
+ <field name="CONTENT_TYPE" deprecated="15"/>
+ <field name="CONTENT_URI" deprecated="15"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+ <field name="DELETED_CONTENT_URI" deprecated="15"/>
+ <field name="GROUP_ANDROID_STARRED" deprecated="15"/>
+ <field name="GROUP_MY_CONTACTS" deprecated="15"/>
</class>
<class name="android/provider/Contacts$GroupsColumns" since="1" deprecated="5">
<extends name="java/lang/Object"/>
- <field name="NAME" deprecated="16"/>
- <field name="NOTES" deprecated="16"/>
- <field name="SHOULD_SYNC" deprecated="16"/>
- <field name="SYSTEM_ID" deprecated="16"/>
+ <field name="NAME" deprecated="15"/>
+ <field name="NOTES" deprecated="15"/>
+ <field name="SHOULD_SYNC" deprecated="15"/>
+ <field name="SYSTEM_ID" deprecated="15"/>
</class>
<class name="android/provider/Contacts$Intents" since="1" deprecated="5">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" deprecated="16"/>
- <field name="ATTACH_IMAGE" deprecated="16"/>
- <field name="EXTRA_CREATE_DESCRIPTION" since="3" deprecated="16"/>
- <field name="EXTRA_FORCE_CREATE" since="3" deprecated="16"/>
- <field name="SEARCH_SUGGESTION_CLICKED" deprecated="16"/>
- <field name="SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED" deprecated="16"/>
- <field name="SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED" deprecated="16"/>
- <field name="SHOW_OR_CREATE_CONTACT" since="3" deprecated="16"/>
+ <method name="&lt;init>()V" deprecated="15"/>
+ <field name="ATTACH_IMAGE" deprecated="15"/>
+ <field name="EXTRA_CREATE_DESCRIPTION" since="3" deprecated="15"/>
+ <field name="EXTRA_FORCE_CREATE" since="3" deprecated="15"/>
+ <field name="SEARCH_SUGGESTION_CLICKED" deprecated="15"/>
+ <field name="SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED" deprecated="15"/>
+ <field name="SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED" deprecated="15"/>
+ <field name="SHOW_OR_CREATE_CONTACT" since="3" deprecated="15"/>
</class>
<class name="android/provider/Contacts$Intents$Insert" since="1" deprecated="5">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" deprecated="16"/>
- <field name="ACTION" deprecated="16"/>
- <field name="COMPANY" deprecated="16"/>
- <field name="EMAIL" deprecated="16"/>
- <field name="EMAIL_ISPRIMARY" deprecated="16"/>
- <field name="EMAIL_TYPE" deprecated="16"/>
- <field name="FULL_MODE" deprecated="16"/>
- <field name="IM_HANDLE" deprecated="16"/>
- <field name="IM_ISPRIMARY" deprecated="16"/>
- <field name="IM_PROTOCOL" deprecated="16"/>
- <field name="JOB_TITLE" deprecated="16"/>
- <field name="NAME" deprecated="16"/>
- <field name="NOTES" deprecated="16"/>
- <field name="PHONE" deprecated="16"/>
- <field name="PHONETIC_NAME" since="3" deprecated="16"/>
- <field name="PHONE_ISPRIMARY" deprecated="16"/>
- <field name="PHONE_TYPE" deprecated="16"/>
- <field name="POSTAL" deprecated="16"/>
- <field name="POSTAL_ISPRIMARY" deprecated="16"/>
- <field name="POSTAL_TYPE" deprecated="16"/>
- <field name="SECONDARY_EMAIL" since="3" deprecated="16"/>
- <field name="SECONDARY_EMAIL_TYPE" since="3" deprecated="16"/>
- <field name="SECONDARY_PHONE" since="3" deprecated="16"/>
- <field name="SECONDARY_PHONE_TYPE" since="3" deprecated="16"/>
- <field name="TERTIARY_EMAIL" since="3" deprecated="16"/>
- <field name="TERTIARY_EMAIL_TYPE" since="3" deprecated="16"/>
- <field name="TERTIARY_PHONE" since="3" deprecated="16"/>
- <field name="TERTIARY_PHONE_TYPE" since="3" deprecated="16"/>
+ <method name="&lt;init>()V" deprecated="15"/>
+ <field name="ACTION" deprecated="15"/>
+ <field name="COMPANY" deprecated="15"/>
+ <field name="EMAIL" deprecated="15"/>
+ <field name="EMAIL_ISPRIMARY" deprecated="15"/>
+ <field name="EMAIL_TYPE" deprecated="15"/>
+ <field name="FULL_MODE" deprecated="15"/>
+ <field name="IM_HANDLE" deprecated="15"/>
+ <field name="IM_ISPRIMARY" deprecated="15"/>
+ <field name="IM_PROTOCOL" deprecated="15"/>
+ <field name="JOB_TITLE" deprecated="15"/>
+ <field name="NAME" deprecated="15"/>
+ <field name="NOTES" deprecated="15"/>
+ <field name="PHONE" deprecated="15"/>
+ <field name="PHONETIC_NAME" since="3" deprecated="15"/>
+ <field name="PHONE_ISPRIMARY" deprecated="15"/>
+ <field name="PHONE_TYPE" deprecated="15"/>
+ <field name="POSTAL" deprecated="15"/>
+ <field name="POSTAL_ISPRIMARY" deprecated="15"/>
+ <field name="POSTAL_TYPE" deprecated="15"/>
+ <field name="SECONDARY_EMAIL" since="3" deprecated="15"/>
+ <field name="SECONDARY_EMAIL_TYPE" since="3" deprecated="15"/>
+ <field name="SECONDARY_PHONE" since="3" deprecated="15"/>
+ <field name="SECONDARY_PHONE_TYPE" since="3" deprecated="15"/>
+ <field name="TERTIARY_EMAIL" since="3" deprecated="15"/>
+ <field name="TERTIARY_EMAIL_TYPE" since="3" deprecated="15"/>
+ <field name="TERTIARY_PHONE" since="3" deprecated="15"/>
+ <field name="TERTIARY_PHONE_TYPE" since="3" deprecated="15"/>
</class>
<class name="android/provider/Contacts$Intents$UI" since="1" deprecated="5">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" deprecated="16"/>
- <field name="FILTER_CONTACTS_ACTION" deprecated="16"/>
- <field name="FILTER_TEXT_EXTRA_KEY" deprecated="16"/>
- <field name="GROUP_NAME_EXTRA_KEY" deprecated="16"/>
- <field name="LIST_ALL_CONTACTS_ACTION" deprecated="16"/>
- <field name="LIST_CONTACTS_WITH_PHONES_ACTION" deprecated="16"/>
- <field name="LIST_DEFAULT" deprecated="16"/>
- <field name="LIST_FREQUENT_ACTION" deprecated="16"/>
- <field name="LIST_GROUP_ACTION" deprecated="16"/>
- <field name="LIST_STARRED_ACTION" deprecated="16"/>
- <field name="LIST_STREQUENT_ACTION" deprecated="16"/>
- <field name="TITLE_EXTRA_KEY" deprecated="16"/>
+ <method name="&lt;init>()V" deprecated="15"/>
+ <field name="FILTER_CONTACTS_ACTION" deprecated="15"/>
+ <field name="FILTER_TEXT_EXTRA_KEY" deprecated="15"/>
+ <field name="GROUP_NAME_EXTRA_KEY" deprecated="15"/>
+ <field name="LIST_ALL_CONTACTS_ACTION" deprecated="15"/>
+ <field name="LIST_CONTACTS_WITH_PHONES_ACTION" deprecated="15"/>
+ <field name="LIST_DEFAULT" deprecated="15"/>
+ <field name="LIST_FREQUENT_ACTION" deprecated="15"/>
+ <field name="LIST_GROUP_ACTION" deprecated="15"/>
+ <field name="LIST_STARRED_ACTION" deprecated="15"/>
+ <field name="LIST_STREQUENT_ACTION" deprecated="15"/>
+ <field name="TITLE_EXTRA_KEY" deprecated="15"/>
</class>
<class name="android/provider/Contacts$OrganizationColumns" since="1" deprecated="5">
<extends name="java/lang/Object"/>
- <field name="COMPANY" deprecated="16"/>
- <field name="ISPRIMARY" deprecated="16"/>
- <field name="LABEL" deprecated="16"/>
- <field name="PERSON_ID" deprecated="16"/>
- <field name="TITLE" deprecated="16"/>
- <field name="TYPE" deprecated="16"/>
- <field name="TYPE_CUSTOM" deprecated="16"/>
- <field name="TYPE_OTHER" deprecated="16"/>
- <field name="TYPE_WORK" deprecated="16"/>
+ <field name="COMPANY" deprecated="15"/>
+ <field name="ISPRIMARY" deprecated="15"/>
+ <field name="LABEL" deprecated="15"/>
+ <field name="PERSON_ID" deprecated="15"/>
+ <field name="TITLE" deprecated="15"/>
+ <field name="TYPE" deprecated="15"/>
+ <field name="TYPE_CUSTOM" deprecated="15"/>
+ <field name="TYPE_OTHER" deprecated="15"/>
+ <field name="TYPE_WORK" deprecated="15"/>
</class>
<class name="android/provider/Contacts$Organizations" since="1" deprecated="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Contacts$OrganizationColumns"/>
- <method name="&lt;init>()V"/>
- <method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="16"/>
- <field name="CONTENT_DIRECTORY" deprecated="16"/>
- <field name="CONTENT_URI" deprecated="16"/>
- <field name="DEFAULT_SORT_ORDER" deprecated="16"/>
+ <method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="15"/>
+ <field name="CONTENT_DIRECTORY" deprecated="15"/>
+ <field name="CONTENT_URI" deprecated="15"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="15"/>
</class>
<class name="android/provider/Contacts$People" since="1" deprecated="5">
<extends name="java/lang/Object"/>
@@ -35228,148 +36986,141 @@
<implements name="android/provider/Contacts$PeopleColumns"/>
<implements name="android/provider/Contacts$PhonesColumns"/>
<implements name="android/provider/Contacts$PresenceColumns"/>
- <method name="&lt;init>()V" deprecated="29"/>
- <method name="addToGroup(Landroid/content/ContentResolver;JJ)Landroid/net/Uri;" deprecated="16"/>
- <method name="addToGroup(Landroid/content/ContentResolver;JLjava/lang/String;)Landroid/net/Uri;" deprecated="16"/>
- <method name="addToMyContactsGroup(Landroid/content/ContentResolver;J)Landroid/net/Uri;" deprecated="16"/>
- <method name="createPersonInMyContactsGroup(Landroid/content/ContentResolver;Landroid/content/ContentValues;)Landroid/net/Uri;" deprecated="16"/>
- <method name="loadContactPhoto(Landroid/content/Context;Landroid/net/Uri;ILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" deprecated="16"/>
- <method name="markAsContacted(Landroid/content/ContentResolver;J)V" deprecated="16"/>
- <method name="openContactPhotoInputStream(Landroid/content/ContentResolver;Landroid/net/Uri;)Ljava/io/InputStream;" deprecated="16"/>
- <method name="queryGroups(Landroid/content/ContentResolver;J)Landroid/database/Cursor;" deprecated="16"/>
- <method name="setPhotoData(Landroid/content/ContentResolver;Landroid/net/Uri;[B)V" deprecated="16"/>
- <field name="CONTENT_FILTER_URI" deprecated="16"/>
- <field name="CONTENT_ITEM_TYPE" deprecated="16"/>
- <field name="CONTENT_TYPE" deprecated="16"/>
- <field name="CONTENT_URI" deprecated="16"/>
- <field name="DEFAULT_SORT_ORDER" deprecated="16"/>
- <field name="DELETED_CONTENT_URI" deprecated="16"/>
- <field name="PRIMARY_EMAIL_ID" deprecated="16"/>
- <field name="PRIMARY_ORGANIZATION_ID" deprecated="16"/>
- <field name="PRIMARY_PHONE_ID" deprecated="16"/>
+ <method name="addToGroup(Landroid/content/ContentResolver;JJ)Landroid/net/Uri;" deprecated="15"/>
+ <method name="addToGroup(Landroid/content/ContentResolver;JLjava/lang/String;)Landroid/net/Uri;" deprecated="15"/>
+ <method name="addToMyContactsGroup(Landroid/content/ContentResolver;J)Landroid/net/Uri;" deprecated="15"/>
+ <method name="createPersonInMyContactsGroup(Landroid/content/ContentResolver;Landroid/content/ContentValues;)Landroid/net/Uri;" deprecated="15"/>
+ <method name="loadContactPhoto(Landroid/content/Context;Landroid/net/Uri;ILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" deprecated="15"/>
+ <method name="markAsContacted(Landroid/content/ContentResolver;J)V" deprecated="15"/>
+ <method name="openContactPhotoInputStream(Landroid/content/ContentResolver;Landroid/net/Uri;)Ljava/io/InputStream;" deprecated="15"/>
+ <method name="queryGroups(Landroid/content/ContentResolver;J)Landroid/database/Cursor;" deprecated="15"/>
+ <method name="setPhotoData(Landroid/content/ContentResolver;Landroid/net/Uri;[B)V" deprecated="15"/>
+ <field name="CONTENT_FILTER_URI" deprecated="15"/>
+ <field name="CONTENT_ITEM_TYPE" deprecated="15"/>
+ <field name="CONTENT_TYPE" deprecated="15"/>
+ <field name="CONTENT_URI" deprecated="15"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+ <field name="DELETED_CONTENT_URI" deprecated="15"/>
+ <field name="PRIMARY_EMAIL_ID" deprecated="15"/>
+ <field name="PRIMARY_ORGANIZATION_ID" deprecated="15"/>
+ <field name="PRIMARY_PHONE_ID" deprecated="15"/>
</class>
<class name="android/provider/Contacts$People$ContactMethods" since="1" deprecated="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Contacts$ContactMethodsColumns"/>
<implements name="android/provider/Contacts$PeopleColumns"/>
- <method name="&lt;init>()V"/>
- <field name="CONTENT_DIRECTORY" deprecated="16"/>
- <field name="DEFAULT_SORT_ORDER" deprecated="16"/>
+ <field name="CONTENT_DIRECTORY" deprecated="15"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="15"/>
</class>
<class name="android/provider/Contacts$People$Extensions" since="1" deprecated="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Contacts$ExtensionsColumns"/>
- <method name="&lt;init>()V" deprecated="29"/>
- <field name="CONTENT_DIRECTORY" deprecated="16"/>
- <field name="DEFAULT_SORT_ORDER" deprecated="16"/>
- <field name="PERSON_ID" deprecated="16"/>
+ <field name="CONTENT_DIRECTORY" deprecated="15"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+ <field name="PERSON_ID" deprecated="15"/>
</class>
<class name="android/provider/Contacts$People$Phones" since="1" deprecated="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Contacts$PeopleColumns"/>
<implements name="android/provider/Contacts$PhonesColumns"/>
- <method name="&lt;init>()V"/>
- <field name="CONTENT_DIRECTORY" deprecated="16"/>
- <field name="DEFAULT_SORT_ORDER" deprecated="16"/>
+ <field name="CONTENT_DIRECTORY" deprecated="15"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="15"/>
</class>
<class name="android/provider/Contacts$PeopleColumns" since="1" deprecated="5">
<extends name="java/lang/Object"/>
- <field name="CUSTOM_RINGTONE" deprecated="16"/>
- <field name="DISPLAY_NAME" deprecated="16"/>
- <field name="LAST_TIME_CONTACTED" deprecated="16"/>
- <field name="NAME" deprecated="16"/>
- <field name="NOTES" deprecated="16"/>
- <field name="PHONETIC_NAME" since="3" deprecated="16"/>
- <field name="PHOTO_VERSION" deprecated="16"/>
- <field name="SEND_TO_VOICEMAIL" deprecated="16"/>
- <field name="STARRED" deprecated="16"/>
- <field name="TIMES_CONTACTED" deprecated="16"/>
+ <field name="CUSTOM_RINGTONE" deprecated="15"/>
+ <field name="DISPLAY_NAME" deprecated="15"/>
+ <field name="LAST_TIME_CONTACTED" deprecated="15"/>
+ <field name="NAME" deprecated="15"/>
+ <field name="NOTES" deprecated="15"/>
+ <field name="PHONETIC_NAME" since="3" deprecated="15"/>
+ <field name="PHOTO_VERSION" deprecated="15"/>
+ <field name="SEND_TO_VOICEMAIL" deprecated="15"/>
+ <field name="STARRED" deprecated="15"/>
+ <field name="TIMES_CONTACTED" deprecated="15"/>
</class>
<class name="android/provider/Contacts$Phones" since="1" deprecated="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Contacts$PeopleColumns"/>
<implements name="android/provider/Contacts$PhonesColumns"/>
- <method name="&lt;init>()V"/>
- <method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="16"/>
- <method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="16"/>
- <field name="CONTENT_FILTER_URL" deprecated="16"/>
- <field name="CONTENT_ITEM_TYPE" deprecated="16"/>
- <field name="CONTENT_TYPE" deprecated="16"/>
- <field name="CONTENT_URI" deprecated="16"/>
- <field name="DEFAULT_SORT_ORDER" deprecated="16"/>
- <field name="PERSON_ID" deprecated="16"/>
+ <method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="15"/>
+ <method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="15"/>
+ <field name="CONTENT_FILTER_URL" deprecated="15"/>
+ <field name="CONTENT_ITEM_TYPE" deprecated="15"/>
+ <field name="CONTENT_TYPE" deprecated="15"/>
+ <field name="CONTENT_URI" deprecated="15"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+ <field name="PERSON_ID" deprecated="15"/>
</class>
<class name="android/provider/Contacts$PhonesColumns" since="1" deprecated="5">
<extends name="java/lang/Object"/>
- <field name="ISPRIMARY" deprecated="16"/>
- <field name="LABEL" deprecated="16"/>
- <field name="NUMBER" deprecated="16"/>
- <field name="NUMBER_KEY" deprecated="16"/>
- <field name="TYPE" deprecated="16"/>
- <field name="TYPE_CUSTOM" deprecated="16"/>
- <field name="TYPE_FAX_HOME" deprecated="16"/>
- <field name="TYPE_FAX_WORK" deprecated="16"/>
- <field name="TYPE_HOME" deprecated="16"/>
- <field name="TYPE_MOBILE" deprecated="16"/>
- <field name="TYPE_OTHER" deprecated="16"/>
- <field name="TYPE_PAGER" deprecated="16"/>
- <field name="TYPE_WORK" deprecated="16"/>
+ <field name="ISPRIMARY" deprecated="15"/>
+ <field name="LABEL" deprecated="15"/>
+ <field name="NUMBER" deprecated="15"/>
+ <field name="NUMBER_KEY" deprecated="15"/>
+ <field name="TYPE" deprecated="15"/>
+ <field name="TYPE_CUSTOM" deprecated="15"/>
+ <field name="TYPE_FAX_HOME" deprecated="15"/>
+ <field name="TYPE_FAX_WORK" deprecated="15"/>
+ <field name="TYPE_HOME" deprecated="15"/>
+ <field name="TYPE_MOBILE" deprecated="15"/>
+ <field name="TYPE_OTHER" deprecated="15"/>
+ <field name="TYPE_PAGER" deprecated="15"/>
+ <field name="TYPE_WORK" deprecated="15"/>
</class>
<class name="android/provider/Contacts$Photos" since="1" deprecated="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Contacts$PhotosColumns"/>
- <method name="&lt;init>()V"/>
- <field name="CONTENT_DIRECTORY" deprecated="16"/>
- <field name="CONTENT_URI" deprecated="16"/>
- <field name="DEFAULT_SORT_ORDER" deprecated="16"/>
+ <field name="CONTENT_DIRECTORY" deprecated="15"/>
+ <field name="CONTENT_URI" deprecated="15"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="15"/>
</class>
<class name="android/provider/Contacts$PhotosColumns" since="1" deprecated="5">
<extends name="java/lang/Object"/>
- <field name="DATA" deprecated="16"/>
- <field name="DOWNLOAD_REQUIRED" deprecated="16"/>
- <field name="EXISTS_ON_SERVER" deprecated="16"/>
- <field name="LOCAL_VERSION" deprecated="16"/>
- <field name="PERSON_ID" deprecated="16"/>
- <field name="SYNC_ERROR" deprecated="16"/>
+ <field name="DATA" deprecated="15"/>
+ <field name="DOWNLOAD_REQUIRED" deprecated="15"/>
+ <field name="EXISTS_ON_SERVER" deprecated="15"/>
+ <field name="LOCAL_VERSION" deprecated="15"/>
+ <field name="PERSON_ID" deprecated="15"/>
+ <field name="SYNC_ERROR" deprecated="15"/>
</class>
<class name="android/provider/Contacts$PresenceColumns" since="1" deprecated="5">
<extends name="java/lang/Object"/>
- <field name="AVAILABLE" since="8"/>
- <field name="AWAY" since="8"/>
- <field name="DO_NOT_DISTURB" since="8"/>
- <field name="IDLE" since="8"/>
- <field name="IM_ACCOUNT" deprecated="16"/>
- <field name="IM_HANDLE" deprecated="16"/>
- <field name="IM_PROTOCOL" deprecated="16"/>
- <field name="INVISIBLE" since="8"/>
- <field name="OFFLINE" since="8"/>
- <field name="PRESENCE_CUSTOM_STATUS" since="8"/>
- <field name="PRESENCE_STATUS" since="8"/>
- <field name="PRIORITY" since="8"/>
+ <field name="AVAILABLE" since="8" deprecated="29"/>
+ <field name="AWAY" since="8" deprecated="29"/>
+ <field name="DO_NOT_DISTURB" since="8" deprecated="29"/>
+ <field name="IDLE" since="8" deprecated="29"/>
+ <field name="IM_ACCOUNT" deprecated="15"/>
+ <field name="IM_HANDLE" deprecated="15"/>
+ <field name="IM_PROTOCOL" deprecated="15"/>
+ <field name="INVISIBLE" since="8" deprecated="29"/>
+ <field name="OFFLINE" since="8" deprecated="29"/>
+ <field name="PRESENCE_CUSTOM_STATUS" since="8" deprecated="29"/>
+ <field name="PRESENCE_STATUS" since="8" deprecated="29"/>
+ <field name="PRIORITY" since="8" deprecated="29"/>
</class>
<class name="android/provider/Contacts$Settings" since="1" deprecated="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Contacts$SettingsColumns"/>
- <method name="&lt;init>()V"/>
- <method name="getSetting(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
- <method name="setSetting(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="16"/>
- <field name="CONTENT_DIRECTORY" deprecated="16"/>
- <field name="CONTENT_URI" deprecated="16"/>
- <field name="DEFAULT_SORT_ORDER" deprecated="16"/>
- <field name="SYNC_EVERYTHING" deprecated="16"/>
+ <method name="getSetting(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
+ <method name="setSetting(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="15"/>
+ <field name="CONTENT_DIRECTORY" deprecated="15"/>
+ <field name="CONTENT_URI" deprecated="15"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+ <field name="SYNC_EVERYTHING" deprecated="15"/>
</class>
<class name="android/provider/Contacts$SettingsColumns" since="1" deprecated="5">
<extends name="java/lang/Object"/>
- <field name="KEY" deprecated="16"/>
- <field name="VALUE" deprecated="16"/>
- <field name="_SYNC_ACCOUNT" deprecated="16"/>
- <field name="_SYNC_ACCOUNT_TYPE" since="5" deprecated="16"/>
+ <field name="KEY" deprecated="15"/>
+ <field name="VALUE" deprecated="15"/>
+ <field name="_SYNC_ACCOUNT" deprecated="15"/>
+ <field name="_SYNC_ACCOUNT_TYPE" since="5" deprecated="15"/>
</class>
<class name="android/provider/ContactsContract" since="5">
<extends name="java/lang/Object"/>
@@ -35390,7 +37141,6 @@
<class name="android/provider/ContactsContract$AggregationExceptions" since="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_ITEM_TYPE"/>
<field name="CONTENT_TYPE"/>
<field name="CONTENT_URI"/>
@@ -35410,7 +37160,6 @@
</class>
<class name="android/provider/ContactsContract$CommonDataKinds" since="5">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/provider/ContactsContract$CommonDataKinds$BaseTypes" since="5">
<extends name="java/lang/Object"/>
@@ -35451,7 +37200,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
<method name="getTypeLabelResource(I)I"/>
<field name="ADDRESS" since="11"/>
@@ -35475,7 +37223,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" since="21"/>
<method name="getTypeResource(Ljava/lang/Integer;)I"/>
<field name="CONTENT_ITEM_TYPE"/>
@@ -35490,7 +37237,6 @@
<class name="android/provider/ContactsContract$CommonDataKinds$GroupMembership" since="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_ITEM_TYPE"/>
<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
@@ -35501,7 +37247,6 @@
<class name="android/provider/ContactsContract$CommonDataKinds$Identity" since="14">
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_ITEM_TYPE"/>
<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
@@ -35513,7 +37258,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<method name="getProtocolLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
<method name="getProtocolLabelResource(I)I"/>
<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
@@ -35542,7 +37286,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_ITEM_TYPE"/>
<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
@@ -35551,14 +37294,13 @@
<field name="TYPE_DEFAULT"/>
<field name="TYPE_INITIALS"/>
<field name="TYPE_MAIDEN_NAME" since="9"/>
- <field name="TYPE_MAINDEN_NAME" deprecated="16"/>
+ <field name="TYPE_MAINDEN_NAME" deprecated="15"/>
<field name="TYPE_OTHER_NAME"/>
<field name="TYPE_SHORT_NAME"/>
</class>
<class name="android/provider/ContactsContract$CommonDataKinds$Note" since="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_ITEM_TYPE"/>
<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
@@ -35569,7 +37311,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
<method name="getTypeLabelResource(I)I"/>
<field name="COMPANY"/>
@@ -35591,7 +37332,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
<method name="getTypeLabelResource(I)I"/>
<field name="CONTENT_FILTER_URI"/>
@@ -35630,7 +37370,6 @@
<class name="android/provider/ContactsContract$CommonDataKinds$Photo" since="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_ITEM_TYPE"/>
<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
@@ -35642,7 +37381,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" since="11"/>
<method name="getTypeLabelResource(I)I" since="11"/>
<field name="CONTENT_ITEM_TYPE"/>
@@ -35669,7 +37407,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
<method name="getTypeLabelResource(I)I"/>
<field name="CONTENT_ITEM_TYPE"/>
@@ -35684,7 +37421,6 @@
<class name="android/provider/ContactsContract$CommonDataKinds$StructuredName" since="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_ITEM_TYPE"/>
<field name="DISPLAY_NAME"/>
<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
@@ -35705,7 +37441,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
<method name="getTypeLabelResource(I)I"/>
<field name="CITY"/>
@@ -35730,7 +37465,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_ITEM_TYPE"/>
<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
@@ -35757,11 +37491,11 @@
<class name="android/provider/ContactsContract$ContactOptionsColumns" since="5">
<extends name="java/lang/Object"/>
<field name="CUSTOM_RINGTONE"/>
- <field name="LAST_TIME_CONTACTED"/>
+ <field name="LAST_TIME_CONTACTED" deprecated="29"/>
<field name="PINNED" since="21"/>
<field name="SEND_TO_VOICEMAIL"/>
<field name="STARRED"/>
- <field name="TIMES_CONTACTED"/>
+ <field name="TIMES_CONTACTED" deprecated="29"/>
</class>
<class name="android/provider/ContactsContract$ContactStatusColumns" since="5">
<extends name="java/lang/Object"/>
@@ -35780,7 +37514,6 @@
<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
<implements name="android/provider/ContactsContract$ContactStatusColumns"/>
<implements name="android/provider/ContactsContract$ContactsColumns"/>
- <method name="&lt;init>()V"/>
<method name="getLookupUri(JLjava/lang/String;)Landroid/net/Uri;"/>
<method name="getLookupUri(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;"/>
<method name="isEnterpriseContactId(J)Z" since="21"/>
@@ -35789,7 +37522,7 @@
<method name="openContactPhotoInputStream(Landroid/content/ContentResolver;Landroid/net/Uri;)Ljava/io/InputStream;"/>
<method name="openContactPhotoInputStream(Landroid/content/ContentResolver;Landroid/net/Uri;Z)Ljava/io/InputStream;" since="14"/>
<field name="CONTENT_FILTER_URI"/>
- <field name="CONTENT_FREQUENT_URI" since="21"/>
+ <field name="CONTENT_FREQUENT_URI" since="21" deprecated="29"/>
<field name="CONTENT_GROUP_URI"/>
<field name="CONTENT_ITEM_TYPE"/>
<field name="CONTENT_LOOKUP_URI"/>
@@ -35812,7 +37545,6 @@
<implements name="android/provider/ContactsContract$ContactOptionsColumns" since="11"/>
<implements name="android/provider/ContactsContract$ContactStatusColumns" since="11"/>
<implements name="android/provider/ContactsContract$ContactsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_DIRECTORY"/>
</class>
<class name="android/provider/ContactsContract$Contacts$AggregationSuggestions$Builder" since="23">
@@ -35827,7 +37559,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/ContactsContract$DataColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_DIRECTORY"/>
</class>
<class name="android/provider/ContactsContract$Contacts$Entity" since="11">
@@ -35843,7 +37574,6 @@
<implements name="android/provider/ContactsContract$RawContactsColumns"/>
<implements name="android/provider/ContactsContract$StatusColumns"/>
<implements name="android/provider/ContactsContract$SyncColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_DIRECTORY"/>
<field name="DATA_ID"/>
<field name="RAW_CONTACT_ID"/>
@@ -35853,7 +37583,6 @@
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/ContactsContract$DataColumns" removed="11"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins" since="11"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_DIRECTORY"/>
<field name="DISPLAY_PHOTO" since="14"/>
<field name="PHOTO" since="11"/>
@@ -35862,7 +37591,6 @@
<class name="android/provider/ContactsContract$Contacts$StreamItems" since="15" deprecated="21" removed="23">
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$StreamItemsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_DIRECTORY" deprecated="21"/>
</class>
<class name="android/provider/ContactsContract$ContactsColumns" since="5">
@@ -35883,7 +37611,6 @@
<class name="android/provider/ContactsContract$Data" since="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
- <method name="&lt;init>()V"/>
<method name="getContactLookupUri(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;"/>
<field name="CONTENT_TYPE"/>
<field name="CONTENT_URI"/>
@@ -35937,25 +37664,24 @@
<implements name="android/provider/ContactsContract$RawContactsColumns"/>
<implements name="android/provider/ContactsContract$StatusColumns"/>
</class>
- <class name="android/provider/ContactsContract$DataUsageFeedback" since="14">
+ <class name="android/provider/ContactsContract$DataUsageFeedback" since="14" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <field name="DELETE_USAGE_URI" since="16"/>
- <field name="FEEDBACK_URI"/>
- <field name="USAGE_TYPE"/>
- <field name="USAGE_TYPE_CALL"/>
- <field name="USAGE_TYPE_LONG_TEXT"/>
- <field name="USAGE_TYPE_SHORT_TEXT"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <field name="DELETE_USAGE_URI" since="16" deprecated="29"/>
+ <field name="FEEDBACK_URI" deprecated="29"/>
+ <field name="USAGE_TYPE" deprecated="29"/>
+ <field name="USAGE_TYPE_CALL" deprecated="29"/>
+ <field name="USAGE_TYPE_LONG_TEXT" deprecated="29"/>
+ <field name="USAGE_TYPE_SHORT_TEXT" deprecated="29"/>
</class>
<class name="android/provider/ContactsContract$DataUsageStatColumns" since="18">
<extends name="java/lang/Object"/>
- <field name="LAST_TIME_USED"/>
- <field name="TIMES_USED"/>
+ <field name="LAST_TIME_USED" deprecated="29"/>
+ <field name="TIMES_USED" deprecated="29"/>
</class>
<class name="android/provider/ContactsContract$DeletedContacts" since="18">
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$DeletedContactsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="DAYS_KEPT_MILLISECONDS"/>
</class>
@@ -35967,7 +37693,6 @@
<class name="android/provider/ContactsContract$Directory" since="11">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <method name="&lt;init>()V"/>
<method name="isEnterpriseDirectoryId(J)Z" since="24"/>
<method name="isRemoteDirectoryId(J)Z" since="24"/>
<method name="notifyDirectoryChange(Landroid/content/ContentResolver;)V"/>
@@ -36012,7 +37737,6 @@
</class>
<class name="android/provider/ContactsContract$DisplayPhoto" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_MAX_DIMENSIONS_URI"/>
<field name="CONTENT_URI"/>
<field name="DISPLAY_MAX_DIM"/>
@@ -36032,7 +37756,6 @@
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/ContactsContract$GroupsColumns"/>
<implements name="android/provider/ContactsContract$SyncColumns"/>
- <method name="&lt;init>()V"/>
<method name="newEntityIterator(Landroid/database/Cursor;)Landroid/content/EntityIterator;" since="8"/>
<field name="CONTENT_ITEM_TYPE"/>
<field name="CONTENT_SUMMARY_URI"/>
@@ -36116,7 +37839,6 @@
<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
<implements name="android/provider/ContactsContract$ContactsColumns"/>
<implements name="android/provider/ContactsContract$PhoneLookupColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_FILTER_URI"/>
<field name="ENTERPRISE_CONTENT_FILTER_URI" since="21"/>
<field name="QUERY_PARAMETER_SIP_ADDRESS" since="21"/>
@@ -36147,7 +37869,7 @@
</class>
<class name="android/provider/ContactsContract$Presence" since="5" deprecated="5">
<extends name="android/provider/ContactsContract$StatusUpdates"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
</class>
<class name="android/provider/ContactsContract$PresenceColumns" since="5">
<extends name="java/lang/Object"/>
@@ -36164,7 +37886,6 @@
<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
<implements name="android/provider/ContactsContract$ContactStatusColumns"/>
<implements name="android/provider/ContactsContract$ContactsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_RAW_CONTACTS_URI"/>
<field name="CONTENT_URI"/>
<field name="CONTENT_VCARD_URI"/>
@@ -36173,7 +37894,6 @@
<class name="android/provider/ContactsContract$ProfileSyncState" since="14">
<extends name="java/lang/Object"/>
<implements name="android/provider/SyncStateContract$Columns"/>
- <method name="&lt;init>()V"/>
<method name="get(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)[B"/>
<method name="getWithUri(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)Landroid/util/Pair;"/>
<method name="newSetOperation(Landroid/accounts/Account;[B)Landroid/content/ContentProviderOperation;"/>
@@ -36183,7 +37903,6 @@
</class>
<class name="android/provider/ContactsContract$ProviderStatus" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_TYPE"/>
<field name="CONTENT_URI"/>
<field name="DATABASE_CREATION_TIMESTAMP" since="26"/>
@@ -36214,12 +37933,11 @@
<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
<implements name="android/provider/ContactsContract$RawContactsColumns"/>
<implements name="android/provider/ContactsContract$SyncColumns"/>
- <method name="&lt;init>()V"/>
<method name="getContactLookupUri(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;"/>
<method name="newEntityIterator(Landroid/database/Cursor;)Landroid/content/EntityIterator;" since="8"/>
<field name="AGGREGATION_MODE_DEFAULT"/>
<field name="AGGREGATION_MODE_DISABLED"/>
- <field name="AGGREGATION_MODE_IMMEDIATE" deprecated="16"/>
+ <field name="AGGREGATION_MODE_IMMEDIATE" deprecated="15"/>
<field name="AGGREGATION_MODE_SUSPENDED"/>
<field name="CONTENT_ITEM_TYPE"/>
<field name="CONTENT_TYPE"/>
@@ -36229,19 +37947,16 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/ContactsContract$DataColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_DIRECTORY"/>
</class>
<class name="android/provider/ContactsContract$RawContacts$DisplayPhoto" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_DIRECTORY"/>
</class>
<class name="android/provider/ContactsContract$RawContacts$Entity" since="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/ContactsContract$DataColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_DIRECTORY"/>
<field name="DATA_ID"/>
</class>
@@ -36249,7 +37964,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/ContactsContract$StreamItemsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_DIRECTORY" deprecated="21"/>
</class>
<class name="android/provider/ContactsContract$RawContactsColumns" since="5">
@@ -36269,7 +37983,6 @@
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/ContactsContract$DataColumns"/>
<implements name="android/provider/ContactsContract$RawContactsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_TYPE"/>
<field name="CONTENT_URI"/>
<field name="DATA_ID"/>
@@ -36284,7 +37997,6 @@
<class name="android/provider/ContactsContract$Settings" since="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$SettingsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_ITEM_TYPE"/>
<field name="CONTENT_TYPE"/>
<field name="CONTENT_URI"/>
@@ -36313,8 +38025,8 @@
<field name="INVISIBLE" since="8"/>
<field name="OFFLINE" since="8"/>
<field name="PRESENCE"/>
- <field name="PRESENCE_CUSTOM_STATUS" since="8" deprecated="16"/>
- <field name="PRESENCE_STATUS" since="8" deprecated="16"/>
+ <field name="PRESENCE_CUSTOM_STATUS" since="8" deprecated="15"/>
+ <field name="PRESENCE_STATUS" since="8" deprecated="15"/>
<field name="STATUS"/>
<field name="STATUS_ICON"/>
<field name="STATUS_LABEL"/>
@@ -36325,7 +38037,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/ContactsContract$PresenceColumns"/>
<implements name="android/provider/ContactsContract$StatusColumns"/>
- <method name="&lt;init>()V"/>
<method name="getPresenceIconResourceId(I)I"/>
<method name="getPresencePrecedence(I)I"/>
<field name="CONTENT_ITEM_TYPE"/>
@@ -36337,7 +38048,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/ContactsContract$StreamItemPhotosColumns"/>
- <method name="&lt;init>()V"/>
<field name="PHOTO" deprecated="21"/>
</class>
<class name="android/provider/ContactsContract$StreamItemPhotosColumns" since="15" deprecated="21" removed="23">
@@ -36355,7 +38065,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/ContactsContract$StreamItemsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_ITEM_TYPE" deprecated="21"/>
<field name="CONTENT_LIMIT_URI" deprecated="21"/>
<field name="CONTENT_PHOTO_URI" deprecated="21"/>
@@ -36367,7 +38076,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/ContactsContract$StreamItemPhotosColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_DIRECTORY" deprecated="21"/>
<field name="CONTENT_ITEM_TYPE" deprecated="21"/>
<field name="CONTENT_TYPE" deprecated="21"/>
@@ -36404,7 +38112,6 @@
<class name="android/provider/ContactsContract$SyncState" since="5">
<extends name="java/lang/Object"/>
<implements name="android/provider/SyncStateContract$Columns"/>
- <method name="&lt;init>()V"/>
<method name="get(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)[B"/>
<method name="getWithUri(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)Landroid/util/Pair;"/>
<method name="newSetOperation(Landroid/accounts/Account;[B)Landroid/content/ContentProviderOperation;"/>
@@ -36414,7 +38121,6 @@
</class>
<class name="android/provider/DocumentsContract" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="buildChildDocumentsUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
<method name="buildChildDocumentsUriUsingTree(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;" since="21"/>
<method name="buildDocumentUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
@@ -36431,11 +38137,15 @@
<method name="ejectRoot(Landroid/content/ContentResolver;Landroid/net/Uri;)V" since="26"/>
<method name="findDocumentPath(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/provider/DocumentsContract$Path;" since="26"/>
<method name="getDocumentId(Landroid/net/Uri;)Ljava/lang/String;"/>
+ <method name="getDocumentMetadata(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/os/Bundle;" since="29"/>
<method name="getDocumentThumbnail(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/graphics/Point;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;"/>
<method name="getRootId(Landroid/net/Uri;)Ljava/lang/String;"/>
<method name="getSearchDocumentsQuery(Landroid/net/Uri;)Ljava/lang/String;"/>
<method name="getTreeDocumentId(Landroid/net/Uri;)Ljava/lang/String;" since="21"/>
+ <method name="isChildDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;)Z" since="29"/>
<method name="isDocumentUri(Landroid/content/Context;Landroid/net/Uri;)Z"/>
+ <method name="isRootUri(Landroid/content/Context;Landroid/net/Uri;)Z" since="29"/>
+ <method name="isRootsUri(Landroid/content/Context;Landroid/net/Uri;)Z" since="29"/>
<method name="isTreeUri(Landroid/net/Uri;)Z" since="24"/>
<method name="moveDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;Landroid/net/Uri;)Landroid/net/Uri;" since="24"/>
<method name="removeDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;)Z" since="24"/>
@@ -36448,11 +38158,19 @@
<field name="EXTRA_LOADING"/>
<field name="EXTRA_ORIENTATION" since="24"/>
<field name="EXTRA_PROMPT" since="23"/>
+ <field name="METADATA_EXIF" since="29"/>
+ <field name="METADATA_TREE_COUNT" since="29"/>
+ <field name="METADATA_TREE_SIZE" since="29"/>
+ <field name="METADATA_TYPES" since="29"/>
<field name="PROVIDER_INTERFACE"/>
+ <field name="QUERY_ARG_DISPLAY_NAME" since="29"/>
+ <field name="QUERY_ARG_EXCLUDE_MEDIA" since="29"/>
+ <field name="QUERY_ARG_FILE_SIZE_OVER" since="29"/>
+ <field name="QUERY_ARG_LAST_MODIFIED_AFTER" since="29"/>
+ <field name="QUERY_ARG_MIME_TYPES" since="29"/>
</class>
<class name="android/provider/DocumentsContract$Document" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="COLUMN_DISPLAY_NAME"/>
<field name="COLUMN_DOCUMENT_ID"/>
<field name="COLUMN_FLAGS"/>
@@ -36464,8 +38182,10 @@
<field name="FLAG_DIR_PREFERS_GRID"/>
<field name="FLAG_DIR_PREFERS_LAST_MODIFIED"/>
<field name="FLAG_DIR_SUPPORTS_CREATE"/>
+ <field name="FLAG_PARTIAL" since="29"/>
<field name="FLAG_SUPPORTS_COPY" since="24"/>
<field name="FLAG_SUPPORTS_DELETE"/>
+ <field name="FLAG_SUPPORTS_METADATA" since="29"/>
<field name="FLAG_SUPPORTS_MOVE" since="24"/>
<field name="FLAG_SUPPORTS_REMOVE" since="24"/>
<field name="FLAG_SUPPORTS_RENAME" since="21"/>
@@ -36486,16 +38206,17 @@
</class>
<class name="android/provider/DocumentsContract$Root" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="COLUMN_AVAILABLE_BYTES"/>
<field name="COLUMN_CAPACITY_BYTES" since="24"/>
<field name="COLUMN_DOCUMENT_ID"/>
<field name="COLUMN_FLAGS"/>
<field name="COLUMN_ICON"/>
<field name="COLUMN_MIME_TYPES"/>
+ <field name="COLUMN_QUERY_ARGS" since="29"/>
<field name="COLUMN_ROOT_ID"/>
<field name="COLUMN_SUMMARY"/>
<field name="COLUMN_TITLE"/>
+ <field name="FLAG_EMPTY" since="29"/>
<field name="FLAG_LOCAL_ONLY"/>
<field name="FLAG_SUPPORTS_CREATE"/>
<field name="FLAG_SUPPORTS_EJECT" since="26"/>
@@ -36513,6 +38234,7 @@
<method name="deleteDocument(Ljava/lang/String;)V"/>
<method name="ejectRoot(Ljava/lang/String;)V" since="26"/>
<method name="findDocumentPath(Ljava/lang/String;Ljava/lang/String;)Landroid/provider/DocumentsContract$Path;" since="26"/>
+ <method name="getDocumentMetadata(Ljava/lang/String;)Landroid/os/Bundle;" since="29"/>
<method name="getDocumentStreamTypes(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;" since="24"/>
<method name="getDocumentType(Ljava/lang/String;)Ljava/lang/String;"/>
<method name="isChildDocument(Ljava/lang/String;Ljava/lang/String;)Z" since="21"/>
@@ -36524,8 +38246,10 @@
<method name="queryChildDocuments(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
<method name="queryDocument(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;"/>
<method name="queryRecentDocuments(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;"/>
+ <method name="queryRecentDocuments(Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="29"/>
<method name="queryRoots([Ljava/lang/String;)Landroid/database/Cursor;"/>
<method name="querySearchDocuments(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;"/>
+ <method name="querySearchDocuments(Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/database/Cursor;" since="29"/>
<method name="removeDocument(Ljava/lang/String;Ljava/lang/String;)V" since="24"/>
<method name="renameDocument(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21"/>
<method name="revokeDocumentPermission(Ljava/lang/String;)V" since="21"/>
@@ -36541,7 +38265,6 @@
</class>
<class name="android/provider/FontsContract" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="buildTypeface(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroid/provider/FontsContract$FontInfo;)Landroid/graphics/Typeface;"/>
<method name="fetchFonts(Landroid/content/Context;Landroid/os/CancellationSignal;Landroid/provider/FontRequest;)Landroid/provider/FontsContract$FontFamilyResult;"/>
<method name="requestFonts(Landroid/content/Context;Landroid/provider/FontRequest;Landroid/os/Handler;Landroid/os/CancellationSignal;Landroid/provider/FontsContract$FontRequestCallback;)V"/>
@@ -36549,7 +38272,6 @@
<class name="android/provider/FontsContract$Columns" since="26">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <method name="&lt;init>()V"/>
<field name="FILE_ID"/>
<field name="ITALIC"/>
<field name="RESULT_CODE"/>
@@ -36563,8 +38285,6 @@
</class>
<class name="android/provider/FontsContract$FontFamilyResult" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I[Landroid/provider/FontsContract$FontInfo;)V" since="29"/>
<method name="getFonts()[Landroid/provider/FontsContract$FontInfo;"/>
<method name="getStatusCode()I"/>
<field name="STATUS_OK"/>
@@ -36574,8 +38294,6 @@
</class>
<class name="android/provider/FontsContract$FontInfo" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/net/Uri;I[Landroid/graphics/fonts/FontVariationAxis;IZI)V" since="29"/>
<method name="getAxes()[Landroid/graphics/fonts/FontVariationAxis;"/>
<method name="getResultCode()I"/>
<method name="getTtcIndex()I"/>
@@ -36598,31 +38316,40 @@
<class name="android/provider/LiveFolders" since="3" deprecated="14">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <method name="&lt;init>()V"/>
- <field name="ACTION_CREATE_LIVE_FOLDER"/>
- <field name="DESCRIPTION"/>
- <field name="DISPLAY_MODE_GRID"/>
- <field name="DISPLAY_MODE_LIST"/>
- <field name="EXTRA_LIVE_FOLDER_BASE_INTENT"/>
- <field name="EXTRA_LIVE_FOLDER_DISPLAY_MODE"/>
- <field name="EXTRA_LIVE_FOLDER_ICON"/>
- <field name="EXTRA_LIVE_FOLDER_NAME"/>
- <field name="ICON_BITMAP"/>
- <field name="ICON_PACKAGE"/>
- <field name="ICON_RESOURCE"/>
- <field name="INTENT"/>
- <field name="NAME"/>
+ <field name="ACTION_CREATE_LIVE_FOLDER" deprecated="29"/>
+ <field name="DESCRIPTION" deprecated="29"/>
+ <field name="DISPLAY_MODE_GRID" deprecated="29"/>
+ <field name="DISPLAY_MODE_LIST" deprecated="29"/>
+ <field name="EXTRA_LIVE_FOLDER_BASE_INTENT" deprecated="29"/>
+ <field name="EXTRA_LIVE_FOLDER_DISPLAY_MODE" deprecated="29"/>
+ <field name="EXTRA_LIVE_FOLDER_ICON" deprecated="29"/>
+ <field name="EXTRA_LIVE_FOLDER_NAME" deprecated="29"/>
+ <field name="ICON_BITMAP" deprecated="29"/>
+ <field name="ICON_PACKAGE" deprecated="29"/>
+ <field name="ICON_RESOURCE" deprecated="29"/>
+ <field name="INTENT" deprecated="29"/>
+ <field name="NAME" deprecated="29"/>
</class>
<class name="android/provider/MediaStore" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
<method name="getDocumentUri(Landroid/content/Context;Landroid/net/Uri;)Landroid/net/Uri;" since="26"/>
+ <method name="getExternalVolumeNames(Landroid/content/Context;)Ljava/util/Set;" since="29"/>
<method name="getMediaScannerUri()Landroid/net/Uri;"/>
+ <method name="getMediaUri(Landroid/content/Context;Landroid/net/Uri;)Landroid/net/Uri;" since="29"/>
<method name="getVersion(Landroid/content/Context;)Ljava/lang/String;" since="12"/>
+ <method name="getVersion(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;" since="29"/>
+ <method name="getVolumeName(Landroid/net/Uri;)Ljava/lang/String;" since="29"/>
+ <method name="setIncludePending(Landroid/net/Uri;)Landroid/net/Uri;" since="29"/>
+ <method name="setRequireOriginal(Landroid/net/Uri;)Landroid/net/Uri;" since="29"/>
<field name="ACTION_IMAGE_CAPTURE" since="3"/>
<field name="ACTION_IMAGE_CAPTURE_SECURE" since="17"/>
+ <field name="ACTION_REVIEW" since="29"/>
+ <field name="ACTION_REVIEW_SECURE" since="29"/>
<field name="ACTION_VIDEO_CAPTURE" since="3"/>
<field name="AUTHORITY"/>
+ <field name="AUTHORITY_URI" since="29"/>
+ <field name="EXTRA_BRIGHTNESS" since="29"/>
<field name="EXTRA_DURATION_LIMIT" since="8"/>
<field name="EXTRA_FINISH_ON_COMPLETION" since="3"/>
<field name="EXTRA_FULL_SCREEN" since="8"/>
@@ -36640,7 +38367,7 @@
<field name="EXTRA_VIDEO_QUALITY" since="3"/>
<field name="INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH" since="9"/>
<field name="INTENT_ACTION_MEDIA_SEARCH" since="3"/>
- <field name="INTENT_ACTION_MUSIC_PLAYER" since="8" deprecated="16"/>
+ <field name="INTENT_ACTION_MUSIC_PLAYER" since="8" deprecated="15"/>
<field name="INTENT_ACTION_STILL_IMAGE_CAMERA" since="3"/>
<field name="INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE" since="17"/>
<field name="INTENT_ACTION_TEXT_OPEN_FROM_SEARCH" since="17"/>
@@ -36650,6 +38377,9 @@
<field name="MEDIA_SCANNER_VOLUME"/>
<field name="META_DATA_STILL_IMAGE_CAMERA_PREWARM_SERVICE" since="23"/>
<field name="UNKNOWN_STRING" since="8"/>
+ <field name="VOLUME_EXTERNAL" since="29"/>
+ <field name="VOLUME_EXTERNAL_PRIMARY" since="29"/>
+ <field name="VOLUME_INTERNAL" since="29"/>
</class>
<class name="android/provider/MediaStore$Audio" since="1">
<extends name="java/lang/Object"/>
@@ -36659,10 +38389,11 @@
<class name="android/provider/MediaStore$Audio$AlbumColumns" since="1">
<extends name="java/lang/Object"/>
<field name="ALBUM"/>
- <field name="ALBUM_ART"/>
+ <field name="ALBUM_ART" deprecated="29"/>
<field name="ALBUM_ID"/>
<field name="ALBUM_KEY"/>
<field name="ARTIST"/>
+ <field name="ARTIST_ID" since="29"/>
<field name="FIRST_YEAR"/>
<field name="LAST_YEAR"/>
<field name="NUMBER_OF_SONGS"/>
@@ -36717,8 +38448,9 @@
<field name="ARTIST_KEY"/>
<field name="BOOKMARK" since="8"/>
<field name="COMPOSER"/>
- <field name="DURATION"/>
+ <field name="DURATION" removed="29"/>
<field name="IS_ALARM"/>
+ <field name="IS_AUDIOBOOK" since="29"/>
<field name="IS_MUSIC"/>
<field name="IS_NOTIFICATION"/>
<field name="IS_PODCAST" since="8"/>
@@ -36759,7 +38491,7 @@
<implements name="android/provider/MediaStore$Audio$AudioColumns"/>
<method name="&lt;init>()V"/>
<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
- <method name="getContentUriForPath(Ljava/lang/String;)Landroid/net/Uri;"/>
+ <method name="getContentUriForPath(Ljava/lang/String;)Landroid/net/Uri;" deprecated="29"/>
<field name="CONTENT_TYPE"/>
<field name="DEFAULT_SORT_ORDER"/>
<field name="ENTRY_CONTENT_TYPE" since="21"/>
@@ -36795,16 +38527,29 @@
</class>
<class name="android/provider/MediaStore$Audio$PlaylistsColumns" since="1">
<extends name="java/lang/Object"/>
- <field name="DATA"/>
+ <field name="DATA" deprecated="29"/>
<field name="DATE_ADDED"/>
<field name="DATE_MODIFIED"/>
<field name="NAME"/>
</class>
<class name="android/provider/MediaStore$Audio$Radio" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="ENTRY_CONTENT_TYPE"/>
</class>
+ <class name="android/provider/MediaStore$DownloadColumns" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/provider/MediaStore$MediaColumns"/>
+ <field name="DOWNLOAD_URI"/>
+ <field name="REFERER_URI"/>
+ </class>
+ <class name="android/provider/MediaStore$Downloads" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/provider/MediaStore$DownloadColumns"/>
+ <method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
+ <field name="CONTENT_TYPE"/>
+ <field name="EXTERNAL_CONTENT_URI"/>
+ <field name="INTERNAL_CONTENT_URI"/>
+ </class>
<class name="android/provider/MediaStore$Files" since="11">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
@@ -36831,75 +38576,88 @@
<class name="android/provider/MediaStore$Images$ImageColumns" since="1">
<extends name="java/lang/Object"/>
<implements name="android/provider/MediaStore$MediaColumns"/>
- <field name="BUCKET_DISPLAY_NAME"/>
- <field name="BUCKET_ID"/>
- <field name="DATE_TAKEN"/>
+ <field name="BUCKET_DISPLAY_NAME" removed="29"/>
+ <field name="BUCKET_ID" removed="29"/>
+ <field name="DATE_TAKEN" removed="29"/>
<field name="DESCRIPTION"/>
<field name="IS_PRIVATE"/>
- <field name="LATITUDE"/>
- <field name="LONGITUDE"/>
- <field name="MINI_THUMB_MAGIC"/>
- <field name="ORIENTATION"/>
- <field name="PICASA_ID"/>
+ <field name="LATITUDE" deprecated="29"/>
+ <field name="LONGITUDE" deprecated="29"/>
+ <field name="MINI_THUMB_MAGIC" deprecated="29"/>
+ <field name="ORIENTATION" removed="29"/>
+ <field name="PICASA_ID" deprecated="29"/>
</class>
<class name="android/provider/MediaStore$Images$Media" since="1">
<extends name="java/lang/Object"/>
<implements name="android/provider/MediaStore$Images$ImageColumns"/>
<method name="&lt;init>()V"/>
- <method name="getBitmap(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/graphics/Bitmap;"/>
+ <method name="getBitmap(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/graphics/Bitmap;" deprecated="29"/>
<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
- <method name="insertImage(Landroid/content/ContentResolver;Landroid/graphics/Bitmap;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
- <method name="insertImage(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
- <method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;)Landroid/database/Cursor;"/>
- <method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
- <method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
+ <method name="insertImage(Landroid/content/ContentResolver;Landroid/graphics/Bitmap;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+ <method name="insertImage(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+ <method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
+ <method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
+ <method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
<field name="CONTENT_TYPE"/>
<field name="DEFAULT_SORT_ORDER"/>
<field name="EXTERNAL_CONTENT_URI"/>
<field name="INTERNAL_CONTENT_URI"/>
</class>
- <class name="android/provider/MediaStore$Images$Thumbnails" since="1">
+ <class name="android/provider/MediaStore$Images$Thumbnails" since="1" deprecated="29">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <method name="&lt;init>()V"/>
- <method name="cancelThumbnailRequest(Landroid/content/ContentResolver;J)V" since="5"/>
- <method name="cancelThumbnailRequest(Landroid/content/ContentResolver;JJ)V" since="8"/>
- <method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
- <method name="getThumbnail(Landroid/content/ContentResolver;JILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="5"/>
- <method name="getThumbnail(Landroid/content/ContentResolver;JJILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="8"/>
- <method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;)Landroid/database/Cursor;"/>
- <method name="queryMiniThumbnail(Landroid/content/ContentResolver;JI[Ljava/lang/String;)Landroid/database/Cursor;"/>
- <method name="queryMiniThumbnails(Landroid/content/ContentResolver;Landroid/net/Uri;I[Ljava/lang/String;)Landroid/database/Cursor;"/>
- <field name="DATA"/>
- <field name="DEFAULT_SORT_ORDER"/>
- <field name="EXTERNAL_CONTENT_URI"/>
- <field name="FULL_SCREEN_KIND"/>
- <field name="HEIGHT"/>
- <field name="IMAGE_ID"/>
- <field name="INTERNAL_CONTENT_URI"/>
- <field name="KIND"/>
- <field name="MICRO_KIND"/>
- <field name="MINI_KIND"/>
- <field name="THUMB_DATA" since="5"/>
- <field name="WIDTH"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="cancelThumbnailRequest(Landroid/content/ContentResolver;J)V" since="5" deprecated="29"/>
+ <method name="cancelThumbnailRequest(Landroid/content/ContentResolver;JJ)V" since="8" deprecated="29"/>
+ <method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;" deprecated="29"/>
+ <method name="getThumbnail(Landroid/content/ContentResolver;JILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="5" deprecated="29"/>
+ <method name="getThumbnail(Landroid/content/ContentResolver;JJILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="8" deprecated="29"/>
+ <method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
+ <method name="queryMiniThumbnail(Landroid/content/ContentResolver;JI[Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
+ <method name="queryMiniThumbnails(Landroid/content/ContentResolver;Landroid/net/Uri;I[Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
+ <field name="DATA" deprecated="29"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="29"/>
+ <field name="EXTERNAL_CONTENT_URI" deprecated="29"/>
+ <field name="FULL_SCREEN_KIND" deprecated="29"/>
+ <field name="HEIGHT" deprecated="29"/>
+ <field name="IMAGE_ID" deprecated="29"/>
+ <field name="INTERNAL_CONTENT_URI" deprecated="29"/>
+ <field name="KIND" deprecated="29"/>
+ <field name="MICRO_KIND" deprecated="29"/>
+ <field name="MINI_KIND" deprecated="29"/>
+ <field name="THUMB_DATA" since="5" deprecated="29"/>
+ <field name="WIDTH" deprecated="29"/>
</class>
<class name="android/provider/MediaStore$MediaColumns" since="1">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <field name="DATA"/>
+ <field name="BUCKET_DISPLAY_NAME" since="29"/>
+ <field name="BUCKET_ID" since="29"/>
+ <field name="DATA" deprecated="29"/>
<field name="DATE_ADDED"/>
+ <field name="DATE_EXPIRES" since="29"/>
<field name="DATE_MODIFIED"/>
+ <field name="DATE_TAKEN" since="29"/>
<field name="DISPLAY_NAME"/>
+ <field name="DOCUMENT_ID" since="29"/>
+ <field name="DURATION" since="29"/>
<field name="HEIGHT" since="16"/>
+ <field name="INSTANCE_ID" since="29"/>
+ <field name="IS_PENDING" since="29"/>
<field name="MIME_TYPE"/>
+ <field name="ORIENTATION" since="29"/>
+ <field name="ORIGINAL_DOCUMENT_ID" since="29"/>
+ <field name="OWNER_PACKAGE_NAME" since="29"/>
+ <field name="RELATIVE_PATH" since="29"/>
<field name="SIZE"/>
<field name="TITLE"/>
+ <field name="VOLUME_NAME" since="29"/>
<field name="WIDTH" since="16"/>
</class>
<class name="android/provider/MediaStore$Video" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
- <method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;)Landroid/database/Cursor;"/>
+ <method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
<field name="DEFAULT_SORT_ORDER"/>
</class>
<class name="android/provider/MediaStore$Video$Media" since="1">
@@ -36912,26 +38670,26 @@
<field name="EXTERNAL_CONTENT_URI"/>
<field name="INTERNAL_CONTENT_URI"/>
</class>
- <class name="android/provider/MediaStore$Video$Thumbnails" since="5">
+ <class name="android/provider/MediaStore$Video$Thumbnails" since="5" deprecated="29">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <method name="&lt;init>()V"/>
- <method name="cancelThumbnailRequest(Landroid/content/ContentResolver;J)V"/>
- <method name="cancelThumbnailRequest(Landroid/content/ContentResolver;JJ)V" since="8"/>
- <method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
- <method name="getThumbnail(Landroid/content/ContentResolver;JILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
- <method name="getThumbnail(Landroid/content/ContentResolver;JJILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="8"/>
- <field name="DATA"/>
- <field name="DEFAULT_SORT_ORDER"/>
- <field name="EXTERNAL_CONTENT_URI"/>
- <field name="FULL_SCREEN_KIND"/>
- <field name="HEIGHT"/>
- <field name="INTERNAL_CONTENT_URI"/>
- <field name="KIND"/>
- <field name="MICRO_KIND"/>
- <field name="MINI_KIND"/>
- <field name="VIDEO_ID"/>
- <field name="WIDTH"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="cancelThumbnailRequest(Landroid/content/ContentResolver;J)V" deprecated="29"/>
+ <method name="cancelThumbnailRequest(Landroid/content/ContentResolver;JJ)V" since="8" deprecated="29"/>
+ <method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;" deprecated="29"/>
+ <method name="getThumbnail(Landroid/content/ContentResolver;JILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" deprecated="29"/>
+ <method name="getThumbnail(Landroid/content/ContentResolver;JJILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="8" deprecated="29"/>
+ <field name="DATA" deprecated="29"/>
+ <field name="DEFAULT_SORT_ORDER" deprecated="29"/>
+ <field name="EXTERNAL_CONTENT_URI" deprecated="29"/>
+ <field name="FULL_SCREEN_KIND" deprecated="29"/>
+ <field name="HEIGHT" deprecated="29"/>
+ <field name="INTERNAL_CONTENT_URI" deprecated="29"/>
+ <field name="KIND" deprecated="29"/>
+ <field name="MICRO_KIND" deprecated="29"/>
+ <field name="MINI_KIND" deprecated="29"/>
+ <field name="VIDEO_ID" deprecated="29"/>
+ <field name="WIDTH" deprecated="29"/>
</class>
<class name="android/provider/MediaStore$Video$VideoColumns" since="1">
<extends name="java/lang/Object"/>
@@ -36939,17 +38697,17 @@
<field name="ALBUM"/>
<field name="ARTIST"/>
<field name="BOOKMARK" since="3"/>
- <field name="BUCKET_DISPLAY_NAME" since="3"/>
- <field name="BUCKET_ID" since="3"/>
+ <field name="BUCKET_DISPLAY_NAME" since="3" removed="29"/>
+ <field name="BUCKET_ID" since="3" removed="29"/>
<field name="CATEGORY"/>
- <field name="DATE_TAKEN"/>
+ <field name="DATE_TAKEN" removed="29"/>
<field name="DESCRIPTION"/>
- <field name="DURATION"/>
+ <field name="DURATION" removed="29"/>
<field name="IS_PRIVATE"/>
<field name="LANGUAGE"/>
- <field name="LATITUDE"/>
- <field name="LONGITUDE"/>
- <field name="MINI_THUMB_MAGIC"/>
+ <field name="LATITUDE" deprecated="29"/>
+ <field name="LONGITUDE" deprecated="29"/>
+ <field name="MINI_THUMB_MAGIC" deprecated="29"/>
<field name="RESOLUTION"/>
<field name="TAGS"/>
</class>
@@ -36982,7 +38740,10 @@
<field name="ACTION_APPLICATION_DETAILS_SETTINGS" since="9"/>
<field name="ACTION_APPLICATION_DEVELOPMENT_SETTINGS" since="3"/>
<field name="ACTION_APPLICATION_SETTINGS"/>
+ <field name="ACTION_APP_NOTIFICATION_BUBBLE_SETTINGS" since="29"/>
<field name="ACTION_APP_NOTIFICATION_SETTINGS" since="26"/>
+ <field name="ACTION_APP_SEARCH_SETTINGS" since="29"/>
+ <field name="ACTION_APP_USAGE_SETTINGS" since="29"/>
<field name="ACTION_BATTERY_SAVER_SETTINGS" since="22"/>
<field name="ACTION_BLUETOOTH_SETTINGS"/>
<field name="ACTION_CAPTIONING_SETTINGS" since="19"/>
@@ -37016,10 +38777,12 @@
<field name="ACTION_NFC_PAYMENT_SETTINGS" since="19"/>
<field name="ACTION_NFC_SETTINGS" since="16"/>
<field name="ACTION_NIGHT_DISPLAY_SETTINGS" since="26"/>
+ <field name="ACTION_NOTIFICATION_ASSISTANT_SETTINGS" since="29"/>
<field name="ACTION_NOTIFICATION_LISTENER_SETTINGS" since="22"/>
<field name="ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS" since="23"/>
<field name="ACTION_PRINT_SETTINGS" since="19"/>
<field name="ACTION_PRIVACY_SETTINGS" since="5"/>
+ <field name="ACTION_PROCESS_WIFI_EASY_CONNECT_URI" since="29"/>
<field name="ACTION_QUICK_LAUNCH_SETTINGS" since="3"/>
<field name="ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" since="23"/>
<field name="ACTION_REQUEST_SET_AUTOFILL_SERVICE" since="26"/>
@@ -37028,7 +38791,7 @@
<field name="ACTION_SETTINGS"/>
<field name="ACTION_SHOW_REGULATORY_INFO" since="21"/>
<field name="ACTION_SOUND_SETTINGS"/>
- <field name="ACTION_STORAGE_VOLUME_ACCESS_SETTINGS" since="28"/>
+ <field name="ACTION_STORAGE_VOLUME_ACCESS_SETTINGS" since="28" deprecated="29"/>
<field name="ACTION_SYNC_SETTINGS" since="3"/>
<field name="ACTION_USAGE_ACCESS_SETTINGS" since="21"/>
<field name="ACTION_USER_DICTIONARY_SETTINGS" since="3"/>
@@ -37077,6 +38840,7 @@
<field name="AIRPLANE_MODE_RADIOS"/>
<field name="ALWAYS_FINISH_ACTIVITIES"/>
<field name="ANIMATOR_DURATION_SCALE"/>
+ <field name="APPLY_RAMPING_RINGER" since="29"/>
<field name="AUTO_TIME"/>
<field name="AUTO_TIME_ZONE"/>
<field name="BLUETOOTH_ON"/>
@@ -37096,7 +38860,7 @@
<field name="RADIO_CELL"/>
<field name="RADIO_NFC"/>
<field name="RADIO_WIFI"/>
- <field name="SHOW_PROCESSES" deprecated="26"/>
+ <field name="SHOW_PROCESSES" deprecated="25"/>
<field name="STAY_ON_WHILE_PLUGGED_IN"/>
<field name="SYS_PROP_SETTING_VERSION" removed="24"/>
<field name="TRANSITION_ANIMATION_SCALE"/>
@@ -37126,6 +38890,13 @@
<field name="NAME"/>
<field name="VALUE"/>
</class>
+ <class name="android/provider/Settings$Panel" since="29">
+ <extends name="java/lang/Object"/>
+ <field name="ACTION_INTERNET_CONNECTIVITY"/>
+ <field name="ACTION_NFC"/>
+ <field name="ACTION_VOLUME"/>
+ <field name="ACTION_WIFI"/>
+ </class>
<class name="android/provider/Settings$Secure" since="3">
<extends name="android/provider/Settings$NameValueTable"/>
<method name="&lt;init>()V"/>
@@ -37150,7 +38921,7 @@
<field name="ALLOWED_GEOLOCATION_ORIGINS" since="8"/>
<field name="ALLOW_MOCK_LOCATION" deprecated="23"/>
<field name="ANDROID_ID"/>
- <field name="BACKGROUND_DATA" deprecated="16"/>
+ <field name="BACKGROUND_DATA" deprecated="15"/>
<field name="BLUETOOTH_ON" deprecated="17"/>
<field name="CONTENT_URI"/>
<field name="DATA_ROAMING" deprecated="17"/>
@@ -37171,7 +38942,7 @@
<field name="LOCK_PATTERN_ENABLED" since="8" deprecated="23"/>
<field name="LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED" since="8" deprecated="17"/>
<field name="LOCK_PATTERN_VISIBLE" since="8" deprecated="23"/>
- <field name="LOGGING_ID" deprecated="16"/>
+ <field name="LOGGING_ID" deprecated="15"/>
<field name="NETWORK_PREFERENCE" deprecated="17"/>
<field name="PARENTAL_CONTROL_ENABLED"/>
<field name="PARENTAL_CONTROL_LAST_UPDATE"/>
@@ -37182,14 +38953,14 @@
<field name="SKIP_FIRST_USE_HINTS" since="21"/>
<field name="SYS_PROP_SETTING_VERSION" removed="24"/>
<field name="TOUCH_EXPLORATION_ENABLED" since="14"/>
- <field name="TTS_DEFAULT_COUNTRY" since="4" deprecated="16"/>
- <field name="TTS_DEFAULT_LANG" since="4" deprecated="16"/>
+ <field name="TTS_DEFAULT_COUNTRY" since="4" deprecated="15"/>
+ <field name="TTS_DEFAULT_LANG" since="4" deprecated="15"/>
<field name="TTS_DEFAULT_PITCH" since="4"/>
<field name="TTS_DEFAULT_RATE" since="4"/>
<field name="TTS_DEFAULT_SYNTH" since="4"/>
- <field name="TTS_DEFAULT_VARIANT" since="4" deprecated="16"/>
+ <field name="TTS_DEFAULT_VARIANT" since="4" deprecated="15"/>
<field name="TTS_ENABLED_PLUGINS" since="8"/>
- <field name="TTS_USE_DEFAULTS" since="4" deprecated="16"/>
+ <field name="TTS_USE_DEFAULTS" since="4" deprecated="15"/>
<field name="USB_MASS_STORAGE_ENABLED" deprecated="17"/>
<field name="USE_GOOGLE_MAIL" deprecated="17"/>
<field name="WIFI_MAX_DHCP_RETRY_COUNT" deprecated="17"/>
@@ -37198,18 +38969,18 @@
<field name="WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY" deprecated="17"/>
<field name="WIFI_NUM_OPEN_NETWORKS_KEPT" deprecated="17"/>
<field name="WIFI_ON" deprecated="17"/>
- <field name="WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" deprecated="16"/>
- <field name="WIFI_WATCHDOG_AP_COUNT" deprecated="16"/>
- <field name="WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" deprecated="16"/>
- <field name="WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" deprecated="16"/>
- <field name="WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" deprecated="16"/>
- <field name="WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" deprecated="16"/>
- <field name="WIFI_WATCHDOG_MAX_AP_CHECKS" deprecated="16"/>
+ <field name="WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_AP_COUNT" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_MAX_AP_CHECKS" deprecated="15"/>
<field name="WIFI_WATCHDOG_ON" deprecated="17"/>
- <field name="WIFI_WATCHDOG_PING_COUNT" deprecated="16"/>
- <field name="WIFI_WATCHDOG_PING_DELAY_MS" deprecated="16"/>
- <field name="WIFI_WATCHDOG_PING_TIMEOUT_MS" deprecated="16"/>
- <field name="WIFI_WATCHDOG_WATCH_LIST" deprecated="16"/>
+ <field name="WIFI_WATCHDOG_PING_COUNT" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_PING_DELAY_MS" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_PING_TIMEOUT_MS" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_WATCH_LIST" deprecated="15"/>
</class>
<class name="android/provider/Settings$SettingNotFoundException" since="1">
<extends name="android/util/AndroidException"/>
@@ -37236,49 +39007,49 @@
<method name="putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z"/>
<method name="setShowGTalkServiceStatus(Landroid/content/ContentResolver;Z)V" deprecated="17"/>
<field name="ACCELEROMETER_ROTATION" since="3"/>
- <field name="ADB_ENABLED" deprecated="16"/>
+ <field name="ADB_ENABLED" deprecated="15"/>
<field name="AIRPLANE_MODE_ON" deprecated="17"/>
<field name="AIRPLANE_MODE_RADIOS" deprecated="17"/>
<field name="ALARM_ALERT" since="5"/>
<field name="ALWAYS_FINISH_ACTIVITIES" deprecated="17"/>
- <field name="ANDROID_ID" deprecated="16"/>
+ <field name="ANDROID_ID" deprecated="15"/>
<field name="ANIMATOR_DURATION_SCALE" since="16" deprecated="17"/>
<field name="APPEND_FOR_LAST_AUDIBLE" removed="23"/>
<field name="AUTO_TIME" deprecated="17"/>
<field name="AUTO_TIME_ZONE" since="11" deprecated="17"/>
<field name="BLUETOOTH_DISCOVERABILITY"/>
<field name="BLUETOOTH_DISCOVERABILITY_TIMEOUT"/>
- <field name="BLUETOOTH_ON" deprecated="16"/>
+ <field name="BLUETOOTH_ON" deprecated="15"/>
<field name="CONTENT_URI"/>
- <field name="DATA_ROAMING" deprecated="16"/>
+ <field name="DATA_ROAMING" deprecated="15"/>
<field name="DATE_FORMAT"/>
<field name="DEBUG_APP" deprecated="17"/>
<field name="DEFAULT_ALARM_ALERT_URI" since="5"/>
<field name="DEFAULT_NOTIFICATION_URI"/>
<field name="DEFAULT_RINGTONE_URI"/>
- <field name="DEVICE_PROVISIONED" deprecated="16"/>
+ <field name="DEVICE_PROVISIONED" deprecated="15"/>
<field name="DIM_SCREEN" deprecated="17"/>
<field name="DTMF_TONE_TYPE_WHEN_DIALING" since="23"/>
<field name="DTMF_TONE_WHEN_DIALING"/>
<field name="END_BUTTON_BEHAVIOR"/>
<field name="FONT_SCALE"/>
<field name="HAPTIC_FEEDBACK_ENABLED" since="3"/>
- <field name="HTTP_PROXY" deprecated="16"/>
- <field name="INSTALL_NON_MARKET_APPS" deprecated="16"/>
- <field name="LOCATION_PROVIDERS_ALLOWED" deprecated="16"/>
- <field name="LOCK_PATTERN_ENABLED" deprecated="16"/>
- <field name="LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED" since="3" deprecated="16"/>
- <field name="LOCK_PATTERN_VISIBLE" deprecated="16"/>
- <field name="LOGGING_ID" deprecated="16"/>
+ <field name="HTTP_PROXY" deprecated="15"/>
+ <field name="INSTALL_NON_MARKET_APPS" deprecated="15"/>
+ <field name="LOCATION_PROVIDERS_ALLOWED" deprecated="15"/>
+ <field name="LOCK_PATTERN_ENABLED" deprecated="15"/>
+ <field name="LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED" since="3" deprecated="15"/>
+ <field name="LOCK_PATTERN_VISIBLE" deprecated="15"/>
+ <field name="LOGGING_ID" deprecated="15"/>
<field name="MODE_RINGER" deprecated="17"/>
<field name="MODE_RINGER_STREAMS_AFFECTED"/>
<field name="MUTE_STREAMS_AFFECTED"/>
- <field name="NETWORK_PREFERENCE" deprecated="16"/>
+ <field name="NETWORK_PREFERENCE" deprecated="15"/>
<field name="NEXT_ALARM_FORMATTED" deprecated="21"/>
<field name="NOTIFICATION_SOUND"/>
- <field name="PARENTAL_CONTROL_ENABLED" deprecated="16"/>
- <field name="PARENTAL_CONTROL_LAST_UPDATE" deprecated="16"/>
- <field name="PARENTAL_CONTROL_REDIRECT_URL" deprecated="16"/>
+ <field name="PARENTAL_CONTROL_ENABLED" deprecated="15"/>
+ <field name="PARENTAL_CONTROL_LAST_UPDATE" deprecated="15"/>
+ <field name="PARENTAL_CONTROL_REDIRECT_URL" deprecated="15"/>
<field name="RADIO_BLUETOOTH" deprecated="17"/>
<field name="RADIO_CELL" deprecated="17"/>
<field name="RADIO_NFC" since="14" deprecated="17"/>
@@ -37289,11 +39060,11 @@
<field name="SCREEN_BRIGHTNESS_MODE_AUTOMATIC" since="8"/>
<field name="SCREEN_BRIGHTNESS_MODE_MANUAL" since="8"/>
<field name="SCREEN_OFF_TIMEOUT"/>
- <field name="SETTINGS_CLASSNAME" deprecated="16"/>
+ <field name="SETTINGS_CLASSNAME" deprecated="15"/>
<field name="SETUP_WIZARD_HAS_RUN"/>
<field name="SHOW_GTALK_SERVICE_STATUS"/>
<field name="SHOW_PROCESSES" deprecated="17"/>
- <field name="SHOW_WEB_SUGGESTIONS" since="4" deprecated="16"/>
+ <field name="SHOW_WEB_SUGGESTIONS" since="4" deprecated="15"/>
<field name="SOUND_EFFECTS_ENABLED"/>
<field name="STAY_ON_WHILE_PLUGGED_IN" deprecated="17"/>
<field name="SYS_PROP_SETTING_VERSION" removed="24"/>
@@ -37303,9 +39074,9 @@
<field name="TEXT_SHOW_PASSWORD"/>
<field name="TIME_12_24"/>
<field name="TRANSITION_ANIMATION_SCALE" deprecated="17"/>
- <field name="USB_MASS_STORAGE_ENABLED" deprecated="16"/>
+ <field name="USB_MASS_STORAGE_ENABLED" deprecated="15"/>
<field name="USER_ROTATION" since="11"/>
- <field name="USE_GOOGLE_MAIL" deprecated="16"/>
+ <field name="USE_GOOGLE_MAIL" deprecated="15"/>
<field name="VIBRATE_ON"/>
<field name="VIBRATE_WHEN_RINGING" since="23"/>
<field name="VOLUME_ALARM" removed="23"/>
@@ -37318,12 +39089,12 @@
<field name="VOLUME_VOICE" removed="23"/>
<field name="WAIT_FOR_DEBUGGER" deprecated="17"/>
<field name="WALLPAPER_ACTIVITY" deprecated="17"/>
- <field name="WIFI_MAX_DHCP_RETRY_COUNT" since="3" deprecated="16"/>
- <field name="WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS" since="3" deprecated="16"/>
- <field name="WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON" deprecated="16"/>
- <field name="WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY" deprecated="16"/>
- <field name="WIFI_NUM_OPEN_NETWORKS_KEPT" deprecated="16"/>
- <field name="WIFI_ON" deprecated="16"/>
+ <field name="WIFI_MAX_DHCP_RETRY_COUNT" since="3" deprecated="15"/>
+ <field name="WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS" since="3" deprecated="15"/>
+ <field name="WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON" deprecated="15"/>
+ <field name="WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY" deprecated="15"/>
+ <field name="WIFI_NUM_OPEN_NETWORKS_KEPT" deprecated="15"/>
+ <field name="WIFI_ON" deprecated="15"/>
<field name="WIFI_SLEEP_POLICY" since="3" deprecated="17"/>
<field name="WIFI_SLEEP_POLICY_DEFAULT" since="3" deprecated="17"/>
<field name="WIFI_SLEEP_POLICY_NEVER" since="3" deprecated="17"/>
@@ -37334,22 +39105,21 @@
<field name="WIFI_STATIC_IP" deprecated="17"/>
<field name="WIFI_STATIC_NETMASK" deprecated="17"/>
<field name="WIFI_USE_STATIC_IP" deprecated="17"/>
- <field name="WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" deprecated="16"/>
- <field name="WIFI_WATCHDOG_AP_COUNT" deprecated="16"/>
- <field name="WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" deprecated="16"/>
- <field name="WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" deprecated="16"/>
- <field name="WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" deprecated="16"/>
- <field name="WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" deprecated="16"/>
- <field name="WIFI_WATCHDOG_MAX_AP_CHECKS" deprecated="16"/>
- <field name="WIFI_WATCHDOG_ON" deprecated="16"/>
- <field name="WIFI_WATCHDOG_PING_COUNT" deprecated="16"/>
- <field name="WIFI_WATCHDOG_PING_DELAY_MS" deprecated="16"/>
- <field name="WIFI_WATCHDOG_PING_TIMEOUT_MS" deprecated="16"/>
+ <field name="WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_AP_COUNT" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_MAX_AP_CHECKS" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_ON" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_PING_COUNT" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_PING_DELAY_MS" deprecated="15"/>
+ <field name="WIFI_WATCHDOG_PING_TIMEOUT_MS" deprecated="15"/>
<field name="WINDOW_ANIMATION_SCALE" deprecated="17"/>
</class>
<class name="android/provider/SettingsSlicesContract" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="AUTHORITY"/>
<field name="BASE_URI"/>
<field name="KEY_AIRPLANE_MODE"/>
@@ -37390,7 +39160,6 @@
</class>
<class name="android/provider/Telephony" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/provider/Telephony$BaseMmsColumns" since="19">
<extends name="java/lang/Object"/>
@@ -37444,39 +39213,42 @@
<class name="android/provider/Telephony$CarrierId" since="28">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <method name="&lt;init>()V"/>
+ <method name="getSpecificCarrierIdUriForSubscriptionId(I)Landroid/net/Uri;" since="29"/>
<method name="getUriForSubscriptionId(I)Landroid/net/Uri;"/>
<field name="CARRIER_ID"/>
<field name="CARRIER_NAME"/>
<field name="CONTENT_URI"/>
+ <field name="SPECIFIC_CARRIER_ID" since="29"/>
+ <field name="SPECIFIC_CARRIER_ID_NAME" since="29"/>
</class>
<class name="android/provider/Telephony$Carriers" since="19">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <method name="&lt;init>()V"/>
<field name="APN"/>
<field name="AUTH_TYPE"/>
<field name="BEARER" deprecated="28"/>
<field name="CARRIER_ENABLED"/>
+ <field name="CARRIER_ID" since="29"/>
<field name="CONTENT_URI"/>
<field name="CURRENT"/>
<field name="DEFAULT_SORT_ORDER"/>
- <field name="MCC"/>
+ <field name="MCC" deprecated="29"/>
<field name="MMSC"/>
<field name="MMSPORT"/>
<field name="MMSPROXY"/>
- <field name="MNC"/>
- <field name="MVNO_MATCH_DATA"/>
- <field name="MVNO_TYPE"/>
+ <field name="MNC" deprecated="29"/>
+ <field name="MVNO_MATCH_DATA" deprecated="29"/>
+ <field name="MVNO_TYPE" deprecated="29"/>
<field name="NAME"/>
<field name="NETWORK_TYPE_BITMASK" since="28"/>
- <field name="NUMERIC"/>
+ <field name="NUMERIC" deprecated="29"/>
<field name="PASSWORD"/>
<field name="PORT"/>
<field name="PROTOCOL"/>
<field name="PROXY"/>
<field name="ROAMING_PROTOCOL"/>
<field name="SERVER"/>
+ <field name="SIM_APN_URI" since="29"/>
<field name="SUBSCRIPTION_ID" since="22"/>
<field name="TYPE"/>
<field name="USER"/>
@@ -37484,7 +39256,6 @@
<class name="android/provider/Telephony$Mms" since="19">
<extends name="java/lang/Object"/>
<implements name="android/provider/Telephony$BaseMmsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="DEFAULT_SORT_ORDER"/>
<field name="REPORT_REQUEST_URI"/>
@@ -37493,7 +39264,7 @@
<class name="android/provider/Telephony$Mms$Addr" since="19">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <method name="&lt;init>()V"/>
+ <method name="getAddrUriForMessage(Ljava/lang/String;)Landroid/net/Uri;" since="30"/>
<field name="ADDRESS"/>
<field name="CHARSET"/>
<field name="CONTACT_ID"/>
@@ -37503,39 +39274,36 @@
<class name="android/provider/Telephony$Mms$Draft" since="19">
<extends name="java/lang/Object"/>
<implements name="android/provider/Telephony$BaseMmsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="DEFAULT_SORT_ORDER"/>
</class>
<class name="android/provider/Telephony$Mms$Inbox" since="19">
<extends name="java/lang/Object"/>
<implements name="android/provider/Telephony$BaseMmsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="DEFAULT_SORT_ORDER"/>
</class>
<class name="android/provider/Telephony$Mms$Intents" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_CHANGED_ACTION"/>
<field name="DELETED_CONTENTS"/>
</class>
<class name="android/provider/Telephony$Mms$Outbox" since="19">
<extends name="java/lang/Object"/>
<implements name="android/provider/Telephony$BaseMmsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="DEFAULT_SORT_ORDER"/>
</class>
<class name="android/provider/Telephony$Mms$Part" since="19">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <method name="&lt;init>()V"/>
+ <method name="getPartUriForMessage(Ljava/lang/String;)Landroid/net/Uri;" since="30"/>
<field name="CHARSET"/>
<field name="CONTENT_DISPOSITION"/>
<field name="CONTENT_ID"/>
<field name="CONTENT_LOCATION"/>
<field name="CONTENT_TYPE"/>
+ <field name="CONTENT_URI" since="29"/>
<field name="CT_START"/>
<field name="CT_TYPE"/>
<field name="FILENAME"/>
@@ -37547,21 +39315,18 @@
</class>
<class name="android/provider/Telephony$Mms$Rate" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="SENT_TIME"/>
</class>
<class name="android/provider/Telephony$Mms$Sent" since="19">
<extends name="java/lang/Object"/>
<implements name="android/provider/Telephony$BaseMmsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="DEFAULT_SORT_ORDER"/>
</class>
<class name="android/provider/Telephony$MmsSms" since="19">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_CONVERSATIONS_URI"/>
<field name="CONTENT_DRAFT_URI"/>
<field name="CONTENT_FILTER_BYPHONE_URI"/>
@@ -37584,7 +39349,6 @@
<class name="android/provider/Telephony$MmsSms$PendingMessages" since="19">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="DUE_TIME"/>
<field name="ERROR_CODE"/>
@@ -37598,7 +39362,6 @@
</class>
<class name="android/provider/Telephony$ServiceStateTable" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getUriForSubscriptionId(I)Landroid/net/Uri;"/>
<method name="getUriForSubscriptionIdAndField(ILjava/lang/String;)Landroid/net/Uri;"/>
<field name="AUTHORITY"/>
@@ -37611,7 +39374,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
- <method name="&lt;init>()V"/>
<method name="getDefaultSmsPackage(Landroid/content/Context;)Ljava/lang/String;"/>
<field name="CONTENT_URI"/>
<field name="DEFAULT_SORT_ORDER"/>
@@ -37620,7 +39382,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="DEFAULT_SORT_ORDER"/>
<field name="MESSAGE_COUNT"/>
@@ -37630,7 +39391,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="DEFAULT_SORT_ORDER"/>
</class>
@@ -37638,13 +39398,11 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="DEFAULT_SORT_ORDER"/>
</class>
<class name="android/provider/Telephony$Sms$Intents" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getMessagesFromIntent(Landroid/content/Intent;)[Landroid/telephony/SmsMessage;"/>
<field name="ACTION_CHANGE_DEFAULT"/>
<field name="ACTION_DEFAULT_SMS_PACKAGE_CHANGED" since="24"/>
@@ -37657,7 +39415,7 @@
<field name="RESULT_SMS_HANDLED"/>
<field name="RESULT_SMS_OUT_OF_MEMORY"/>
<field name="RESULT_SMS_UNSUPPORTED"/>
- <field name="SECRET_CODE_ACTION" since="28"/>
+ <field name="SECRET_CODE_ACTION" since="28" deprecated="29"/>
<field name="SIM_FULL_ACTION"/>
<field name="SMS_CB_RECEIVED_ACTION"/>
<field name="SMS_DELIVER_ACTION"/>
@@ -37672,7 +39430,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="DEFAULT_SORT_ORDER"/>
</class>
@@ -37680,7 +39437,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
- <method name="&lt;init>()V"/>
<field name="CONTENT_URI"/>
<field name="DEFAULT_SORT_ORDER"/>
</class>
@@ -37719,7 +39475,6 @@
<class name="android/provider/Telephony$Threads" since="19">
<extends name="java/lang/Object"/>
<implements name="android/provider/Telephony$ThreadsColumns"/>
- <method name="&lt;init>()V"/>
<method name="getOrCreateThreadId(Landroid/content/Context;Ljava/lang/String;)J" since="23"/>
<method name="getOrCreateThreadId(Landroid/content/Context;Ljava/util/Set;)J" since="23"/>
<field name="BROADCAST_THREAD"/>
@@ -37768,7 +39523,6 @@
</class>
<class name="android/provider/VoicemailContract" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="ACTION_FETCH_VOICEMAIL"/>
<field name="ACTION_NEW_VOICEMAIL"/>
<field name="ACTION_SYNC_VOICEMAIL" since="24"/>
@@ -37780,7 +39534,6 @@
<class name="android/provider/VoicemailContract$Status" since="14">
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
- <method name="&lt;init>()V"/>
<method name="buildSourceUri(Ljava/lang/String;)Landroid/net/Uri;"/>
<field name="CONFIGURATION_STATE"/>
<field name="CONFIGURATION_STATE_CAN_BE_CONFIGURED"/>
@@ -37818,7 +39571,6 @@
<extends name="java/lang/Object"/>
<implements name="android/provider/BaseColumns"/>
<implements name="android/provider/OpenableColumns"/>
- <method name="&lt;init>()V"/>
<method name="buildSourceUri(Ljava/lang/String;)Landroid/net/Uri;"/>
<field name="ARCHIVED" since="26"/>
<field name="BACKED_UP" since="26"/>
@@ -37846,8 +39598,6 @@
</class>
<class name="android/renderscript/Allocation" since="11">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;Landroid/renderscript/Type;I)V" since="29"/>
<method name="copy1DRangeFrom(IILandroid/renderscript/Allocation;I)V" since="14"/>
<method name="copy1DRangeFrom(IILjava/lang/Object;)V" since="21"/>
<method name="copy1DRangeFrom(II[B)V"/>
@@ -37960,8 +39710,6 @@
</class>
<class name="android/renderscript/AllocationAdapter" since="11">
<extends name="android/renderscript/Allocation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;Landroid/renderscript/Allocation;Landroid/renderscript/Type;)V" since="29"/>
<method name="create1D(Landroid/renderscript/RenderScript;Landroid/renderscript/Allocation;)Landroid/renderscript/AllocationAdapter;" since="14"/>
<method name="create2D(Landroid/renderscript/RenderScript;Landroid/renderscript/Allocation;)Landroid/renderscript/AllocationAdapter;"/>
<method name="createTyped(Landroid/renderscript/RenderScript;Landroid/renderscript/Allocation;Landroid/renderscript/Type;)Landroid/renderscript/AllocationAdapter;" since="23"/>
@@ -37983,8 +39731,6 @@
</class>
<class name="android/renderscript/BaseObj" since="11">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="destroy()V"/>
<method name="getName()Ljava/lang/String;" since="14"/>
<method name="setName(Ljava/lang/String;)V"/>
@@ -38039,8 +39785,6 @@
</class>
<class name="android/renderscript/Element" since="11">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="ALLOCATION(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
<method name="A_8(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
<method name="BOOLEAN(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
@@ -38263,7 +40007,6 @@
</class>
<class name="android/renderscript/FileA3D" since="11" deprecated="16" removed="18">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V"/>
<method name="createFromAsset(Landroid/renderscript/RenderScript;Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/renderscript/FileA3D;" deprecated="16"/>
<method name="createFromFile(Landroid/renderscript/RenderScript;Ljava/io/File;)Landroid/renderscript/FileA3D;" deprecated="16"/>
<method name="createFromFile(Landroid/renderscript/RenderScript;Ljava/lang/String;)Landroid/renderscript/FileA3D;" deprecated="16"/>
@@ -38280,7 +40023,6 @@
</class>
<class name="android/renderscript/FileA3D$IndexEntry" since="11" deprecated="16" removed="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getEntryType()Landroid/renderscript/FileA3D$EntryType;" deprecated="16"/>
<method name="getMesh()Landroid/renderscript/Mesh;" deprecated="16"/>
<method name="getName()Ljava/lang/String;" deprecated="16"/>
@@ -38312,7 +40054,6 @@
</class>
<class name="android/renderscript/Font" since="11" deprecated="16" removed="18">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V"/>
<method name="create(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/lang/String;Landroid/renderscript/Font$Style;F)Landroid/renderscript/Font;" deprecated="16"/>
<method name="createFromAsset(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/lang/String;F)Landroid/renderscript/Font;" deprecated="16"/>
<method name="createFromFile(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/io/File;F)Landroid/renderscript/Font;" deprecated="16"/>
@@ -38444,7 +40185,6 @@
</class>
<class name="android/renderscript/Mesh" since="11" deprecated="16" removed="18">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V"/>
<method name="getIndexSetAllocation(I)Landroid/renderscript/Allocation;" deprecated="16"/>
<method name="getPrimitive(I)Landroid/renderscript/Mesh$Primitive;" deprecated="16"/>
<method name="getPrimitiveCount()I" deprecated="16"/>
@@ -38500,7 +40240,6 @@
</class>
<class name="android/renderscript/Program" since="11" removed="18">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V"/>
<method name="bindConstants(Landroid/renderscript/Allocation;I)V"/>
<method name="bindSampler(Landroid/renderscript/Sampler;I)V"/>
<method name="bindTexture(Landroid/renderscript/Allocation;I)V"/>
@@ -38531,7 +40270,6 @@
</class>
<class name="android/renderscript/ProgramFragment" since="11" deprecated="16" removed="18">
<extends name="android/renderscript/Program"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/renderscript/ProgramFragment$Builder" since="11" deprecated="16" removed="18">
<extends name="android/renderscript/Program$BaseProgramBuilder"/>
@@ -38540,7 +40278,6 @@
</class>
<class name="android/renderscript/ProgramFragmentFixedFunction" since="11" deprecated="16" removed="18">
<extends name="android/renderscript/ProgramFragment"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/renderscript/ProgramFragmentFixedFunction$Builder" since="11" deprecated="16" removed="18">
<extends name="java/lang/Object"/>
@@ -38570,7 +40307,6 @@
</class>
<class name="android/renderscript/ProgramRaster" since="11" deprecated="16" removed="18">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V"/>
<method name="CULL_BACK(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramRaster;" deprecated="16"/>
<method name="CULL_FRONT(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramRaster;" deprecated="16"/>
<method name="CULL_NONE(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramRaster;" deprecated="16"/>
@@ -38594,7 +40330,6 @@
</class>
<class name="android/renderscript/ProgramStore" since="11" removed="18">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V"/>
<method name="BLEND_ALPHA_DEPTH_NONE(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;"/>
<method name="BLEND_ALPHA_DEPTH_TEST(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;"/>
<method name="BLEND_NONE_DEPTH_NONE(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;"/>
@@ -38660,7 +40395,6 @@
</class>
<class name="android/renderscript/ProgramVertex" since="11" deprecated="16" removed="18">
<extends name="android/renderscript/Program"/>
- <method name="&lt;init>()V"/>
<method name="getInput(I)Landroid/renderscript/Element;" since="16" deprecated="16"/>
<method name="getInputCount()I" since="16" deprecated="16"/>
</class>
@@ -38672,7 +40406,6 @@
</class>
<class name="android/renderscript/ProgramVertexFixedFunction" since="11" deprecated="16" removed="18">
<extends name="android/renderscript/ProgramVertex"/>
- <method name="&lt;init>()V"/>
<method name="bindConstants(Landroid/renderscript/ProgramVertexFixedFunction$Constants;)V" deprecated="16"/>
</class>
<class name="android/renderscript/ProgramVertexFixedFunction$Builder" since="11" deprecated="16" removed="18">
@@ -38731,8 +40464,6 @@
</class>
<class name="android/renderscript/RenderScript" since="11">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="contextDump()V"/>
<method name="create(Landroid/content/Context;)Landroid/renderscript/RenderScript;"/>
<method name="create(Landroid/content/Context;Landroid/renderscript/RenderScript$ContextType;)Landroid/renderscript/RenderScript;" since="18"/>
@@ -38809,8 +40540,6 @@
</class>
<class name="android/renderscript/Sampler" since="11">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="CLAMP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;"/>
<method name="CLAMP_LINEAR_MIP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;"/>
<method name="CLAMP_NEAREST(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;"/>
@@ -38850,8 +40579,6 @@
</class>
<class name="android/renderscript/Script" since="11">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="bindAllocation(Landroid/renderscript/Allocation;I)V"/>
<method name="createFieldID(ILandroid/renderscript/Element;)Landroid/renderscript/Script$FieldID;" since="17"/>
<method name="createInvokeID(I)Landroid/renderscript/Script$InvokeID;" since="23"/>
@@ -38881,8 +40608,6 @@
</class>
<class name="android/renderscript/Script$Builder" since="11">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/renderscript/RenderScript;)V" since="29"/>
</class>
<class name="android/renderscript/Script$FieldBase" since="11">
<extends name="java/lang/Object"/>
@@ -38898,18 +40623,12 @@
</class>
<class name="android/renderscript/Script$FieldID" since="17">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;Landroid/renderscript/Script;I)V" since="29"/>
</class>
<class name="android/renderscript/Script$InvokeID" since="23">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;Landroid/renderscript/Script;I)V" since="29"/>
</class>
<class name="android/renderscript/Script$KernelID" since="17">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;Landroid/renderscript/Script;II)V" since="29"/>
</class>
<class name="android/renderscript/Script$LaunchOptions" since="18">
<extends name="java/lang/Object"/>
@@ -38933,8 +40652,6 @@
</class>
<class name="android/renderscript/ScriptGroup" since="17">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="execute()V" deprecated="23"/>
<method name="execute([Ljava/lang/Object;)[Ljava/lang/Object;" since="23"/>
<method name="setInput(Landroid/renderscript/Script$KernelID;Landroid/renderscript/Allocation;)V" deprecated="23"/>
@@ -38946,11 +40663,11 @@
</class>
<class name="android/renderscript/ScriptGroup$Builder" since="17" deprecated="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/renderscript/RenderScript;)V"/>
- <method name="addConnection(Landroid/renderscript/Type;Landroid/renderscript/Script$KernelID;Landroid/renderscript/Script$FieldID;)Landroid/renderscript/ScriptGroup$Builder;"/>
- <method name="addConnection(Landroid/renderscript/Type;Landroid/renderscript/Script$KernelID;Landroid/renderscript/Script$KernelID;)Landroid/renderscript/ScriptGroup$Builder;"/>
- <method name="addKernel(Landroid/renderscript/Script$KernelID;)Landroid/renderscript/ScriptGroup$Builder;"/>
- <method name="create()Landroid/renderscript/ScriptGroup;"/>
+ <method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="29"/>
+ <method name="addConnection(Landroid/renderscript/Type;Landroid/renderscript/Script$KernelID;Landroid/renderscript/Script$FieldID;)Landroid/renderscript/ScriptGroup$Builder;" deprecated="29"/>
+ <method name="addConnection(Landroid/renderscript/Type;Landroid/renderscript/Script$KernelID;Landroid/renderscript/Script$KernelID;)Landroid/renderscript/ScriptGroup$Builder;" deprecated="29"/>
+ <method name="addKernel(Landroid/renderscript/Script$KernelID;)Landroid/renderscript/ScriptGroup$Builder;" deprecated="29"/>
+ <method name="create()Landroid/renderscript/ScriptGroup;" deprecated="29"/>
</class>
<class name="android/renderscript/ScriptGroup$Builder2" since="23">
<extends name="java/lang/Object"/>
@@ -38962,29 +40679,20 @@
</class>
<class name="android/renderscript/ScriptGroup$Closure" since="23">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="getGlobal(Landroid/renderscript/Script$FieldID;)Landroid/renderscript/ScriptGroup$Future;"/>
<method name="getReturn()Landroid/renderscript/ScriptGroup$Future;"/>
</class>
<class name="android/renderscript/ScriptGroup$Future" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/renderscript/ScriptGroup$Closure;Landroid/renderscript/Script$FieldID;Ljava/lang/Object;)V" since="29"/>
</class>
<class name="android/renderscript/ScriptGroup$Input" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/renderscript/ScriptIntrinsic" since="17">
<extends name="android/renderscript/Script"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
</class>
<class name="android/renderscript/ScriptIntrinsic3DLUT" since="18">
<extends name="android/renderscript/ScriptIntrinsic"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;Landroid/renderscript/Element;)V" since="29"/>
<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsic3DLUT;"/>
<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
@@ -38993,8 +40701,6 @@
</class>
<class name="android/renderscript/ScriptIntrinsicBLAS" since="23">
<extends name="android/renderscript/ScriptIntrinsic"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="BNNM(Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;II)V"/>
<method name="CGBMV(IIILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V"/>
<method name="CGEMM(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V"/>
@@ -39105,8 +40811,6 @@
</class>
<class name="android/renderscript/ScriptIntrinsicBlend" since="17">
<extends name="android/renderscript/ScriptIntrinsic"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicBlend;"/>
<method name="forEachAdd(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
<method name="forEachAdd(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
@@ -39156,8 +40860,6 @@
</class>
<class name="android/renderscript/ScriptIntrinsicBlur" since="17">
<extends name="android/renderscript/ScriptIntrinsic"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicBlur;"/>
<method name="forEach(Landroid/renderscript/Allocation;)V"/>
<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
@@ -39168,8 +40870,6 @@
</class>
<class name="android/renderscript/ScriptIntrinsicColorMatrix" since="17">
<extends name="android/renderscript/ScriptIntrinsic"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="create(Landroid/renderscript/RenderScript;)Landroid/renderscript/ScriptIntrinsicColorMatrix;" since="19"/>
<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicColorMatrix;" deprecated="19"/>
<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
@@ -39185,8 +40885,6 @@
</class>
<class name="android/renderscript/ScriptIntrinsicConvolve3x3" since="17">
<extends name="android/renderscript/ScriptIntrinsic"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicConvolve3x3;"/>
<method name="forEach(Landroid/renderscript/Allocation;)V"/>
<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
@@ -39197,8 +40895,6 @@
</class>
<class name="android/renderscript/ScriptIntrinsicConvolve5x5" since="17">
<extends name="android/renderscript/ScriptIntrinsic"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicConvolve5x5;"/>
<method name="forEach(Landroid/renderscript/Allocation;)V"/>
<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
@@ -39209,8 +40905,6 @@
</class>
<class name="android/renderscript/ScriptIntrinsicHistogram" since="19">
<extends name="android/renderscript/ScriptIntrinsic"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicHistogram;"/>
<method name="forEach(Landroid/renderscript/Allocation;)V"/>
<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
@@ -39223,8 +40917,6 @@
</class>
<class name="android/renderscript/ScriptIntrinsicLUT" since="17">
<extends name="android/renderscript/ScriptIntrinsic"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicLUT;"/>
<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
@@ -39236,8 +40928,6 @@
</class>
<class name="android/renderscript/ScriptIntrinsicResize" since="20">
<extends name="android/renderscript/ScriptIntrinsic"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="create(Landroid/renderscript/RenderScript;)Landroid/renderscript/ScriptIntrinsicResize;"/>
<method name="forEach_bicubic(Landroid/renderscript/Allocation;)V"/>
<method name="forEach_bicubic(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V"/>
@@ -39247,8 +40937,6 @@
</class>
<class name="android/renderscript/ScriptIntrinsicYuvToRGB" since="17">
<extends name="android/renderscript/ScriptIntrinsic"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicYuvToRGB;"/>
<method name="forEach(Landroid/renderscript/Allocation;)V"/>
<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;"/>
@@ -39281,8 +40969,6 @@
</class>
<class name="android/renderscript/Type" since="11">
<extends name="android/renderscript/BaseObj"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
<method name="createX(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;I)Landroid/renderscript/Type;" since="21"/>
<method name="createXY(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;II)Landroid/renderscript/Type;" since="21"/>
<method name="createXYZ(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;III)Landroid/renderscript/Type;" since="21"/>
@@ -39316,14 +41002,12 @@
<field name="POSITIVE_X" since="14"/>
<field name="POSITIVE_Y" since="14"/>
<field name="POSITIVE_Z" since="14"/>
- <field name="POSITVE_X" deprecated="28"/>
- <field name="POSITVE_Y" deprecated="28"/>
- <field name="POSITVE_Z" deprecated="28"/>
+ <field name="POSITVE_X" deprecated="29"/>
+ <field name="POSITVE_Y" deprecated="29"/>
+ <field name="POSITVE_Z" deprecated="29"/>
</class>
<class name="android/sax/Element" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/sax/Element;Ljava/lang/String;Ljava/lang/String;I)V" since="29"/>
<method name="getChild(Ljava/lang/String;)Landroid/sax/Element;"/>
<method name="getChild(Ljava/lang/String;Ljava/lang/String;)Landroid/sax/Element;"/>
<method name="requireChild(Ljava/lang/String;)Landroid/sax/Element;"/>
@@ -39365,7 +41049,6 @@
<class name="android/se/omapi/Channel" since="28">
<extends name="java/lang/Object"/>
<implements name="java/nio/channels/Channel"/>
- <method name="&lt;init>()V"/>
<method name="getSelectResponse()[B"/>
<method name="getSession()Landroid/se/omapi/Session;"/>
<method name="isBasicChannel()Z"/>
@@ -39374,7 +41057,6 @@
</class>
<class name="android/se/omapi/Reader" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="closeSessions()V"/>
<method name="getName()Ljava/lang/String;"/>
<method name="getSEService()Landroid/se/omapi/SEService;"/>
@@ -39385,6 +41067,7 @@
<extends name="java/lang/Object"/>
<method name="&lt;init>(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/se/omapi/SEService$OnConnectedListener;)V"/>
<method name="getReaders()[Landroid/se/omapi/Reader;"/>
+ <method name="getUiccReader(I)Landroid/se/omapi/Reader;" since="30"/>
<method name="getVersion()Ljava/lang/String;"/>
<method name="isConnected()Z"/>
<method name="shutdown()V"/>
@@ -39395,7 +41078,6 @@
</class>
<class name="android/se/omapi/Session" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="close()V"/>
<method name="closeChannels()V"/>
<method name="getATR()[B"/>
@@ -39408,8 +41090,6 @@
</class>
<class name="android/security/AttestedKeyPair" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/security/KeyPair;[Ljava/security/cert/Certificate;)V" since="29"/>
<method name="getAttestationRecord()Ljava/util/List;"/>
<method name="getKeyPair()Ljava/security/KeyPair;"/>
</class>
@@ -39433,8 +41113,6 @@
</class>
<class name="android/security/ConfirmationPrompt" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Ljava/lang/CharSequence;[B)V" since="29"/>
<method name="cancelPrompt()V"/>
<method name="isSupported(Landroid/content/Context;)Z"/>
<method name="presentPrompt(Ljava/util/concurrent/Executor;Landroid/security/ConfirmationCallback;)V"/>
@@ -39480,53 +41158,176 @@
<class name="android/security/KeyPairGeneratorSpec" since="18" deprecated="23">
<extends name="java/lang/Object"/>
<implements name="java/security/spec/AlgorithmParameterSpec"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;ILjava/security/spec/AlgorithmParameterSpec;Ljavax/security/auth/x500/X500Principal;Ljava/math/BigInteger;Ljava/util/Date;Ljava/util/Date;I)V" since="29"/>
- <method name="getAlgorithmParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;" since="19"/>
- <method name="getContext()Landroid/content/Context;"/>
- <method name="getEndDate()Ljava/util/Date;"/>
- <method name="getKeySize()I" since="19"/>
- <method name="getKeyType()Ljava/lang/String;" since="19"/>
- <method name="getKeystoreAlias()Ljava/lang/String;"/>
- <method name="getSerialNumber()Ljava/math/BigInteger;"/>
- <method name="getStartDate()Ljava/util/Date;"/>
- <method name="getSubjectDN()Ljavax/security/auth/x500/X500Principal;"/>
- <method name="isEncryptionRequired()Z"/>
+ <method name="getAlgorithmParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;" since="19" deprecated="29"/>
+ <method name="getContext()Landroid/content/Context;" deprecated="29"/>
+ <method name="getEndDate()Ljava/util/Date;" deprecated="29"/>
+ <method name="getKeySize()I" since="19" deprecated="29"/>
+ <method name="getKeyType()Ljava/lang/String;" since="19" deprecated="29"/>
+ <method name="getKeystoreAlias()Ljava/lang/String;" deprecated="29"/>
+ <method name="getSerialNumber()Ljava/math/BigInteger;" deprecated="29"/>
+ <method name="getStartDate()Ljava/util/Date;" deprecated="29"/>
+ <method name="getSubjectDN()Ljavax/security/auth/x500/X500Principal;" deprecated="29"/>
+ <method name="isEncryptionRequired()Z" deprecated="29"/>
</class>
<class name="android/security/KeyPairGeneratorSpec$Builder" since="18" deprecated="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="build()Landroid/security/KeyPairGeneratorSpec;"/>
- <method name="setAlgorithmParameterSpec(Ljava/security/spec/AlgorithmParameterSpec;)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19"/>
- <method name="setAlias(Ljava/lang/String;)Landroid/security/KeyPairGeneratorSpec$Builder;"/>
- <method name="setEncryptionRequired()Landroid/security/KeyPairGeneratorSpec$Builder;"/>
- <method name="setEndDate(Ljava/util/Date;)Landroid/security/KeyPairGeneratorSpec$Builder;"/>
- <method name="setKeySize(I)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19"/>
- <method name="setKeyType(Ljava/lang/String;)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19"/>
- <method name="setSerialNumber(Ljava/math/BigInteger;)Landroid/security/KeyPairGeneratorSpec$Builder;"/>
- <method name="setStartDate(Ljava/util/Date;)Landroid/security/KeyPairGeneratorSpec$Builder;"/>
- <method name="setSubject(Ljavax/security/auth/x500/X500Principal;)Landroid/security/KeyPairGeneratorSpec$Builder;"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="build()Landroid/security/KeyPairGeneratorSpec;" deprecated="29"/>
+ <method name="setAlgorithmParameterSpec(Ljava/security/spec/AlgorithmParameterSpec;)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19" deprecated="29"/>
+ <method name="setAlias(Ljava/lang/String;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29"/>
+ <method name="setEncryptionRequired()Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29"/>
+ <method name="setEndDate(Ljava/util/Date;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29"/>
+ <method name="setKeySize(I)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19" deprecated="29"/>
+ <method name="setKeyType(Ljava/lang/String;)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19" deprecated="29"/>
+ <method name="setSerialNumber(Ljava/math/BigInteger;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29"/>
+ <method name="setStartDate(Ljava/util/Date;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29"/>
+ <method name="setSubject(Ljavax/security/auth/x500/X500Principal;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29"/>
</class>
<class name="android/security/KeyStoreParameter" since="18" deprecated="23">
<extends name="java/lang/Object"/>
<implements name="java/security/KeyStore$ProtectionParameter"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
- <method name="isEncryptionRequired()Z"/>
+ <method name="isEncryptionRequired()Z" deprecated="29"/>
</class>
<class name="android/security/KeyStoreParameter$Builder" since="18" deprecated="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="build()Landroid/security/KeyStoreParameter;"/>
- <method name="setEncryptionRequired(Z)Landroid/security/KeyStoreParameter$Builder;"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="build()Landroid/security/KeyStoreParameter;" deprecated="29"/>
+ <method name="setEncryptionRequired(Z)Landroid/security/KeyStoreParameter$Builder;" deprecated="29"/>
</class>
<class name="android/security/NetworkSecurityPolicy" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getInstance()Landroid/security/NetworkSecurityPolicy;"/>
<method name="isCleartextTrafficPermitted()Z"/>
<method name="isCleartextTrafficPermitted(Ljava/lang/String;)Z" since="24"/>
</class>
+ <class name="android/security/identity/AccessControlProfile" since="30">
+ <extends name="java/lang/Object"/>
+ </class>
+ <class name="android/security/identity/AccessControlProfile$Builder" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/security/identity/AccessControlProfileId;)V"/>
+ <method name="build()Landroid/security/identity/AccessControlProfile;"/>
+ <method name="setReaderCertificate(Ljava/security/cert/X509Certificate;)Landroid/security/identity/AccessControlProfile$Builder;"/>
+ <method name="setUserAuthenticationRequired(Z)Landroid/security/identity/AccessControlProfile$Builder;"/>
+ <method name="setUserAuthenticationTimeout(J)Landroid/security/identity/AccessControlProfile$Builder;"/>
+ </class>
+ <class name="android/security/identity/AccessControlProfileId" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(I)V"/>
+ <method name="getId()I"/>
+ </class>
+ <class name="android/security/identity/AlreadyPersonalizedException" since="30">
+ <extends name="android/security/identity/IdentityCredentialException"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+ </class>
+ <class name="android/security/identity/CipherSuiteNotSupportedException" since="30">
+ <extends name="android/security/identity/IdentityCredentialException"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+ </class>
+ <class name="android/security/identity/DocTypeNotSupportedException" since="30">
+ <extends name="android/security/identity/IdentityCredentialException"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+ </class>
+ <class name="android/security/identity/EphemeralPublicKeyNotFoundException" since="30">
+ <extends name="android/security/identity/IdentityCredentialException"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+ </class>
+ <class name="android/security/identity/IdentityCredential" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="createEphemeralKeyPair()Ljava/security/KeyPair;"/>
+ <method name="decryptMessageFromReader([B)[B"/>
+ <method name="encryptMessageToReader([B)[B"/>
+ <method name="getAuthKeysNeedingCertification()Ljava/util/Collection;"/>
+ <method name="getAuthenticationDataUsageCount()[I"/>
+ <method name="getCredentialKeyCertificateChain()Ljava/util/Collection;"/>
+ <method name="getEntries([BLjava/util/Map;[B[B)Landroid/security/identity/ResultData;"/>
+ <method name="setAllowUsingExhaustedKeys(Z)V"/>
+ <method name="setAvailableAuthenticationKeys(II)V"/>
+ <method name="setReaderEphemeralPublicKey(Ljava/security/PublicKey;)V"/>
+ <method name="storeStaticAuthenticationData(Ljava/security/cert/X509Certificate;[B)V"/>
+ </class>
+ <class name="android/security/identity/IdentityCredentialException" since="30">
+ <extends name="java/lang/Exception"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+ </class>
+ <class name="android/security/identity/IdentityCredentialStore" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="createCredential(Ljava/lang/String;Ljava/lang/String;)Landroid/security/identity/WritableIdentityCredential;"/>
+ <method name="deleteCredentialByName(Ljava/lang/String;)[B"/>
+ <method name="getCredentialByName(Ljava/lang/String;I)Landroid/security/identity/IdentityCredential;"/>
+ <method name="getDirectAccessInstance(Landroid/content/Context;)Landroid/security/identity/IdentityCredentialStore;"/>
+ <method name="getInstance(Landroid/content/Context;)Landroid/security/identity/IdentityCredentialStore;"/>
+ <method name="getSupportedDocTypes()[Ljava/lang/String;"/>
+ <field name="CIPHERSUITE_ECDHE_HKDF_ECDSA_WITH_AES_256_GCM_SHA256"/>
+ </class>
+ <class name="android/security/identity/InvalidReaderSignatureException" since="30">
+ <extends name="android/security/identity/IdentityCredentialException"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+ </class>
+ <class name="android/security/identity/InvalidRequestMessageException" since="30">
+ <extends name="android/security/identity/IdentityCredentialException"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+ </class>
+ <class name="android/security/identity/MessageDecryptionException" since="30">
+ <extends name="android/security/identity/IdentityCredentialException"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+ </class>
+ <class name="android/security/identity/NoAuthenticationKeyAvailableException" since="30">
+ <extends name="android/security/identity/IdentityCredentialException"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+ </class>
+ <class name="android/security/identity/PersonalizationData" since="30">
+ <extends name="java/lang/Object"/>
+ </class>
+ <class name="android/security/identity/PersonalizationData$Builder" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="addAccessControlProfile(Landroid/security/identity/AccessControlProfile;)Landroid/security/identity/PersonalizationData$Builder;"/>
+ <method name="build()Landroid/security/identity/PersonalizationData;"/>
+ <method name="putEntry(Ljava/lang/String;Ljava/lang/String;Ljava/util/Collection;[B)Landroid/security/identity/PersonalizationData$Builder;"/>
+ </class>
+ <class name="android/security/identity/ResultData" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="getAuthenticatedData()[B"/>
+ <method name="getEntry(Ljava/lang/String;Ljava/lang/String;)[B"/>
+ <method name="getEntryNames(Ljava/lang/String;)Ljava/util/Collection;"/>
+ <method name="getMessageAuthenticationCode()[B"/>
+ <method name="getNamespaces()Ljava/util/Collection;"/>
+ <method name="getRetrievedEntryNames(Ljava/lang/String;)Ljava/util/Collection;"/>
+ <method name="getStaticAuthenticationData()[B"/>
+ <method name="getStatus(Ljava/lang/String;Ljava/lang/String;)I"/>
+ <field name="STATUS_NOT_IN_REQUEST_MESSAGE"/>
+ <field name="STATUS_NOT_REQUESTED"/>
+ <field name="STATUS_NO_ACCESS_CONTROL_PROFILES"/>
+ <field name="STATUS_NO_SUCH_ENTRY"/>
+ <field name="STATUS_OK"/>
+ <field name="STATUS_READER_AUTHENTICATION_FAILED"/>
+ <field name="STATUS_USER_AUTHENTICATION_FAILED"/>
+ </class>
+ <class name="android/security/identity/SessionTranscriptMismatchException" since="30">
+ <extends name="android/security/identity/IdentityCredentialException"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+ </class>
+ <class name="android/security/identity/UnknownAuthenticationKeyException" since="30">
+ <extends name="android/security/identity/IdentityCredentialException"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+ </class>
+ <class name="android/security/identity/WritableIdentityCredential" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="getCredentialKeyCertificateChain([B)Ljava/util/Collection;"/>
+ <method name="personalize(Landroid/security/identity/PersonalizationData;)[B"/>
+ </class>
<class name="android/security/keystore/KeyExpiredException" since="23">
<extends name="java/security/InvalidKeyException"/>
<method name="&lt;init>()V"/>
@@ -39536,8 +41337,6 @@
<class name="android/security/keystore/KeyGenParameterSpec" since="23">
<extends name="java/lang/Object"/>
<implements name="java/security/spec/AlgorithmParameterSpec"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;IILjava/security/spec/AlgorithmParameterSpec;Ljavax/security/auth/x500/X500Principal;Ljava/math/BigInteger;Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;I[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ZZIZ[BZZZZZZ)V" since="29"/>
<method name="getAlgorithmParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;"/>
<method name="getAttestationChallenge()[B" since="24"/>
<method name="getBlockModes()[Ljava/lang/String;"/>
@@ -39555,6 +41354,7 @@
<method name="getPurposes()I"/>
<method name="getSignaturePaddings()[Ljava/lang/String;"/>
<method name="getUserAuthenticationValidityDurationSeconds()I"/>
+ <method name="isDevicePropertiesAttestationIncluded()Z" since="30"/>
<method name="isDigestsSpecified()Z"/>
<method name="isInvalidatedByBiometricEnrollment()Z" since="24"/>
<method name="isRandomizedEncryptionRequired()Z"/>
@@ -39576,6 +41376,7 @@
<method name="setCertificateNotBefore(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
<method name="setCertificateSerialNumber(Ljava/math/BigInteger;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
<method name="setCertificateSubject(Ljavax/security/auth/x500/X500Principal;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+ <method name="setDevicePropertiesAttestationIncluded(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="30"/>
<method name="setDigests([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
<method name="setEncryptionPaddings([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
<method name="setInvalidatedByBiometricEnrollment(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="24"/>
@@ -39597,8 +41398,6 @@
<class name="android/security/keystore/KeyInfo" since="23">
<extends name="java/lang/Object"/>
<implements name="java/security/spec/KeySpec"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;ZIILjava/util/Date;Ljava/util/Date;Ljava/util/Date;I[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ZIZZZZZ)V" since="29"/>
<method name="getBlockModes()[Ljava/lang/String;"/>
<method name="getDigests()[Ljava/lang/String;"/>
<method name="getEncryptionPaddings()[Ljava/lang/String;"/>
@@ -39633,7 +41432,6 @@
</class>
<class name="android/security/keystore/KeyProperties" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="BLOCK_MODE_CBC"/>
<field name="BLOCK_MODE_CTR"/>
<field name="BLOCK_MODE_ECB"/>
@@ -39673,8 +41471,6 @@
<class name="android/security/keystore/KeyProtection" since="23">
<extends name="java/lang/Object"/>
<implements name="java/security/KeyStore$ProtectionParameter"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;I[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ZZIZZZJZZZZ)V" since="29"/>
<method name="getBlockModes()[Ljava/lang/String;"/>
<method name="getDigests()[Ljava/lang/String;"/>
<method name="getEncryptionPaddings()[Ljava/lang/String;"/>
@@ -39763,8 +41559,6 @@
<class name="android/service/autofill/BatchUpdates" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/service/autofill/BatchUpdates$Builder;)V" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/service/autofill/BatchUpdates$Builder" since="28">
@@ -39778,8 +41572,6 @@
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
<implements name="android/service/autofill/Transformation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/service/autofill/CharSequenceTransformation$Builder;)V" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/service/autofill/CharSequenceTransformation$Builder" since="27">
@@ -39791,22 +41583,19 @@
<class name="android/service/autofill/CustomDescription" since="27">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/service/autofill/CustomDescription$Builder;)V" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/service/autofill/CustomDescription$Builder" since="27">
<extends name="java/lang/Object"/>
<method name="&lt;init>(Landroid/widget/RemoteViews;)V"/>
<method name="addChild(ILandroid/service/autofill/Transformation;)Landroid/service/autofill/CustomDescription$Builder;"/>
+ <method name="addOnClickAction(ILandroid/service/autofill/OnClickAction;)Landroid/service/autofill/CustomDescription$Builder;" since="29"/>
<method name="batchUpdate(Landroid/service/autofill/Validator;Landroid/service/autofill/BatchUpdates;)Landroid/service/autofill/CustomDescription$Builder;" since="28"/>
<method name="build()Landroid/service/autofill/CustomDescription;"/>
</class>
<class name="android/service/autofill/Dataset" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/service/autofill/Dataset$Builder;)V" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/service/autofill/Dataset$Builder" since="26">
@@ -39837,28 +41626,22 @@
</class>
<class name="android/service/autofill/FieldClassification" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/ArrayList;)V" since="29"/>
<method name="getMatches()Ljava/util/List;"/>
</class>
<class name="android/service/autofill/FieldClassification$Match" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;F)V" since="29"/>
<method name="getCategoryId()Ljava/lang/String;"/>
<method name="getScore()F"/>
</class>
<class name="android/service/autofill/FillCallback" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="onFailure(Ljava/lang/CharSequence;)V"/>
<method name="onSuccess(Landroid/service/autofill/FillResponse;)V"/>
</class>
<class name="android/service/autofill/FillContext" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
+ <method name="getFocusedId()Landroid/view/autofill/AutofillId;" since="29"/>
<method name="getRequestId()I"/>
<method name="getStructure()Landroid/app/assist/AssistStructure;"/>
<field name="CREATOR"/>
@@ -39866,16 +41649,12 @@
<class name="android/service/autofill/FillEventHistory" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILandroid/os/Bundle;)V" since="29"/>
<method name="getClientState()Landroid/os/Bundle;" deprecated="28"/>
<method name="getEvents()Ljava/util/List;"/>
<field name="CREATOR"/>
</class>
<class name="android/service/autofill/FillEventHistory$Event" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILjava/lang/String;Landroid/os/Bundle;Ljava/util/List;Landroid/util/ArraySet;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;[Landroid/view/autofill/AutofillId;[Landroid/service/autofill/FieldClassification;)V" since="29"/>
<method name="getChangedFields()Ljava/util/Map;" since="28"/>
<method name="getClientState()Landroid/os/Bundle;" since="28"/>
<method name="getDatasetId()Ljava/lang/String;"/>
@@ -39893,20 +41672,17 @@
<class name="android/service/autofill/FillRequest" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getClientState()Landroid/os/Bundle;"/>
<method name="getFillContexts()Ljava/util/List;"/>
<method name="getFlags()I"/>
<method name="getId()I"/>
<field name="CREATOR"/>
+ <field name="FLAG_COMPATIBILITY_MODE_REQUEST" since="29"/>
<field name="FLAG_MANUAL_REQUEST"/>
</class>
<class name="android/service/autofill/FillResponse" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/service/autofill/FillResponse$Builder;)V" since="29"/>
<field name="CREATOR"/>
<field name="FLAG_DISABLE_ACTIVITY_ONLY" since="28"/>
<field name="FLAG_TRACK_CONTEXT_COMMITED" since="28"/>
@@ -39925,13 +41701,12 @@
<method name="setHeader(Landroid/widget/RemoteViews;)Landroid/service/autofill/FillResponse$Builder;" since="28"/>
<method name="setIgnoredIds([Landroid/view/autofill/AutofillId;)Landroid/service/autofill/FillResponse$Builder;"/>
<method name="setSaveInfo(Landroid/service/autofill/SaveInfo;)Landroid/service/autofill/FillResponse$Builder;"/>
+ <method name="setUserData(Landroid/service/autofill/UserData;)Landroid/service/autofill/FillResponse$Builder;" since="29"/>
</class>
<class name="android/service/autofill/ImageTransformation" since="27">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
<implements name="android/service/autofill/Transformation"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/service/autofill/ImageTransformation$Builder;)V" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/service/autofill/ImageTransformation$Builder" since="27">
@@ -39949,6 +41724,9 @@
<method name="&lt;init>([Landroid/view/autofill/AutofillId;)V"/>
<field name="CREATOR"/>
</class>
+ <class name="android/service/autofill/OnClickAction" since="29">
+ <extends name="java/lang/Object"/>
+ </class>
<class name="android/service/autofill/RegexValidator" since="27">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
@@ -39961,7 +41739,6 @@
</class>
<class name="android/service/autofill/SaveCallback" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="onFailure(Ljava/lang/CharSequence;)V"/>
<method name="onSuccess()V"/>
<method name="onSuccess(Landroid/content/IntentSender;)V" since="28"/>
@@ -39969,9 +41746,8 @@
<class name="android/service/autofill/SaveInfo" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/service/autofill/SaveInfo$Builder;)V" since="29"/>
<field name="CREATOR"/>
+ <field name="FLAG_DELAY_SAVE" since="29"/>
<field name="FLAG_DONT_SAVE_ON_FINISH" since="28"/>
<field name="FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE"/>
<field name="NEGATIVE_BUTTON_STYLE_CANCEL"/>
@@ -40000,8 +41776,6 @@
<class name="android/service/autofill/SaveRequest" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getClientState()Landroid/os/Bundle;"/>
<method name="getDatasetIds()Ljava/util/List;" since="28"/>
<method name="getFillContexts()Ljava/util/List;"/>
@@ -40020,9 +41794,8 @@
<class name="android/service/autofill/UserData" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/service/autofill/UserData$Builder;)V" since="29"/>
<method name="getFieldClassificationAlgorithm()Ljava/lang/String;"/>
+ <method name="getFieldClassificationAlgorithmForCategory(Ljava/lang/String;)Ljava/lang/String;" since="29"/>
<method name="getId()Ljava/lang/String;"/>
<method name="getMaxCategoryCount()I"/>
<method name="getMaxFieldClassificationIdsSize()I"/>
@@ -40037,30 +41810,49 @@
<method name="add(Ljava/lang/String;Ljava/lang/String;)Landroid/service/autofill/UserData$Builder;"/>
<method name="build()Landroid/service/autofill/UserData;"/>
<method name="setFieldClassificationAlgorithm(Ljava/lang/String;Landroid/os/Bundle;)Landroid/service/autofill/UserData$Builder;"/>
+ <method name="setFieldClassificationAlgorithmForCategory(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/service/autofill/UserData$Builder;" since="29"/>
</class>
<class name="android/service/autofill/Validator" since="27">
<extends name="java/lang/Object"/>
</class>
<class name="android/service/autofill/Validators" since="27">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="and([Landroid/service/autofill/Validator;)Landroid/service/autofill/Validator;"/>
<method name="not(Landroid/service/autofill/Validator;)Landroid/service/autofill/Validator;" since="28"/>
<method name="or([Landroid/service/autofill/Validator;)Landroid/service/autofill/Validator;"/>
</class>
+ <class name="android/service/autofill/VisibilitySetterAction" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <implements name="android/service/autofill/OnClickAction"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/service/autofill/VisibilitySetterAction$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(II)V"/>
+ <method name="build()Landroid/service/autofill/VisibilitySetterAction;"/>
+ <method name="setVisibility(II)Landroid/service/autofill/VisibilitySetterAction$Builder;"/>
+ </class>
<class name="android/service/carrier/CarrierIdentifier" since="23">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V" since="29"/>
<method name="&lt;init>([BLjava/lang/String;Ljava/lang/String;)V" since="28"/>
+ <method name="getCarrierId()I" since="29"/>
<method name="getGid1()Ljava/lang/String;"/>
<method name="getGid2()Ljava/lang/String;"/>
<method name="getImsi()Ljava/lang/String;"/>
<method name="getMcc()Ljava/lang/String;"/>
<method name="getMnc()Ljava/lang/String;"/>
+ <method name="getSpecificCarrierId()I" since="29"/>
<method name="getSpn()Ljava/lang/String;"/>
<field name="CREATOR"/>
</class>
+ <class name="android/service/carrier/CarrierMessagingClientService" since="29">
+ <extends name="android/app/Service"/>
+ <method name="&lt;init>()V"/>
+ </class>
<class name="android/service/carrier/CarrierMessagingService" since="22">
<extends name="android/app/Service"/>
<method name="&lt;init>()V"/>
@@ -40199,8 +41991,6 @@
</class>
<class name="android/service/media/MediaBrowserService$Result" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/service/media/MediaBrowserService;)V" removed="29"/>
- <method name="&lt;init>(Landroid/service/media/MediaBrowserService;Ljava/lang/Object;)V" since="29"/>
<method name="detach()V"/>
<method name="sendResult(Ljava/lang/Object;)V"/>
</class>
@@ -40231,22 +42021,22 @@
<field name="state"/>
<field name="summary"/>
</class>
- <class name="android/service/notification/ConditionProviderService" since="24">
+ <class name="android/service/notification/ConditionProviderService" since="24" deprecated="29">
<extends name="android/app/Service"/>
- <method name="&lt;init>()V"/>
- <method name="notifyCondition(Landroid/service/notification/Condition;)V"/>
- <method name="notifyConditions([Landroid/service/notification/Condition;)V"/>
- <method name="onConnected()V"/>
- <method name="onRequestConditions(I)V"/>
- <method name="onSubscribe(Landroid/net/Uri;)V"/>
- <method name="onUnsubscribe(Landroid/net/Uri;)V"/>
- <method name="requestRebind(Landroid/content/ComponentName;)V" since="26"/>
- <method name="requestUnbind()V" since="26"/>
- <field name="EXTRA_RULE_ID"/>
- <field name="META_DATA_CONFIGURATION_ACTIVITY"/>
- <field name="META_DATA_RULE_INSTANCE_LIMIT"/>
- <field name="META_DATA_RULE_TYPE"/>
- <field name="SERVICE_INTERFACE"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="notifyCondition(Landroid/service/notification/Condition;)V" deprecated="29"/>
+ <method name="notifyConditions([Landroid/service/notification/Condition;)V" deprecated="29"/>
+ <method name="onConnected()V" deprecated="29"/>
+ <method name="onRequestConditions(I)V" deprecated="29"/>
+ <method name="onSubscribe(Landroid/net/Uri;)V" deprecated="29"/>
+ <method name="onUnsubscribe(Landroid/net/Uri;)V" deprecated="29"/>
+ <method name="requestRebind(Landroid/content/ComponentName;)V" since="26" deprecated="29"/>
+ <method name="requestUnbind()V" since="26" deprecated="29"/>
+ <field name="EXTRA_RULE_ID" deprecated="29"/>
+ <field name="META_DATA_CONFIGURATION_ACTIVITY" deprecated="29"/>
+ <field name="META_DATA_RULE_INSTANCE_LIMIT" deprecated="29"/>
+ <field name="META_DATA_RULE_TYPE" deprecated="29"/>
+ <field name="SERVICE_INTERFACE" deprecated="29"/>
</class>
<class name="android/service/notification/NotificationListenerService" since="18">
<extends name="android/app/Service"/>
@@ -40255,6 +42045,7 @@
<method name="cancelNotification(Ljava/lang/String;)V" since="21"/>
<method name="cancelNotification(Ljava/lang/String;Ljava/lang/String;I)V" deprecated="21"/>
<method name="cancelNotifications([Ljava/lang/String;)V" since="21"/>
+ <method name="clearRequestedListenerHints()V" since="29"/>
<method name="getActiveNotifications()[Landroid/service/notification/StatusBarNotification;"/>
<method name="getActiveNotifications([Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification;" since="21"/>
<method name="getCurrentInterruptionFilter()I" since="21"/>
@@ -40275,6 +42066,7 @@
<method name="onNotificationRemoved(Landroid/service/notification/StatusBarNotification;)V"/>
<method name="onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)V" since="21"/>
<method name="onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;I)V" since="26"/>
+ <method name="onSilentStatusBarIconsVisibilityChanged(Z)V" since="29"/>
<method name="requestInterruptionFilter(I)V" since="21"/>
<method name="requestListenerHints(I)V" since="21"/>
<method name="requestRebind(Landroid/content/ComponentName;)V" since="24"/>
@@ -40319,13 +42111,17 @@
<class name="android/service/notification/NotificationListenerService$Ranking" since="21">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
+ <method name="canBubble()Z" since="29"/>
<method name="canShowBadge()Z" since="26"/>
<method name="getChannel()Landroid/app/NotificationChannel;" since="26"/>
<method name="getImportance()I" since="24"/>
<method name="getImportanceExplanation()Ljava/lang/CharSequence;" since="24"/>
<method name="getKey()Ljava/lang/String;"/>
+ <method name="getLastAudiblyAlertedMillis()J" since="29"/>
<method name="getOverrideGroupKey()Ljava/lang/String;" since="24"/>
<method name="getRank()I"/>
+ <method name="getSmartActions()Ljava/util/List;" since="29"/>
+ <method name="getSmartReplies()Ljava/util/List;" since="29"/>
<method name="getSuppressedVisualEffects()I" since="24"/>
<method name="getUserSentiment()I" since="28"/>
<method name="isAmbient()Z"/>
@@ -40338,7 +42134,6 @@
<class name="android/service/notification/NotificationListenerService$RankingMap" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getOrderedKeys()[Ljava/lang/String;"/>
<method name="getRanking(Ljava/lang/String;Landroid/service/notification/NotificationListenerService$Ranking;)Z"/>
<field name="CREATOR"/>
@@ -40353,10 +42148,12 @@
<method name="getId()I"/>
<method name="getKey()Ljava/lang/String;" since="20"/>
<method name="getNotification()Landroid/app/Notification;"/>
+ <method name="getOpPkg()Ljava/lang/String;" since="29"/>
<method name="getOverrideGroupKey()Ljava/lang/String;" since="24"/>
<method name="getPackageName()Ljava/lang/String;"/>
<method name="getPostTime()J"/>
<method name="getTag()Ljava/lang/String;"/>
+ <method name="getUid()I" since="29"/>
<method name="getUser()Landroid/os/UserHandle;" since="21"/>
<method name="getUserId()I" deprecated="21"/>
<method name="isClearable()Z"/>
@@ -40365,18 +42162,73 @@
<method name="setOverrideGroupKey(Ljava/lang/String;)V" since="24"/>
<field name="CREATOR"/>
</class>
+ <class name="android/service/notification/ZenPolicy" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getPriorityCallSenders()I"/>
+ <method name="getPriorityCategoryAlarms()I"/>
+ <method name="getPriorityCategoryCalls()I"/>
+ <method name="getPriorityCategoryEvents()I"/>
+ <method name="getPriorityCategoryMedia()I"/>
+ <method name="getPriorityCategoryMessages()I"/>
+ <method name="getPriorityCategoryReminders()I"/>
+ <method name="getPriorityCategoryRepeatCallers()I"/>
+ <method name="getPriorityCategorySystem()I"/>
+ <method name="getPriorityMessageSenders()I"/>
+ <method name="getVisualEffectAmbient()I"/>
+ <method name="getVisualEffectBadge()I"/>
+ <method name="getVisualEffectFullScreenIntent()I"/>
+ <method name="getVisualEffectLights()I"/>
+ <method name="getVisualEffectNotificationList()I"/>
+ <method name="getVisualEffectPeek()I"/>
+ <method name="getVisualEffectStatusBar()I"/>
+ <field name="CREATOR"/>
+ <field name="PEOPLE_TYPE_ANYONE"/>
+ <field name="PEOPLE_TYPE_CONTACTS"/>
+ <field name="PEOPLE_TYPE_NONE"/>
+ <field name="PEOPLE_TYPE_STARRED"/>
+ <field name="PEOPLE_TYPE_UNSET"/>
+ <field name="STATE_ALLOW"/>
+ <field name="STATE_DISALLOW"/>
+ <field name="STATE_UNSET"/>
+ </class>
+ <class name="android/service/notification/ZenPolicy$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="allowAlarms(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="allowAllSounds()Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="allowCalls(I)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="allowEvents(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="allowMedia(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="allowMessages(I)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="allowReminders(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="allowRepeatCallers(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="allowSystem(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="build()Landroid/service/notification/ZenPolicy;"/>
+ <method name="disallowAllSounds()Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="hideAllVisualEffects()Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="showAllVisualEffects()Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="showBadges(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="showFullScreenIntent(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="showInAmbientDisplay(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="showInNotificationList(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="showLights(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="showPeeking(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+ <method name="showStatusBarIcons(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+ </class>
<class name="android/service/quicksettings/Tile" since="24">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getContentDescription()Ljava/lang/CharSequence;"/>
<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
<method name="getLabel()Ljava/lang/CharSequence;"/>
<method name="getState()I"/>
+ <method name="getSubtitle()Ljava/lang/CharSequence;" since="29"/>
<method name="setContentDescription(Ljava/lang/CharSequence;)V"/>
<method name="setIcon(Landroid/graphics/drawable/Icon;)V"/>
<method name="setLabel(Ljava/lang/CharSequence;)V"/>
<method name="setState(I)V"/>
+ <method name="setSubtitle(Ljava/lang/CharSequence;)V" since="29"/>
<method name="updateTile()V"/>
<field name="CREATOR"/>
<field name="STATE_ACTIVE"/>
@@ -40427,7 +42279,6 @@
</class>
<class name="android/service/voice/AlwaysOnHotwordDetector" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="createEnrollIntent()Landroid/content/Intent;"/>
<method name="createReEnrollIntent()Landroid/content/Intent;"/>
<method name="createUnEnrollIntent()Landroid/content/Intent;"/>
@@ -40454,8 +42305,6 @@
</class>
<class name="android/service/voice/AlwaysOnHotwordDetector$EventPayload" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ZZLandroid/media/AudioFormat;I[B)V" since="29"/>
<method name="getCaptureAudioFormat()Landroid/media/AudioFormat;"/>
<method name="getTriggerAudio()[B"/>
</class>
@@ -40465,10 +42314,12 @@
<method name="createAlwaysOnHotwordDetector(Ljava/lang/String;Ljava/util/Locale;Landroid/service/voice/AlwaysOnHotwordDetector$Callback;)Landroid/service/voice/AlwaysOnHotwordDetector;"/>
<method name="getDisabledShowContext()I" since="23"/>
<method name="isActiveService(Landroid/content/Context;Landroid/content/ComponentName;)Z"/>
+ <method name="onGetSupportedVoiceActions(Ljava/util/Set;)Ljava/util/Set;" since="29"/>
<method name="onLaunchVoiceAssistFromKeyguard()V" since="23"/>
<method name="onReady()V"/>
<method name="onShutdown()V"/>
<method name="setDisabledShowContext(I)V" since="23"/>
+ <method name="setUiHints(Landroid/os/Bundle;)V" since="29"/>
<method name="showSession(Landroid/os/Bundle;I)V" since="23"/>
<method name="startSession(Landroid/os/Bundle;)V" removed="23"/>
<field name="SERVICE_INTERFACE"/>
@@ -40498,9 +42349,11 @@
<method name="onCreate(Landroid/os/Bundle;)V" removed="23"/>
<method name="onCreateContentView()Landroid/view/View;" since="23"/>
<method name="onDestroy()V"/>
+ <method name="onDirectActionsInvalidated(Landroid/service/voice/VoiceInteractionSession$ActivityId;)V" since="29"/>
<method name="onGetSupportedCommands([Ljava/lang/String;)[Z" since="23"/>
- <method name="onHandleAssist(Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;)V" since="23"/>
- <method name="onHandleAssistSecondary(Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;II)V" since="24"/>
+ <method name="onHandleAssist(Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;)V" since="23" deprecated="29"/>
+ <method name="onHandleAssist(Landroid/service/voice/VoiceInteractionSession$AssistState;)V" since="29"/>
+ <method name="onHandleAssistSecondary(Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;II)V" since="24" deprecated="29"/>
<method name="onHandleScreenshot(Landroid/graphics/Bitmap;)V" since="23"/>
<method name="onHide()V" since="23"/>
<method name="onLockscreenShown()V" since="23"/>
@@ -40513,6 +42366,8 @@
<method name="onShow(Landroid/os/Bundle;I)V" since="23"/>
<method name="onTaskFinished(Landroid/content/Intent;I)V" since="23"/>
<method name="onTaskStarted(Landroid/content/Intent;I)V" since="23"/>
+ <method name="performDirectAction(Landroid/app/DirectAction;Landroid/os/Bundle;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29"/>
+ <method name="requestDirectActions(Landroid/service/voice/VoiceInteractionSession$ActivityId;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29"/>
<method name="setContentView(Landroid/view/View;)V"/>
<method name="setDisabledShowContext(I)V" since="23"/>
<method name="setKeepAwake(Z)V" since="23"/>
@@ -40524,33 +42379,45 @@
<field name="SHOW_SOURCE_ACTIVITY" since="24"/>
<field name="SHOW_SOURCE_APPLICATION" since="23"/>
<field name="SHOW_SOURCE_ASSIST_GESTURE" since="23"/>
+ <field name="SHOW_SOURCE_AUTOMOTIVE_SYSTEM_UI" since="29"/>
+ <field name="SHOW_SOURCE_NOTIFICATION" since="29"/>
+ <field name="SHOW_SOURCE_PUSH_TO_TALK" since="29"/>
<field name="SHOW_WITH_ASSIST" since="23"/>
<field name="SHOW_WITH_SCREENSHOT" since="23"/>
</class>
<class name="android/service/voice/VoiceInteractionSession$AbortVoiceRequest" since="23">
<extends name="android/service/voice/VoiceInteractionSession$Request"/>
- <method name="&lt;init>()V"/>
<method name="getMessage()Ljava/lang/CharSequence;" deprecated="23"/>
<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;"/>
<method name="sendAbortResult(Landroid/os/Bundle;)V"/>
</class>
+ <class name="android/service/voice/VoiceInteractionSession$ActivityId" since="29">
+ <extends name="java/lang/Object"/>
+ </class>
+ <class name="android/service/voice/VoiceInteractionSession$AssistState" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getActivityId()Landroid/service/voice/VoiceInteractionSession$ActivityId;"/>
+ <method name="getAssistContent()Landroid/app/assist/AssistContent;"/>
+ <method name="getAssistData()Landroid/os/Bundle;"/>
+ <method name="getAssistStructure()Landroid/app/assist/AssistStructure;"/>
+ <method name="getCount()I"/>
+ <method name="getIndex()I"/>
+ <method name="isFocused()Z"/>
+ </class>
<class name="android/service/voice/VoiceInteractionSession$CommandRequest" since="23">
<extends name="android/service/voice/VoiceInteractionSession$Request"/>
- <method name="&lt;init>()V"/>
<method name="getCommand()Ljava/lang/String;"/>
<method name="sendIntermediateResult(Landroid/os/Bundle;)V"/>
<method name="sendResult(Landroid/os/Bundle;)V"/>
</class>
<class name="android/service/voice/VoiceInteractionSession$CompleteVoiceRequest" since="23">
<extends name="android/service/voice/VoiceInteractionSession$Request"/>
- <method name="&lt;init>()V"/>
<method name="getMessage()Ljava/lang/CharSequence;" deprecated="23"/>
<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;"/>
<method name="sendCompleteResult(Landroid/os/Bundle;)V"/>
</class>
<class name="android/service/voice/VoiceInteractionSession$ConfirmationRequest" since="23">
<extends name="android/service/voice/VoiceInteractionSession$Request"/>
- <method name="&lt;init>()V"/>
<method name="getPrompt()Ljava/lang/CharSequence;" deprecated="23"/>
<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;"/>
<method name="sendConfirmationResult(ZLandroid/os/Bundle;)V"/>
@@ -40567,7 +42434,6 @@
</class>
<class name="android/service/voice/VoiceInteractionSession$PickOptionRequest" since="23">
<extends name="android/service/voice/VoiceInteractionSession$Request"/>
- <method name="&lt;init>()V"/>
<method name="getOptions()[Landroid/app/VoiceInteractor$PickOptionRequest$Option;"/>
<method name="getPrompt()Ljava/lang/CharSequence;" deprecated="23"/>
<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;"/>
@@ -40576,7 +42442,6 @@
</class>
<class name="android/service/voice/VoiceInteractionSession$Request" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="cancel()V"/>
<method name="getCallingPackage()Ljava/lang/String;"/>
<method name="getCallingUid()I"/>
@@ -40608,6 +42473,7 @@
<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="14"/>
<method name="getDesiredMinimumHeight()I"/>
<method name="getDesiredMinimumWidth()I"/>
+ <method name="getDisplayContext()Landroid/content/Context;" since="29"/>
<method name="getSurfaceHolder()Landroid/view/SurfaceHolder;"/>
<method name="isPreview()Z"/>
<method name="isVisible()Z"/>
@@ -40651,7 +42517,6 @@
</class>
<class name="android/speech/RecognitionService$Callback" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/speech/RecognitionService;)V"/>
<method name="beginningOfSpeech()V"/>
<method name="bufferReceived([B)V"/>
<method name="endOfSpeech()V"/>
@@ -40664,7 +42529,6 @@
</class>
<class name="android/speech/RecognizerIntent" since="3">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getVoiceDetailsIntent(Landroid/content/Context;)Landroid/content/Intent;" since="8"/>
<field name="ACTION_GET_LANGUAGE_DETAILS" since="8"/>
<field name="ACTION_RECOGNIZE_SPEECH"/>
@@ -40701,7 +42565,6 @@
</class>
<class name="android/speech/RecognizerResultsIntent" since="10">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="ACTION_VOICE_SEARCH_RESULTS"/>
<field name="EXTRA_VOICE_SEARCH_RESULT_HTML"/>
<field name="EXTRA_VOICE_SEARCH_RESULT_HTML_BASE_URLS"/>
@@ -40712,8 +42575,6 @@
</class>
<class name="android/speech/SpeechRecognizer" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/content/ComponentName;)V" since="29"/>
<method name="cancel()V"/>
<method name="createSpeechRecognizer(Landroid/content/Context;)Landroid/speech/SpeechRecognizer;"/>
<method name="createSpeechRecognizer(Landroid/content/Context;Landroid/content/ComponentName;)Landroid/speech/SpeechRecognizer;"/>
@@ -40790,9 +42651,9 @@
<method name="playSilence(JILjava/util/HashMap;)I" deprecated="21"/>
<method name="playSilentUtterance(JILjava/lang/String;)I" since="21"/>
<method name="setAudioAttributes(Landroid/media/AudioAttributes;)I" since="21"/>
- <method name="setEngineByPackageName(Ljava/lang/String;)I" since="8" deprecated="16"/>
+ <method name="setEngineByPackageName(Ljava/lang/String;)I" since="8" deprecated="15"/>
<method name="setLanguage(Ljava/util/Locale;)I"/>
- <method name="setOnUtteranceCompletedListener(Landroid/speech/tts/TextToSpeech$OnUtteranceCompletedListener;)I" deprecated="16"/>
+ <method name="setOnUtteranceCompletedListener(Landroid/speech/tts/TextToSpeech$OnUtteranceCompletedListener;)I" deprecated="15"/>
<method name="setOnUtteranceProgressListener(Landroid/speech/tts/UtteranceProgressListener;)I" since="15"/>
<method name="setPitch(F)I"/>
<method name="setSpeechRate(F)I"/>
@@ -40869,7 +42730,7 @@
</class>
<class name="android/speech/tts/TextToSpeech$OnUtteranceCompletedListener" since="4" deprecated="18">
<extends name="java/lang/Object"/>
- <method name="onUtteranceCompleted(Ljava/lang/String;)V"/>
+ <method name="onUtteranceCompleted(Ljava/lang/String;)V" deprecated="29"/>
</class>
<class name="android/speech/tts/TextToSpeechService" since="14">
<extends name="android/app/Service"/>
@@ -40923,6 +42784,8 @@
<extends name="java/lang/Exception"/>
<method name="&lt;init>(Ljava/lang/String;I)V"/>
<method name="&lt;init>(Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+ <method name="rethrowAsIOException()Ljava/io/IOException;" since="30"/>
+ <method name="rethrowAsSocketException()Ljava/net/SocketException;" since="30"/>
<field name="errno"/>
</class>
<class name="android/system/Int64Ref" since="28">
@@ -40932,14 +42795,15 @@
</class>
<class name="android/system/Os" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="accept(Ljava/io/FileDescriptor;Ljava/net/InetSocketAddress;)Ljava/io/FileDescriptor;"/>
<method name="access(Ljava/lang/String;I)Z"/>
<method name="bind(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V"/>
+ <method name="bind(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V" since="29"/>
<method name="chmod(Ljava/lang/String;I)V"/>
<method name="chown(Ljava/lang/String;II)V"/>
<method name="close(Ljava/io/FileDescriptor;)V"/>
<method name="connect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V"/>
+ <method name="connect(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V" since="29"/>
<method name="dup(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;"/>
<method name="dup2(Ljava/io/FileDescriptor;I)Ljava/io/FileDescriptor;"/>
<method name="environ()[Ljava/lang/String;"/>
@@ -40947,6 +42811,7 @@
<method name="execve(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V"/>
<method name="fchmod(Ljava/io/FileDescriptor;I)V"/>
<method name="fchown(Ljava/io/FileDescriptor;II)V"/>
+ <method name="fcntlInt(Ljava/io/FileDescriptor;II)I" since="30"/>
<method name="fdatasync(Ljava/io/FileDescriptor;)V"/>
<method name="fstat(Ljava/io/FileDescriptor;)Landroid/system/StructStat;"/>
<method name="fstatvfs(Ljava/io/FileDescriptor;)Landroid/system/StructStatVfs;"/>
@@ -40961,6 +42826,7 @@
<method name="getpid()I"/>
<method name="getppid()I"/>
<method name="getsockname(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;"/>
+ <method name="getsockoptTimeval(Ljava/io/FileDescriptor;II)Landroid/system/StructTimeval;" since="29"/>
<method name="gettid()I"/>
<method name="getuid()I"/>
<method name="getxattr(Ljava/lang/String;Ljava/lang/String;)[B" since="26"/>
@@ -40975,6 +42841,7 @@
<method name="listxattr(Ljava/lang/String;)[Ljava/lang/String;" since="26"/>
<method name="lseek(Ljava/io/FileDescriptor;JI)J"/>
<method name="lstat(Ljava/lang/String;)Landroid/system/StructStat;"/>
+ <method name="memfd_create(Ljava/lang/String;I)Ljava/io/FileDescriptor;" since="30"/>
<method name="mincore(JJ[B)V"/>
<method name="mkdir(Ljava/lang/String;I)V"/>
<method name="mkfifo(Ljava/lang/String;I)V"/>
@@ -41005,13 +42872,15 @@
<method name="sendfile(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Landroid/util/MutableLong;J)J" removed="28"/>
<method name="sendto(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;ILjava/net/InetAddress;I)I"/>
<method name="sendto(Ljava/io/FileDescriptor;[BIIILjava/net/InetAddress;I)I"/>
- <method name="setegid(I)V"/>
+ <method name="sendto(Ljava/io/FileDescriptor;[BIIILjava/net/SocketAddress;)I" since="29"/>
+ <method name="setegid(I)V" deprecated="29"/>
<method name="setenv(Ljava/lang/String;Ljava/lang/String;Z)V"/>
- <method name="seteuid(I)V"/>
- <method name="setgid(I)V"/>
+ <method name="seteuid(I)V" deprecated="29"/>
+ <method name="setgid(I)V" deprecated="29"/>
<method name="setsid()I"/>
<method name="setsockoptInt(Ljava/io/FileDescriptor;III)V" since="26"/>
- <method name="setuid(I)V"/>
+ <method name="setsockoptTimeval(Ljava/io/FileDescriptor;IILandroid/system/StructTimeval;)V" since="29"/>
+ <method name="setuid(I)V" deprecated="29"/>
<method name="setxattr(Ljava/lang/String;Ljava/lang/String;[BI)V" since="26"/>
<method name="shutdown(Ljava/io/FileDescriptor;I)V"/>
<method name="socket(III)Ljava/io/FileDescriptor;"/>
@@ -41034,7 +42903,6 @@
</class>
<class name="android/system/OsConstants" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="S_ISBLK(I)Z"/>
<method name="S_ISCHR(I)Z"/>
<method name="S_ISDIR(I)Z"/>
@@ -41053,6 +42921,8 @@
<method name="gaiName(I)Ljava/lang/String;"/>
<field name="AF_INET"/>
<field name="AF_INET6"/>
+ <field name="AF_NETLINK" since="29"/>
+ <field name="AF_PACKET" since="29"/>
<field name="AF_UNIX"/>
<field name="AF_UNSPEC"/>
<field name="AI_ADDRCONFIG"/>
@@ -41062,6 +42932,7 @@
<field name="AI_NUMERICSERV"/>
<field name="AI_PASSIVE"/>
<field name="AI_V4MAPPED"/>
+ <field name="ARPHRD_ETHER" since="29"/>
<field name="CAP_AUDIT_CONTROL"/>
<field name="CAP_AUDIT_WRITE"/>
<field name="CAP_BLOCK_SUSPEND"/>
@@ -41185,6 +43056,10 @@
<field name="ESPIPE"/>
<field name="ESRCH"/>
<field name="ESTALE"/>
+ <field name="ETH_P_ALL" since="29"/>
+ <field name="ETH_P_ARP" since="29"/>
+ <field name="ETH_P_IP" since="29"/>
+ <field name="ETH_P_IPV6" since="29"/>
<field name="ETIME"/>
<field name="ETIMEDOUT"/>
<field name="ETXTBSY"/>
@@ -41211,6 +43086,10 @@
<field name="F_SETOWN"/>
<field name="F_UNLCK"/>
<field name="F_WRLCK"/>
+ <field name="ICMP6_ECHO_REPLY" since="29"/>
+ <field name="ICMP6_ECHO_REQUEST" since="29"/>
+ <field name="ICMP_ECHO" since="29"/>
+ <field name="ICMP_ECHOREPLY" since="29"/>
<field name="IFA_F_DADFAILED"/>
<field name="IFA_F_DEPRECATED"/>
<field name="IFA_F_HOMEADDRESS"/>
@@ -41261,6 +43140,7 @@
<field name="IP_MULTICAST_TTL"/>
<field name="IP_TOS"/>
<field name="IP_TTL"/>
+ <field name="MAP_ANONYMOUS" since="30"/>
<field name="MAP_FIXED"/>
<field name="MAP_PRIVATE"/>
<field name="MAP_SHARED"/>
@@ -41272,6 +43152,7 @@
<field name="MCAST_UNBLOCK_SOURCE"/>
<field name="MCL_CURRENT"/>
<field name="MCL_FUTURE"/>
+ <field name="MFD_CLOEXEC" since="30"/>
<field name="MSG_CTRUNC"/>
<field name="MSG_DONTROUTE"/>
<field name="MSG_EOR"/>
@@ -41282,6 +43163,9 @@
<field name="MS_ASYNC"/>
<field name="MS_INVALIDATE"/>
<field name="MS_SYNC"/>
+ <field name="NETLINK_INET_DIAG" since="29"/>
+ <field name="NETLINK_NETFILTER" since="30"/>
+ <field name="NETLINK_ROUTE" since="29"/>
<field name="NI_DGRAM"/>
<field name="NI_NAMEREQD"/>
<field name="NI_NOFQDN"/>
@@ -41318,6 +43202,7 @@
<field name="PR_GET_DUMPABLE"/>
<field name="PR_SET_DUMPABLE"/>
<field name="PR_SET_NO_NEW_PRIVS"/>
+ <field name="RTMGRP_NEIGH" since="29"/>
<field name="RT_SCOPE_HOST"/>
<field name="RT_SCOPE_LINK"/>
<field name="RT_SCOPE_NOWHERE"/>
@@ -41367,7 +43252,9 @@
<field name="SIOCGIFBRDADDR"/>
<field name="SIOCGIFDSTADDR"/>
<field name="SIOCGIFNETMASK"/>
+ <field name="SOCK_CLOEXEC" since="29"/>
<field name="SOCK_DGRAM"/>
+ <field name="SOCK_NONBLOCK" since="29"/>
<field name="SOCK_RAW"/>
<field name="SOCK_SEQPACKET"/>
<field name="SOCK_STREAM"/>
@@ -41578,6 +43465,13 @@
<field name="tv_nsec"/>
<field name="tv_sec"/>
</class>
+ <class name="android/system/StructTimeval" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="fromMillis(J)Landroid/system/StructTimeval;"/>
+ <method name="toMillis()J"/>
+ <field name="tv_sec"/>
+ <field name="tv_usec"/>
+ </class>
<class name="android/system/StructUtsname" since="21">
<extends name="java/lang/Object"/>
<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
@@ -41589,7 +43483,6 @@
</class>
<class name="android/telecom/Call" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="answer(I)V"/>
<method name="conference(Landroid/telecom/Call;)V"/>
<method name="deflect(Landroid/net/Uri;)V" since="28"/>
@@ -41598,6 +43491,7 @@
<method name="getChildren()Ljava/util/List;"/>
<method name="getConferenceableCalls()Ljava/util/List;"/>
<method name="getDetails()Landroid/telecom/Call$Details;"/>
+ <method name="getGenericConferenceActiveChildCall()Landroid/telecom/Call;" since="30"/>
<method name="getParent()Landroid/telecom/Call;"/>
<method name="getRemainingPostDialSequence()Ljava/lang/String;"/>
<method name="getRttCall()Landroid/telecom/Call$RttCall;" since="26"/>
@@ -41614,6 +43508,7 @@
<method name="putExtras(Landroid/os/Bundle;)V" since="25"/>
<method name="registerCallback(Landroid/telecom/Call$Callback;)V"/>
<method name="registerCallback(Landroid/telecom/Call$Callback;Landroid/os/Handler;)V"/>
+ <method name="reject(I)V" since="30"/>
<method name="reject(ZLjava/lang/String;)V"/>
<method name="removeExtras(Ljava/util/List;)V" since="25"/>
<method name="removeExtras([Ljava/lang/String;)V" since="25"/>
@@ -41626,9 +43521,14 @@
<method name="swapConference()V"/>
<method name="unhold()V"/>
<method name="unregisterCallback(Landroid/telecom/Call$Callback;)V"/>
- <field name="AVAILABLE_PHONE_ACCOUNTS"/>
+ <field name="AVAILABLE_PHONE_ACCOUNTS" deprecated="29"/>
<field name="EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS" since="26"/>
+ <field name="EXTRA_SILENT_RINGING_REQUESTED" since="29"/>
+ <field name="EXTRA_SUGGESTED_PHONE_ACCOUNTS" since="29"/>
+ <field name="REJECT_REASON_DECLINED" since="30"/>
+ <field name="REJECT_REASON_UNWANTED" since="30"/>
<field name="STATE_ACTIVE"/>
+ <field name="STATE_AUDIO_PROCESSING" since="30"/>
<field name="STATE_CONNECTING"/>
<field name="STATE_DIALING"/>
<field name="STATE_DISCONNECTED"/>
@@ -41638,6 +43538,7 @@
<field name="STATE_PULLING_CALL" since="25"/>
<field name="STATE_RINGING"/>
<field name="STATE_SELECT_PHONE_ACCOUNT"/>
+ <field name="STATE_SIMULATED_RINGING" since="30"/>
</class>
<class name="android/telecom/Call$Callback" since="23">
<extends name="java/lang/Object"/>
@@ -41666,17 +43567,18 @@
</class>
<class name="android/telecom/Call$Details" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;Landroid/net/Uri;ILjava/lang/String;ILandroid/telecom/PhoneAccountHandle;IILandroid/telecom/DisconnectCause;JLandroid/telecom/GatewayInfo;ILandroid/telecom/StatusHints;Landroid/os/Bundle;Landroid/os/Bundle;J)V" since="29"/>
<method name="can(I)Z"/>
<method name="can(II)Z"/>
<method name="capabilitiesToString(I)Ljava/lang/String;"/>
<method name="getAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
<method name="getCallCapabilities()I"/>
+ <method name="getCallDirection()I" since="29"/>
<method name="getCallProperties()I"/>
<method name="getCallerDisplayName()Ljava/lang/String;"/>
<method name="getCallerDisplayNamePresentation()I"/>
+ <method name="getCallerNumberVerificationStatus()I" since="30"/>
<method name="getConnectTimeMillis()J"/>
+ <method name="getContactDisplayName()Ljava/lang/String;" since="30"/>
<method name="getCreationTimeMillis()J" since="26"/>
<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;"/>
<method name="getExtras()Landroid/os/Bundle;"/>
@@ -41708,6 +43610,10 @@
<field name="CAPABILITY_SUPPORT_DEFLECT" since="28"/>
<field name="CAPABILITY_SUPPORT_HOLD"/>
<field name="CAPABILITY_SWAP_CONFERENCE"/>
+ <field name="DIRECTION_INCOMING" since="29"/>
+ <field name="DIRECTION_OUTGOING" since="29"/>
+ <field name="DIRECTION_UNKNOWN" since="29"/>
+ <field name="PROPERTY_ASSISTED_DIALING" since="30"/>
<field name="PROPERTY_CONFERENCE"/>
<field name="PROPERTY_EMERGENCY_CALLBACK_MODE"/>
<field name="PROPERTY_ENTERPRISE_CALL" since="24"/>
@@ -41715,13 +43621,14 @@
<field name="PROPERTY_HAS_CDMA_VOICE_PRIVACY" since="25"/>
<field name="PROPERTY_HIGH_DEF_AUDIO"/>
<field name="PROPERTY_IS_EXTERNAL_CALL" since="25"/>
+ <field name="PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL" since="29"/>
<field name="PROPERTY_RTT" since="28"/>
<field name="PROPERTY_SELF_MANAGED" since="26"/>
+ <field name="PROPERTY_VOIP_AUDIO_MODE" since="29"/>
<field name="PROPERTY_WIFI"/>
</class>
<class name="android/telecom/Call$RttCall" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getRttAudioMode()I"/>
<method name="read()Ljava/lang/String;"/>
<method name="readImmediately()Ljava/lang/String;" since="27"/>
@@ -41748,6 +43655,15 @@
<field name="ROUTE_WIRED_HEADSET"/>
<field name="ROUTE_WIRED_OR_EARPIECE"/>
</class>
+ <class name="android/telecom/CallRedirectionService" since="29">
+ <extends name="android/app/Service"/>
+ <method name="&lt;init>()V"/>
+ <method name="cancelCall()V"/>
+ <method name="onPlaceCall(Landroid/net/Uri;Landroid/telecom/PhoneAccountHandle;Z)V"/>
+ <method name="placeCallUnmodified()V"/>
+ <method name="redirectCall(Landroid/net/Uri;Landroid/telecom/PhoneAccountHandle;Z)V"/>
+ <field name="SERVICE_INTERFACE"/>
+ </class>
<class name="android/telecom/CallScreeningService" since="24">
<extends name="android/app/Service"/>
<method name="&lt;init>()V"/>
@@ -41757,10 +43673,9 @@
</class>
<class name="android/telecom/CallScreeningService$CallResponse" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ZZZZ)V" since="29"/>
<method name="getDisallowCall()Z"/>
<method name="getRejectCall()Z"/>
+ <method name="getSilenceCall()Z" since="29"/>
<method name="getSkipCallLog()Z"/>
<method name="getSkipNotification()Z"/>
</class>
@@ -41770,6 +43685,7 @@
<method name="build()Landroid/telecom/CallScreeningService$CallResponse;"/>
<method name="setDisallowCall(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;"/>
<method name="setRejectCall(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;"/>
+ <method name="setSilenceCall(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;" since="29"/>
<method name="setSkipCallLog(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;"/>
<method name="setSkipNotification(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;"/>
</class>
@@ -41782,6 +43698,7 @@
<method name="getConferenceableConnections()Ljava/util/List;"/>
<method name="getConnectionCapabilities()I"/>
<method name="getConnectionProperties()I" since="25"/>
+ <method name="getConnectionStartElapsedRealtimeMillis()J" since="30"/>
<method name="getConnectionTime()J"/>
<method name="getConnections()Ljava/util/List;"/>
<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;"/>
@@ -41807,11 +43724,13 @@
<method name="removeConnection(Landroid/telecom/Connection;)V"/>
<method name="removeExtras(Ljava/util/List;)V" since="25"/>
<method name="removeExtras([Ljava/lang/String;)V" since="25"/>
+ <method name="sendConferenceEvent(Ljava/lang/String;Landroid/os/Bundle;)V" since="30"/>
<method name="setActive()V"/>
<method name="setConferenceableConnections(Ljava/util/List;)V"/>
<method name="setConnectionCapabilities(I)V"/>
<method name="setConnectionProperties(I)V" since="25"/>
- <method name="setConnectionStartElapsedRealTime(J)V" since="28"/>
+ <method name="setConnectionStartElapsedRealTime(J)V" since="28" deprecated="30"/>
+ <method name="setConnectionStartElapsedRealtimeMillis(J)V" since="30"/>
<method name="setConnectionTime(J)V"/>
<method name="setDialing()V"/>
<method name="setDisconnected(Landroid/telecom/DisconnectCause;)V"/>
@@ -41824,7 +43743,6 @@
</class>
<class name="android/telecom/Conferenceable" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/telecom/Connection" since="23">
<extends name="android/telecom/Conferenceable"/>
@@ -41839,6 +43757,7 @@
<method name="getCallAudioState()Landroid/telecom/CallAudioState;"/>
<method name="getCallerDisplayName()Ljava/lang/String;"/>
<method name="getCallerDisplayNamePresentation()I"/>
+ <method name="getCallerNumberVerificationStatus()I" since="30"/>
<method name="getConference()Landroid/telecom/Conference;"/>
<method name="getConferenceables()Ljava/util/List;"/>
<method name="getConnectionCapabilities()I"/>
@@ -41848,8 +43767,10 @@
<method name="getState()I"/>
<method name="getStatusHints()Landroid/telecom/StatusHints;"/>
<method name="getVideoProvider()Landroid/telecom/Connection$VideoProvider;"/>
+ <method name="getVideoState()I" since="30"/>
<method name="handleRttUpgradeResponse(Landroid/telecom/Connection$RttTextStream;)V" since="28"/>
<method name="isRingbackRequested()Z"/>
+ <method name="notifyConferenceMergeFailed()V" since="30"/>
<method name="onAbort()V"/>
<method name="onAnswer()V"/>
<method name="onAnswer(I)V"/>
@@ -41864,6 +43785,7 @@
<method name="onPostDialContinue(Z)V"/>
<method name="onPullExternalCall()V" since="25"/>
<method name="onReject()V"/>
+ <method name="onReject(I)V" since="30"/>
<method name="onReject(Ljava/lang/String;)V" since="24"/>
<method name="onSeparate()V"/>
<method name="onShowIncomingCallUi()V" since="26"/>
@@ -41888,6 +43810,7 @@
<method name="setAudioModeIsVoip(Z)V"/>
<method name="setAudioRoute(I)V" since="26"/>
<method name="setCallerDisplayName(Ljava/lang/String;I)V"/>
+ <method name="setCallerNumberVerificationStatus(I)V" since="30"/>
<method name="setConferenceableConnections(Ljava/util/List;)V"/>
<method name="setConferenceables(Ljava/util/List;)V"/>
<method name="setConnectionCapabilities(I)V"/>
@@ -41907,11 +43830,32 @@
<method name="setVideoProvider(Landroid/telecom/Connection$VideoProvider;)V"/>
<method name="setVideoState(I)V"/>
<method name="stateToString(I)Ljava/lang/String;"/>
+ <field name="AUDIO_CODEC_AMR" since="30"/>
+ <field name="AUDIO_CODEC_AMR_WB" since="30"/>
+ <field name="AUDIO_CODEC_EVRC" since="30"/>
+ <field name="AUDIO_CODEC_EVRC_B" since="30"/>
+ <field name="AUDIO_CODEC_EVRC_NW" since="30"/>
+ <field name="AUDIO_CODEC_EVRC_WB" since="30"/>
+ <field name="AUDIO_CODEC_EVS_FB" since="30"/>
+ <field name="AUDIO_CODEC_EVS_NB" since="30"/>
+ <field name="AUDIO_CODEC_EVS_SWB" since="30"/>
+ <field name="AUDIO_CODEC_EVS_WB" since="30"/>
+ <field name="AUDIO_CODEC_G711A" since="30"/>
+ <field name="AUDIO_CODEC_G711AB" since="30"/>
+ <field name="AUDIO_CODEC_G711U" since="30"/>
+ <field name="AUDIO_CODEC_G722" since="30"/>
+ <field name="AUDIO_CODEC_G723" since="30"/>
+ <field name="AUDIO_CODEC_G729" since="30"/>
+ <field name="AUDIO_CODEC_GSM_EFR" since="30"/>
+ <field name="AUDIO_CODEC_GSM_FR" since="30"/>
+ <field name="AUDIO_CODEC_GSM_HR" since="30"/>
+ <field name="AUDIO_CODEC_NONE" since="30"/>
+ <field name="AUDIO_CODEC_QCELP13K" since="30"/>
<field name="CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO" since="24"/>
<field name="CAPABILITY_CAN_PAUSE_VIDEO"/>
<field name="CAPABILITY_CAN_PULL_CALL" since="25"/>
<field name="CAPABILITY_CAN_SEND_RESPONSE_VIA_CONNECTION" since="24"/>
- <field name="CAPABILITY_CAN_UPGRADE_TO_VIDEO"/>
+ <field name="CAPABILITY_CAN_UPGRADE_TO_VIDEO" deprecated="29"/>
<field name="CAPABILITY_DISCONNECT_FROM_CONFERENCE"/>
<field name="CAPABILITY_HOLD"/>
<field name="CAPABILITY_MANAGE_CONFERENCE"/>
@@ -41928,17 +43872,33 @@
<field name="CAPABILITY_SUPPORT_DEFLECT" since="28"/>
<field name="CAPABILITY_SUPPORT_HOLD"/>
<field name="CAPABILITY_SWAP_CONFERENCE"/>
+ <field name="EVENT_CALL_HOLD_FAILED" since="30"/>
<field name="EVENT_CALL_MERGE_FAILED" since="25"/>
<field name="EVENT_CALL_PULL_FAILED" since="25"/>
+ <field name="EVENT_CALL_REMOTELY_HELD" since="30"/>
+ <field name="EVENT_CALL_REMOTELY_UNHELD" since="30"/>
+ <field name="EVENT_CALL_SWITCH_FAILED" since="30"/>
+ <field name="EVENT_MERGE_COMPLETE" since="30"/>
+ <field name="EVENT_MERGE_START" since="30"/>
+ <field name="EVENT_ON_HOLD_TONE_END" since="30"/>
+ <field name="EVENT_ON_HOLD_TONE_START" since="30"/>
+ <field name="EVENT_RTT_AUDIO_INDICATION_CHANGED" since="29"/>
<field name="EXTRA_ANSWERING_DROPS_FG_CALL" since="25"/>
<field name="EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME" since="26"/>
+ <field name="EXTRA_AUDIO_CODEC" since="30"/>
<field name="EXTRA_CALL_SUBJECT"/>
<field name="EXTRA_CHILD_ADDRESS"/>
+ <field name="EXTRA_IS_RTT_AUDIO_PRESENT" since="29"/>
<field name="EXTRA_LAST_FORWARDED_NUMBER"/>
+ <field name="EXTRA_SIP_INVITE" since="29"/>
+ <field name="PROPERTY_ASSISTED_DIALING" since="30"/>
<field name="PROPERTY_HAS_CDMA_VOICE_PRIVACY" since="25"/>
+ <field name="PROPERTY_HIGH_DEF_AUDIO" since="30"/>
<field name="PROPERTY_IS_EXTERNAL_CALL" since="25"/>
<field name="PROPERTY_IS_RTT" since="28"/>
+ <field name="PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL" since="30"/>
<field name="PROPERTY_SELF_MANAGED" since="26"/>
+ <field name="PROPERTY_WIFI" since="30"/>
<field name="STATE_ACTIVE"/>
<field name="STATE_DIALING"/>
<field name="STATE_DISCONNECTED"/>
@@ -41947,10 +43907,12 @@
<field name="STATE_NEW"/>
<field name="STATE_PULLING_CALL" since="25"/>
<field name="STATE_RINGING"/>
+ <field name="VERIFICATION_STATUS_FAILED" since="30"/>
+ <field name="VERIFICATION_STATUS_NOT_VERIFIED" since="30"/>
+ <field name="VERIFICATION_STATUS_PASSED" since="30"/>
</class>
<class name="android/telecom/Connection$RttModifyStatus" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="SESSION_MODIFY_REQUEST_FAIL"/>
<field name="SESSION_MODIFY_REQUEST_INVALID"/>
<field name="SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE"/>
@@ -41959,8 +43921,6 @@
</class>
<class name="android/telecom/Connection$RttTextStream" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;)V" since="29"/>
<method name="read()Ljava/lang/String;"/>
<method name="readImmediately()Ljava/lang/String;"/>
<method name="write(Ljava/lang/String;)V"/>
@@ -42006,8 +43966,10 @@
<method name="getAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
<method name="getAddress()Landroid/net/Uri;"/>
<method name="getExtras()Landroid/os/Bundle;"/>
+ <method name="getParticipants()Ljava/util/List;" since="30"/>
<method name="getRttTextStream()Landroid/telecom/Connection$RttTextStream;" since="28"/>
<method name="getVideoState()I"/>
+ <method name="isAdhocConferenceCall()Z" since="30"/>
<method name="isRequestingRtt()Z" since="28"/>
<field name="CREATOR"/>
</class>
@@ -42058,6 +44020,7 @@
<field name="LOCAL"/>
<field name="MISSED"/>
<field name="OTHER"/>
+ <field name="REASON_EMERGENCY_CALL_PLACED" since="30"/>
<field name="REJECTED"/>
<field name="REMOTE"/>
<field name="RESTRICTED"/>
@@ -42122,8 +44085,6 @@
<class name="android/telecom/PhoneAccount" since="23">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="builder(Landroid/telecom/PhoneAccountHandle;Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;"/>
<method name="getAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
<method name="getAddress()Landroid/net/Uri;"/>
@@ -42139,6 +44100,7 @@
<method name="isEnabled()Z"/>
<method name="supportsUriScheme(Ljava/lang/String;)Z"/>
<method name="toBuilder()Landroid/telecom/PhoneAccount$Builder;"/>
+ <field name="CAPABILITY_ADHOC_CONFERENCE_CALLING" since="30"/>
<field name="CAPABILITY_CALL_PROVIDER"/>
<field name="CAPABILITY_CALL_SUBJECT"/>
<field name="CAPABILITY_CONNECTION_MANAGER"/>
@@ -42186,9 +44148,22 @@
<method name="getUserHandle()Landroid/os/UserHandle;"/>
<field name="CREATOR"/>
</class>
+ <class name="android/telecom/PhoneAccountSuggestion" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="&lt;init>(Landroid/telecom/PhoneAccountHandle;IZ)V"/>
+ <method name="getPhoneAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
+ <method name="getReason()I"/>
+ <method name="shouldAutoSelect()Z"/>
+ <field name="CREATOR"/>
+ <field name="REASON_FREQUENT"/>
+ <field name="REASON_INTRA_CARRIER"/>
+ <field name="REASON_NONE"/>
+ <field name="REASON_OTHER"/>
+ <field name="REASON_USER_SET"/>
+ </class>
<class name="android/telecom/RemoteConference" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="disconnect()V"/>
<method name="getConferenceableConnections()Ljava/util/List;"/>
<method name="getConnectionCapabilities()I"/>
@@ -42224,8 +44199,6 @@
</class>
<class name="android/telecom/RemoteConnection" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/telecom/DisconnectCause;)V" since="29"/>
<method name="abort()V"/>
<method name="answer()V"/>
<method name="disconnect()V"/>
@@ -42281,7 +44254,6 @@
</class>
<class name="android/telecom/RemoteConnection$VideoProvider" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="registerCallback(Landroid/telecom/RemoteConnection$VideoProvider$Callback;)V"/>
<method name="requestCallDataUsage()V"/>
<method name="requestCameraCapabilities()V"/>
@@ -42317,15 +44289,13 @@
</class>
<class name="android/telecom/TelecomManager" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="acceptHandover(Landroid/net/Uri;ILandroid/telecom/PhoneAccountHandle;)V" since="28"/>
- <method name="acceptRingingCall()V" since="26"/>
- <method name="acceptRingingCall(I)V" since="26"/>
+ <method name="acceptRingingCall()V" since="26" deprecated="29"/>
+ <method name="acceptRingingCall(I)V" since="26" deprecated="29"/>
<method name="addNewIncomingCall(Landroid/telecom/PhoneAccountHandle;Landroid/os/Bundle;)V" since="23"/>
<method name="cancelMissedCallsNotification()V"/>
<method name="createManageBlockedNumbersIntent()Landroid/content/Intent;" since="24"/>
- <method name="endCall()Z" since="29"/>
+ <method name="endCall()Z" since="28" deprecated="29"/>
<method name="getAdnUriForPhoneAccount(Landroid/telecom/PhoneAccountHandle;)Landroid/net/Uri;" since="23"/>
<method name="getCallCapablePhoneAccounts()Ljava/util/List;" since="23"/>
<method name="getDefaultDialerPackage()Ljava/lang/String;" since="23"/>
@@ -42334,6 +44304,9 @@
<method name="getPhoneAccount(Landroid/telecom/PhoneAccountHandle;)Landroid/telecom/PhoneAccount;" since="23"/>
<method name="getSelfManagedPhoneAccounts()Ljava/util/List;" since="26"/>
<method name="getSimCallManager()Landroid/telecom/PhoneAccountHandle;" since="23"/>
+ <method name="getSimCallManagerForSubscription(I)Landroid/telecom/PhoneAccountHandle;" since="30"/>
+ <method name="getSystemDialerPackage()Ljava/lang/String;" since="29"/>
+ <method name="getUserSelectedOutgoingPhoneAccount()Landroid/telecom/PhoneAccountHandle;" since="29"/>
<method name="getVoiceMailNumber(Landroid/telecom/PhoneAccountHandle;)Ljava/lang/String;" since="23"/>
<method name="handleMmi(Ljava/lang/String;)Z"/>
<method name="handleMmi(Ljava/lang/String;Landroid/telecom/PhoneAccountHandle;)Z" since="23"/>
@@ -42351,24 +44324,36 @@
<field name="ACTION_CHANGE_DEFAULT_DIALER" since="23"/>
<field name="ACTION_CHANGE_PHONE_ACCOUNTS" since="23"/>
<field name="ACTION_CONFIGURE_PHONE_ACCOUNT" since="23"/>
+ <field name="ACTION_DEFAULT_CALL_SCREENING_APP_CHANGED" since="29"/>
<field name="ACTION_DEFAULT_DIALER_CHANGED" since="23"/>
<field name="ACTION_INCOMING_CALL" since="23" deprecated="26"/>
<field name="ACTION_PHONE_ACCOUNT_REGISTERED" since="26"/>
<field name="ACTION_PHONE_ACCOUNT_UNREGISTERED" since="26"/>
+ <field name="ACTION_POST_CALL" since="30"/>
<field name="ACTION_SHOW_CALL_ACCESSIBILITY_SETTINGS" since="23"/>
<field name="ACTION_SHOW_CALL_SETTINGS"/>
<field name="ACTION_SHOW_MISSED_CALLS_NOTIFICATION" since="24"/>
<field name="ACTION_SHOW_RESPOND_VIA_SMS_SETTINGS" since="23"/>
<field name="DTMF_CHARACTER_PAUSE"/>
<field name="DTMF_CHARACTER_WAIT"/>
+ <field name="DURATION_LONG" since="30"/>
+ <field name="DURATION_MEDIUM" since="30"/>
+ <field name="DURATION_SHORT" since="30"/>
+ <field name="DURATION_VERY_SHORT" since="30"/>
<field name="EXTRA_CALL_BACK_NUMBER" since="23"/>
<field name="EXTRA_CALL_DISCONNECT_CAUSE"/>
<field name="EXTRA_CALL_DISCONNECT_MESSAGE"/>
+ <field name="EXTRA_CALL_DURATION" since="30"/>
+ <field name="EXTRA_CALL_NETWORK_TYPE" since="29"/>
<field name="EXTRA_CALL_SUBJECT" since="23"/>
<field name="EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME" since="23"/>
+ <field name="EXTRA_DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME" since="29"/>
+ <field name="EXTRA_DISCONNECT_CAUSE" since="30"/>
+ <field name="EXTRA_HANDLE" since="30"/>
<field name="EXTRA_INCOMING_CALL_ADDRESS" since="23"/>
<field name="EXTRA_INCOMING_CALL_EXTRAS" since="23"/>
<field name="EXTRA_INCOMING_VIDEO_STATE" since="26"/>
+ <field name="EXTRA_IS_DEFAULT_CALL_SCREENING_APP" since="29"/>
<field name="EXTRA_NOTIFICATION_COUNT" since="24"/>
<field name="EXTRA_NOTIFICATION_PHONE_NUMBER" since="24"/>
<field name="EXTRA_OUTGOING_CALL_EXTRAS" since="23"/>
@@ -42376,10 +44361,12 @@
<field name="EXTRA_START_CALL_WITH_RTT" since="26"/>
<field name="EXTRA_START_CALL_WITH_SPEAKERPHONE"/>
<field name="EXTRA_START_CALL_WITH_VIDEO_STATE" since="23"/>
+ <field name="EXTRA_USE_ASSISTED_DIALING" since="30"/>
<field name="GATEWAY_ORIGINAL_ADDRESS"/>
<field name="GATEWAY_PROVIDER_PACKAGE"/>
<field name="METADATA_INCLUDE_EXTERNAL_CALLS" since="25"/>
<field name="METADATA_INCLUDE_SELF_MANAGED_CALLS" since="26"/>
+ <field name="METADATA_IN_CALL_SERVICE_CAR_MODE_UI" since="29"/>
<field name="METADATA_IN_CALL_SERVICE_RINGING" since="24"/>
<field name="METADATA_IN_CALL_SERVICE_UI" since="23"/>
<field name="PRESENTATION_ALLOWED"/>
@@ -42416,27 +44403,30 @@
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
<method name="&lt;init>(II)V"/>
+ <method name="&lt;init>(IIZF)V" since="29"/>
<method name="getHeight()I"/>
+ <method name="getMaxZoom()F" since="29"/>
<method name="getWidth()I"/>
+ <method name="isZoomSupported()Z" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/telephony/AccessNetworkConstants" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <field name="TRANSPORT_TYPE_WLAN" since="30"/>
+ <field name="TRANSPORT_TYPE_WWAN" since="30"/>
</class>
<class name="android/telephony/AccessNetworkConstants$AccessNetworkType" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="CDMA2000"/>
<field name="EUTRAN"/>
<field name="GERAN"/>
<field name="IWLAN"/>
+ <field name="NGRAN" since="30"/>
<field name="UNKNOWN"/>
<field name="UTRAN"/>
</class>
<class name="android/telephony/AccessNetworkConstants$EutranBand" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="BAND_1"/>
<field name="BAND_10"/>
<field name="BAND_11"/>
@@ -42476,19 +44466,30 @@
<field name="BAND_46"/>
<field name="BAND_47"/>
<field name="BAND_48"/>
+ <field name="BAND_49" since="30"/>
<field name="BAND_5"/>
+ <field name="BAND_50" since="30"/>
+ <field name="BAND_51" since="30"/>
+ <field name="BAND_52" since="30"/>
+ <field name="BAND_53" since="30"/>
<field name="BAND_6"/>
<field name="BAND_65"/>
<field name="BAND_66"/>
<field name="BAND_68"/>
<field name="BAND_7"/>
<field name="BAND_70"/>
+ <field name="BAND_71" since="30"/>
+ <field name="BAND_72" since="30"/>
+ <field name="BAND_73" since="30"/>
+ <field name="BAND_74" since="30"/>
<field name="BAND_8"/>
+ <field name="BAND_85" since="30"/>
+ <field name="BAND_87" since="30"/>
+ <field name="BAND_88" since="30"/>
<field name="BAND_9"/>
</class>
<class name="android/telephony/AccessNetworkConstants$GeranBand" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="BAND_450"/>
<field name="BAND_480"/>
<field name="BAND_710"/>
@@ -42504,9 +44505,60 @@
<field name="BAND_T410"/>
<field name="BAND_T810"/>
</class>
+ <class name="android/telephony/AccessNetworkConstants$NgranBands" since="30">
+ <extends name="java/lang/Object"/>
+ <field name="BAND_1"/>
+ <field name="BAND_12"/>
+ <field name="BAND_14"/>
+ <field name="BAND_18"/>
+ <field name="BAND_2"/>
+ <field name="BAND_20"/>
+ <field name="BAND_25"/>
+ <field name="BAND_257"/>
+ <field name="BAND_258"/>
+ <field name="BAND_260"/>
+ <field name="BAND_261"/>
+ <field name="BAND_28"/>
+ <field name="BAND_29"/>
+ <field name="BAND_3"/>
+ <field name="BAND_30"/>
+ <field name="BAND_34"/>
+ <field name="BAND_38"/>
+ <field name="BAND_39"/>
+ <field name="BAND_40"/>
+ <field name="BAND_41"/>
+ <field name="BAND_48"/>
+ <field name="BAND_5"/>
+ <field name="BAND_50"/>
+ <field name="BAND_51"/>
+ <field name="BAND_65"/>
+ <field name="BAND_66"/>
+ <field name="BAND_7"/>
+ <field name="BAND_70"/>
+ <field name="BAND_71"/>
+ <field name="BAND_74"/>
+ <field name="BAND_75"/>
+ <field name="BAND_76"/>
+ <field name="BAND_77"/>
+ <field name="BAND_78"/>
+ <field name="BAND_79"/>
+ <field name="BAND_8"/>
+ <field name="BAND_80"/>
+ <field name="BAND_81"/>
+ <field name="BAND_82"/>
+ <field name="BAND_83"/>
+ <field name="BAND_84"/>
+ <field name="BAND_86"/>
+ <field name="BAND_89"/>
+ <field name="BAND_90"/>
+ <field name="BAND_91"/>
+ <field name="BAND_92"/>
+ <field name="BAND_93"/>
+ <field name="BAND_94"/>
+ <field name="BAND_95"/>
+ </class>
<class name="android/telephony/AccessNetworkConstants$UtranBand" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="BAND_1"/>
<field name="BAND_10"/>
<field name="BAND_11"/>
@@ -42527,34 +44579,111 @@
<field name="BAND_7"/>
<field name="BAND_8"/>
<field name="BAND_9"/>
+ <field name="BAND_A" since="30"/>
+ <field name="BAND_B" since="30"/>
+ <field name="BAND_C" since="30"/>
+ <field name="BAND_D" since="30"/>
+ <field name="BAND_E" since="30"/>
+ <field name="BAND_F" since="30"/>
+ </class>
+ <class name="android/telephony/AvailableNetworkInfo" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="&lt;init>(IILjava/util/List;Ljava/util/List;)V"/>
+ <method name="getBands()Ljava/util/List;"/>
+ <method name="getMccMncs()Ljava/util/List;"/>
+ <method name="getPriority()I"/>
+ <method name="getSubId()I"/>
+ <field name="CREATOR"/>
+ <field name="PRIORITY_HIGH"/>
+ <field name="PRIORITY_LOW"/>
+ <field name="PRIORITY_MED"/>
+ </class>
+ <class name="android/telephony/BarringInfo" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getBarringServiceInfo(I)Landroid/telephony/BarringInfo$BarringServiceInfo;"/>
+ <field name="BARRING_SERVICE_TYPE_CS_FALLBACK"/>
+ <field name="BARRING_SERVICE_TYPE_CS_SERVICE"/>
+ <field name="BARRING_SERVICE_TYPE_CS_VOICE"/>
+ <field name="BARRING_SERVICE_TYPE_EMERGENCY"/>
+ <field name="BARRING_SERVICE_TYPE_MMTEL_VIDEO"/>
+ <field name="BARRING_SERVICE_TYPE_MMTEL_VOICE"/>
+ <field name="BARRING_SERVICE_TYPE_MO_DATA"/>
+ <field name="BARRING_SERVICE_TYPE_MO_SIGNALLING"/>
+ <field name="BARRING_SERVICE_TYPE_PS_SERVICE"/>
+ <field name="BARRING_SERVICE_TYPE_SMS"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/telephony/BarringInfo$BarringServiceInfo" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getBarringType()I"/>
+ <method name="getConditionalBarringFactor()I"/>
+ <method name="getConditionalBarringTimeSeconds()I"/>
+ <method name="isBarred()Z"/>
+ <method name="isConditionallyBarred()Z"/>
+ <field name="BARRING_TYPE_CONDITIONAL"/>
+ <field name="BARRING_TYPE_NONE"/>
+ <field name="BARRING_TYPE_UNCONDITIONAL"/>
+ <field name="BARRING_TYPE_UNKNOWN"/>
+ <field name="CREATOR"/>
</class>
<class name="android/telephony/CarrierConfigManager" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="getConfig()Landroid/os/PersistableBundle;"/>
+ <method name="getConfigByComponentForSubId(Ljava/lang/String;I)Landroid/os/PersistableBundle;" since="30"/>
<method name="getConfigForSubId(I)Landroid/os/PersistableBundle;"/>
<method name="isConfigForIdentifiedCarrier(Landroid/os/PersistableBundle;)Z" since="28"/>
<method name="notifyConfigChangedForSubId(I)V"/>
<field name="ACTION_CARRIER_CONFIG_CHANGED"/>
<field name="DATA_CYCLE_THRESHOLD_DISABLED" since="26"/>
+ <field name="DATA_CYCLE_USE_PLATFORM_DEFAULT" since="30"/>
<field name="EXTRA_SLOT_INDEX" since="28"/>
<field name="EXTRA_SUBSCRIPTION_INDEX" since="28"/>
+ <field name="IMSI_KEY_AVAILABILITY_INT" since="30"/>
+ <field name="KEY_5G_NR_SSRSRP_THRESHOLDS_INT_ARRAY" since="30"/>
+ <field name="KEY_5G_NR_SSRSRQ_THRESHOLDS_INT_ARRAY" since="30"/>
+ <field name="KEY_5G_NR_SSSINR_THRESHOLDS_INT_ARRAY" since="30"/>
<field name="KEY_ADDITIONAL_CALL_SETTING_BOOL"/>
<field name="KEY_ALLOW_ADDING_APNS_BOOL" since="24"/>
<field name="KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL" since="25"/>
<field name="KEY_ALLOW_EMERGENCY_NUMBERS_IN_CALL_LOG_BOOL"/>
<field name="KEY_ALLOW_EMERGENCY_VIDEO_CALLS_BOOL" since="24"/>
+ <field name="KEY_ALLOW_HOLD_CALL_DURING_EMERGENCY_BOOL" since="30"/>
+ <field name="KEY_ALLOW_HOLD_VIDEO_CALL_BOOL" since="30"/>
<field name="KEY_ALLOW_LOCAL_DTMF_TONES_BOOL"/>
<field name="KEY_ALLOW_MERGE_WIFI_CALLS_WHEN_VOWIFI_OFF_BOOL" since="25"/>
<field name="KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL" since="24"/>
- <field name="KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL" since="24"/>
+ <field name="KEY_ALLOW_VIDEO_CALLING_FALLBACK_BOOL" since="30"/>
+ <field name="KEY_ALWAYS_SHOW_DATA_RAT_ICON_BOOL" since="30"/>
+ <field name="KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL" since="24" deprecated="30"/>
+ <field name="KEY_ALWAYS_SHOW_PRIMARY_SIGNAL_BAR_IN_OPPORTUNISTIC_NETWORK_BOOLEAN" since="30"/>
<field name="KEY_APN_EXPAND_BOOL"/>
+ <field name="KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY" since="30"/>
<field name="KEY_AUTO_RETRY_ENABLED_BOOL"/>
+ <field name="KEY_CALL_BARRING_SUPPORTS_DEACTIVATE_ALL_BOOL" since="29"/>
+ <field name="KEY_CALL_BARRING_SUPPORTS_PASSWORD_CHANGE_BOOL" since="29"/>
+ <field name="KEY_CALL_BARRING_VISIBILITY_BOOL" since="29"/>
<field name="KEY_CALL_FORWARDING_BLOCKS_WHILE_ROAMING_STRING_ARRAY" since="26"/>
+ <field name="KEY_CALL_REDIRECTION_SERVICE_COMPONENT_NAME_STRING" since="30"/>
+ <field name="KEY_CARRIER_ALLOW_DEFLECT_IMS_CALL_BOOL" since="30"/>
<field name="KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL"/>
+ <field name="KEY_CARRIER_APP_REQUIRED_DURING_SIM_SETUP_BOOL" since="30"/>
+ <field name="KEY_CARRIER_CALL_SCREENING_APP_STRING" since="29"/>
+ <field name="KEY_CARRIER_CERTIFICATE_STRING_ARRAY" since="30"/>
+ <field name="KEY_CARRIER_CONFIG_APPLIED_BOOL" since="30"/>
+ <field name="KEY_CARRIER_CONFIG_VERSION_STRING" since="29"/>
<field name="KEY_CARRIER_DATA_CALL_PERMANENT_FAILURE_STRINGS" since="26"/>
- <field name="KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL" since="24"/>
+ <field name="KEY_CARRIER_DEFAULT_ACTIONS_ON_DCFAILURE_STRING_ARRAY" since="30"/>
+ <field name="KEY_CARRIER_DEFAULT_ACTIONS_ON_DEFAULT_NETWORK_AVAILABLE" since="30"/>
+ <field name="KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY" since="30"/>
+ <field name="KEY_CARRIER_DEFAULT_ACTIONS_ON_RESET" since="30"/>
+ <field name="KEY_CARRIER_DEFAULT_REDIRECTION_URL_STRING_ARRAY" since="30"/>
+ <field name="KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL" since="30"/>
+ <field name="KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT" since="29"/>
+ <field name="KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT" since="29"/>
+ <field name="KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL" since="24" deprecated="30"/>
<field name="KEY_CARRIER_IMS_GBA_REQUIRED_BOOL" since="24"/>
<field name="KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL" since="24"/>
<field name="KEY_CARRIER_INSTANT_LETTERING_ENCODING_STRING" since="24"/>
@@ -42563,9 +44692,14 @@
<field name="KEY_CARRIER_INSTANT_LETTERING_LENGTH_LIMIT_INT" since="24"/>
<field name="KEY_CARRIER_NAME_OVERRIDE_BOOL" since="28"/>
<field name="KEY_CARRIER_NAME_STRING" since="28"/>
+ <field name="KEY_CARRIER_RCS_PROVISIONING_REQUIRED_BOOL" since="30"/>
+ <field name="KEY_CARRIER_SETTINGS_ACTIVITY_COMPONENT_NAME_STRING" since="30"/>
<field name="KEY_CARRIER_SETTINGS_ENABLE_BOOL"/>
+ <field name="KEY_CARRIER_SUPPORTS_SS_OVER_UT_BOOL" since="29"/>
<field name="KEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY_BOOL" since="24"/>
+ <field name="KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL" since="29"/>
<field name="KEY_CARRIER_VOLTE_AVAILABLE_BOOL"/>
+ <field name="KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL" since="30"/>
<field name="KEY_CARRIER_VOLTE_PROVISIONED_BOOL" since="26"/>
<field name="KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL"/>
<field name="KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL"/>
@@ -42579,20 +44713,32 @@
<field name="KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY"/>
<field name="KEY_CDMA_ROAMING_MODE_INT" since="28"/>
<field name="KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY"/>
+ <field name="KEY_CHECK_PRICING_WITH_CARRIER_FOR_DATA_ROAMING_BOOL" since="30"/>
<field name="KEY_CI_ACTION_ON_SYS_UPDATE_BOOL" since="24"/>
<field name="KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING" since="24"/>
<field name="KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING" since="24"/>
<field name="KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING" since="24"/>
- <field name="KEY_CONFIG_IMS_PACKAGE_OVERRIDE_STRING" since="26"/>
+ <field name="KEY_CONFIG_IMS_MMTEL_PACKAGE_OVERRIDE_STRING" since="30"/>
+ <field name="KEY_CONFIG_IMS_PACKAGE_OVERRIDE_STRING" since="26" deprecated="30"/>
+ <field name="KEY_CONFIG_IMS_RCS_PACKAGE_OVERRIDE_STRING" since="30"/>
<field name="KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING" since="28"/>
<field name="KEY_CONFIG_TELEPHONY_USE_OWN_NUMBER_FOR_VOICEMAIL_BOOL" since="28"/>
+ <field name="KEY_CONFIG_WIFI_DISABLE_IN_ECBM" since="30"/>
<field name="KEY_CSP_ENABLED_BOOL"/>
+ <field name="KEY_DATA_LIMIT_NOTIFICATION_BOOL" since="30"/>
<field name="KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG" since="26"/>
+ <field name="KEY_DATA_RAPID_NOTIFICATION_BOOL" since="30"/>
+ <field name="KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG" since="30"/>
+ <field name="KEY_DATA_WARNING_NOTIFICATION_BOOL" since="30"/>
<field name="KEY_DATA_WARNING_THRESHOLD_BYTES_LONG" since="26"/>
<field name="KEY_DEFAULT_SIM_CALL_MANAGER_STRING"/>
+ <field name="KEY_DEFAULT_VM_NUMBER_ROAMING_AND_IMS_UNREGISTERED_STRING" since="30"/>
<field name="KEY_DEFAULT_VM_NUMBER_STRING" since="26"/>
<field name="KEY_DIAL_STRING_REPLACE_STRING_ARRAY" since="26"/>
<field name="KEY_DISABLE_CDMA_ACTIVATION_CODE_BOOL"/>
+ <field name="KEY_DISABLE_CHARGE_INDICATION_BOOL" since="30"/>
+ <field name="KEY_DISABLE_SUPPLEMENTARY_SERVICES_IN_AIRPLANE_MODE_BOOL" since="30"/>
+ <field name="KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY" since="30"/>
<field name="KEY_DISPLAY_HD_AUDIO_PROPERTY_BOOL" since="27"/>
<field name="KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL" since="25"/>
<field name="KEY_DTMF_TYPE_ENABLED_BOOL"/>
@@ -42600,7 +44746,13 @@
<field name="KEY_EDITABLE_ENHANCED_4G_LTE_BOOL" since="24"/>
<field name="KEY_EDITABLE_VOICEMAIL_NUMBER_BOOL" since="26"/>
<field name="KEY_EDITABLE_VOICEMAIL_NUMBER_SETTING_BOOL" since="28"/>
+ <field name="KEY_EDITABLE_WFC_MODE_BOOL" since="30"/>
+ <field name="KEY_EDITABLE_WFC_ROAMING_MODE_BOOL" since="30"/>
+ <field name="KEY_EMERGENCY_NOTIFICATION_DELAY_INT" since="30"/>
+ <field name="KEY_EMERGENCY_NUMBER_PREFIX_STRING_ARRAY" since="29"/>
<field name="KEY_ENABLE_DIALER_KEY_VIBRATION_BOOL"/>
+ <field name="KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL" since="29"/>
+ <field name="KEY_ENHANCED_4G_LTE_TITLE_VARIANT_INT" since="30"/>
<field name="KEY_FORCE_HOME_NETWORK_BOOL"/>
<field name="KEY_GSM_DTMF_TONE_DELAY_INT" since="24"/>
<field name="KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY"/>
@@ -42609,18 +44761,26 @@
<field name="KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL"/>
<field name="KEY_HIDE_ENHANCED_4G_LTE_BOOL" since="26"/>
<field name="KEY_HIDE_IMS_APN_BOOL" since="24"/>
+ <field name="KEY_HIDE_LTE_PLUS_DATA_ICON_BOOL" since="30"/>
<field name="KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL" since="24"/>
+ <field name="KEY_HIDE_PRESET_APN_DETAILS_BOOL" since="29"/>
<field name="KEY_HIDE_SIM_LOCK_SETTINGS_BOOL"/>
+ <field name="KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS" since="30"/>
+ <field name="KEY_IGNORE_RTT_MODE_SETTING_BOOL" since="30"/>
<field name="KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL"/>
<field name="KEY_IMS_CONFERENCE_SIZE_LIMIT_INT" since="26"/>
<field name="KEY_IMS_DTMF_TONE_DELAY_INT" since="24"/>
<field name="KEY_IS_IMS_CONFERENCE_SIZE_ENFORCED_BOOL" since="26"/>
+ <field name="KEY_LTE_ENABLED_BOOL" since="30"/>
+ <field name="KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY" since="30"/>
+ <field name="KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY" since="30"/>
<field name="KEY_MDN_IS_ADDITIONAL_VOICEMAIL_NUMBER_BOOL" since="26"/>
<field name="KEY_MMS_ALIAS_ENABLED_BOOL"/>
<field name="KEY_MMS_ALIAS_MAX_CHARS_INT"/>
<field name="KEY_MMS_ALIAS_MIN_CHARS_INT"/>
<field name="KEY_MMS_ALLOW_ATTACH_AUDIO_BOOL"/>
<field name="KEY_MMS_APPEND_TRANSACTION_ID_BOOL"/>
+ <field name="KEY_MMS_CLOSE_CONNECTION_BOOL" since="30"/>
<field name="KEY_MMS_EMAIL_GATEWAY_NUMBER_STRING"/>
<field name="KEY_MMS_GROUP_MMS_ENABLED_BOOL"/>
<field name="KEY_MMS_HTTP_PARAMS_STRING"/>
@@ -42648,30 +44808,64 @@
<field name="KEY_MMS_UA_PROF_URL_STRING"/>
<field name="KEY_MMS_USER_AGENT_STRING"/>
<field name="KEY_MONTHLY_DATA_CYCLE_DAY_INT" since="26"/>
+ <field name="KEY_ONLY_AUTO_SELECT_IN_HOME_NETWORK_BOOL" since="30"/>
<field name="KEY_ONLY_SINGLE_DC_ALLOWED_INT_ARRAY" since="26"/>
<field name="KEY_OPERATOR_SELECTION_EXPAND_BOOL"/>
+ <field name="KEY_OPPORTUNISTIC_NETWORK_BACKOFF_TIME_LONG" since="30"/>
+ <field name="KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG" since="30"/>
+ <field name="KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_HYSTERESIS_TIME_LONG" since="29"/>
+ <field name="KEY_OPPORTUNISTIC_NETWORK_ENTRY_OR_EXIT_HYSTERESIS_TIME_LONG" since="29"/>
+ <field name="KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_BANDWIDTH_INT" since="29"/>
+ <field name="KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_RSRP_INT" since="29"/>
+ <field name="KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_RSSNR_INT" since="29"/>
+ <field name="KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_RSRP_INT" since="29"/>
+ <field name="KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_RSSNR_INT" since="29"/>
+ <field name="KEY_OPPORTUNISTIC_NETWORK_MAX_BACKOFF_TIME_LONG" since="30"/>
+ <field name="KEY_OPPORTUNISTIC_NETWORK_PING_PONG_TIME_LONG" since="30"/>
+ <field name="KEY_PING_TEST_BEFORE_DATA_SWITCH_BOOL" since="30"/>
<field name="KEY_PREFER_2G_BOOL"/>
+ <field name="KEY_PREVENT_CLIR_ACTIVATION_AND_DEACTIVATION_CODE_BOOL" since="30"/>
+ <field name="KEY_RADIO_RESTART_FAILURE_CAUSES_INT_ARRAY" since="29"/>
<field name="KEY_RCS_CONFIG_SERVER_URL_STRING" since="26"/>
+ <field name="KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY" since="30"/>
+ <field name="KEY_READ_ONLY_APN_TYPES_STRING_ARRAY" since="30"/>
<field name="KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL" since="24"/>
- <field name="KEY_RESTART_RADIO_ON_PDP_FAIL_REGULAR_DEACTIVATION_BOOL" since="26"/>
+ <field name="KEY_RESTART_RADIO_ON_PDP_FAIL_REGULAR_DEACTIVATION_BOOL" since="26" deprecated="29"/>
<field name="KEY_RTT_SUPPORTED_BOOL" since="28"/>
+ <field name="KEY_SHOW_4G_FOR_3G_DATA_ICON_BOOL" since="30"/>
+ <field name="KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL" since="30"/>
<field name="KEY_SHOW_APN_SETTING_CDMA_BOOL"/>
+ <field name="KEY_SHOW_BLOCKING_PAY_PHONE_OPTION_BOOL" since="30"/>
+ <field name="KEY_SHOW_CALL_BLOCKING_DISABLED_NOTIFICATION_ALWAYS_BOOL" since="29"/>
<field name="KEY_SHOW_CDMA_CHOICES_BOOL"/>
<field name="KEY_SHOW_ICCID_IN_SIM_STATUS_BOOL" since="24"/>
+ <field name="KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL" since="30"/>
<field name="KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL"/>
<field name="KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL" since="28"/>
+ <field name="KEY_SHOW_VIDEO_CALL_CHARGES_ALERT_DIALOG_BOOL" since="30"/>
+ <field name="KEY_SHOW_WFC_LOCATION_PRIVACY_POLICY_BOOL" since="30"/>
<field name="KEY_SIMPLIFIED_NETWORK_SETTINGS_BOOL" since="26"/>
<field name="KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL"/>
<field name="KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL" since="26"/>
<field name="KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL" since="26"/>
+ <field name="KEY_SUPPORT_CLIR_NETWORK_DEFAULT_BOOL" since="29"/>
<field name="KEY_SUPPORT_CONFERENCE_CALL_BOOL" since="24"/>
<field name="KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL" since="29"/>
+ <field name="KEY_SUPPORT_ENHANCED_CALL_BLOCKING_BOOL" since="30"/>
+ <field name="KEY_SUPPORT_IMS_CONFERENCE_EVENT_PACKAGE_BOOL" since="30"/>
<field name="KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL"/>
<field name="KEY_SUPPORT_SWAP_AFTER_MERGE_BOOL"/>
+ <field name="KEY_SUPPORT_TDSCDMA_BOOL" since="30"/>
+ <field name="KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY" since="30"/>
+ <field name="KEY_SWITCH_DATA_TO_PRIMARY_IF_PRIMARY_IS_OOS_BOOL" since="30"/>
<field name="KEY_TREAT_DOWNGRADED_VIDEO_CALLS_AS_VIDEO_CALLS_BOOL" since="25"/>
+ <field name="KEY_TTY_SUPPORTED_BOOL" since="29"/>
+ <field name="KEY_UNLOGGABLE_NUMBERS_STRING_ARRAY" since="30"/>
<field name="KEY_USE_HFA_FOR_PROVISIONING_BOOL"/>
<field name="KEY_USE_OTASP_FOR_PROVISIONING_BOOL"/>
<field name="KEY_USE_RCS_PRESENCE_BOOL" since="24"/>
+ <field name="KEY_USE_RCS_SIP_OPTIONS_BOOL" since="30"/>
+ <field name="KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL" since="30"/>
<field name="KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL"/>
<field name="KEY_VOICE_PRIVACY_DISABLE_UI_BOOL"/>
<field name="KEY_VOLTE_REPLACEMENT_RAT_INT"/>
@@ -42684,13 +44878,22 @@
<field name="KEY_VVM_PREFETCH_BOOL" since="24"/>
<field name="KEY_VVM_SSL_ENABLED_BOOL" since="26"/>
<field name="KEY_VVM_TYPE_STRING"/>
+ <field name="KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING" since="30"/>
+ <field name="KEY_WORLD_MODE_ENABLED_BOOL" since="30"/>
<field name="KEY_WORLD_PHONE_BOOL"/>
</class>
+ <class name="android/telephony/CarrierConfigManager$Gps" since="30">
+ <extends name="java/lang/Object"/>
+ <field name="KEY_PERSIST_LPP_MODE_BOOL"/>
+ <field name="KEY_PREFIX"/>
+ </class>
+ <class name="android/telephony/CarrierConfigManager$Ims" since="30">
+ <extends name="java/lang/Object"/>
+ <field name="KEY_PREFIX"/>
+ </class>
<class name="android/telephony/CellIdentity" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;ILandroid/os/Parcel;)V" since="29"/>
<method name="getOperatorAlphaLong()Ljava/lang/CharSequence;"/>
<method name="getOperatorAlphaShort()Ljava/lang/CharSequence;"/>
<field name="CREATOR"/>
@@ -42699,7 +44902,6 @@
<extends name="android/telephony/CellIdentity" since="28"/>
<extends name="java/lang/Object" removed="28"/>
<implements name="android/os/Parcelable" removed="28"/>
- <method name="&lt;init>()V"/>
<method name="getBasestationId()I"/>
<method name="getLatitude()I"/>
<method name="getLongitude()I"/>
@@ -42711,7 +44913,7 @@
<extends name="android/telephony/CellIdentity" since="28"/>
<extends name="java/lang/Object" removed="28"/>
<implements name="android/os/Parcelable" removed="28"/>
- <method name="&lt;init>()V"/>
+ <method name="getAdditionalPlmns()Ljava/util/Set;" since="30"/>
<method name="getArfcn()I" since="24"/>
<method name="getBsic()I" since="24"/>
<method name="getCid()I"/>
@@ -42728,9 +44930,11 @@
<extends name="android/telephony/CellIdentity" since="28"/>
<extends name="java/lang/Object" removed="28"/>
<implements name="android/os/Parcelable" removed="28"/>
- <method name="&lt;init>()V"/>
+ <method name="getAdditionalPlmns()Ljava/util/Set;" since="30"/>
+ <method name="getBands()[I" since="30"/>
<method name="getBandwidth()I" since="28"/>
<method name="getCi()I"/>
+ <method name="getClosedSubscriberGroupInfo()Landroid/telephony/ClosedSubscriberGroupInfo;" since="30"/>
<method name="getEarfcn()I" since="24"/>
<method name="getMcc()I" deprecated="28"/>
<method name="getMccString()Ljava/lang/String;" since="28"/>
@@ -42741,22 +44945,38 @@
<method name="getTac()I"/>
<field name="CREATOR"/>
</class>
+ <class name="android/telephony/CellIdentityNr" since="29">
+ <extends name="android/telephony/CellIdentity"/>
+ <method name="getAdditionalPlmns()Ljava/util/Set;" since="30"/>
+ <method name="getBands()[I" since="30"/>
+ <method name="getMccString()Ljava/lang/String;"/>
+ <method name="getMncString()Ljava/lang/String;"/>
+ <method name="getNci()J"/>
+ <method name="getNrarfcn()I"/>
+ <method name="getPci()I"/>
+ <method name="getTac()I"/>
+ <field name="CREATOR"/>
+ </class>
<class name="android/telephony/CellIdentityTdscdma" since="28">
<extends name="android/telephony/CellIdentity"/>
- <method name="&lt;init>()V"/>
+ <method name="getAdditionalPlmns()Ljava/util/Set;" since="30"/>
<method name="getCid()I"/>
+ <method name="getClosedSubscriberGroupInfo()Landroid/telephony/ClosedSubscriberGroupInfo;" since="30"/>
<method name="getCpid()I"/>
<method name="getLac()I"/>
<method name="getMccString()Ljava/lang/String;"/>
<method name="getMncString()Ljava/lang/String;"/>
+ <method name="getMobileNetworkOperator()Ljava/lang/String;" since="29"/>
+ <method name="getUarfcn()I" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/telephony/CellIdentityWcdma" since="18">
<extends name="android/telephony/CellIdentity" since="28"/>
<extends name="java/lang/Object" removed="28"/>
<implements name="android/os/Parcelable" removed="28"/>
- <method name="&lt;init>()V"/>
+ <method name="getAdditionalPlmns()Ljava/util/Set;" since="30"/>
<method name="getCid()I"/>
+ <method name="getClosedSubscriberGroupInfo()Landroid/telephony/ClosedSubscriberGroupInfo;" since="30"/>
<method name="getLac()I"/>
<method name="getMcc()I" deprecated="28"/>
<method name="getMccString()Ljava/lang/String;" since="28"/>
@@ -42770,40 +44990,52 @@
<class name="android/telephony/CellInfo" since="17">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getCellConnectionStatus()I" since="28"/>
- <method name="getTimeStamp()J"/>
+ <method name="getCellIdentity()Landroid/telephony/CellIdentity;" since="30"/>
+ <method name="getCellSignalStrength()Landroid/telephony/CellSignalStrength;" since="30"/>
+ <method name="getTimeStamp()J" deprecated="30"/>
+ <method name="getTimestampMillis()J" since="30"/>
<method name="isRegistered()Z"/>
<field name="CONNECTION_NONE" since="28"/>
<field name="CONNECTION_PRIMARY_SERVING" since="28"/>
<field name="CONNECTION_SECONDARY_SERVING" since="28"/>
<field name="CONNECTION_UNKNOWN" since="28"/>
<field name="CREATOR"/>
+ <field name="UNAVAILABLE" since="29"/>
+ <field name="UNAVAILABLE_LONG" since="29"/>
</class>
<class name="android/telephony/CellInfoCdma" since="17">
<extends name="android/telephony/CellInfo"/>
- <method name="&lt;init>()V"/>
<method name="getCellIdentity()Landroid/telephony/CellIdentityCdma;"/>
<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthCdma;"/>
<field name="CREATOR"/>
</class>
<class name="android/telephony/CellInfoGsm" since="17">
<extends name="android/telephony/CellInfo"/>
- <method name="&lt;init>()V"/>
<method name="getCellIdentity()Landroid/telephony/CellIdentityGsm;"/>
<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthGsm;"/>
<field name="CREATOR"/>
</class>
<class name="android/telephony/CellInfoLte" since="17">
<extends name="android/telephony/CellInfo"/>
- <method name="&lt;init>()V"/>
<method name="getCellIdentity()Landroid/telephony/CellIdentityLte;"/>
<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthLte;"/>
<field name="CREATOR"/>
</class>
+ <class name="android/telephony/CellInfoNr" since="29">
+ <extends name="android/telephony/CellInfo"/>
+ <method name="getCellIdentity()Landroid/telephony/CellIdentity;"/>
+ <method name="getCellSignalStrength()Landroid/telephony/CellSignalStrength;"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/telephony/CellInfoTdscdma" since="29">
+ <extends name="android/telephony/CellInfo"/>
+ <method name="getCellIdentity()Landroid/telephony/CellIdentityTdscdma;"/>
+ <method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthTdscdma;"/>
+ <field name="CREATOR"/>
+ </class>
<class name="android/telephony/CellInfoWcdma" since="18">
<extends name="android/telephony/CellInfo"/>
- <method name="&lt;init>()V"/>
<method name="getCellIdentity()Landroid/telephony/CellIdentityWcdma;"/>
<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthWcdma;"/>
<field name="CREATOR"/>
@@ -42812,14 +45044,14 @@
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
<method name="getEmpty()Landroid/telephony/CellLocation;"/>
- <method name="requestLocationUpdate()V"/>
+ <method name="requestLocationUpdate()V" deprecated="30"/>
</class>
<class name="android/telephony/CellSignalStrength" since="17">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getAsuLevel()I"/>
<method name="getDbm()I"/>
<method name="getLevel()I"/>
+ <method name="getNumSignalStrengthLevels()I" since="30"/>
<field name="SIGNAL_STRENGTH_GOOD" since="23"/>
<field name="SIGNAL_STRENGTH_GREAT" since="23"/>
<field name="SIGNAL_STRENGTH_MODERATE" since="23"/>
@@ -42829,7 +45061,6 @@
<class name="android/telephony/CellSignalStrengthCdma" since="17">
<extends name="android/telephony/CellSignalStrength"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getCdmaDbm()I"/>
<method name="getCdmaEcio()I"/>
<method name="getCdmaLevel()I"/>
@@ -42842,32 +45073,137 @@
<class name="android/telephony/CellSignalStrengthGsm" since="17">
<extends name="android/telephony/CellSignalStrength"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
+ <method name="getBitErrorRate()I" since="29"/>
+ <method name="getRssi()I" since="30"/>
<method name="getTimingAdvance()I" since="26"/>
<field name="CREATOR"/>
</class>
<class name="android/telephony/CellSignalStrengthLte" since="17">
<extends name="android/telephony/CellSignalStrength"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getCqi()I" since="26"/>
<method name="getRsrp()I" since="26"/>
<method name="getRsrq()I" since="26"/>
+ <method name="getRssi()I" since="29"/>
<method name="getRssnr()I" since="26"/>
<method name="getTimingAdvance()I"/>
<field name="CREATOR"/>
</class>
+ <class name="android/telephony/CellSignalStrengthNr" since="29">
+ <extends name="android/telephony/CellSignalStrength"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getCsiRsrp()I"/>
+ <method name="getCsiRsrq()I"/>
+ <method name="getCsiSinr()I"/>
+ <method name="getSsRsrp()I"/>
+ <method name="getSsRsrq()I"/>
+ <method name="getSsSinr()I"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/telephony/CellSignalStrengthTdscdma" since="29">
+ <extends name="android/telephony/CellSignalStrength"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getRscp()I"/>
+ <field name="CREATOR"/>
+ </class>
<class name="android/telephony/CellSignalStrengthWcdma" since="18">
<extends name="android/telephony/CellSignalStrength"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
+ <method name="getEcNo()I" since="30"/>
<field name="CREATOR"/>
</class>
+ <class name="android/telephony/ClosedSubscriberGroupInfo" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getCsgIdentity()I"/>
+ <method name="getCsgIndicator()Z"/>
+ <method name="getHomeNodebName()Ljava/lang/String;"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/telephony/DisconnectCause" since="30">
+ <extends name="java/lang/Object"/>
+ <field name="ALREADY_DIALING"/>
+ <field name="ANSWERED_ELSEWHERE"/>
+ <field name="BUSY"/>
+ <field name="CALLING_DISABLED"/>
+ <field name="CALL_BARRED"/>
+ <field name="CALL_PULLED"/>
+ <field name="CANT_CALL_WHILE_RINGING"/>
+ <field name="CDMA_ACCESS_BLOCKED"/>
+ <field name="CDMA_ACCESS_FAILURE"/>
+ <field name="CDMA_ALREADY_ACTIVATED"/>
+ <field name="CDMA_DROP"/>
+ <field name="CDMA_INTERCEPT"/>
+ <field name="CDMA_LOCKED_UNTIL_POWER_CYCLE"/>
+ <field name="CDMA_NOT_EMERGENCY"/>
+ <field name="CDMA_PREEMPTED"/>
+ <field name="CDMA_REORDER"/>
+ <field name="CDMA_RETRY_ORDER"/>
+ <field name="CDMA_SO_REJECT"/>
+ <field name="CONGESTION"/>
+ <field name="CS_RESTRICTED"/>
+ <field name="CS_RESTRICTED_EMERGENCY"/>
+ <field name="CS_RESTRICTED_NORMAL"/>
+ <field name="DATA_DISABLED"/>
+ <field name="DATA_LIMIT_REACHED"/>
+ <field name="DIALED_CALL_FORWARDING_WHILE_ROAMING"/>
+ <field name="DIALED_MMI"/>
+ <field name="DIAL_LOW_BATTERY"/>
+ <field name="DIAL_MODIFIED_TO_DIAL"/>
+ <field name="DIAL_MODIFIED_TO_DIAL_VIDEO"/>
+ <field name="DIAL_MODIFIED_TO_SS"/>
+ <field name="DIAL_MODIFIED_TO_USSD"/>
+ <field name="DIAL_VIDEO_MODIFIED_TO_DIAL"/>
+ <field name="DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO"/>
+ <field name="DIAL_VIDEO_MODIFIED_TO_SS"/>
+ <field name="DIAL_VIDEO_MODIFIED_TO_USSD"/>
+ <field name="EMERGENCY_CALL_OVER_WFC_NOT_AVAILABLE"/>
+ <field name="EMERGENCY_PERM_FAILURE"/>
+ <field name="EMERGENCY_TEMP_FAILURE"/>
+ <field name="ERROR_UNSPECIFIED"/>
+ <field name="FDN_BLOCKED"/>
+ <field name="ICC_ERROR"/>
+ <field name="IMEI_NOT_ACCEPTED"/>
+ <field name="IMS_ACCESS_BLOCKED"/>
+ <field name="IMS_MERGED_SUCCESSFULLY"/>
+ <field name="IMS_SIP_ALTERNATE_EMERGENCY_CALL"/>
+ <field name="INCOMING_MISSED"/>
+ <field name="INCOMING_REJECTED"/>
+ <field name="INVALID_CREDENTIALS"/>
+ <field name="INVALID_NUMBER"/>
+ <field name="LIMIT_EXCEEDED"/>
+ <field name="LOCAL"/>
+ <field name="LOST_SIGNAL"/>
+ <field name="LOW_BATTERY"/>
+ <field name="MAXIMUM_NUMBER_OF_CALLS_REACHED"/>
+ <field name="MEDIA_TIMEOUT"/>
+ <field name="MMI"/>
+ <field name="NORMAL"/>
+ <field name="NORMAL_UNSPECIFIED"/>
+ <field name="NOT_DISCONNECTED"/>
+ <field name="NOT_VALID"/>
+ <field name="NO_PHONE_NUMBER_SUPPLIED"/>
+ <field name="NUMBER_UNREACHABLE"/>
+ <field name="OTASP_PROVISIONING_IN_PROCESS"/>
+ <field name="OUTGOING_CANCELED"/>
+ <field name="OUTGOING_EMERGENCY_CALL_PLACED"/>
+ <field name="OUTGOING_FAILURE"/>
+ <field name="OUT_OF_NETWORK"/>
+ <field name="OUT_OF_SERVICE"/>
+ <field name="POWER_OFF"/>
+ <field name="SERVER_ERROR"/>
+ <field name="SERVER_UNREACHABLE"/>
+ <field name="TIMED_OUT"/>
+ <field name="TOO_MANY_ONGOING_CALLS"/>
+ <field name="UNOBTAINABLE_NUMBER"/>
+ <field name="VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED"/>
+ <field name="VOICEMAIL_NUMBER_MISSING"/>
+ <field name="WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION"/>
+ <field name="WIFI_LOST"/>
+ </class>
<class name="android/telephony/IccOpenLogicalChannelResponse" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getChannel()I"/>
<method name="getSelectResponse()[B"/>
<method name="getStatus()I"/>
@@ -42881,14 +45217,14 @@
<class name="android/telephony/MbmsDownloadSession" since="28">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Ljava/util/concurrent/Executor;ILandroid/telephony/mbms/MbmsDownloadSessionCallback;)V" since="29"/>
<method name="addProgressListener(Landroid/telephony/mbms/DownloadRequest;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/DownloadProgressListener;)V"/>
+ <method name="addServiceAnnouncement([B)V" since="30"/>
<method name="addStatusListener(Landroid/telephony/mbms/DownloadRequest;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/DownloadStatusListener;)V"/>
<method name="cancelDownload(Landroid/telephony/mbms/DownloadRequest;)V"/>
<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;ILandroid/telephony/mbms/MbmsDownloadSessionCallback;)Landroid/telephony/MbmsDownloadSession;"/>
<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsDownloadSessionCallback;)Landroid/telephony/MbmsDownloadSession;"/>
<method name="download(Landroid/telephony/mbms/DownloadRequest;)V"/>
+ <method name="getMaximumServiceAnnouncementSize()I" since="30"/>
<method name="getTempFileRootDirectory()Ljava/io/File;"/>
<method name="listPendingDownloads()Ljava/util/List;"/>
<method name="removeProgressListener(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/DownloadProgressListener;)V"/>
@@ -42916,38 +45252,69 @@
<field name="STATUS_PENDING_REPAIR"/>
<field name="STATUS_UNKNOWN"/>
</class>
+ <class name="android/telephony/MbmsGroupCallSession" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="java/lang/AutoCloseable"/>
+ <method name="create(Landroid/content/Context;ILjava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsGroupCallSessionCallback;)Landroid/telephony/MbmsGroupCallSession;"/>
+ <method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsGroupCallSessionCallback;)Landroid/telephony/MbmsGroupCallSession;"/>
+ <method name="startGroupCall(JLjava/util/List;Ljava/util/List;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/GroupCallCallback;)Landroid/telephony/mbms/GroupCall;"/>
+ </class>
<class name="android/telephony/MbmsStreamingSession" since="28">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Ljava/util/concurrent/Executor;ILandroid/telephony/mbms/MbmsStreamingSessionCallback;)V" since="29"/>
<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;ILandroid/telephony/mbms/MbmsStreamingSessionCallback;)Landroid/telephony/MbmsStreamingSession;"/>
<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsStreamingSessionCallback;)Landroid/telephony/MbmsStreamingSession;"/>
<method name="requestUpdateStreamingServices(Ljava/util/List;)V"/>
<method name="startStreaming(Landroid/telephony/mbms/StreamingServiceInfo;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/StreamingServiceCallback;)Landroid/telephony/mbms/StreamingService;"/>
</class>
- <class name="android/telephony/NeighboringCellInfo" since="3">
+ <class name="android/telephony/NeighboringCellInfo" since="3" deprecated="29">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" deprecated="16"/>
- <method name="&lt;init>(II)V" deprecated="16"/>
- <method name="&lt;init>(ILjava/lang/String;I)V" since="7"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V"/>
- <method name="getCid()I"/>
- <method name="getLac()I" since="5"/>
- <method name="getNetworkType()I" since="5"/>
- <method name="getPsc()I" since="5"/>
- <method name="getRssi()I"/>
- <method name="setCid(I)V" deprecated="16"/>
- <method name="setRssi(I)V" deprecated="16"/>
+ <method name="&lt;init>()V" deprecated="15"/>
+ <method name="&lt;init>(II)V" deprecated="15"/>
+ <method name="&lt;init>(ILjava/lang/String;I)V" since="7" deprecated="29"/>
+ <method name="&lt;init>(Landroid/os/Parcel;)V" deprecated="29"/>
+ <method name="getCid()I" deprecated="29"/>
+ <method name="getLac()I" since="5" deprecated="29"/>
+ <method name="getNetworkType()I" since="5" deprecated="29"/>
+ <method name="getPsc()I" since="5" deprecated="29"/>
+ <method name="getRssi()I" deprecated="29"/>
+ <method name="setCid(I)V" deprecated="15"/>
+ <method name="setRssi(I)V" deprecated="15"/>
+ <field name="CREATOR" deprecated="29"/>
+ <field name="UNKNOWN_CID" deprecated="29"/>
+ <field name="UNKNOWN_RSSI" deprecated="29"/>
+ </class>
+ <class name="android/telephony/NetworkRegistrationInfo" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getAccessNetworkTechnology()I"/>
+ <method name="getAvailableServices()Ljava/util/List;"/>
+ <method name="getCellIdentity()Landroid/telephony/CellIdentity;"/>
+ <method name="getDomain()I"/>
+ <method name="getRegisteredPlmn()Ljava/lang/String;"/>
+ <method name="getTransportType()I"/>
+ <method name="isRegistered()Z"/>
+ <method name="isRoaming()Z"/>
+ <method name="isSearching()Z"/>
<field name="CREATOR"/>
- <field name="UNKNOWN_CID"/>
- <field name="UNKNOWN_RSSI"/>
+ <field name="DOMAIN_CS"/>
+ <field name="DOMAIN_CS_PS"/>
+ <field name="DOMAIN_PS"/>
+ <field name="DOMAIN_UNKNOWN"/>
+ <field name="NR_STATE_CONNECTED"/>
+ <field name="NR_STATE_NONE"/>
+ <field name="NR_STATE_NOT_RESTRICTED"/>
+ <field name="NR_STATE_RESTRICTED"/>
+ <field name="SERVICE_TYPE_DATA"/>
+ <field name="SERVICE_TYPE_EMERGENCY"/>
+ <field name="SERVICE_TYPE_SMS"/>
+ <field name="SERVICE_TYPE_UNKNOWN"/>
+ <field name="SERVICE_TYPE_VIDEO"/>
+ <field name="SERVICE_TYPE_VOICE"/>
</class>
<class name="android/telephony/NetworkScan" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(II)V" since="29"/>
<method name="stopScan()V"/>
<field name="ERROR_INTERRUPTED"/>
<field name="ERROR_INVALID_SCAN"/>
@@ -42973,6 +45340,24 @@
<field name="SCAN_TYPE_ONE_SHOT"/>
<field name="SCAN_TYPE_PERIODIC"/>
</class>
+ <class name="android/telephony/PackageChangeReceiver" since="30">
+ <extends name="android/content/BroadcastReceiver"/>
+ <method name="&lt;init>()V"/>
+ <method name="onHandleForceStop([Ljava/lang/String;Z)V"/>
+ <method name="onPackageAdded(Ljava/lang/String;)V"/>
+ <method name="onPackageAppeared()V"/>
+ <method name="onPackageDisappeared()V"/>
+ <method name="onPackageModified(Ljava/lang/String;)V"/>
+ <method name="onPackageRemoved(Ljava/lang/String;)V"/>
+ <method name="onPackageUpdateFinished(Ljava/lang/String;)V"/>
+ <method name="register(Landroid/content/Context;Landroid/os/Looper;Landroid/os/UserHandle;)V"/>
+ <method name="unregister()V"/>
+ </class>
+ <class name="android/telephony/PhoneCapability" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <field name="CREATOR"/>
+ </class>
<class name="android/telephony/PhoneNumberFormattingTextWatcher" since="1">
<extends name="java/lang/Object"/>
<implements name="android/text/TextWatcher"/>
@@ -43007,10 +45392,10 @@
<method name="getStrippedReversed(Ljava/lang/String;)Ljava/lang/String;"/>
<method name="is12Key(C)Z"/>
<method name="isDialable(C)Z"/>
- <method name="isEmergencyNumber(Ljava/lang/String;)Z"/>
+ <method name="isEmergencyNumber(Ljava/lang/String;)Z" deprecated="29"/>
<method name="isGlobalPhoneNumber(Ljava/lang/String;)Z"/>
<method name="isISODigit(C)Z"/>
- <method name="isLocalEmergencyNumber(Landroid/content/Context;Ljava/lang/String;)Z" since="21"/>
+ <method name="isLocalEmergencyNumber(Landroid/content/Context;Ljava/lang/String;)Z" since="21" deprecated="29"/>
<method name="isNonSeparator(C)Z"/>
<method name="isReallyDialable(C)Z"/>
<method name="isStartsPostDial(C)Z"/>
@@ -43040,6 +45425,10 @@
<class name="android/telephony/PhoneStateListener" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
+ <method name="&lt;init>(Ljava/util/concurrent/Executor;)V" since="29"/>
+ <method name="onActiveDataSubscriptionIdChanged(I)V" since="29"/>
+ <method name="onBarringInfoChanged(Landroid/telephony/BarringInfo;)V" since="30"/>
+ <method name="onCallDisconnectCauseChanged(II)V" since="30"/>
<method name="onCallForwardingIndicatorChanged(Z)V"/>
<method name="onCallStateChanged(ILjava/lang/String;)V"/>
<method name="onCellInfoChanged(Ljava/util/List;)V" since="17"/>
@@ -43047,24 +45436,46 @@
<method name="onDataActivity(I)V"/>
<method name="onDataConnectionStateChanged(I)V"/>
<method name="onDataConnectionStateChanged(II)V" since="7"/>
+ <method name="onDisplayInfoChanged(Landroid/telephony/TelephonyDisplayInfo;)V" since="30"/>
+ <method name="onImsCallDisconnectCauseChanged(Landroid/telephony/ims/ImsReasonInfo;)V" since="30"/>
<method name="onMessageWaitingIndicatorChanged(Z)V"/>
+ <method name="onPreciseDataConnectionStateChanged(Landroid/telephony/PreciseDataConnectionState;)V" since="30"/>
+ <method name="onRegistrationFailed(Landroid/telephony/CellIdentity;Ljava/lang/String;III)V" since="30"/>
<method name="onServiceStateChanged(Landroid/telephony/ServiceState;)V"/>
- <method name="onSignalStrengthChanged(I)V" deprecated="16"/>
+ <method name="onSignalStrengthChanged(I)V" deprecated="15"/>
<method name="onSignalStrengthsChanged(Landroid/telephony/SignalStrength;)V" since="7"/>
<method name="onUserMobileDataStateChanged(Z)V" since="28"/>
+ <field name="LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE" since="29"/>
+ <field name="LISTEN_BARRING_INFO" since="30"/>
+ <field name="LISTEN_CALL_DISCONNECT_CAUSES" since="30"/>
<field name="LISTEN_CALL_FORWARDING_INDICATOR"/>
<field name="LISTEN_CALL_STATE"/>
<field name="LISTEN_CELL_INFO" since="17"/>
<field name="LISTEN_CELL_LOCATION"/>
<field name="LISTEN_DATA_ACTIVITY"/>
<field name="LISTEN_DATA_CONNECTION_STATE"/>
+ <field name="LISTEN_DISPLAY_INFO_CHANGED" since="30"/>
+ <field name="LISTEN_EMERGENCY_NUMBER_LIST" since="29"/>
+ <field name="LISTEN_IMS_CALL_DISCONNECT_CAUSES" since="30"/>
<field name="LISTEN_MESSAGE_WAITING_INDICATOR"/>
<field name="LISTEN_NONE"/>
+ <field name="LISTEN_PRECISE_DATA_CONNECTION_STATE" since="30"/>
+ <field name="LISTEN_REGISTRATION_FAILURE" since="30"/>
<field name="LISTEN_SERVICE_STATE"/>
- <field name="LISTEN_SIGNAL_STRENGTH" deprecated="16"/>
+ <field name="LISTEN_SIGNAL_STRENGTH" deprecated="15"/>
<field name="LISTEN_SIGNAL_STRENGTHS" since="7"/>
<field name="LISTEN_USER_MOBILE_DATA_STATE" since="28"/>
</class>
+ <class name="android/telephony/PreciseDataConnectionState" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getApnSetting()Landroid/telephony/data/ApnSetting;"/>
+ <method name="getLastCauseCode()I"/>
+ <method name="getLinkProperties()Landroid/net/LinkProperties;"/>
+ <method name="getNetworkType()I"/>
+ <method name="getState()I"/>
+ <field name="CREATOR"/>
+ </class>
<class name="android/telephony/RadioAccessSpecifier" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
@@ -43078,7 +45489,7 @@
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
<method name="&lt;init>()V"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V"/>
+ <method name="&lt;init>(Landroid/os/Parcel;)V" deprecated="29"/>
<method name="&lt;init>(Landroid/telephony/ServiceState;)V"/>
<method name="copyFrom(Landroid/telephony/ServiceState;)V"/>
<method name="getCdmaNetworkId()I" since="28"/>
@@ -43087,11 +45498,13 @@
<method name="getChannelNumber()I" since="28"/>
<method name="getDuplexMode()I" since="28"/>
<method name="getIsManualSelection()Z"/>
+ <method name="getNetworkRegistrationInfoList()Ljava/util/List;" since="30"/>
<method name="getOperatorAlphaLong()Ljava/lang/String;"/>
<method name="getOperatorAlphaShort()Ljava/lang/String;"/>
<method name="getOperatorNumeric()Ljava/lang/String;"/>
<method name="getRoaming()Z"/>
<method name="getState()I"/>
+ <method name="isSearching()Z" since="30"/>
<method name="setIsManualSelection(Z)V"/>
<method name="setOperatorName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
<method name="setRoaming(Z)V"/>
@@ -43111,28 +45524,33 @@
<class name="android/telephony/SignalStrength" since="7">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
- <method name="getCdmaDbm()I"/>
- <method name="getCdmaEcio()I"/>
- <method name="getEvdoDbm()I"/>
- <method name="getEvdoEcio()I"/>
- <method name="getEvdoSnr()I"/>
- <method name="getGsmBitErrorRate()I"/>
- <method name="getGsmSignalStrength()I"/>
+ <method name="getCdmaDbm()I" deprecated="29"/>
+ <method name="getCdmaEcio()I" deprecated="29"/>
+ <method name="getCellSignalStrengths()Ljava/util/List;" since="29"/>
+ <method name="getCellSignalStrengths(Ljava/lang/Class;)Ljava/util/List;" since="29"/>
+ <method name="getEvdoDbm()I" deprecated="29"/>
+ <method name="getEvdoEcio()I" deprecated="29"/>
+ <method name="getEvdoSnr()I" deprecated="29"/>
+ <method name="getGsmBitErrorRate()I" deprecated="29"/>
+ <method name="getGsmSignalStrength()I" deprecated="29"/>
<method name="getLevel()I" since="23"/>
- <method name="isGsm()Z"/>
+ <method name="getTimestampMillis()J" since="30"/>
+ <method name="isGsm()Z" deprecated="29"/>
+ <field name="CREATOR" since="30"/>
+ <field name="INVALID" since="29"/>
</class>
<class name="android/telephony/SmsManager" since="4">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="createAppSpecificSmsToken(Landroid/app/PendingIntent;)Ljava/lang/String;" since="26"/>
+ <method name="createAppSpecificSmsTokenWithPackageInfo(Ljava/lang/String;Landroid/app/PendingIntent;)Ljava/lang/String;" since="29"/>
<method name="divideMessage(Ljava/lang/String;)Ljava/util/ArrayList;"/>
<method name="downloadMultimediaMessage(Landroid/content/Context;Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;Landroid/app/PendingIntent;)V" since="21"/>
<method name="getCarrierConfigValues()Landroid/os/Bundle;" since="21"/>
<method name="getDefault()Landroid/telephony/SmsManager;"/>
<method name="getDefaultSmsSubscriptionId()I" since="22"/>
<method name="getSmsManagerForSubscriptionId(I)Landroid/telephony/SmsManager;" since="22"/>
+ <method name="getSmsMessagesForFinancialApp(Landroid/os/Bundle;Ljava/util/concurrent/Executor;Landroid/telephony/SmsManager$FinancialSmsCallback;)V" since="29"/>
+ <method name="getSmscAddress()Ljava/lang/String;" since="30"/>
<method name="getSubscriptionId()I" since="22"/>
<method name="injectSmsPdu([BLjava/lang/String;Landroid/app/PendingIntent;)V" since="22"/>
<method name="sendDataMessage(Ljava/lang/String;Ljava/lang/String;S[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V"/>
@@ -43140,6 +45558,7 @@
<method name="sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)V"/>
<method name="sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V"/>
<method name="sendTextMessageWithoutPersisting(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V" since="28"/>
+ <method name="setSmscAddress(Ljava/lang/String;)Z" since="30"/>
<field name="EXTRA_MMS_DATA" since="21"/>
<field name="EXTRA_MMS_HTTP_STATUS" since="22"/>
<field name="MMS_CONFIG_ALIAS_ENABLED" since="21"/>
@@ -43181,42 +45600,95 @@
<field name="MMS_ERROR_RETRY" since="21"/>
<field name="MMS_ERROR_UNABLE_CONNECT_MMS" since="21"/>
<field name="MMS_ERROR_UNSPECIFIED" since="21"/>
+ <field name="RESULT_BLUETOOTH_DISCONNECTED" since="30"/>
+ <field name="RESULT_CANCELLED" since="30"/>
+ <field name="RESULT_ENCODING_ERROR" since="30"/>
+ <field name="RESULT_ERROR_FDN_CHECK_FAILURE" since="30"/>
<field name="RESULT_ERROR_GENERIC_FAILURE"/>
<field name="RESULT_ERROR_LIMIT_EXCEEDED" since="27"/>
+ <field name="RESULT_ERROR_NONE" since="30"/>
<field name="RESULT_ERROR_NO_SERVICE"/>
<field name="RESULT_ERROR_NULL_PDU"/>
<field name="RESULT_ERROR_RADIO_OFF"/>
<field name="RESULT_ERROR_SHORT_CODE_NEVER_ALLOWED" since="27"/>
<field name="RESULT_ERROR_SHORT_CODE_NOT_ALLOWED" since="27"/>
+ <field name="RESULT_INTERNAL_ERROR" since="30"/>
+ <field name="RESULT_INVALID_ARGUMENTS" since="30"/>
+ <field name="RESULT_INVALID_BLUETOOTH_ADDRESS" since="30"/>
+ <field name="RESULT_INVALID_SMSC_ADDRESS" since="30"/>
+ <field name="RESULT_INVALID_SMS_FORMAT" since="30"/>
+ <field name="RESULT_INVALID_STATE" since="30"/>
+ <field name="RESULT_MODEM_ERROR" since="30"/>
+ <field name="RESULT_NETWORK_ERROR" since="30"/>
+ <field name="RESULT_NETWORK_REJECT" since="30"/>
+ <field name="RESULT_NO_BLUETOOTH_SERVICE" since="30"/>
+ <field name="RESULT_NO_DEFAULT_SMS_APP" since="30"/>
+ <field name="RESULT_NO_MEMORY" since="30"/>
+ <field name="RESULT_NO_RESOURCES" since="30"/>
+ <field name="RESULT_OPERATION_NOT_ALLOWED" since="30"/>
+ <field name="RESULT_RADIO_NOT_AVAILABLE" since="30"/>
+ <field name="RESULT_REMOTE_EXCEPTION" since="30"/>
+ <field name="RESULT_REQUEST_NOT_SUPPORTED" since="30"/>
+ <field name="RESULT_RIL_CANCELLED" since="30"/>
+ <field name="RESULT_RIL_ENCODING_ERR" since="30"/>
+ <field name="RESULT_RIL_INTERNAL_ERR" since="30"/>
+ <field name="RESULT_RIL_INVALID_ARGUMENTS" since="30"/>
+ <field name="RESULT_RIL_INVALID_MODEM_STATE" since="30"/>
+ <field name="RESULT_RIL_INVALID_SMSC_ADDRESS" since="30"/>
+ <field name="RESULT_RIL_INVALID_SMS_FORMAT" since="30"/>
+ <field name="RESULT_RIL_INVALID_STATE" since="30"/>
+ <field name="RESULT_RIL_MODEM_ERR" since="30"/>
+ <field name="RESULT_RIL_NETWORK_ERR" since="30"/>
+ <field name="RESULT_RIL_NETWORK_NOT_READY" since="30"/>
+ <field name="RESULT_RIL_NETWORK_REJECT" since="30"/>
+ <field name="RESULT_RIL_NO_MEMORY" since="30"/>
+ <field name="RESULT_RIL_NO_RESOURCES" since="30"/>
+ <field name="RESULT_RIL_OPERATION_NOT_ALLOWED" since="30"/>
+ <field name="RESULT_RIL_RADIO_NOT_AVAILABLE" since="30"/>
+ <field name="RESULT_RIL_REQUEST_NOT_SUPPORTED" since="30"/>
+ <field name="RESULT_RIL_REQUEST_RATE_LIMITED" since="30"/>
+ <field name="RESULT_RIL_SIM_ABSENT" since="30"/>
+ <field name="RESULT_RIL_SMS_SEND_FAIL_RETRY" since="30"/>
+ <field name="RESULT_RIL_SYSTEM_ERR" since="30"/>
+ <field name="RESULT_SMS_BLOCKED_DURING_EMERGENCY" since="30"/>
+ <field name="RESULT_SMS_SEND_RETRY_FAILED" since="30"/>
+ <field name="RESULT_SYSTEM_ERROR" since="30"/>
+ <field name="RESULT_UNEXPECTED_EVENT_STOP_SENDING" since="30"/>
<field name="STATUS_ON_ICC_FREE"/>
<field name="STATUS_ON_ICC_READ"/>
<field name="STATUS_ON_ICC_SENT"/>
<field name="STATUS_ON_ICC_UNREAD"/>
<field name="STATUS_ON_ICC_UNSENT"/>
</class>
- <class name="android/telephony/SmsMessage" since="4">
+ <class name="android/telephony/SmsManager$FinancialSmsCallback" since="29">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
+ <method name="onFinancialSmsMessages(Landroid/database/CursorWindow;)V"/>
+ </class>
+ <class name="android/telephony/SmsMessage" since="4">
+ <extends name="java/lang/Object"/>
<method name="calculateLength(Ljava/lang/CharSequence;Z)[I"/>
<method name="calculateLength(Ljava/lang/String;Z)[I"/>
<method name="createFromPdu([B)Landroid/telephony/SmsMessage;" deprecated="23"/>
<method name="createFromPdu([BLjava/lang/String;)Landroid/telephony/SmsMessage;" since="23"/>
+ <method name="createSmsSubmitPdu([BZ)Landroid/telephony/SmsMessage;" since="30"/>
<method name="getDisplayMessageBody()Ljava/lang/String;"/>
<method name="getDisplayOriginatingAddress()Ljava/lang/String;"/>
<method name="getEmailBody()Ljava/lang/String;"/>
<method name="getEmailFrom()Ljava/lang/String;"/>
<method name="getIndexOnIcc()I"/>
- <method name="getIndexOnSim()I" deprecated="16"/>
+ <method name="getIndexOnSim()I" deprecated="15"/>
<method name="getMessageBody()Ljava/lang/String;"/>
<method name="getMessageClass()Landroid/telephony/SmsMessage$MessageClass;"/>
<method name="getOriginatingAddress()Ljava/lang/String;"/>
<method name="getPdu()[B"/>
<method name="getProtocolIdentifier()I"/>
<method name="getPseudoSubject()Ljava/lang/String;"/>
+ <method name="getRecipientAddress()Ljava/lang/String;" since="30"/>
<method name="getServiceCenterAddress()Ljava/lang/String;"/>
<method name="getStatus()I"/>
<method name="getStatusOnIcc()I"/>
- <method name="getStatusOnSim()I" deprecated="16"/>
+ <method name="getStatusOnSim()I" deprecated="15"/>
<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Landroid/telephony/SmsMessage$SubmitPdu;"/>
<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;S[BZ)Landroid/telephony/SmsMessage$SubmitPdu;"/>
<method name="getTPLayerLengthForPDU(Ljava/lang/String;)I"/>
@@ -43253,19 +45725,20 @@
</class>
<class name="android/telephony/SmsMessage$SubmitPdu" since="4">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="encodedMessage"/>
<field name="encodedScAddress"/>
</class>
<class name="android/telephony/SubscriptionInfo" since="22">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="createIconBitmap(Landroid/content/Context;)Landroid/graphics/Bitmap;"/>
+ <method name="getCardId()I" since="29"/>
+ <method name="getCarrierId()I" since="29"/>
<method name="getCarrierName()Ljava/lang/CharSequence;"/>
<method name="getCountryIso()Ljava/lang/String;"/>
<method name="getDataRoaming()I"/>
<method name="getDisplayName()Ljava/lang/CharSequence;"/>
+ <method name="getGroupUuid()Landroid/os/ParcelUuid;" since="29"/>
<method name="getIccId()Ljava/lang/String;"/>
<method name="getIconTint()I"/>
<method name="getMcc()I" deprecated="29"/>
@@ -43273,21 +45746,25 @@
<method name="getMnc()I" deprecated="29"/>
<method name="getMncString()Ljava/lang/String;" since="29"/>
<method name="getNumber()Ljava/lang/String;"/>
- <method name="getParentSubId()I" since="29"/>
<method name="getSimSlotIndex()I"/>
<method name="getSubscriptionId()I"/>
+ <method name="getSubscriptionType()I" since="29"/>
<method name="isEmbedded()Z" since="28"/>
<method name="isOpportunistic()Z" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/telephony/SubscriptionManager" since="22">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
- <method name="addOnSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V"/>
+ <method name="addOnOpportunisticSubscriptionsChangedListener(Ljava/util/concurrent/Executor;Landroid/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener;)V" since="29"/>
+ <method name="addOnSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V" deprecated="30"/>
+ <method name="addOnSubscriptionsChangedListener(Ljava/util/concurrent/Executor;Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V" since="30"/>
+ <method name="addSubscriptionsIntoGroup(Ljava/util/List;Landroid/os/ParcelUuid;)V" since="29"/>
<method name="canManageSubscription(Landroid/telephony/SubscriptionInfo;)Z" since="28"/>
+ <method name="createSubscriptionGroup(Ljava/util/List;)Landroid/os/ParcelUuid;" since="29"/>
<method name="from(Landroid/content/Context;)Landroid/telephony/SubscriptionManager;" deprecated="28"/>
<method name="getAccessibleSubscriptionInfoList()Ljava/util/List;" since="28"/>
+ <method name="getActiveAndHiddenSubscriptionInfoList()Ljava/util/List;" since="30"/>
+ <method name="getActiveDataSubscriptionId()I" since="30"/>
<method name="getActiveSubscriptionInfo(I)Landroid/telephony/SubscriptionInfo;"/>
<method name="getActiveSubscriptionInfoCount()I"/>
<method name="getActiveSubscriptionInfoCountMax()I"/>
@@ -43297,9 +45774,19 @@
<method name="getDefaultSmsSubscriptionId()I" since="24"/>
<method name="getDefaultSubscriptionId()I" since="24"/>
<method name="getDefaultVoiceSubscriptionId()I" since="24"/>
+ <method name="getOpportunisticSubscriptions()Ljava/util/List;" since="29"/>
+ <method name="getSlotIndex(I)I" since="29"/>
+ <method name="getSubscriptionIds(I)[I" since="29"/>
<method name="getSubscriptionPlans(I)Ljava/util/List;" since="28"/>
+ <method name="getSubscriptionsInGroup(Landroid/os/ParcelUuid;)Ljava/util/List;" since="29"/>
+ <method name="isActiveSubscriptionId(I)Z" since="29"/>
<method name="isNetworkRoaming(I)Z"/>
+ <method name="isUsableSubscriptionId(I)Z" since="29"/>
+ <method name="isValidSubscriptionId(I)Z" since="29"/>
+ <method name="removeOnOpportunisticSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener;)V" since="29"/>
<method name="removeOnSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V"/>
+ <method name="removeSubscriptionsFromGroup(Ljava/util/List;Landroid/os/ParcelUuid;)V" since="29"/>
+ <method name="setOpportunistic(ZI)Z" since="29"/>
<method name="setSubscriptionOverrideCongested(IZJ)V" since="28"/>
<method name="setSubscriptionOverrideUnmetered(IZJ)V" since="28"/>
<method name="setSubscriptionPlans(ILjava/util/List;)V" since="28"/>
@@ -43310,8 +45797,18 @@
<field name="ACTION_REFRESH_SUBSCRIPTION_PLANS" since="28"/>
<field name="DATA_ROAMING_DISABLE"/>
<field name="DATA_ROAMING_ENABLE"/>
+ <field name="DEFAULT_SUBSCRIPTION_ID" since="29"/>
+ <field name="EXTRA_SLOT_INDEX" since="30"/>
<field name="EXTRA_SUBSCRIPTION_INDEX" since="26"/>
+ <field name="INVALID_SIM_SLOT_INDEX" since="29"/>
<field name="INVALID_SUBSCRIPTION_ID" since="24"/>
+ <field name="SUBSCRIPTION_TYPE_LOCAL_SIM" since="29"/>
+ <field name="SUBSCRIPTION_TYPE_REMOTE_SIM" since="29"/>
+ </class>
+ <class name="android/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="onOpportunisticSubscriptionsChanged()V"/>
</class>
<class name="android/telephony/SubscriptionManager$OnSubscriptionsChangedListener" since="22">
<extends name="java/lang/Object"/>
@@ -43321,13 +45818,12 @@
<class name="android/telephony/SubscriptionPlan" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="cycleIterator()Ljava/util/Iterator;"/>
<method name="getDataLimitBehavior()I"/>
<method name="getDataLimitBytes()J"/>
<method name="getDataUsageBytes()J"/>
<method name="getDataUsageTime()J"/>
+ <method name="getNetworkTypes()[I" since="30"/>
<method name="getSummary()Ljava/lang/CharSequence;"/>
<method name="getTitle()Ljava/lang/CharSequence;"/>
<field name="BYTES_UNKNOWN"/>
@@ -43341,25 +45837,41 @@
</class>
<class name="android/telephony/SubscriptionPlan$Builder" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/time/ZonedDateTime;Ljava/time/ZonedDateTime;Ljava/time/Period;)V" since="29"/>
<method name="build()Landroid/telephony/SubscriptionPlan;"/>
<method name="createNonrecurring(Ljava/time/ZonedDateTime;Ljava/time/ZonedDateTime;)Landroid/telephony/SubscriptionPlan$Builder;"/>
<method name="createRecurring(Ljava/time/ZonedDateTime;Ljava/time/Period;)Landroid/telephony/SubscriptionPlan$Builder;"/>
+ <method name="resetNetworkTypes()Landroid/telephony/SubscriptionPlan$Builder;" since="30"/>
<method name="setDataLimit(JI)Landroid/telephony/SubscriptionPlan$Builder;"/>
<method name="setDataUsage(JJ)Landroid/telephony/SubscriptionPlan$Builder;"/>
+ <method name="setNetworkTypes([I)Landroid/telephony/SubscriptionPlan$Builder;" since="30"/>
<method name="setSummary(Ljava/lang/CharSequence;)Landroid/telephony/SubscriptionPlan$Builder;"/>
<method name="setTitle(Ljava/lang/CharSequence;)Landroid/telephony/SubscriptionPlan$Builder;"/>
</class>
+ <class name="android/telephony/TelephonyDisplayInfo" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getNetworkType()I"/>
+ <method name="getOverrideNetworkType()I"/>
+ <field name="CREATOR"/>
+ <field name="OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO"/>
+ <field name="OVERRIDE_NETWORK_TYPE_LTE_CA"/>
+ <field name="OVERRIDE_NETWORK_TYPE_NONE"/>
+ <field name="OVERRIDE_NETWORK_TYPE_NR_NSA"/>
+ <field name="OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE"/>
+ </class>
<class name="android/telephony/TelephonyManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="canChangeDtmfToneLength()Z" since="23"/>
<method name="createForPhoneAccountHandle(Landroid/telecom/PhoneAccountHandle;)Landroid/telephony/TelephonyManager;" since="26"/>
<method name="createForSubscriptionId(I)Landroid/telephony/TelephonyManager;" since="24"/>
+ <method name="doesSwitchMultiSimConfigTriggerReboot()Z" since="29"/>
+ <method name="getActiveModemCount()I" since="30"/>
<method name="getAllCellInfo()Ljava/util/List;" since="17"/>
+ <method name="getAllNetworkTypes()[I" since="30"/>
<method name="getCallState()I"/>
+ <method name="getCardIdForDefaultEuicc()I" since="29"/>
<method name="getCarrierConfig()Landroid/os/PersistableBundle;" since="26"/>
+ <method name="getCarrierIdFromSimMccMnc()I" since="29"/>
<method name="getCellLocation()Landroid/telephony/CellLocation;" deprecated="26"/>
<method name="getDataActivity()I"/>
<method name="getDataNetworkType()I" since="24"/>
@@ -43367,6 +45879,8 @@
<method name="getDeviceId()Ljava/lang/String;" deprecated="26"/>
<method name="getDeviceId(I)Ljava/lang/String;" since="23" deprecated="26"/>
<method name="getDeviceSoftwareVersion()Ljava/lang/String;"/>
+ <method name="getEmergencyNumberList()Ljava/util/Map;" since="29"/>
+ <method name="getEmergencyNumberList(I)Ljava/util/Map;" since="29"/>
<method name="getForbiddenPlmns()[Ljava/lang/String;" since="26"/>
<method name="getGroupIdLevel1()Ljava/lang/String;" since="18"/>
<method name="getIccAuthentication(IILjava/lang/String;)Ljava/lang/String;" since="24"/>
@@ -43380,14 +45894,17 @@
<method name="getMmsUAProfUrl()Ljava/lang/String;" since="19"/>
<method name="getMmsUserAgent()Ljava/lang/String;" since="19"/>
<method name="getNai()Ljava/lang/String;" since="28"/>
- <method name="getNeighboringCellInfo()Ljava/util/List;" since="3" deprecated="23"/>
+ <method name="getNeighboringCellInfo()Ljava/util/List;" since="3" deprecated="23" removed="29"/>
<method name="getNetworkCountryIso()Ljava/lang/String;"/>
+ <method name="getNetworkCountryIso(I)Ljava/lang/String;" since="30"/>
<method name="getNetworkOperator()Ljava/lang/String;"/>
<method name="getNetworkOperatorName()Ljava/lang/String;"/>
+ <method name="getNetworkSelectionMode()I" since="30"/>
<method name="getNetworkSpecifier()Ljava/lang/String;" since="26"/>
- <method name="getNetworkType()I"/>
- <method name="getPhoneCount()I" since="23"/>
+ <method name="getNetworkType()I" deprecated="30"/>
+ <method name="getPhoneCount()I" since="23" deprecated="30"/>
<method name="getPhoneType()I"/>
+ <method name="getPreferredOpportunisticDataSubscription()I" since="29"/>
<method name="getServiceState()Landroid/telephony/ServiceState;" since="26"/>
<method name="getSignalStrength()Landroid/telephony/SignalStrength;" since="28"/>
<method name="getSimCarrierId()I" since="28"/>
@@ -43396,11 +45913,16 @@
<method name="getSimOperator()Ljava/lang/String;"/>
<method name="getSimOperatorName()Ljava/lang/String;"/>
<method name="getSimSerialNumber()Ljava/lang/String;"/>
+ <method name="getSimSpecificCarrierId()I" since="29"/>
+ <method name="getSimSpecificCarrierIdName()Ljava/lang/CharSequence;" since="29"/>
<method name="getSimState()I"/>
<method name="getSimState(I)I" since="26"/>
<method name="getSubscriberId()Ljava/lang/String;"/>
+ <method name="getSubscriptionId(Landroid/telecom/PhoneAccountHandle;)I" since="30"/>
+ <method name="getSupportedModemCount()I" since="30"/>
<method name="getTypeAllocationCode()Ljava/lang/String;" since="29"/>
<method name="getTypeAllocationCode(I)Ljava/lang/String;" since="29"/>
+ <method name="getUiccCardsInfo()Ljava/util/List;" since="29"/>
<method name="getVisualVoicemailPackageName()Ljava/lang/String;" since="26"/>
<method name="getVoiceMailAlphaTag()Ljava/lang/String;"/>
<method name="getVoiceMailNumber()Ljava/lang/String;"/>
@@ -43408,42 +45930,57 @@
<method name="getVoicemailRingtoneUri(Landroid/telecom/PhoneAccountHandle;)Landroid/net/Uri;" since="24"/>
<method name="hasCarrierPrivileges()Z" since="22"/>
<method name="hasIccCard()Z" since="5"/>
- <method name="iccCloseLogicalChannel(I)Z" since="21"/>
- <method name="iccExchangeSimIO(IIIIILjava/lang/String;)[B" since="21"/>
+ <method name="iccCloseLogicalChannel(I)Z" since="21" deprecated="30"/>
+ <method name="iccExchangeSimIO(IIIIILjava/lang/String;)[B" since="21" deprecated="30"/>
<method name="iccOpenLogicalChannel(Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;" since="21" deprecated="26"/>
- <method name="iccOpenLogicalChannel(Ljava/lang/String;I)Landroid/telephony/IccOpenLogicalChannelResponse;" since="26"/>
- <method name="iccTransmitApduBasicChannel(IIIIILjava/lang/String;)Ljava/lang/String;" since="21"/>
- <method name="iccTransmitApduLogicalChannel(IIIIIILjava/lang/String;)Ljava/lang/String;" since="21"/>
+ <method name="iccOpenLogicalChannel(Ljava/lang/String;I)Landroid/telephony/IccOpenLogicalChannelResponse;" since="26" deprecated="30"/>
+ <method name="iccTransmitApduBasicChannel(IIIIILjava/lang/String;)Ljava/lang/String;" since="21" deprecated="30"/>
+ <method name="iccTransmitApduLogicalChannel(IIIIIILjava/lang/String;)Ljava/lang/String;" since="21" deprecated="30"/>
<method name="isConcurrentVoiceAndDataSupported()Z" since="26"/>
<method name="isDataEnabled()Z" since="26"/>
+ <method name="isDataRoamingEnabled()Z" since="29"/>
+ <method name="isEmergencyNumber(Ljava/lang/String;)Z" since="29"/>
<method name="isHearingAidCompatibilitySupported()Z" since="23"/>
+ <method name="isMultiSimSupported()I" since="29"/>
<method name="isNetworkRoaming()Z"/>
+ <method name="isRttSupported()Z" since="29"/>
<method name="isSmsCapable()Z" since="21"/>
<method name="isTtyModeSupported()Z" since="23" deprecated="28"/>
<method name="isVoiceCapable()Z" since="22"/>
<method name="isVoicemailVibrationEnabled(Landroid/telecom/PhoneAccountHandle;)Z" since="24"/>
<method name="isWorldPhone()Z" since="23"/>
<method name="listen(Landroid/telephony/PhoneStateListener;I)V"/>
+ <method name="requestCellInfoUpdate(Ljava/util/concurrent/Executor;Landroid/telephony/TelephonyManager$CellInfoCallback;)V" since="29"/>
<method name="requestNetworkScan(Landroid/telephony/NetworkScanRequest;Ljava/util/concurrent/Executor;Landroid/telephony/TelephonyScanManager$NetworkScanCallback;)Landroid/telephony/NetworkScan;" since="28"/>
<method name="sendDialerSpecialCode(Ljava/lang/String;)V" since="26"/>
- <method name="sendEnvelopeWithStatus(Ljava/lang/String;)Ljava/lang/String;" since="21"/>
+ <method name="sendEnvelopeWithStatus(Ljava/lang/String;)Ljava/lang/String;" since="21" deprecated="30"/>
<method name="sendUssdRequest(Ljava/lang/String;Landroid/telephony/TelephonyManager$UssdResponseCallback;Landroid/os/Handler;)V" since="26"/>
<method name="sendVisualVoicemailSms(Ljava/lang/String;ILjava/lang/String;Landroid/app/PendingIntent;)V" since="26"/>
<method name="setDataEnabled(Z)V" since="26"/>
+ <method name="setForbiddenPlmns(Ljava/util/List;)I" since="30"/>
<method name="setLine1NumberForDisplay(Ljava/lang/String;Ljava/lang/String;)Z" since="22"/>
<method name="setNetworkSelectionModeAutomatic()V" since="28"/>
<method name="setNetworkSelectionModeManual(Ljava/lang/String;Z)Z" since="28"/>
+ <method name="setNetworkSelectionModeManual(Ljava/lang/String;ZI)Z" since="30"/>
<method name="setOperatorBrandOverride(Ljava/lang/String;)Z" since="22"/>
<method name="setPreferredNetworkTypeToGlobal()Z" since="22"/>
+ <method name="setPreferredOpportunisticDataSubscription(IZLjava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29"/>
<method name="setVisualVoicemailSmsFilterSettings(Landroid/telephony/VisualVoicemailSmsFilterSettings;)V" since="26"/>
<method name="setVoiceMailNumber(Ljava/lang/String;Ljava/lang/String;)Z" since="22"/>
<method name="setVoicemailRingtoneUri(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;)V" since="26" deprecated="28"/>
<method name="setVoicemailVibrationEnabled(Landroid/telecom/PhoneAccountHandle;Z)V" since="26" deprecated="28"/>
+ <method name="switchMultiSimConfig(I)V" since="29"/>
+ <method name="updateAvailableNetworks(Ljava/util/List;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29"/>
+ <field name="ACTION_CARRIER_MESSAGING_CLIENT_SERVICE" since="29"/>
<field name="ACTION_CONFIGURE_VOICEMAIL" since="23"/>
+ <field name="ACTION_MULTI_SIM_CONFIG_CHANGED" since="30"/>
+ <field name="ACTION_NETWORK_COUNTRY_CHANGED" since="29"/>
<field name="ACTION_PHONE_STATE_CHANGED" since="3"/>
<field name="ACTION_RESPOND_VIA_MESSAGE" since="18"/>
+ <field name="ACTION_SECRET_CODE" since="29"/>
<field name="ACTION_SHOW_VOICEMAIL_NOTIFICATION" since="26"/>
<field name="ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED" since="28"/>
+ <field name="ACTION_SUBSCRIPTION_SPECIFIC_CARRIER_IDENTITY_CHANGED" since="29"/>
<field name="APPTYPE_CSIM" since="24"/>
<field name="APPTYPE_ISIM" since="24"/>
<field name="APPTYPE_RUIM" since="24"/>
@@ -43451,6 +45988,7 @@
<field name="APPTYPE_USIM" since="24"/>
<field name="AUTHTYPE_EAP_AKA" since="24"/>
<field name="AUTHTYPE_EAP_SIM" since="24"/>
+ <field name="CALLBACK_ON_MORE_ERROR_CODE_CHANGE" since="30"/>
<field name="CALL_STATE_IDLE"/>
<field name="CALL_STATE_OFFHOOK"/>
<field name="CALL_STATE_RINGING"/>
@@ -43466,16 +46004,22 @@
<field name="DATA_CONNECTED"/>
<field name="DATA_CONNECTING"/>
<field name="DATA_DISCONNECTED"/>
+ <field name="DATA_DISCONNECTING" since="30"/>
<field name="DATA_SUSPENDED"/>
+ <field name="DATA_UNKNOWN" since="29"/>
+ <field name="EXTRA_ACTIVE_SIM_SUPPORTED_COUNT" since="30"/>
<field name="EXTRA_CALL_VOICEMAIL_INTENT" since="26"/>
<field name="EXTRA_CARRIER_ID" since="28"/>
<field name="EXTRA_CARRIER_NAME" since="28"/>
<field name="EXTRA_HIDE_PUBLIC_SETTINGS" since="26"/>
- <field name="EXTRA_INCOMING_NUMBER" since="3"/>
+ <field name="EXTRA_INCOMING_NUMBER" since="3" deprecated="29"/>
<field name="EXTRA_IS_REFRESH" since="27"/>
<field name="EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT" since="26"/>
+ <field name="EXTRA_NETWORK_COUNTRY" since="29"/>
<field name="EXTRA_NOTIFICATION_COUNT" since="26"/>
<field name="EXTRA_PHONE_ACCOUNT_HANDLE" since="26"/>
+ <field name="EXTRA_SPECIFIC_CARRIER_ID" since="29"/>
+ <field name="EXTRA_SPECIFIC_CARRIER_NAME" since="29"/>
<field name="EXTRA_STATE" since="3"/>
<field name="EXTRA_STATE_IDLE" since="3"/>
<field name="EXTRA_STATE_OFFHOOK" since="3"/>
@@ -43483,6 +46027,12 @@
<field name="EXTRA_SUBSCRIPTION_ID" since="28"/>
<field name="EXTRA_VOICEMAIL_NUMBER" since="26"/>
<field name="METADATA_HIDE_VOICEMAIL_SETTINGS_MENU" since="26"/>
+ <field name="MULTISIM_ALLOWED" since="29"/>
+ <field name="MULTISIM_NOT_SUPPORTED_BY_CARRIER" since="29"/>
+ <field name="MULTISIM_NOT_SUPPORTED_BY_HARDWARE" since="29"/>
+ <field name="NETWORK_SELECTION_MODE_AUTO" since="30"/>
+ <field name="NETWORK_SELECTION_MODE_MANUAL" since="30"/>
+ <field name="NETWORK_SELECTION_MODE_UNKNOWN" since="30"/>
<field name="NETWORK_TYPE_1xRTT" since="4"/>
<field name="NETWORK_TYPE_CDMA" since="4"/>
<field name="NETWORK_TYPE_EDGE"/>
@@ -43499,6 +46049,7 @@
<field name="NETWORK_TYPE_IDEN" since="8"/>
<field name="NETWORK_TYPE_IWLAN" since="25"/>
<field name="NETWORK_TYPE_LTE" since="11"/>
+ <field name="NETWORK_TYPE_NR" since="29"/>
<field name="NETWORK_TYPE_TD_SCDMA" since="25"/>
<field name="NETWORK_TYPE_UMTS"/>
<field name="NETWORK_TYPE_UNKNOWN"/>
@@ -43506,6 +46057,11 @@
<field name="PHONE_TYPE_GSM"/>
<field name="PHONE_TYPE_NONE"/>
<field name="PHONE_TYPE_SIP" since="11"/>
+ <field name="SET_OPPORTUNISTIC_SUB_INACTIVE_SUBSCRIPTION" since="29"/>
+ <field name="SET_OPPORTUNISTIC_SUB_NO_OPPORTUNISTIC_SUB_AVAILABLE" since="30"/>
+ <field name="SET_OPPORTUNISTIC_SUB_REMOTE_SERVICE_EXCEPTION" since="30"/>
+ <field name="SET_OPPORTUNISTIC_SUB_SUCCESS" since="29"/>
+ <field name="SET_OPPORTUNISTIC_SUB_VALIDATION_FAILED" since="29"/>
<field name="SIM_STATE_ABSENT"/>
<field name="SIM_STATE_CARD_IO_ERROR" since="26"/>
<field name="SIM_STATE_CARD_RESTRICTED" since="26"/>
@@ -43516,12 +46072,33 @@
<field name="SIM_STATE_PUK_REQUIRED"/>
<field name="SIM_STATE_READY"/>
<field name="SIM_STATE_UNKNOWN"/>
+ <field name="UNINITIALIZED_CARD_ID" since="29"/>
<field name="UNKNOWN_CARRIER_ID" since="28"/>
+ <field name="UNSUPPORTED_CARD_ID" since="29"/>
+ <field name="UPDATE_AVAILABLE_NETWORKS_ABORTED" since="29"/>
+ <field name="UPDATE_AVAILABLE_NETWORKS_DISABLE_MODEM_FAIL" since="30"/>
+ <field name="UPDATE_AVAILABLE_NETWORKS_ENABLE_MODEM_FAIL" since="30"/>
+ <field name="UPDATE_AVAILABLE_NETWORKS_INVALID_ARGUMENTS" since="29"/>
+ <field name="UPDATE_AVAILABLE_NETWORKS_MULTIPLE_NETWORKS_NOT_SUPPORTED" since="30"/>
+ <field name="UPDATE_AVAILABLE_NETWORKS_NO_CARRIER_PRIVILEGE" since="29"/>
+ <field name="UPDATE_AVAILABLE_NETWORKS_NO_OPPORTUNISTIC_SUB_AVAILABLE" since="30"/>
+ <field name="UPDATE_AVAILABLE_NETWORKS_REMOTE_SERVICE_EXCEPTION" since="30"/>
+ <field name="UPDATE_AVAILABLE_NETWORKS_SERVICE_IS_DISABLED" since="30"/>
+ <field name="UPDATE_AVAILABLE_NETWORKS_SUCCESS" since="29"/>
+ <field name="UPDATE_AVAILABLE_NETWORKS_UNKNOWN_FAILURE" since="29"/>
<field name="USSD_ERROR_SERVICE_UNAVAIL" since="26"/>
<field name="USSD_RETURN_FAILURE" since="26"/>
<field name="VVM_TYPE_CVVM" since="23"/>
<field name="VVM_TYPE_OMTP" since="23"/>
</class>
+ <class name="android/telephony/TelephonyManager$CellInfoCallback" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="onCellInfo(Ljava/util/List;)V"/>
+ <method name="onError(ILjava/lang/Throwable;)V"/>
+ <field name="ERROR_MODEM_ERROR"/>
+ <field name="ERROR_TIMEOUT"/>
+ </class>
<class name="android/telephony/TelephonyManager$UssdResponseCallback" since="26">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
@@ -43539,6 +46116,17 @@
<method name="onError(I)V"/>
<method name="onResults(Ljava/util/List;)V"/>
</class>
+ <class name="android/telephony/UiccCardInfo" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getCardId()I"/>
+ <method name="getEid()Ljava/lang/String;"/>
+ <method name="getIccId()Ljava/lang/String;"/>
+ <method name="getSlotIndex()I"/>
+ <method name="isEuicc()Z"/>
+ <method name="isRemovable()Z"/>
+ <field name="CREATOR"/>
+ </class>
<class name="android/telephony/VisualVoicemailService" since="26">
<extends name="android/app/Service"/>
<method name="&lt;init>()V"/>
@@ -43550,14 +46138,11 @@
</class>
<class name="android/telephony/VisualVoicemailService$VisualVoicemailTask" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Messenger;I)V" since="29"/>
<method name="finish()V"/>
</class>
<class name="android/telephony/VisualVoicemailSms" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getFields()Landroid/os/Bundle;"/>
<method name="getMessageBody()Ljava/lang/String;"/>
<method name="getPhoneAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
@@ -43567,8 +46152,6 @@
<class name="android/telephony/VisualVoicemailSmsFilterSettings" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/telephony/VisualVoicemailSmsFilterSettings$Builder;)V" since="29"/>
<field name="CREATOR"/>
<field name="DESTINATION_PORT_ANY"/>
<field name="DESTINATION_PORT_DATA_SMS"/>
@@ -43602,11 +46185,10 @@
<class name="android/telephony/data/ApnSetting" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/telephony/data/ApnSetting$Builder;)V" since="29"/>
<method name="getApnName()Ljava/lang/String;"/>
<method name="getApnTypeBitmask()I"/>
<method name="getAuthType()I"/>
+ <method name="getCarrierId()I" since="29"/>
<method name="getEntryName()Ljava/lang/String;"/>
<method name="getId()I"/>
<method name="getMmsProxyAddress()Ljava/net/InetAddress;" deprecated="29"/>
@@ -43636,7 +46218,9 @@
<field name="PROTOCOL_IP"/>
<field name="PROTOCOL_IPV4V6"/>
<field name="PROTOCOL_IPV6"/>
+ <field name="PROTOCOL_NON_IP" since="29"/>
<field name="PROTOCOL_PPP"/>
+ <field name="PROTOCOL_UNSTRUCTURED" since="29"/>
<field name="TYPE_CBS"/>
<field name="TYPE_DEFAULT"/>
<field name="TYPE_DUN"/>
@@ -43645,8 +46229,10 @@
<field name="TYPE_HIPRI"/>
<field name="TYPE_IA"/>
<field name="TYPE_IMS"/>
+ <field name="TYPE_MCX" since="29"/>
<field name="TYPE_MMS"/>
<field name="TYPE_SUPL"/>
+ <field name="TYPE_XCAP" since="30"/>
</class>
<class name="android/telephony/data/ApnSetting$Builder" since="28">
<extends name="java/lang/Object"/>
@@ -43656,6 +46242,7 @@
<method name="setApnTypeBitmask(I)Landroid/telephony/data/ApnSetting$Builder;"/>
<method name="setAuthType(I)Landroid/telephony/data/ApnSetting$Builder;"/>
<method name="setCarrierEnabled(Z)Landroid/telephony/data/ApnSetting$Builder;"/>
+ <method name="setCarrierId(I)Landroid/telephony/data/ApnSetting$Builder;" since="29"/>
<method name="setEntryName(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;"/>
<method name="setMmsProxyAddress(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;" since="29"/>
<method name="setMmsProxyAddress(Ljava/net/InetAddress;)Landroid/telephony/data/ApnSetting$Builder;" deprecated="29"/>
@@ -43672,11 +46259,41 @@
<method name="setRoamingProtocol(I)Landroid/telephony/data/ApnSetting$Builder;"/>
<method name="setUser(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;"/>
</class>
+ <class name="android/telephony/emergency/EmergencyNumber" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <implements name="java/lang/Comparable"/>
+ <method name="compareTo(Landroid/telephony/emergency/EmergencyNumber;)I"/>
+ <method name="getCountryIso()Ljava/lang/String;"/>
+ <method name="getEmergencyCallRouting()I"/>
+ <method name="getEmergencyNumberSources()Ljava/util/List;"/>
+ <method name="getEmergencyServiceCategories()Ljava/util/List;"/>
+ <method name="getEmergencyUrns()Ljava/util/List;"/>
+ <method name="getMnc()Ljava/lang/String;"/>
+ <method name="getNumber()Ljava/lang/String;"/>
+ <method name="isFromSources(I)Z"/>
+ <method name="isInEmergencyServiceCategories(I)Z"/>
+ <field name="CREATOR"/>
+ <field name="EMERGENCY_CALL_ROUTING_EMERGENCY"/>
+ <field name="EMERGENCY_CALL_ROUTING_NORMAL"/>
+ <field name="EMERGENCY_CALL_ROUTING_UNKNOWN"/>
+ <field name="EMERGENCY_NUMBER_SOURCE_DATABASE"/>
+ <field name="EMERGENCY_NUMBER_SOURCE_DEFAULT"/>
+ <field name="EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG"/>
+ <field name="EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING"/>
+ <field name="EMERGENCY_NUMBER_SOURCE_SIM"/>
+ <field name="EMERGENCY_SERVICE_CATEGORY_AIEC"/>
+ <field name="EMERGENCY_SERVICE_CATEGORY_AMBULANCE"/>
+ <field name="EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE"/>
+ <field name="EMERGENCY_SERVICE_CATEGORY_MARINE_GUARD"/>
+ <field name="EMERGENCY_SERVICE_CATEGORY_MIEC"/>
+ <field name="EMERGENCY_SERVICE_CATEGORY_MOUNTAIN_RESCUE"/>
+ <field name="EMERGENCY_SERVICE_CATEGORY_POLICE"/>
+ <field name="EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED"/>
+ </class>
<class name="android/telephony/euicc/DownloadableSubscription" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
<method name="forActivationCode(Ljava/lang/String;)Landroid/telephony/euicc/DownloadableSubscription;"/>
<method name="getConfirmationCode()Ljava/lang/String;"/>
<method name="getEncodedActivationCode()Ljava/lang/String;"/>
@@ -43691,8 +46308,7 @@
</class>
<class name="android/telephony/euicc/EuiccManager" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
+ <method name="createForCardId(I)Landroid/telephony/euicc/EuiccManager;" since="29"/>
<method name="deleteSubscription(ILandroid/app/PendingIntent;)V"/>
<method name="downloadSubscription(Landroid/telephony/euicc/DownloadableSubscription;ZLandroid/app/PendingIntent;)V"/>
<method name="getEid()Ljava/lang/String;"/>
@@ -43700,14 +46316,49 @@
<method name="isEnabled()Z"/>
<method name="startResolutionActivity(Landroid/app/Activity;ILandroid/content/Intent;Landroid/app/PendingIntent;)V"/>
<method name="switchToSubscription(ILandroid/app/PendingIntent;)V"/>
+ <method name="updateSubscriptionNickname(ILjava/lang/String;Landroid/app/PendingIntent;)V" since="29"/>
<field name="ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS"/>
<field name="ACTION_NOTIFY_CARRIER_SETUP_INCOMPLETE"/>
+ <field name="ACTION_START_EUICC_ACTIVATION" since="30"/>
<field name="EMBEDDED_SUBSCRIPTION_RESULT_ERROR"/>
<field name="EMBEDDED_SUBSCRIPTION_RESULT_OK"/>
<field name="EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR"/>
+ <field name="ERROR_ADDRESS_MISSING" since="30"/>
+ <field name="ERROR_CARRIER_LOCKED" since="30"/>
+ <field name="ERROR_CERTIFICATE_ERROR" since="30"/>
+ <field name="ERROR_CONNECTION_ERROR" since="30"/>
+ <field name="ERROR_DISALLOWED_BY_PPR" since="30"/>
+ <field name="ERROR_EUICC_INSUFFICIENT_MEMORY" since="30"/>
+ <field name="ERROR_EUICC_MISSING" since="30"/>
+ <field name="ERROR_INCOMPATIBLE_CARRIER" since="30"/>
+ <field name="ERROR_INSTALL_PROFILE" since="30"/>
+ <field name="ERROR_INVALID_ACTIVATION_CODE" since="30"/>
+ <field name="ERROR_INVALID_CONFIRMATION_CODE" since="30"/>
+ <field name="ERROR_INVALID_RESPONSE" since="30"/>
+ <field name="ERROR_NO_PROFILES_AVAILABLE" since="30"/>
+ <field name="ERROR_OPERATION_BUSY" since="30"/>
+ <field name="ERROR_SIM_MISSING" since="30"/>
+ <field name="ERROR_TIME_OUT" since="30"/>
+ <field name="ERROR_UNSUPPORTED_VERSION" since="30"/>
<field name="EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE"/>
<field name="EXTRA_EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTION"/>
+ <field name="EXTRA_EMBEDDED_SUBSCRIPTION_ERROR_CODE" since="30"/>
+ <field name="EXTRA_EMBEDDED_SUBSCRIPTION_OPERATION_CODE" since="30"/>
+ <field name="EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_REASON_CODE" since="30"/>
+ <field name="EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_SUBJECT_CODE" since="30"/>
+ <field name="EXTRA_USE_QR_SCANNER" since="30"/>
<field name="META_DATA_CARRIER_ICON"/>
+ <field name="OPERATION_APDU" since="30"/>
+ <field name="OPERATION_DOWNLOAD" since="30"/>
+ <field name="OPERATION_EUICC_CARD" since="30"/>
+ <field name="OPERATION_EUICC_GSMA" since="30"/>
+ <field name="OPERATION_HTTP" since="30"/>
+ <field name="OPERATION_METADATA" since="30"/>
+ <field name="OPERATION_SIM_SLOT" since="30"/>
+ <field name="OPERATION_SMDX" since="30"/>
+ <field name="OPERATION_SMDX_SUBJECT_REASON_CODE" since="30"/>
+ <field name="OPERATION_SWITCH" since="30"/>
+ <field name="OPERATION_SYSTEM" since="30"/>
</class>
<class name="android/telephony/gsm/GsmCellLocation" since="1">
<extends name="android/telephony/CellLocation"/>
@@ -43722,78 +46373,331 @@
</class>
<class name="android/telephony/gsm/SmsManager" since="1" deprecated="4">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" deprecated="29"/>
- <method name="divideMessage(Ljava/lang/String;)Ljava/util/ArrayList;" deprecated="16"/>
- <method name="getDefault()Landroid/telephony/gsm/SmsManager;" deprecated="16"/>
- <method name="sendDataMessage(Ljava/lang/String;Ljava/lang/String;S[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V" deprecated="16"/>
- <method name="sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)V" deprecated="16"/>
- <method name="sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V" deprecated="16"/>
- <field name="RESULT_ERROR_GENERIC_FAILURE" deprecated="16"/>
- <field name="RESULT_ERROR_NO_SERVICE" deprecated="16"/>
- <field name="RESULT_ERROR_NULL_PDU" deprecated="16"/>
- <field name="RESULT_ERROR_RADIO_OFF" deprecated="16"/>
- <field name="STATUS_ON_SIM_FREE" deprecated="16"/>
- <field name="STATUS_ON_SIM_READ" deprecated="16"/>
- <field name="STATUS_ON_SIM_SENT" deprecated="16"/>
- <field name="STATUS_ON_SIM_UNREAD" deprecated="16"/>
- <field name="STATUS_ON_SIM_UNSENT" deprecated="16"/>
+ <method name="divideMessage(Ljava/lang/String;)Ljava/util/ArrayList;" deprecated="15"/>
+ <method name="getDefault()Landroid/telephony/gsm/SmsManager;" deprecated="15"/>
+ <method name="sendDataMessage(Ljava/lang/String;Ljava/lang/String;S[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V" deprecated="15"/>
+ <method name="sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)V" deprecated="15"/>
+ <method name="sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V" deprecated="15"/>
+ <field name="RESULT_ERROR_GENERIC_FAILURE" deprecated="15"/>
+ <field name="RESULT_ERROR_NO_SERVICE" deprecated="15"/>
+ <field name="RESULT_ERROR_NULL_PDU" deprecated="15"/>
+ <field name="RESULT_ERROR_RADIO_OFF" deprecated="15"/>
+ <field name="STATUS_ON_SIM_FREE" deprecated="15"/>
+ <field name="STATUS_ON_SIM_READ" deprecated="15"/>
+ <field name="STATUS_ON_SIM_SENT" deprecated="15"/>
+ <field name="STATUS_ON_SIM_UNREAD" deprecated="15"/>
+ <field name="STATUS_ON_SIM_UNSENT" deprecated="15"/>
</class>
<class name="android/telephony/gsm/SmsMessage" since="1" deprecated="4">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" deprecated="16"/>
- <method name="calculateLength(Ljava/lang/CharSequence;Z)[I" since="3" deprecated="16"/>
- <method name="calculateLength(Ljava/lang/String;Z)[I" deprecated="16"/>
- <method name="createFromPdu([B)Landroid/telephony/gsm/SmsMessage;" deprecated="16"/>
- <method name="getDisplayMessageBody()Ljava/lang/String;" deprecated="16"/>
- <method name="getDisplayOriginatingAddress()Ljava/lang/String;" deprecated="16"/>
- <method name="getEmailBody()Ljava/lang/String;" deprecated="16"/>
- <method name="getEmailFrom()Ljava/lang/String;" deprecated="16"/>
- <method name="getIndexOnSim()I" deprecated="16"/>
- <method name="getMessageBody()Ljava/lang/String;" deprecated="16"/>
- <method name="getMessageClass()Landroid/telephony/gsm/SmsMessage$MessageClass;" deprecated="16"/>
- <method name="getOriginatingAddress()Ljava/lang/String;" deprecated="16"/>
- <method name="getPdu()[B" deprecated="16"/>
- <method name="getProtocolIdentifier()I" deprecated="16"/>
- <method name="getPseudoSubject()Ljava/lang/String;" deprecated="16"/>
- <method name="getServiceCenterAddress()Ljava/lang/String;" deprecated="16"/>
- <method name="getStatus()I" deprecated="16"/>
- <method name="getStatusOnSim()I" deprecated="16"/>
- <method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Landroid/telephony/gsm/SmsMessage$SubmitPdu;" deprecated="16"/>
- <method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;S[BZ)Landroid/telephony/gsm/SmsMessage$SubmitPdu;" deprecated="16"/>
- <method name="getTPLayerLengthForPDU(Ljava/lang/String;)I" deprecated="16"/>
- <method name="getTimestampMillis()J" deprecated="16"/>
- <method name="getUserData()[B" deprecated="16"/>
- <method name="isCphsMwiMessage()Z" deprecated="16"/>
- <method name="isEmail()Z" deprecated="16"/>
- <method name="isMWIClearMessage()Z" deprecated="16"/>
- <method name="isMWISetMessage()Z" deprecated="16"/>
- <method name="isMwiDontStore()Z" deprecated="16"/>
- <method name="isReplace()Z" deprecated="16"/>
- <method name="isReplyPathPresent()Z" deprecated="16"/>
- <method name="isStatusReportMessage()Z" deprecated="16"/>
- <field name="ENCODING_16BIT" deprecated="16"/>
- <field name="ENCODING_7BIT" deprecated="16"/>
- <field name="ENCODING_8BIT" deprecated="16"/>
- <field name="ENCODING_UNKNOWN" deprecated="16"/>
- <field name="MAX_USER_DATA_BYTES" deprecated="16"/>
- <field name="MAX_USER_DATA_SEPTETS" deprecated="16"/>
- <field name="MAX_USER_DATA_SEPTETS_WITH_HEADER" deprecated="16"/>
+ <method name="&lt;init>()V" deprecated="15"/>
+ <method name="calculateLength(Ljava/lang/CharSequence;Z)[I" since="3" deprecated="15"/>
+ <method name="calculateLength(Ljava/lang/String;Z)[I" deprecated="15"/>
+ <method name="createFromPdu([B)Landroid/telephony/gsm/SmsMessage;" deprecated="15"/>
+ <method name="getDisplayMessageBody()Ljava/lang/String;" deprecated="15"/>
+ <method name="getDisplayOriginatingAddress()Ljava/lang/String;" deprecated="15"/>
+ <method name="getEmailBody()Ljava/lang/String;" deprecated="15"/>
+ <method name="getEmailFrom()Ljava/lang/String;" deprecated="15"/>
+ <method name="getIndexOnSim()I" deprecated="15"/>
+ <method name="getMessageBody()Ljava/lang/String;" deprecated="15"/>
+ <method name="getMessageClass()Landroid/telephony/gsm/SmsMessage$MessageClass;" deprecated="15"/>
+ <method name="getOriginatingAddress()Ljava/lang/String;" deprecated="15"/>
+ <method name="getPdu()[B" deprecated="15"/>
+ <method name="getProtocolIdentifier()I" deprecated="15"/>
+ <method name="getPseudoSubject()Ljava/lang/String;" deprecated="15"/>
+ <method name="getServiceCenterAddress()Ljava/lang/String;" deprecated="15"/>
+ <method name="getStatus()I" deprecated="15"/>
+ <method name="getStatusOnSim()I" deprecated="15"/>
+ <method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Landroid/telephony/gsm/SmsMessage$SubmitPdu;" deprecated="15"/>
+ <method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;S[BZ)Landroid/telephony/gsm/SmsMessage$SubmitPdu;" deprecated="15"/>
+ <method name="getTPLayerLengthForPDU(Ljava/lang/String;)I" deprecated="15"/>
+ <method name="getTimestampMillis()J" deprecated="15"/>
+ <method name="getUserData()[B" deprecated="15"/>
+ <method name="isCphsMwiMessage()Z" deprecated="15"/>
+ <method name="isEmail()Z" deprecated="15"/>
+ <method name="isMWIClearMessage()Z" deprecated="15"/>
+ <method name="isMWISetMessage()Z" deprecated="15"/>
+ <method name="isMwiDontStore()Z" deprecated="15"/>
+ <method name="isReplace()Z" deprecated="15"/>
+ <method name="isReplyPathPresent()Z" deprecated="15"/>
+ <method name="isStatusReportMessage()Z" deprecated="15"/>
+ <field name="ENCODING_16BIT" deprecated="15"/>
+ <field name="ENCODING_7BIT" deprecated="15"/>
+ <field name="ENCODING_8BIT" deprecated="15"/>
+ <field name="ENCODING_UNKNOWN" deprecated="15"/>
+ <field name="MAX_USER_DATA_BYTES" deprecated="15"/>
+ <field name="MAX_USER_DATA_SEPTETS" deprecated="15"/>
+ <field name="MAX_USER_DATA_SEPTETS_WITH_HEADER" deprecated="15"/>
</class>
<class name="android/telephony/gsm/SmsMessage$MessageClass" since="1" deprecated="4">
<extends name="java/lang/Enum"/>
<method name="valueOf(Ljava/lang/String;)Landroid/telephony/gsm/SmsMessage$MessageClass;"/>
<method name="values()[Landroid/telephony/gsm/SmsMessage$MessageClass;"/>
- <field name="CLASS_0"/>
- <field name="CLASS_1"/>
- <field name="CLASS_2"/>
- <field name="CLASS_3"/>
- <field name="UNKNOWN"/>
+ <field name="CLASS_0" deprecated="29"/>
+ <field name="CLASS_1" deprecated="29"/>
+ <field name="CLASS_2" deprecated="29"/>
+ <field name="CLASS_3" deprecated="29"/>
+ <field name="UNKNOWN" deprecated="29"/>
</class>
<class name="android/telephony/gsm/SmsMessage$SubmitPdu" since="1" deprecated="4">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" deprecated="16"/>
- <field name="encodedMessage" deprecated="16"/>
- <field name="encodedScAddress" deprecated="16"/>
+ <method name="&lt;init>()V" deprecated="15"/>
+ <field name="encodedMessage" deprecated="15"/>
+ <field name="encodedScAddress" deprecated="15"/>
+ </class>
+ <class name="android/telephony/ims/ImsException" since="30">
+ <extends name="java/lang/Exception"/>
+ <method name="getCode()I"/>
+ <field name="CODE_ERROR_INVALID_SUBSCRIPTION"/>
+ <field name="CODE_ERROR_SERVICE_UNAVAILABLE"/>
+ <field name="CODE_ERROR_UNSPECIFIED"/>
+ <field name="CODE_ERROR_UNSUPPORTED_OPERATION"/>
+ </class>
+ <class name="android/telephony/ims/ImsManager" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="getImsMmTelManager(I)Landroid/telephony/ims/ImsMmTelManager;"/>
+ <method name="getImsRcsManager(I)Landroid/telephony/ims/ImsRcsManager;"/>
+ <field name="ACTION_WFC_IMS_REGISTRATION_ERROR"/>
+ <field name="EXTRA_WFC_REGISTRATION_FAILURE_MESSAGE"/>
+ <field name="EXTRA_WFC_REGISTRATION_FAILURE_TITLE"/>
+ </class>
+ <class name="android/telephony/ims/ImsMmTelManager" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="android/telephony/ims/RegistrationManager"/>
+ <method name="getVoWiFiModeSetting()I"/>
+ <method name="isAdvancedCallingSettingEnabled()Z"/>
+ <method name="isTtyOverVolteEnabled()Z"/>
+ <method name="isVoWiFiRoamingSettingEnabled()Z"/>
+ <method name="isVoWiFiSettingEnabled()Z"/>
+ <method name="isVtSettingEnabled()Z"/>
+ <method name="registerMmTelCapabilityCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback;)V"/>
+ <method name="unregisterMmTelCapabilityCallback(Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback;)V"/>
+ <field name="WIFI_MODE_CELLULAR_PREFERRED"/>
+ <field name="WIFI_MODE_WIFI_ONLY"/>
+ <field name="WIFI_MODE_WIFI_PREFERRED"/>
+ </class>
+ <class name="android/telephony/ims/ImsMmTelManager$CapabilityCallback" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="onCapabilitiesStatusChanged(Landroid/telephony/ims/feature/MmTelFeature$MmTelCapabilities;)V"/>
+ </class>
+ <class name="android/telephony/ims/ImsRcsManager" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="getUceAdapter()Landroid/telephony/ims/RcsUceAdapter;"/>
+ <field name="ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN"/>
+ </class>
+ <class name="android/telephony/ims/ImsReasonInfo" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="&lt;init>(IILjava/lang/String;)V"/>
+ <method name="getCode()I"/>
+ <method name="getExtraCode()I"/>
+ <method name="getExtraMessage()Ljava/lang/String;"/>
+ <field name="CODE_ACCESS_CLASS_BLOCKED"/>
+ <field name="CODE_ANSWERED_ELSEWHERE"/>
+ <field name="CODE_BLACKLISTED_CALL_ID"/>
+ <field name="CODE_CALL_BARRED"/>
+ <field name="CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE"/>
+ <field name="CODE_CALL_END_CAUSE_CALL_PULL"/>
+ <field name="CODE_CALL_PULL_OUT_OF_SYNC"/>
+ <field name="CODE_DATA_DISABLED"/>
+ <field name="CODE_DATA_LIMIT_REACHED"/>
+ <field name="CODE_DIAL_MODIFIED_TO_DIAL"/>
+ <field name="CODE_DIAL_MODIFIED_TO_DIAL_VIDEO"/>
+ <field name="CODE_DIAL_MODIFIED_TO_SS"/>
+ <field name="CODE_DIAL_MODIFIED_TO_USSD"/>
+ <field name="CODE_DIAL_VIDEO_MODIFIED_TO_DIAL"/>
+ <field name="CODE_DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO"/>
+ <field name="CODE_DIAL_VIDEO_MODIFIED_TO_SS"/>
+ <field name="CODE_DIAL_VIDEO_MODIFIED_TO_USSD"/>
+ <field name="CODE_ECBM_NOT_SUPPORTED"/>
+ <field name="CODE_EMERGENCY_PERM_FAILURE"/>
+ <field name="CODE_EMERGENCY_TEMP_FAILURE"/>
+ <field name="CODE_EPDG_TUNNEL_ESTABLISH_FAILURE"/>
+ <field name="CODE_EPDG_TUNNEL_LOST_CONNECTION"/>
+ <field name="CODE_EPDG_TUNNEL_REKEY_FAILURE"/>
+ <field name="CODE_FDN_BLOCKED"/>
+ <field name="CODE_IKEV2_AUTH_FAILURE"/>
+ <field name="CODE_IMEI_NOT_ACCEPTED"/>
+ <field name="CODE_IWLAN_DPD_FAILURE"/>
+ <field name="CODE_LOCAL_CALL_BUSY"/>
+ <field name="CODE_LOCAL_CALL_CS_RETRY_REQUIRED"/>
+ <field name="CODE_LOCAL_CALL_DECLINE"/>
+ <field name="CODE_LOCAL_CALL_EXCEEDED"/>
+ <field name="CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED"/>
+ <field name="CODE_LOCAL_CALL_TERMINATED"/>
+ <field name="CODE_LOCAL_CALL_VCC_ON_PROGRESSING"/>
+ <field name="CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED"/>
+ <field name="CODE_LOCAL_ENDED_BY_CONFERENCE_MERGE"/>
+ <field name="CODE_LOCAL_HO_NOT_FEASIBLE"/>
+ <field name="CODE_LOCAL_ILLEGAL_ARGUMENT"/>
+ <field name="CODE_LOCAL_ILLEGAL_STATE"/>
+ <field name="CODE_LOCAL_IMS_SERVICE_DOWN"/>
+ <field name="CODE_LOCAL_INTERNAL_ERROR"/>
+ <field name="CODE_LOCAL_LOW_BATTERY"/>
+ <field name="CODE_LOCAL_NETWORK_IP_CHANGED"/>
+ <field name="CODE_LOCAL_NETWORK_NO_LTE_COVERAGE"/>
+ <field name="CODE_LOCAL_NETWORK_NO_SERVICE"/>
+ <field name="CODE_LOCAL_NETWORK_ROAMING"/>
+ <field name="CODE_LOCAL_NOT_REGISTERED"/>
+ <field name="CODE_LOCAL_NO_PENDING_CALL"/>
+ <field name="CODE_LOCAL_POWER_OFF"/>
+ <field name="CODE_LOCAL_SERVICE_UNAVAILABLE"/>
+ <field name="CODE_LOW_BATTERY"/>
+ <field name="CODE_MAXIMUM_NUMBER_OF_CALLS_REACHED"/>
+ <field name="CODE_MEDIA_INIT_FAILED"/>
+ <field name="CODE_MEDIA_NOT_ACCEPTABLE"/>
+ <field name="CODE_MEDIA_NO_DATA"/>
+ <field name="CODE_MEDIA_UNSPECIFIED"/>
+ <field name="CODE_MULTIENDPOINT_NOT_SUPPORTED"/>
+ <field name="CODE_NETWORK_DETACH"/>
+ <field name="CODE_NETWORK_REJECT"/>
+ <field name="CODE_NETWORK_RESP_TIMEOUT"/>
+ <field name="CODE_NO_CSFB_IN_CS_ROAM"/>
+ <field name="CODE_NO_VALID_SIM"/>
+ <field name="CODE_OEM_CAUSE_1"/>
+ <field name="CODE_OEM_CAUSE_10"/>
+ <field name="CODE_OEM_CAUSE_11"/>
+ <field name="CODE_OEM_CAUSE_12"/>
+ <field name="CODE_OEM_CAUSE_13"/>
+ <field name="CODE_OEM_CAUSE_14"/>
+ <field name="CODE_OEM_CAUSE_15"/>
+ <field name="CODE_OEM_CAUSE_2"/>
+ <field name="CODE_OEM_CAUSE_3"/>
+ <field name="CODE_OEM_CAUSE_4"/>
+ <field name="CODE_OEM_CAUSE_5"/>
+ <field name="CODE_OEM_CAUSE_6"/>
+ <field name="CODE_OEM_CAUSE_7"/>
+ <field name="CODE_OEM_CAUSE_8"/>
+ <field name="CODE_OEM_CAUSE_9"/>
+ <field name="CODE_RADIO_ACCESS_FAILURE"/>
+ <field name="CODE_RADIO_INTERNAL_ERROR"/>
+ <field name="CODE_RADIO_LINK_FAILURE"/>
+ <field name="CODE_RADIO_LINK_LOST"/>
+ <field name="CODE_RADIO_OFF"/>
+ <field name="CODE_RADIO_RELEASE_ABNORMAL"/>
+ <field name="CODE_RADIO_RELEASE_NORMAL"/>
+ <field name="CODE_RADIO_SETUP_FAILURE"/>
+ <field name="CODE_RADIO_UPLINK_FAILURE"/>
+ <field name="CODE_REGISTRATION_ERROR"/>
+ <field name="CODE_REJECTED_ELSEWHERE"/>
+ <field name="CODE_REJECT_1X_COLLISION"/>
+ <field name="CODE_REJECT_CALL_ON_OTHER_SUB"/>
+ <field name="CODE_REJECT_CALL_TYPE_NOT_ALLOWED"/>
+ <field name="CODE_REJECT_CONFERENCE_TTY_NOT_ALLOWED"/>
+ <field name="CODE_REJECT_INTERNAL_ERROR"/>
+ <field name="CODE_REJECT_MAX_CALL_LIMIT_REACHED"/>
+ <field name="CODE_REJECT_ONGOING_CALL_SETUP"/>
+ <field name="CODE_REJECT_ONGOING_CALL_TRANSFER"/>
+ <field name="CODE_REJECT_ONGOING_CALL_UPGRADE"/>
+ <field name="CODE_REJECT_ONGOING_CALL_WAITING_DISABLED"/>
+ <field name="CODE_REJECT_ONGOING_CONFERENCE_CALL"/>
+ <field name="CODE_REJECT_ONGOING_CS_CALL"/>
+ <field name="CODE_REJECT_ONGOING_E911_CALL"/>
+ <field name="CODE_REJECT_ONGOING_ENCRYPTED_CALL"/>
+ <field name="CODE_REJECT_ONGOING_HANDOVER"/>
+ <field name="CODE_REJECT_QOS_FAILURE"/>
+ <field name="CODE_REJECT_SERVICE_NOT_REGISTERED"/>
+ <field name="CODE_REJECT_UNKNOWN"/>
+ <field name="CODE_REJECT_UNSUPPORTED_SDP_HEADERS"/>
+ <field name="CODE_REJECT_UNSUPPORTED_SIP_HEADERS"/>
+ <field name="CODE_REJECT_VT_AVPF_NOT_ALLOWED"/>
+ <field name="CODE_REJECT_VT_TTY_NOT_ALLOWED"/>
+ <field name="CODE_REMOTE_CALL_DECLINE"/>
+ <field name="CODE_SESSION_MODIFICATION_FAILED"/>
+ <field name="CODE_SIP_ALTERNATE_EMERGENCY_CALL"/>
+ <field name="CODE_SIP_AMBIGUOUS"/>
+ <field name="CODE_SIP_BAD_ADDRESS"/>
+ <field name="CODE_SIP_BAD_REQUEST"/>
+ <field name="CODE_SIP_BUSY"/>
+ <field name="CODE_SIP_CALL_OR_TRANS_DOES_NOT_EXIST"/>
+ <field name="CODE_SIP_CLIENT_ERROR"/>
+ <field name="CODE_SIP_EXTENSION_REQUIRED"/>
+ <field name="CODE_SIP_FORBIDDEN"/>
+ <field name="CODE_SIP_GLOBAL_ERROR"/>
+ <field name="CODE_SIP_INTERVAL_TOO_BRIEF"/>
+ <field name="CODE_SIP_LOOP_DETECTED"/>
+ <field name="CODE_SIP_METHOD_NOT_ALLOWED"/>
+ <field name="CODE_SIP_NOT_ACCEPTABLE"/>
+ <field name="CODE_SIP_NOT_FOUND"/>
+ <field name="CODE_SIP_NOT_REACHABLE"/>
+ <field name="CODE_SIP_NOT_SUPPORTED"/>
+ <field name="CODE_SIP_PROXY_AUTHENTICATION_REQUIRED"/>
+ <field name="CODE_SIP_REDIRECTED"/>
+ <field name="CODE_SIP_REQUEST_CANCELLED"/>
+ <field name="CODE_SIP_REQUEST_ENTITY_TOO_LARGE"/>
+ <field name="CODE_SIP_REQUEST_PENDING"/>
+ <field name="CODE_SIP_REQUEST_TIMEOUT"/>
+ <field name="CODE_SIP_REQUEST_URI_TOO_LARGE"/>
+ <field name="CODE_SIP_SERVER_ERROR"/>
+ <field name="CODE_SIP_SERVER_INTERNAL_ERROR"/>
+ <field name="CODE_SIP_SERVER_TIMEOUT"/>
+ <field name="CODE_SIP_SERVICE_UNAVAILABLE"/>
+ <field name="CODE_SIP_TEMPRARILY_UNAVAILABLE"/>
+ <field name="CODE_SIP_TOO_MANY_HOPS"/>
+ <field name="CODE_SIP_TRANSACTION_DOES_NOT_EXIST"/>
+ <field name="CODE_SIP_UNDECIPHERABLE"/>
+ <field name="CODE_SIP_USER_MARKED_UNWANTED"/>
+ <field name="CODE_SIP_USER_REJECTED"/>
+ <field name="CODE_SUPP_SVC_CANCELLED"/>
+ <field name="CODE_SUPP_SVC_FAILED"/>
+ <field name="CODE_SUPP_SVC_REINVITE_COLLISION"/>
+ <field name="CODE_TIMEOUT_1XX_WAITING"/>
+ <field name="CODE_TIMEOUT_NO_ANSWER"/>
+ <field name="CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE"/>
+ <field name="CODE_UNSPECIFIED"/>
+ <field name="CODE_USER_CANCELLED_SESSION_MODIFICATION"/>
+ <field name="CODE_USER_DECLINE"/>
+ <field name="CODE_USER_IGNORE"/>
+ <field name="CODE_USER_NOANSWER"/>
+ <field name="CODE_USER_REJECTED_SESSION_MODIFICATION"/>
+ <field name="CODE_USER_TERMINATED"/>
+ <field name="CODE_USER_TERMINATED_BY_REMOTE"/>
+ <field name="CODE_UT_CB_PASSWORD_MISMATCH"/>
+ <field name="CODE_UT_NETWORK_ERROR"/>
+ <field name="CODE_UT_NOT_SUPPORTED"/>
+ <field name="CODE_UT_OPERATION_NOT_ALLOWED"/>
+ <field name="CODE_UT_SERVICE_UNAVAILABLE"/>
+ <field name="CODE_UT_SS_MODIFIED_TO_DIAL"/>
+ <field name="CODE_UT_SS_MODIFIED_TO_DIAL_VIDEO"/>
+ <field name="CODE_UT_SS_MODIFIED_TO_SS"/>
+ <field name="CODE_UT_SS_MODIFIED_TO_USSD"/>
+ <field name="CODE_WIFI_LOST"/>
+ <field name="CREATOR"/>
+ <field name="EXTRA_CODE_CALL_RETRY_BY_SETTINGS"/>
+ <field name="EXTRA_CODE_CALL_RETRY_NORMAL"/>
+ <field name="EXTRA_CODE_CALL_RETRY_SILENT_REDIAL"/>
+ </class>
+ <class name="android/telephony/ims/RcsUceAdapter" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="isUceSettingEnabled()Z"/>
+ </class>
+ <class name="android/telephony/ims/RegistrationManager" since="30">
+ <method name="getRegistrationState(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+ <method name="getRegistrationTransportType(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+ <method name="registerImsRegistrationCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V"/>
+ <method name="unregisterImsRegistrationCallback(Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V"/>
+ <field name="REGISTRATION_STATE_NOT_REGISTERED"/>
+ <field name="REGISTRATION_STATE_REGISTERED"/>
+ <field name="REGISTRATION_STATE_REGISTERING"/>
+ </class>
+ <class name="android/telephony/ims/RegistrationManager$RegistrationCallback" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="onRegistered(I)V"/>
+ <method name="onRegistering(I)V"/>
+ <method name="onTechnologyChangeFailed(ILandroid/telephony/ims/ImsReasonInfo;)V"/>
+ <method name="onUnregistered(Landroid/telephony/ims/ImsReasonInfo;)V"/>
+ </class>
+ <class name="android/telephony/ims/feature/MmTelFeature" since="30">
+ <extends name="java/lang/Object"/>
+ </class>
+ <class name="android/telephony/ims/feature/MmTelFeature$MmTelCapabilities" since="30">
+ <extends name="java/lang/Object"/>
+ <field name="CAPABILITY_TYPE_SMS"/>
+ <field name="CAPABILITY_TYPE_UT"/>
+ <field name="CAPABILITY_TYPE_VIDEO"/>
+ <field name="CAPABILITY_TYPE_VOICE"/>
</class>
<class name="android/telephony/mbms/DownloadProgressListener" since="28">
<extends name="java/lang/Object"/>
@@ -43803,8 +46707,6 @@
<class name="android/telephony/mbms/DownloadRequest" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getDestinationUri()Landroid/net/Uri;"/>
<method name="getFileServiceId()Ljava/lang/String;"/>
<method name="getMaxAppIntentSize()I"/>
@@ -43832,8 +46734,6 @@
<class name="android/telephony/mbms/FileInfo" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getMimeType()Ljava/lang/String;"/>
<method name="getUri()Landroid/net/Uri;"/>
<field name="CREATOR"/>
@@ -43841,11 +46741,31 @@
<class name="android/telephony/mbms/FileServiceInfo" since="28">
<extends name="android/telephony/mbms/ServiceInfo"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getFiles()Ljava/util/List;"/>
<field name="CREATOR"/>
</class>
+ <class name="android/telephony/mbms/GroupCall" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="java/lang/AutoCloseable"/>
+ <method name="getTmgi()J"/>
+ <method name="updateGroupCall(Ljava/util/List;Ljava/util/List;)V"/>
+ <field name="REASON_BY_USER_REQUEST"/>
+ <field name="REASON_FREQUENCY_CONFLICT"/>
+ <field name="REASON_LEFT_MBMS_BROADCAST_AREA"/>
+ <field name="REASON_NONE"/>
+ <field name="REASON_NOT_CONNECTED_TO_HOMECARRIER_LTE"/>
+ <field name="REASON_OUT_OF_MEMORY"/>
+ <field name="STATE_STALLED"/>
+ <field name="STATE_STARTED"/>
+ <field name="STATE_STOPPED"/>
+ </class>
+ <class name="android/telephony/mbms/GroupCallCallback" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="onBroadcastSignalStrengthUpdated(I)V"/>
+ <method name="onError(ILjava/lang/String;)V"/>
+ <method name="onGroupCallStateChanged(II)V"/>
+ <field name="SIGNAL_STRENGTH_UNAVAILABLE"/>
+ </class>
<class name="android/telephony/mbms/MbmsDownloadReceiver" since="28">
<extends name="android/content/BroadcastReceiver"/>
<method name="&lt;init>()V"/>
@@ -43859,7 +46779,6 @@
</class>
<class name="android/telephony/mbms/MbmsErrors" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="ERROR_MIDDLEWARE_LOST"/>
<field name="ERROR_MIDDLEWARE_NOT_BOUND"/>
<field name="ERROR_NO_UNIQUE_MIDDLEWARE"/>
@@ -43868,14 +46787,13 @@
</class>
<class name="android/telephony/mbms/MbmsErrors$DownloadErrors" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT"/>
+ <field name="ERROR_MALFORMED_SERVICE_ANNOUNCEMENT" since="30"/>
<field name="ERROR_UNKNOWN_DOWNLOAD_REQUEST"/>
<field name="ERROR_UNKNOWN_FILE_INFO"/>
</class>
<class name="android/telephony/mbms/MbmsErrors$GeneralErrors" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="ERROR_CARRIER_CHANGE_NOT_ALLOWED"/>
<field name="ERROR_IN_E911"/>
<field name="ERROR_MIDDLEWARE_NOT_YET_READY"/>
@@ -43884,20 +46802,30 @@
<field name="ERROR_OUT_OF_MEMORY"/>
<field name="ERROR_UNABLE_TO_READ_SIM"/>
</class>
+ <class name="android/telephony/mbms/MbmsErrors$GroupCallErrors" since="29">
+ <extends name="java/lang/Object"/>
+ <field name="ERROR_DUPLICATE_START_GROUP_CALL"/>
+ <field name="ERROR_UNABLE_TO_START_SERVICE"/>
+ </class>
<class name="android/telephony/mbms/MbmsErrors$InitializationErrors" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="ERROR_APP_PERMISSIONS_NOT_GRANTED"/>
<field name="ERROR_DUPLICATE_INITIALIZE"/>
<field name="ERROR_UNABLE_TO_INITIALIZE"/>
</class>
<class name="android/telephony/mbms/MbmsErrors$StreamingErrors" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="ERROR_CONCURRENT_SERVICE_LIMIT_REACHED"/>
<field name="ERROR_DUPLICATE_START_STREAM"/>
<field name="ERROR_UNABLE_TO_START_SERVICE"/>
</class>
+ <class name="android/telephony/mbms/MbmsGroupCallSessionCallback" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="onAvailableSaisUpdated(Ljava/util/List;Ljava/util/List;)V"/>
+ <method name="onError(ILjava/lang/String;)V"/>
+ <method name="onMiddlewareReady()V"/>
+ <method name="onServiceInterfaceAvailable(Ljava/lang/String;I)V"/>
+ </class>
<class name="android/telephony/mbms/MbmsStreamingSessionCallback" since="28">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
@@ -43907,8 +46835,6 @@
</class>
<class name="android/telephony/mbms/ServiceInfo" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getLocales()Ljava/util/List;"/>
<method name="getNameForLocale(Ljava/util/Locale;)Ljava/lang/CharSequence;"/>
<method name="getNamedContentLocales()Ljava/util/Set;"/>
@@ -43920,7 +46846,6 @@
<class name="android/telephony/mbms/StreamingService" since="28">
<extends name="java/lang/Object"/>
<implements name="java/lang/AutoCloseable"/>
- <method name="&lt;init>()V"/>
<method name="getInfo()Landroid/telephony/mbms/StreamingServiceInfo;"/>
<method name="getPlaybackUri()Landroid/net/Uri;"/>
<field name="BROADCAST_METHOD"/>
@@ -43949,204 +46874,211 @@
<class name="android/telephony/mbms/StreamingServiceInfo" since="28">
<extends name="android/telephony/mbms/ServiceInfo"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<field name="CREATOR"/>
</class>
- <class name="android/test/ActivityInstrumentationTestCase" since="1" deprecated="3" removed="28">
+ <class name="android/test/ActivityInstrumentationTestCase" since="1" deprecated="3">
<extends name="android/test/ActivityTestCase"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;Z)V"/>
- <method name="testActivityTestCaseSetUpProperly()V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="30"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;Z)V" deprecated="30"/>
+ <method name="testActivityTestCaseSetUpProperly()V" deprecated="30"/>
</class>
- <class name="android/test/ActivityInstrumentationTestCase2" since="3" deprecated="24" removed="28">
+ <class name="android/test/ActivityInstrumentationTestCase2" since="3" deprecated="24">
<extends name="android/test/ActivityTestCase"/>
- <method name="&lt;init>(Ljava/lang/Class;)V" since="8"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="16"/>
- <method name="setActivityInitialTouchMode(Z)V"/>
- <method name="setActivityIntent(Landroid/content/Intent;)V"/>
+ <method name="&lt;init>(Ljava/lang/Class;)V" since="8" deprecated="30"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="15"/>
+ <method name="setActivityInitialTouchMode(Z)V" deprecated="30"/>
+ <method name="setActivityIntent(Landroid/content/Intent;)V" deprecated="30"/>
</class>
- <class name="android/test/ActivityTestCase" since="1" deprecated="24" removed="28">
+ <class name="android/test/ActivityTestCase" since="1" deprecated="24">
<extends name="android/test/InstrumentationTestCase"/>
- <method name="&lt;init>()V"/>
- <method name="getActivity()Landroid/app/Activity;"/>
- <method name="scrubClass(Ljava/lang/Class;)V"/>
- <method name="setActivity(Landroid/app/Activity;)V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="getActivity()Landroid/app/Activity;" deprecated="30"/>
+ <method name="scrubClass(Ljava/lang/Class;)V" deprecated="30"/>
+ <method name="setActivity(Landroid/app/Activity;)V" deprecated="30"/>
</class>
- <class name="android/test/ActivityUnitTestCase" since="1" deprecated="24" removed="28">
+ <class name="android/test/ActivityUnitTestCase" since="1" deprecated="24">
<extends name="android/test/ActivityTestCase"/>
- <method name="&lt;init>(Ljava/lang/Class;)V"/>
- <method name="getFinishedActivityRequest()I"/>
- <method name="getRequestedOrientation()I"/>
- <method name="getStartedActivityIntent()Landroid/content/Intent;"/>
- <method name="getStartedActivityRequest()I"/>
- <method name="isFinishCalled()Z"/>
- <method name="setActivityContext(Landroid/content/Context;)V"/>
- <method name="setApplication(Landroid/app/Application;)V"/>
- <method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;Ljava/lang/Object;)Landroid/app/Activity;"/>
- </class>
- <class name="android/test/AndroidTestCase" since="1" deprecated="24" removed="28">
+ <method name="&lt;init>(Ljava/lang/Class;)V" deprecated="30"/>
+ <method name="getFinishedActivityRequest()I" deprecated="30"/>
+ <method name="getRequestedOrientation()I" deprecated="30"/>
+ <method name="getStartedActivityIntent()Landroid/content/Intent;" deprecated="30"/>
+ <method name="getStartedActivityRequest()I" deprecated="30"/>
+ <method name="isFinishCalled()Z" deprecated="30"/>
+ <method name="setActivityContext(Landroid/content/Context;)V" deprecated="30"/>
+ <method name="setApplication(Landroid/app/Application;)V" deprecated="30"/>
+ <method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;Ljava/lang/Object;)Landroid/app/Activity;" deprecated="30"/>
+ </class>
+ <class name="android/test/AndroidTestCase" since="1" deprecated="24">
<extends name="junit/framework/TestCase"/>
- <method name="&lt;init>()V"/>
- <method name="assertActivityRequiresPermission(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="4"/>
- <method name="assertReadingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4"/>
- <method name="assertWritingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4"/>
- <method name="getContext()Landroid/content/Context;"/>
- <method name="scrubClass(Ljava/lang/Class;)V"/>
- <method name="setContext(Landroid/content/Context;)V"/>
- <method name="testAndroidTestCaseSetupProperly()V"/>
- <field name="mContext"/>
- </class>
- <class name="android/test/AndroidTestRunner" since="1" deprecated="24" removed="28">
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="assertActivityRequiresPermission(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="4" deprecated="30"/>
+ <method name="assertReadingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="30"/>
+ <method name="assertWritingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="30"/>
+ <method name="getContext()Landroid/content/Context;" deprecated="30"/>
+ <method name="getTestContext()Landroid/content/Context;" since="30" deprecated="30"/>
+ <method name="scrubClass(Ljava/lang/Class;)V" deprecated="30"/>
+ <method name="setContext(Landroid/content/Context;)V" deprecated="30"/>
+ <method name="setTestContext(Landroid/content/Context;)V" since="30" deprecated="30"/>
+ <method name="testAndroidTestCaseSetupProperly()V" deprecated="30"/>
+ <field name="mContext" deprecated="30"/>
+ </class>
+ <class name="android/test/AndroidTestRunner" since="1" deprecated="24">
<extends name="junit/runner/BaseTestRunner"/>
- <method name="&lt;init>()V"/>
- <method name="addTestListener(Ljunit/framework/TestListener;)V"/>
- <method name="clearTestListeners()V"/>
- <method name="createTestResult()Ljunit/framework/TestResult;"/>
- <method name="getTestCases()Ljava/util/List;"/>
- <method name="getTestClassName()Ljava/lang/String;"/>
- <method name="getTestResult()Ljunit/framework/TestResult;"/>
- <method name="runTest()V"/>
- <method name="runTest(Ljunit/framework/TestResult;)V"/>
- <method name="setContext(Landroid/content/Context;)V"/>
- <method name="setInstrumentaiton(Landroid/app/Instrumentation;)V" deprecated="16"/>
- <method name="setInstrumentation(Landroid/app/Instrumentation;)V" since="5"/>
- <method name="setTest(Ljunit/framework/Test;)V"/>
- <method name="setTestClassName(Ljava/lang/String;Ljava/lang/String;)V"/>
- </class>
- <class name="android/test/ApplicationTestCase" since="1" deprecated="24" removed="28">
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="addTestListener(Ljunit/framework/TestListener;)V" deprecated="30"/>
+ <method name="clearTestListeners()V" deprecated="30"/>
+ <method name="createTestResult()Ljunit/framework/TestResult;" deprecated="30"/>
+ <method name="getTestCases()Ljava/util/List;" deprecated="30"/>
+ <method name="getTestClassName()Ljava/lang/String;" deprecated="30"/>
+ <method name="getTestResult()Ljunit/framework/TestResult;" deprecated="30"/>
+ <method name="runTest()V" deprecated="30"/>
+ <method name="runTest(Ljunit/framework/TestResult;)V" deprecated="30"/>
+ <method name="setContext(Landroid/content/Context;)V" deprecated="30"/>
+ <method name="setInstrumentaiton(Landroid/app/Instrumentation;)V" deprecated="15"/>
+ <method name="setInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="30"/>
+ <method name="setTest(Ljunit/framework/Test;)V" deprecated="30"/>
+ <method name="setTestClassName(Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
+ </class>
+ <class name="android/test/ApplicationTestCase" since="1" deprecated="24">
<extends name="android/test/AndroidTestCase"/>
- <method name="&lt;init>(Ljava/lang/Class;)V"/>
- <method name="createApplication()V"/>
- <method name="getApplication()Landroid/app/Application;"/>
- <method name="getSystemContext()Landroid/content/Context;"/>
- <method name="terminateApplication()V"/>
- <method name="testApplicationTestCaseSetUpProperly()V"/>
- </class>
- <class name="android/test/AssertionFailedError" since="1" deprecated="16" removed="28">
+ <method name="&lt;init>(Ljava/lang/Class;)V" deprecated="30"/>
+ <method name="createApplication()V" deprecated="30"/>
+ <method name="getApplication()Landroid/app/Application;" deprecated="30"/>
+ <method name="getSystemContext()Landroid/content/Context;" deprecated="30"/>
+ <method name="terminateApplication()V" deprecated="30"/>
+ <method name="testApplicationTestCaseSetUpProperly()V" deprecated="30"/>
+ </class>
+ <class name="android/test/AssertionFailedError" since="1" deprecated="16">
<extends name="java/lang/Error"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" deprecated="30"/>
</class>
- <class name="android/test/ComparisonFailure" since="1" deprecated="16" removed="28">
+ <class name="android/test/ComparisonFailure" since="1" deprecated="16">
<extends name="android/test/AssertionFailedError"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
</class>
- <class name="android/test/FlakyTest" since="1" deprecated="24" removed="28">
+ <class name="android/test/FlakyTest" since="1" deprecated="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/annotation/Annotation"/>
- <method name="tolerance()I"/>
+ <method name="tolerance()I" deprecated="30"/>
</class>
- <class name="android/test/InstrumentationTestCase" since="1" deprecated="24" removed="28">
+ <class name="android/test/InstrumentationTestCase" since="1" deprecated="24">
<extends name="junit/framework/TestCase"/>
- <method name="&lt;init>()V"/>
- <method name="getInstrumentation()Landroid/app/Instrumentation;"/>
- <method name="injectInsrumentation(Landroid/app/Instrumentation;)V" deprecated="16"/>
- <method name="injectInstrumentation(Landroid/app/Instrumentation;)V" since="5"/>
- <method name="launchActivity(Ljava/lang/String;Ljava/lang/Class;Landroid/os/Bundle;)Landroid/app/Activity;"/>
- <method name="launchActivityWithIntent(Ljava/lang/String;Ljava/lang/Class;Landroid/content/Intent;)Landroid/app/Activity;" since="3"/>
- <method name="runTestOnUiThread(Ljava/lang/Runnable;)V" since="3"/>
- <method name="sendKeys(Ljava/lang/String;)V"/>
- <method name="sendKeys([I)V"/>
- <method name="sendRepeatedKeys([I)V"/>
- </class>
- <class name="android/test/InstrumentationTestRunner" since="1" deprecated="24" removed="28">
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="getInstrumentation()Landroid/app/Instrumentation;" deprecated="30"/>
+ <method name="injectInsrumentation(Landroid/app/Instrumentation;)V" deprecated="15"/>
+ <method name="injectInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="30"/>
+ <method name="launchActivity(Ljava/lang/String;Ljava/lang/Class;Landroid/os/Bundle;)Landroid/app/Activity;" deprecated="30"/>
+ <method name="launchActivityWithIntent(Ljava/lang/String;Ljava/lang/Class;Landroid/content/Intent;)Landroid/app/Activity;" since="3" deprecated="30"/>
+ <method name="runTestOnUiThread(Ljava/lang/Runnable;)V" since="3" deprecated="30"/>
+ <method name="sendKeys(Ljava/lang/String;)V" deprecated="30"/>
+ <method name="sendKeys([I)V" deprecated="30"/>
+ <method name="sendRepeatedKeys([I)V" deprecated="30"/>
+ </class>
+ <class name="android/test/InstrumentationTestRunner" since="1" deprecated="24">
<extends name="android/app/Instrumentation"/>
<implements name="android/test/TestSuiteProvider"/>
- <method name="&lt;init>()V"/>
- <method name="getAllTests()Ljunit/framework/TestSuite;"/>
- <method name="getAndroidTestRunner()Landroid/test/AndroidTestRunner;"/>
- <method name="getArguments()Landroid/os/Bundle;" since="18"/>
- <method name="getLoader()Ljava/lang/ClassLoader;"/>
- <field name="REPORT_KEY_NAME_CLASS"/>
- <field name="REPORT_KEY_NAME_TEST"/>
- <field name="REPORT_KEY_NUM_CURRENT"/>
- <field name="REPORT_KEY_NUM_TOTAL"/>
- <field name="REPORT_KEY_STACK"/>
- <field name="REPORT_VALUE_ID"/>
- <field name="REPORT_VALUE_RESULT_ERROR"/>
- <field name="REPORT_VALUE_RESULT_FAILURE"/>
- <field name="REPORT_VALUE_RESULT_OK"/>
- <field name="REPORT_VALUE_RESULT_START"/>
- </class>
- <class name="android/test/InstrumentationTestSuite" since="1" deprecated="24" removed="28">
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="addTestListener(Ljunit/framework/TestListener;)V" since="30" deprecated="30"/>
+ <method name="getAllTests()Ljunit/framework/TestSuite;" deprecated="30"/>
+ <method name="getAndroidTestRunner()Landroid/test/AndroidTestRunner;" deprecated="30"/>
+ <method name="getArguments()Landroid/os/Bundle;" since="18" deprecated="30"/>
+ <method name="getLoader()Ljava/lang/ClassLoader;" deprecated="30"/>
+ <field name="REPORT_KEY_NAME_CLASS" deprecated="30"/>
+ <field name="REPORT_KEY_NAME_TEST" deprecated="30"/>
+ <field name="REPORT_KEY_NUM_CURRENT" deprecated="30"/>
+ <field name="REPORT_KEY_NUM_TOTAL" deprecated="30"/>
+ <field name="REPORT_KEY_STACK" deprecated="30"/>
+ <field name="REPORT_VALUE_ID" deprecated="30"/>
+ <field name="REPORT_VALUE_RESULT_ERROR" deprecated="30"/>
+ <field name="REPORT_VALUE_RESULT_FAILURE" deprecated="30"/>
+ <field name="REPORT_VALUE_RESULT_OK" deprecated="30"/>
+ <field name="REPORT_VALUE_RESULT_START" deprecated="30"/>
+ </class>
+ <class name="android/test/InstrumentationTestSuite" since="1" deprecated="24">
<extends name="junit/framework/TestSuite"/>
- <method name="&lt;init>(Landroid/app/Instrumentation;)V"/>
- <method name="&lt;init>(Ljava/lang/Class;Landroid/app/Instrumentation;)V"/>
- <method name="&lt;init>(Ljava/lang/String;Landroid/app/Instrumentation;)V"/>
+ <method name="&lt;init>(Landroid/app/Instrumentation;)V" deprecated="30"/>
+ <method name="&lt;init>(Ljava/lang/Class;Landroid/app/Instrumentation;)V" deprecated="30"/>
+ <method name="&lt;init>(Ljava/lang/String;Landroid/app/Instrumentation;)V" deprecated="30"/>
</class>
- <class name="android/test/IsolatedContext" since="1" deprecated="24" removed="28">
+ <class name="android/test/IsolatedContext" since="1" deprecated="24">
<extends name="android/content/ContextWrapper"/>
- <method name="&lt;init>(Landroid/content/ContentResolver;Landroid/content/Context;)V"/>
- <method name="getAndClearBroadcastIntents()Ljava/util/List;"/>
+ <method name="&lt;init>(Landroid/content/ContentResolver;Landroid/content/Context;)V" deprecated="30"/>
+ <method name="getAndClearBroadcastIntents()Ljava/util/List;" deprecated="30"/>
+ </class>
+ <class name="android/test/LaunchPerformanceBase" since="30" deprecated="30">
+ <extends name="android/app/Instrumentation"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="LaunchApp()V" deprecated="30"/>
+ <field name="mIntent" deprecated="30"/>
+ <field name="mResults" deprecated="30"/>
</class>
- <class name="android/test/LoaderTestCase" since="11" removed="28">
+ <class name="android/test/LoaderTestCase" since="11">
<extends name="android/test/AndroidTestCase"/>
<method name="&lt;init>()V"/>
<method name="getLoaderResultSynchronously(Landroid/content/Loader;)Ljava/lang/Object;"/>
</class>
- <class name="android/test/MoreAsserts" since="1" deprecated="24" removed="28">
- <extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Class;)V"/>
- <method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Object;)V"/>
- <method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;"/>
- <method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;"/>
- <method name="assertContentsInAnyOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V"/>
- <method name="assertContentsInAnyOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V"/>
- <method name="assertContentsInOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V"/>
- <method name="assertContentsInOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V"/>
- <method name="assertEmpty(Ljava/lang/Iterable;)V"/>
- <method name="assertEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V"/>
- <method name="assertEmpty(Ljava/lang/String;Ljava/util/Map;)V"/>
- <method name="assertEmpty(Ljava/util/Map;)V"/>
- <method name="assertEquals(Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;)V"/>
- <method name="assertEquals(Ljava/lang/String;[B[B)V"/>
- <method name="assertEquals(Ljava/lang/String;[D[D)V"/>
- <method name="assertEquals(Ljava/lang/String;[I[I)V"/>
- <method name="assertEquals(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;)V"/>
- <method name="assertEquals(Ljava/util/Set;Ljava/util/Set;)V"/>
- <method name="assertEquals([B[B)V"/>
- <method name="assertEquals([D[D)V"/>
- <method name="assertEquals([I[I)V"/>
- <method name="assertEquals([Ljava/lang/Object;[Ljava/lang/Object;)V"/>
- <method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;"/>
- <method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;"/>
- <method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;)V"/>
- <method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
- <method name="assertNotEmpty(Ljava/lang/Iterable;)V"/>
- <method name="assertNotEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V"/>
- <method name="assertNotEmpty(Ljava/lang/String;Ljava/util/Map;)V"/>
- <method name="assertNotEmpty(Ljava/util/Map;)V"/>
- <method name="assertNotEqual(Ljava/lang/Object;Ljava/lang/Object;)V"/>
- <method name="assertNotEqual(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"/>
- <method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;)V"/>
- <method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
- <method name="checkEqualsAndHashCodeMethods(Ljava/lang/Object;Ljava/lang/Object;Z)V"/>
- <method name="checkEqualsAndHashCodeMethods(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Z)V"/>
- </class>
- <class name="android/test/PerformanceTestCase" since="1" deprecated="24" removed="28">
- <extends name="java/lang/Object"/>
- <method name="isPerformanceOnly()Z"/>
- <method name="startPerformance(Landroid/test/PerformanceTestCase$Intermediates;)I"/>
- </class>
- <class name="android/test/PerformanceTestCase$Intermediates" since="1" removed="28">
- <extends name="java/lang/Object"/>
- <method name="addIntermediate(Ljava/lang/String;)V"/>
- <method name="addIntermediate(Ljava/lang/String;J)V"/>
- <method name="finishTiming(Z)V"/>
- <method name="setInternalIterations(I)V"/>
- <method name="startTiming(Z)V"/>
- </class>
- <class name="android/test/ProviderTestCase" since="1" deprecated="5" removed="28">
+ <class name="android/test/MoreAsserts" since="1" deprecated="24">
+ <extends name="java/lang/Object"/>
+ <method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Class;)V" deprecated="30"/>
+ <method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Object;)V" deprecated="30"/>
+ <method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="30"/>
+ <method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="30"/>
+ <method name="assertContentsInAnyOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="30"/>
+ <method name="assertContentsInAnyOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="30"/>
+ <method name="assertContentsInOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="30"/>
+ <method name="assertContentsInOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="30"/>
+ <method name="assertEmpty(Ljava/lang/Iterable;)V" deprecated="30"/>
+ <method name="assertEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="30"/>
+ <method name="assertEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="30"/>
+ <method name="assertEmpty(Ljava/util/Map;)V" deprecated="30"/>
+ <method name="assertEquals(Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;)V" deprecated="30"/>
+ <method name="assertEquals(Ljava/lang/String;[B[B)V" deprecated="30"/>
+ <method name="assertEquals(Ljava/lang/String;[D[D)V" deprecated="30"/>
+ <method name="assertEquals(Ljava/lang/String;[I[I)V" deprecated="30"/>
+ <method name="assertEquals(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="30"/>
+ <method name="assertEquals(Ljava/util/Set;Ljava/util/Set;)V" deprecated="30"/>
+ <method name="assertEquals([B[B)V" deprecated="30"/>
+ <method name="assertEquals([D[D)V" deprecated="30"/>
+ <method name="assertEquals([I[I)V" deprecated="30"/>
+ <method name="assertEquals([Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="30"/>
+ <method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="30"/>
+ <method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="30"/>
+ <method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
+ <method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
+ <method name="assertNotEmpty(Ljava/lang/Iterable;)V" deprecated="30"/>
+ <method name="assertNotEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="30"/>
+ <method name="assertNotEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="30"/>
+ <method name="assertNotEmpty(Ljava/util/Map;)V" deprecated="30"/>
+ <method name="assertNotEqual(Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="30"/>
+ <method name="assertNotEqual(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="30"/>
+ <method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
+ <method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
+ <method name="checkEqualsAndHashCodeMethods(Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="30"/>
+ <method name="checkEqualsAndHashCodeMethods(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="30"/>
+ </class>
+ <class name="android/test/PerformanceTestCase" since="1" deprecated="24">
+ <extends name="java/lang/Object"/>
+ <method name="isPerformanceOnly()Z" deprecated="30"/>
+ <method name="startPerformance(Landroid/test/PerformanceTestCase$Intermediates;)I" deprecated="30"/>
+ </class>
+ <class name="android/test/PerformanceTestCase$Intermediates" since="1" deprecated="30">
+ <extends name="java/lang/Object"/>
+ <method name="addIntermediate(Ljava/lang/String;)V" deprecated="30"/>
+ <method name="addIntermediate(Ljava/lang/String;J)V" deprecated="30"/>
+ <method name="finishTiming(Z)V" deprecated="30"/>
+ <method name="setInternalIterations(I)V" deprecated="30"/>
+ <method name="startTiming(Z)V" deprecated="30"/>
+ </class>
+ <class name="android/test/ProviderTestCase" since="1" deprecated="5">
<extends name="android/test/InstrumentationTestCase"/>
- <method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V"/>
- <method name="getMockContentResolver()Landroid/test/mock/MockContentResolver;"/>
- <method name="getMockContext()Landroid/test/IsolatedContext;"/>
- <method name="getProvider()Landroid/content/ContentProvider;"/>
- <method name="newResolverWithContentProviderFromSql(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentResolver;"/>
+ <method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V" deprecated="30"/>
+ <method name="getMockContentResolver()Landroid/test/mock/MockContentResolver;" deprecated="30"/>
+ <method name="getMockContext()Landroid/test/IsolatedContext;" deprecated="30"/>
+ <method name="getProvider()Landroid/content/ContentProvider;" deprecated="30"/>
+ <method name="newResolverWithContentProviderFromSql(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentResolver;" deprecated="30"/>
</class>
- <class name="android/test/ProviderTestCase2" since="3" removed="28">
+ <class name="android/test/ProviderTestCase2" since="3">
<extends name="android/test/AndroidTestCase"/>
<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V"/>
<method name="getMockContentResolver()Landroid/test/mock/MockContentResolver;"/>
@@ -44154,131 +47086,140 @@
<method name="getProvider()Landroid/content/ContentProvider;"/>
<method name="newResolverWithContentProviderFromSql(Landroid/content/Context;Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentResolver;"/>
</class>
- <class name="android/test/RenamingDelegatingContext" since="1" deprecated="24" removed="28">
+ <class name="android/test/RenamingDelegatingContext" since="1" deprecated="24">
<extends name="android/content/ContextWrapper"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/content/Context;Ljava/lang/String;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V"/>
- <method name="getDatabasePrefix()Ljava/lang/String;"/>
- <method name="makeExistingFilesAndDbsAccessible()V"/>
- <method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;)Landroid/content/ContentProvider;"/>
- <method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;Z)Landroid/content/ContentProvider;"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/content/Context;Ljava/lang/String;)V" deprecated="30"/>
+ <method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V" deprecated="30"/>
+ <method name="getDatabasePrefix()Ljava/lang/String;" deprecated="30"/>
+ <method name="makeExistingFilesAndDbsAccessible()V" deprecated="30"/>
+ <method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;)Landroid/content/ContentProvider;" deprecated="30"/>
+ <method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;Z)Landroid/content/ContentProvider;" deprecated="30"/>
</class>
- <class name="android/test/ServiceTestCase" since="1" deprecated="24" removed="28">
+ <class name="android/test/RepetitiveTest" since="30" deprecated="30">
+ <extends name="java/lang/Object"/>
+ <implements name="java/lang/annotation/Annotation"/>
+ <method name="numIterations()I" deprecated="30"/>
+ </class>
+ <class name="android/test/ServiceTestCase" since="1" deprecated="24">
<extends name="android/test/AndroidTestCase"/>
- <method name="&lt;init>(Ljava/lang/Class;)V"/>
- <method name="bindService(Landroid/content/Intent;)Landroid/os/IBinder;"/>
- <method name="getApplication()Landroid/app/Application;"/>
- <method name="getService()Landroid/app/Service;"/>
- <method name="getSystemContext()Landroid/content/Context;"/>
- <method name="setApplication(Landroid/app/Application;)V"/>
- <method name="setupService()V"/>
- <method name="shutdownService()V"/>
- <method name="startService(Landroid/content/Intent;)V"/>
- <method name="testServiceTestCaseSetUpProperly()V"/>
- </class>
- <class name="android/test/SingleLaunchActivityTestCase" since="1" deprecated="24" removed="28">
+ <method name="&lt;init>(Ljava/lang/Class;)V" deprecated="30"/>
+ <method name="bindService(Landroid/content/Intent;)Landroid/os/IBinder;" deprecated="30"/>
+ <method name="getApplication()Landroid/app/Application;" deprecated="30"/>
+ <method name="getService()Landroid/app/Service;" deprecated="30"/>
+ <method name="getSystemContext()Landroid/content/Context;" deprecated="30"/>
+ <method name="setApplication(Landroid/app/Application;)V" deprecated="30"/>
+ <method name="setupService()V" deprecated="30"/>
+ <method name="shutdownService()V" deprecated="30"/>
+ <method name="startService(Landroid/content/Intent;)V" deprecated="30"/>
+ <method name="testServiceTestCaseSetUpProperly()V" deprecated="30"/>
+ </class>
+ <class name="android/test/SingleLaunchActivityTestCase" since="1" deprecated="24">
<extends name="android/test/InstrumentationTestCase"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V"/>
- <method name="getActivity()Landroid/app/Activity;"/>
- <method name="testActivityTestCaseSetUpProperly()V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="30"/>
+ <method name="getActivity()Landroid/app/Activity;" deprecated="30"/>
+ <method name="testActivityTestCaseSetUpProperly()V" deprecated="30"/>
</class>
- <class name="android/test/SyncBaseInstrumentation" since="1" deprecated="24" removed="28">
+ <class name="android/test/SyncBaseInstrumentation" since="1" deprecated="24">
<extends name="android/test/InstrumentationTestCase"/>
- <method name="&lt;init>()V"/>
- <method name="cancelSyncsandDisableAutoSync()V"/>
- <method name="syncProvider(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V"/>
- </class>
- <class name="android/test/TestSuiteProvider" since="1" deprecated="24" removed="28">
- <extends name="java/lang/Object"/>
- <method name="getTestSuite()Ljunit/framework/TestSuite;"/>
- </class>
- <class name="android/test/TouchUtils" since="1" deprecated="24" removed="28">
- <extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="clickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V"/>
- <method name="drag(Landroid/test/ActivityInstrumentationTestCase;FFFFI)V" deprecated="16"/>
- <method name="drag(Landroid/test/InstrumentationTestCase;FFFFI)V" since="3"/>
- <method name="dragQuarterScreenDown(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="16"/>
- <method name="dragQuarterScreenDown(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3"/>
- <method name="dragQuarterScreenUp(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="16"/>
- <method name="dragQuarterScreenUp(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3"/>
- <method name="dragViewBy(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="16"/>
- <method name="dragViewBy(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="16"/>
- <method name="dragViewTo(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="16"/>
- <method name="dragViewTo(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3"/>
- <method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="16"/>
- <method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="16"/>
- <method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;)V" since="3"/>
- <method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;I)V" since="3"/>
- <method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="16"/>
- <method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="16"/>
- <method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3"/>
- <method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;I)V" since="3"/>
- <method name="dragViewToX(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="16"/>
- <method name="dragViewToX(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3"/>
- <method name="dragViewToY(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="16"/>
- <method name="dragViewToY(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3"/>
- <method name="longClickView(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="16"/>
- <method name="longClickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3"/>
- <method name="scrollToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="16"/>
- <method name="scrollToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3"/>
- <method name="scrollToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="16"/>
- <method name="scrollToTop(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3"/>
- <method name="tapView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V"/>
- <method name="touchAndCancelView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V"/>
- </class>
- <class name="android/test/UiThreadTest" since="1" deprecated="24" removed="28">
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="cancelSyncsandDisableAutoSync()V" deprecated="30"/>
+ <method name="syncProvider(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
+ </class>
+ <class name="android/test/TestSuiteProvider" since="1" deprecated="24">
+ <extends name="java/lang/Object"/>
+ <method name="getTestSuite()Ljunit/framework/TestSuite;" deprecated="30"/>
+ </class>
+ <class name="android/test/TouchUtils" since="1" deprecated="24">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="clickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="30"/>
+ <method name="drag(Landroid/test/ActivityInstrumentationTestCase;FFFFI)V" deprecated="15"/>
+ <method name="drag(Landroid/test/InstrumentationTestCase;FFFFI)V" since="3" deprecated="30"/>
+ <method name="dragQuarterScreenDown(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="15"/>
+ <method name="dragQuarterScreenDown(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="30"/>
+ <method name="dragQuarterScreenUp(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="15"/>
+ <method name="dragQuarterScreenUp(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="30"/>
+ <method name="dragViewBy(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="15"/>
+ <method name="dragViewBy(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="15"/>
+ <method name="dragViewTo(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="15"/>
+ <method name="dragViewTo(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="30"/>
+ <method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15"/>
+ <method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="15"/>
+ <method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;)V" since="3" deprecated="30"/>
+ <method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;I)V" since="3" deprecated="30"/>
+ <method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15"/>
+ <method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="15"/>
+ <method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="30"/>
+ <method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;I)V" since="3" deprecated="30"/>
+ <method name="dragViewToX(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="15"/>
+ <method name="dragViewToX(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="30"/>
+ <method name="dragViewToY(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="15"/>
+ <method name="dragViewToY(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="30"/>
+ <method name="longClickView(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15"/>
+ <method name="longClickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="30"/>
+ <method name="scrollToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="15"/>
+ <method name="scrollToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="30"/>
+ <method name="scrollToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="15"/>
+ <method name="scrollToTop(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="30"/>
+ <method name="tapView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="30"/>
+ <method name="touchAndCancelView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="30"/>
+ </class>
+ <class name="android/test/UiThreadTest" since="1" deprecated="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/annotation/Annotation"/>
</class>
- <class name="android/test/ViewAsserts" since="1" deprecated="24" removed="28">
- <extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="assertBaselineAligned(Landroid/view/View;Landroid/view/View;)V"/>
- <method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;)V"/>
- <method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;I)V"/>
- <method name="assertGroupContains(Landroid/view/ViewGroup;Landroid/view/View;)V"/>
- <method name="assertGroupIntegrity(Landroid/view/ViewGroup;)V"/>
- <method name="assertGroupNotContains(Landroid/view/ViewGroup;Landroid/view/View;)V"/>
- <method name="assertHasScreenCoordinates(Landroid/view/View;Landroid/view/View;II)V"/>
- <method name="assertHorizontalCenterAligned(Landroid/view/View;Landroid/view/View;)V"/>
- <method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;)V"/>
- <method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;I)V"/>
- <method name="assertOffScreenAbove(Landroid/view/View;Landroid/view/View;)V"/>
- <method name="assertOffScreenBelow(Landroid/view/View;Landroid/view/View;)V"/>
- <method name="assertOnScreen(Landroid/view/View;Landroid/view/View;)V"/>
- <method name="assertRightAligned(Landroid/view/View;Landroid/view/View;)V"/>
- <method name="assertRightAligned(Landroid/view/View;Landroid/view/View;I)V"/>
- <method name="assertTopAligned(Landroid/view/View;Landroid/view/View;)V"/>
- <method name="assertTopAligned(Landroid/view/View;Landroid/view/View;I)V"/>
- <method name="assertVerticalCenterAligned(Landroid/view/View;Landroid/view/View;)V"/>
- </class>
- <class name="android/test/mock/MockApplication" since="1" deprecated="24" removed="28">
+ <class name="android/test/ViewAsserts" since="1" deprecated="24">
+ <extends name="java/lang/Object"/>
+ <method name="assertBaselineAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="30"/>
+ <method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="30"/>
+ <method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="30"/>
+ <method name="assertGroupContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="30"/>
+ <method name="assertGroupIntegrity(Landroid/view/ViewGroup;)V" deprecated="30"/>
+ <method name="assertGroupNotContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="30"/>
+ <method name="assertHasScreenCoordinates(Landroid/view/View;Landroid/view/View;II)V" deprecated="30"/>
+ <method name="assertHorizontalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="30"/>
+ <method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="30"/>
+ <method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="30"/>
+ <method name="assertOffScreenAbove(Landroid/view/View;Landroid/view/View;)V" deprecated="30"/>
+ <method name="assertOffScreenBelow(Landroid/view/View;Landroid/view/View;)V" deprecated="30"/>
+ <method name="assertOnScreen(Landroid/view/View;Landroid/view/View;)V" deprecated="30"/>
+ <method name="assertRightAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="30"/>
+ <method name="assertRightAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="30"/>
+ <method name="assertTopAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="30"/>
+ <method name="assertTopAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="30"/>
+ <method name="assertVerticalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="30"/>
+ </class>
+ <class name="android/test/mock/MockAccountManager" since="30" deprecated="30">
+ <extends name="java/lang/Object"/>
+ <method name="newMockAccountManager(Landroid/content/Context;)Landroid/accounts/AccountManager;" deprecated="30"/>
+ </class>
+ <class name="android/test/mock/MockApplication" since="1" deprecated="24">
<extends name="android/app/Application"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
</class>
- <class name="android/test/mock/MockContentProvider" since="8" removed="28">
+ <class name="android/test/mock/MockContentProvider" since="8">
<extends name="android/content/ContentProvider"/>
<method name="&lt;init>()V"/>
<method name="&lt;init>(Landroid/content/Context;)V"/>
<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Landroid/content/pm/PathPermission;)V"/>
+ <method name="attachInfoForTesting(Landroid/content/ContentProvider;Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V" since="30" deprecated="30"/>
</class>
- <class name="android/test/mock/MockContentResolver" since="1" removed="28">
+ <class name="android/test/mock/MockContentResolver" since="1">
<extends name="android/content/ContentResolver"/>
<method name="&lt;init>()V"/>
<method name="&lt;init>(Landroid/content/Context;)V" since="18"/>
<method name="addProvider(Ljava/lang/String;Landroid/content/ContentProvider;)V"/>
</class>
- <class name="android/test/mock/MockContext" since="1" removed="28">
+ <class name="android/test/mock/MockContext" since="1">
<extends name="android/content/Context"/>
<method name="&lt;init>()V"/>
<method name="getPackageCodePath()Ljava/lang/String;"/>
<method name="getPackageResourcePath()Ljava/lang/String;"/>
</class>
- <class name="android/test/mock/MockCursor" since="8" deprecated="24" removed="28">
+ <class name="android/test/mock/MockCursor" since="8" deprecated="24">
<extends name="java/lang/Object"/>
<implements name="android/database/Cursor"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
<method name="abortUpdates()V" removed="11"/>
<method name="commitUpdates()Z" removed="11"/>
<method name="commitUpdates(Ljava/util/Map;)Z" removed="11"/>
@@ -44294,94 +47235,102 @@
<method name="updateString(ILjava/lang/String;)Z" removed="11"/>
<method name="updateToNull(I)Z" removed="11"/>
</class>
- <class name="android/test/mock/MockDialogInterface" since="1" deprecated="24" removed="28">
+ <class name="android/test/mock/MockDialogInterface" since="1" deprecated="24">
<extends name="java/lang/Object"/>
<implements name="android/content/DialogInterface"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
</class>
- <class name="android/test/mock/MockPackageManager" since="1" deprecated="24" removed="28">
+ <class name="android/test/mock/MockPackageManager" since="1" deprecated="24">
<extends name="android/content/pm/PackageManager"/>
- <method name="&lt;init>()V"/>
- <method name="getAllIntentFilters(Ljava/lang/String;)Ljava/util/List;" since="23"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="getAllIntentFilters(Ljava/lang/String;)Ljava/util/List;" since="23" deprecated="30"/>
<method name="getDefaultBrowserPackageName(I)Ljava/lang/String;" since="23" removed="24"/>
+ <method name="resolveServiceAsUser(Landroid/content/Intent;II)Landroid/content/pm/ResolveInfo;" since="30" deprecated="30"/>
<method name="setDefaultBrowserPackageName(Ljava/lang/String;I)Z" since="23" removed="24"/>
<method name="setPackageObbPath(Ljava/lang/String;Ljava/lang/String;)V" since="9" removed="10"/>
</class>
- <class name="android/test/mock/MockResources" since="1" deprecated="24" removed="28">
+ <class name="android/test/mock/MockResources" since="1" deprecated="24">
<extends name="android/content/res/Resources"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
</class>
- <class name="android/test/suitebuilder/TestMethod" since="1" deprecated="26" removed="28">
+ <class name="android/test/mock/MockService" since="30" deprecated="30">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="3"/>
- <method name="&lt;init>(Ljava/lang/reflect/Method;Ljava/lang/Class;)V"/>
- <method name="&lt;init>(Ljunit/framework/TestCase;)V" since="3"/>
- <method name="createTest()Ljunit/framework/TestCase;"/>
- <method name="getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;"/>
- <method name="getEnclosingClass()Ljava/lang/Class;"/>
- <method name="getEnclosingClassname()Ljava/lang/String;"/>
- <method name="getName()Ljava/lang/String;"/>
+ <method name="attachForTesting(Landroid/app/Service;Landroid/content/Context;Ljava/lang/String;Landroid/app/Application;)V" deprecated="30"/>
</class>
- <class name="android/test/suitebuilder/TestSuiteBuilder" since="1" deprecated="26" removed="28">
+ <class name="android/test/suitebuilder/TestMethod" since="1" deprecated="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Ljava/lang/Class;)V"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
- <method name="addRequirements(Ljava/util/List;)Landroid/test/suitebuilder/TestSuiteBuilder;"/>
- <method name="addRequirements([Lcom/android/internal/util/Predicate;)Landroid/test/suitebuilder/TestSuiteBuilder;"/>
- <method name="build()Ljunit/framework/TestSuite;"/>
- <method name="excludePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;"/>
- <method name="getSuiteName()Ljava/lang/String;"/>
- <method name="includeAllPackagesUnderHere()Landroid/test/suitebuilder/TestSuiteBuilder;"/>
- <method name="includePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;"/>
- <method name="named(Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;"/>
- </class>
- <class name="android/test/suitebuilder/TestSuiteBuilder$FailedToCreateTests" since="1" deprecated="26" removed="28">
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="3" deprecated="30"/>
+ <method name="&lt;init>(Ljava/lang/reflect/Method;Ljava/lang/Class;)V" deprecated="30"/>
+ <method name="&lt;init>(Ljunit/framework/TestCase;)V" since="3" deprecated="30"/>
+ <method name="createTest()Ljunit/framework/TestCase;" deprecated="30"/>
+ <method name="getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;" deprecated="30"/>
+ <method name="getEnclosingClass()Ljava/lang/Class;" deprecated="30"/>
+ <method name="getEnclosingClassname()Ljava/lang/String;" deprecated="30"/>
+ <method name="getName()Ljava/lang/String;" deprecated="30"/>
+ </class>
+ <class name="android/test/suitebuilder/TestSuiteBuilder" since="1" deprecated="26">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Ljava/lang/Class;)V" deprecated="30"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="30"/>
+ <method name="addRequirements(Ljava/util/List;)Landroid/test/suitebuilder/TestSuiteBuilder;" removed="28"/>
+ <method name="addRequirements([Lcom/android/internal/util/Predicate;)Landroid/test/suitebuilder/TestSuiteBuilder;" removed="28"/>
+ <method name="build()Ljunit/framework/TestSuite;" deprecated="30"/>
+ <method name="excludePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="30"/>
+ <method name="getSuiteName()Ljava/lang/String;" deprecated="30"/>
+ <method name="includeAllPackagesUnderHere()Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="30"/>
+ <method name="includePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="30"/>
+ <method name="named(Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="30"/>
+ </class>
+ <class name="android/test/suitebuilder/TestSuiteBuilder$FailedToCreateTests" since="1" deprecated="26">
<extends name="junit/framework/TestCase"/>
- <method name="&lt;init>(Ljava/lang/Exception;)V"/>
- <method name="testSuiteConstructionFailed()V"/>
+ <method name="&lt;init>(Ljava/lang/Exception;)V" deprecated="30"/>
+ <method name="testSuiteConstructionFailed()V" deprecated="30"/>
+ </class>
+ <class name="android/test/suitebuilder/UnitTestSuiteBuilder" since="30" deprecated="30">
+ <extends name="android/test/suitebuilder/TestSuiteBuilder"/>
+ <method name="&lt;init>(Ljava/lang/Class;)V" deprecated="30"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="30"/>
</class>
- <class name="android/test/suitebuilder/annotation/LargeTest" since="2" deprecated="24" removed="28">
+ <class name="android/test/suitebuilder/annotation/LargeTest" since="2" deprecated="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/annotation/Annotation"/>
</class>
- <class name="android/test/suitebuilder/annotation/MediumTest" since="2" deprecated="24" removed="28">
+ <class name="android/test/suitebuilder/annotation/MediumTest" since="2" deprecated="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/annotation/Annotation"/>
</class>
- <class name="android/test/suitebuilder/annotation/SmallTest" since="2" deprecated="24" removed="28">
+ <class name="android/test/suitebuilder/annotation/SmallTest" since="2" deprecated="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/annotation/Annotation"/>
</class>
- <class name="android/test/suitebuilder/annotation/Smoke" since="1" deprecated="24" removed="28">
+ <class name="android/test/suitebuilder/annotation/Smoke" since="1" deprecated="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/annotation/Annotation"/>
</class>
- <class name="android/test/suitebuilder/annotation/Suppress" since="1" deprecated="24" removed="28">
+ <class name="android/test/suitebuilder/annotation/Suppress" since="1" deprecated="24">
<extends name="java/lang/Object"/>
<implements name="java/lang/annotation/Annotation"/>
</class>
- <class name="android/text/AlteredCharSequence" since="1">
+ <class name="android/text/AlteredCharSequence" since="1" deprecated="30">
<extends name="java/lang/Object"/>
<implements name="android/text/GetChars"/>
<implements name="java/lang/CharSequence"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/CharSequence;[CII)V" since="29"/>
- <method name="make(Ljava/lang/CharSequence;[CII)Landroid/text/AlteredCharSequence;"/>
+ <method name="make(Ljava/lang/CharSequence;[CII)Landroid/text/AlteredCharSequence;" deprecated="30"/>
</class>
<class name="android/text/AndroidCharacter" since="1" deprecated="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="getDirectionalities([C[BI)V"/>
- <method name="getEastAsianWidth(C)I" since="8"/>
- <method name="getEastAsianWidths([CII[B)V" since="8"/>
- <method name="getMirror(C)C"/>
- <method name="mirror([CII)Z"/>
- <field name="EAST_ASIAN_WIDTH_AMBIGUOUS" since="8"/>
- <field name="EAST_ASIAN_WIDTH_FULL_WIDTH" since="8"/>
- <field name="EAST_ASIAN_WIDTH_HALF_WIDTH" since="8"/>
- <field name="EAST_ASIAN_WIDTH_NARROW" since="8"/>
- <field name="EAST_ASIAN_WIDTH_NEUTRAL" since="8"/>
- <field name="EAST_ASIAN_WIDTH_WIDE" since="8"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="getDirectionalities([C[BI)V" deprecated="29"/>
+ <method name="getEastAsianWidth(C)I" since="8" deprecated="29"/>
+ <method name="getEastAsianWidths([CII[B)V" since="8" deprecated="29"/>
+ <method name="getMirror(C)C" deprecated="29"/>
+ <method name="mirror([CII)Z" deprecated="29"/>
+ <field name="EAST_ASIAN_WIDTH_AMBIGUOUS" since="8" deprecated="29"/>
+ <field name="EAST_ASIAN_WIDTH_FULL_WIDTH" since="8" deprecated="29"/>
+ <field name="EAST_ASIAN_WIDTH_HALF_WIDTH" since="8" deprecated="29"/>
+ <field name="EAST_ASIAN_WIDTH_NARROW" since="8" deprecated="29"/>
+ <field name="EAST_ASIAN_WIDTH_NEUTRAL" since="8" deprecated="29"/>
+ <field name="EAST_ASIAN_WIDTH_WIDE" since="8" deprecated="29"/>
</class>
<class name="android/text/Annotation" since="1">
<extends name="java/lang/Object"/>
@@ -44393,15 +47342,11 @@
</class>
<class name="android/text/AutoText" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/res/Resources;)V" since="29"/>
<method name="get(Ljava/lang/CharSequence;IILandroid/view/View;)Ljava/lang/String;"/>
<method name="getSize(Landroid/view/View;)I" since="3"/>
</class>
<class name="android/text/BidiFormatter" since="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ZILandroid/text/TextDirectionHeuristic;)V" since="29"/>
<method name="getInstance()Landroid/text/BidiFormatter;"/>
<method name="getInstance(Ljava/util/Locale;)Landroid/text/BidiFormatter;"/>
<method name="getInstance(Z)Landroid/text/BidiFormatter;"/>
@@ -44446,10 +47391,10 @@
</class>
<class name="android/text/ClipboardManager" since="1" deprecated="11">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="getText()Ljava/lang/CharSequence;"/>
- <method name="hasText()Z"/>
- <method name="setText(Ljava/lang/CharSequence;)V"/>
+ <method name="&lt;init>()V" since="11" deprecated="29"/>
+ <method name="getText()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="hasText()Z" deprecated="29"/>
+ <method name="setText(Ljava/lang/CharSequence;)V" deprecated="29"/>
</class>
<class name="android/text/DynamicLayout" since="1">
<extends name="android/text/Layout"/>
@@ -44459,7 +47404,6 @@
</class>
<class name="android/text/DynamicLayout$Builder" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="build()Landroid/text/DynamicLayout;"/>
<method name="obtain(Ljava/lang/CharSequence;Landroid/text/TextPaint;I)Landroid/text/DynamicLayout$Builder;"/>
<method name="setAlignment(Landroid/text/Layout$Alignment;)Landroid/text/DynamicLayout$Builder;"/>
@@ -44506,7 +47450,6 @@
</class>
<class name="android/text/Html" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="escapeHtml(Ljava/lang/CharSequence;)Ljava/lang/String;" since="16"/>
<method name="fromHtml(Ljava/lang/String;)Landroid/text/Spanned;" deprecated="24"/>
<method name="fromHtml(Ljava/lang/String;I)Landroid/text/Spanned;" since="24"/>
@@ -44660,37 +47603,36 @@
<method name="valueOf(Ljava/lang/String;)Landroid/text/Layout$Alignment;"/>
<method name="values()[Landroid/text/Layout$Alignment;"/>
<field name="ALIGN_CENTER"/>
+ <field name="ALIGN_LEFT" since="28" removed="29"/>
<field name="ALIGN_NORMAL"/>
<field name="ALIGN_OPPOSITE"/>
+ <field name="ALIGN_RIGHT" since="28" removed="29"/>
</class>
<class name="android/text/Layout$Directions" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>([I)V" since="29"/>
</class>
- <class name="android/text/LoginFilter" since="1">
+ <class name="android/text/LoginFilter" since="1" deprecated="30">
<extends name="java/lang/Object"/>
<implements name="android/text/InputFilter"/>
- <method name="&lt;init>()V"/>
- <method name="isAllowed(C)Z"/>
- <method name="onInvalidCharacter(C)V"/>
- <method name="onStart()V"/>
- <method name="onStop()V"/>
+ <method name="isAllowed(C)Z" deprecated="30"/>
+ <method name="onInvalidCharacter(C)V" deprecated="30"/>
+ <method name="onStart()V" deprecated="30"/>
+ <method name="onStop()V" deprecated="30"/>
</class>
- <class name="android/text/LoginFilter$PasswordFilterGMail" since="1">
+ <class name="android/text/LoginFilter$PasswordFilterGMail" since="1" deprecated="30">
<extends name="android/text/LoginFilter"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Z)V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="&lt;init>(Z)V" deprecated="30"/>
</class>
- <class name="android/text/LoginFilter$UsernameFilterGMail" since="1">
+ <class name="android/text/LoginFilter$UsernameFilterGMail" since="1" deprecated="30">
<extends name="android/text/LoginFilter"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Z)V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="&lt;init>(Z)V" deprecated="30"/>
</class>
- <class name="android/text/LoginFilter$UsernameFilterGeneric" since="1">
+ <class name="android/text/LoginFilter$UsernameFilterGeneric" since="1" deprecated="30">
<extends name="android/text/LoginFilter"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Z)V"/>
+ <method name="&lt;init>()V" deprecated="30"/>
+ <method name="&lt;init>(Z)V" deprecated="30"/>
</class>
<class name="android/text/NoCopySpan" since="3">
<extends name="java/lang/Object"/>
@@ -44708,7 +47650,6 @@
<class name="android/text/PrecomputedText" since="28">
<extends name="java/lang/Object"/>
<implements name="android/text/Spannable"/>
- <method name="&lt;init>()V"/>
<method name="create(Ljava/lang/CharSequence;Landroid/text/PrecomputedText$Params;)Landroid/text/PrecomputedText;"/>
<method name="getBounds(IILandroid/graphics/Rect;)V"/>
<method name="getParagraphCount()I"/>
@@ -44719,8 +47660,6 @@
</class>
<class name="android/text/PrecomputedText$Params" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;II)V" since="29"/>
<method name="getBreakStrategy()I"/>
<method name="getHyphenationFrequency()I"/>
<method name="getTextDirection()Landroid/text/TextDirectionHeuristic;"/>
@@ -44728,6 +47667,7 @@
</class>
<class name="android/text/PrecomputedText$Params$Builder" since="28">
<extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/text/PrecomputedText$Params;)V" since="29"/>
<method name="&lt;init>(Landroid/text/TextPaint;)V"/>
<method name="build()Landroid/text/PrecomputedText$Params;"/>
<method name="setBreakStrategy(I)Landroid/text/PrecomputedText$Params$Builder;"/>
@@ -44736,7 +47676,6 @@
</class>
<class name="android/text/Selection" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="extendDown(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
<method name="extendLeft(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
<method name="extendRight(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
@@ -44779,8 +47718,7 @@
<method name="newSpannable(Ljava/lang/CharSequence;)Landroid/text/Spannable;"/>
</class>
<class name="android/text/SpannableString" since="1">
- <extends name="android/text/SpannableStringInternal" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
+ <extends name="java/lang/Object"/>
<implements name="android/text/GetChars"/>
<implements name="android/text/Spannable"/>
<implements name="java/lang/CharSequence"/>
@@ -44802,7 +47740,7 @@
<method name="append(Ljava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;"/>
<method name="append(Ljava/lang/CharSequence;Ljava/lang/Object;I)Landroid/text/SpannableStringBuilder;" since="21"/>
<method name="delete(II)Landroid/text/SpannableStringBuilder;"/>
- <method name="getTextRunCursor(IIIIILandroid/graphics/Paint;)I" since="11" deprecated="16"/>
+ <method name="getTextRunCursor(IIIIILandroid/graphics/Paint;)I" since="11" deprecated="15"/>
<method name="getTextWatcherDepth()I" since="23"/>
<method name="insert(ILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;"/>
<method name="insert(ILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;"/>
@@ -44810,18 +47748,6 @@
<method name="replace(IILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;"/>
<method name="valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;"/>
</class>
- <class name="android/text/SpannableStringInternal" since="1" removed="29">
- <extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="charAt(I)C"/>
- <method name="getChars(II[CI)V"/>
- <method name="getSpanEnd(Ljava/lang/Object;)I"/>
- <method name="getSpanFlags(Ljava/lang/Object;)I"/>
- <method name="getSpanStart(Ljava/lang/Object;)I"/>
- <method name="getSpans(IILjava/lang/Class;)[Ljava/lang/Object;"/>
- <method name="length()I"/>
- <method name="nextSpanTransition(IILjava/lang/Class;)I"/>
- </class>
<class name="android/text/Spanned" since="1">
<extends name="java/lang/Object"/>
<implements name="java/lang/CharSequence"/>
@@ -44848,8 +47774,7 @@
<field name="SPAN_USER_SHIFT"/>
</class>
<class name="android/text/SpannedString" since="1">
- <extends name="android/text/SpannableStringInternal" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
+ <extends name="java/lang/Object"/>
<implements name="android/text/GetChars"/>
<implements name="android/text/Spanned"/>
<implements name="java/lang/CharSequence"/>
@@ -44864,7 +47789,6 @@
</class>
<class name="android/text/StaticLayout$Builder" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="build()Landroid/text/StaticLayout;"/>
<method name="obtain(Ljava/lang/CharSequence;IILandroid/text/TextPaint;I)Landroid/text/StaticLayout$Builder;"/>
<method name="setAlignment(Landroid/text/Layout$Alignment;)Landroid/text/StaticLayout$Builder;"/>
@@ -44907,10 +47831,11 @@
<field name="density" since="5"/>
<field name="drawableState"/>
<field name="linkColor"/>
+ <field name="underlineColor" since="29"/>
+ <field name="underlineThickness" since="29"/>
</class>
<class name="android/text/TextUtils" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="commaEllipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLjava/lang/String;Ljava/lang/String;)Ljava/lang/CharSequence;" deprecated="26"/>
<method name="concat([Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
<method name="copySpansFrom(Landroid/text/Spanned;IILjava/lang/Class;Landroid/text/Spannable;I)V"/>
@@ -44943,6 +47868,7 @@
<method name="lastIndexOf(Ljava/lang/CharSequence;CI)I"/>
<method name="lastIndexOf(Ljava/lang/CharSequence;CII)I"/>
<method name="listEllipsize(Landroid/content/Context;Ljava/util/List;Ljava/lang/String;Landroid/text/TextPaint;FI)Ljava/lang/CharSequence;" since="26"/>
+ <method name="makeSafeForPresentation(Ljava/lang/String;IFI)Ljava/lang/CharSequence;" since="29"/>
<method name="regionMatches(Ljava/lang/CharSequence;ILjava/lang/CharSequence;II)Z"/>
<method name="replace(Ljava/lang/CharSequence;[Ljava/lang/String;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
<method name="split(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;"/>
@@ -44954,6 +47880,9 @@
<field name="CAP_MODE_SENTENCES" since="3"/>
<field name="CAP_MODE_WORDS" since="3"/>
<field name="CHAR_SEQUENCE_CREATOR"/>
+ <field name="SAFE_STRING_FLAG_FIRST_LINE" since="29"/>
+ <field name="SAFE_STRING_FLAG_SINGLE_LINE" since="29"/>
+ <field name="SAFE_STRING_FLAG_TRIM" since="29"/>
</class>
<class name="android/text/TextUtils$EllipsizeCallback" since="1">
<extends name="java/lang/Object"/>
@@ -44976,6 +47905,7 @@
<method name="valueOf(Ljava/lang/String;)Landroid/text/TextUtils$TruncateAt;"/>
<method name="values()[Landroid/text/TextUtils$TruncateAt;"/>
<field name="END"/>
+ <field name="END_SMALL" since="28" removed="29"/>
<field name="MARQUEE" since="2"/>
<field name="MIDDLE"/>
<field name="START"/>
@@ -45058,7 +47988,7 @@
<field name="FORMAT_SHOW_TIME"/>
<field name="FORMAT_SHOW_WEEKDAY"/>
<field name="FORMAT_SHOW_YEAR"/>
- <field name="FORMAT_UTC" deprecated="16"/>
+ <field name="FORMAT_UTC" deprecated="15"/>
<field name="HOUR_IN_MILLIS"/>
<field name="HOUR_MINUTE_24" deprecated="17"/>
<field name="LENGTH_LONG" deprecated="17"/>
@@ -45075,7 +48005,7 @@
<field name="WEEK_IN_MILLIS"/>
<field name="YEAR_FORMAT"/>
<field name="YEAR_FORMAT_TWO_DIGITS"/>
- <field name="YEAR_IN_MILLIS"/>
+ <field name="YEAR_IN_MILLIS" deprecated="30"/>
<field name="sameMonthTable" deprecated="17"/>
<field name="sameYearTable" deprecated="17"/>
</class>
@@ -45083,70 +48013,70 @@
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
<method name="formatFileSize(Landroid/content/Context;J)Ljava/lang/String;"/>
- <method name="formatIpAddress(I)Ljava/lang/String;" deprecated="16"/>
+ <method name="formatIpAddress(I)Ljava/lang/String;" deprecated="15"/>
<method name="formatShortFileSize(Landroid/content/Context;J)Ljava/lang/String;" since="5"/>
</class>
<class name="android/text/format/Time" since="3" deprecated="22">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Landroid/text/format/Time;)V"/>
- <method name="&lt;init>(Ljava/lang/String;)V"/>
- <method name="after(Landroid/text/format/Time;)Z"/>
- <method name="before(Landroid/text/format/Time;)Z"/>
- <method name="clear(Ljava/lang/String;)V"/>
- <method name="compare(Landroid/text/format/Time;Landroid/text/format/Time;)I"/>
- <method name="format(Ljava/lang/String;)Ljava/lang/String;"/>
- <method name="format2445()Ljava/lang/String;"/>
- <method name="format3339(Z)Ljava/lang/String;"/>
- <method name="getActualMaximum(I)I"/>
- <method name="getCurrentTimezone()Ljava/lang/String;"/>
- <method name="getJulianDay(JJ)I"/>
- <method name="getJulianMondayFromWeeksSinceEpoch(I)I" since="11"/>
- <method name="getWeekNumber()I"/>
- <method name="getWeeksSinceEpochFromJulianDay(II)I" since="11"/>
- <method name="isEpoch(Landroid/text/format/Time;)Z"/>
- <method name="normalize(Z)J"/>
- <method name="parse(Ljava/lang/String;)Z"/>
- <method name="parse3339(Ljava/lang/String;)Z"/>
- <method name="set(III)V"/>
- <method name="set(IIIIII)V"/>
- <method name="set(J)V"/>
- <method name="set(Landroid/text/format/Time;)V"/>
- <method name="setJulianDay(I)J"/>
- <method name="setToNow()V"/>
- <method name="switchTimezone(Ljava/lang/String;)V"/>
- <method name="toMillis(Z)J"/>
- <field name="EPOCH_JULIAN_DAY"/>
- <field name="FRIDAY"/>
- <field name="HOUR"/>
- <field name="MINUTE"/>
- <field name="MONDAY"/>
- <field name="MONDAY_BEFORE_JULIAN_EPOCH" since="11"/>
- <field name="MONTH"/>
- <field name="MONTH_DAY"/>
- <field name="SATURDAY"/>
- <field name="SECOND"/>
- <field name="SUNDAY"/>
- <field name="THURSDAY"/>
- <field name="TIMEZONE_UTC"/>
- <field name="TUESDAY"/>
- <field name="WEDNESDAY"/>
- <field name="WEEK_DAY"/>
- <field name="WEEK_NUM"/>
- <field name="YEAR"/>
- <field name="YEAR_DAY"/>
- <field name="allDay"/>
- <field name="gmtoff"/>
- <field name="hour"/>
- <field name="isDst"/>
- <field name="minute"/>
- <field name="month"/>
- <field name="monthDay"/>
- <field name="second"/>
- <field name="timezone"/>
- <field name="weekDay"/>
- <field name="year"/>
- <field name="yearDay"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/text/format/Time;)V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="after(Landroid/text/format/Time;)Z" deprecated="29"/>
+ <method name="before(Landroid/text/format/Time;)Z" deprecated="29"/>
+ <method name="clear(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="compare(Landroid/text/format/Time;Landroid/text/format/Time;)I" deprecated="29"/>
+ <method name="format(Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+ <method name="format2445()Ljava/lang/String;" deprecated="29"/>
+ <method name="format3339(Z)Ljava/lang/String;" deprecated="29"/>
+ <method name="getActualMaximum(I)I" deprecated="29"/>
+ <method name="getCurrentTimezone()Ljava/lang/String;" deprecated="29"/>
+ <method name="getJulianDay(JJ)I" deprecated="29"/>
+ <method name="getJulianMondayFromWeeksSinceEpoch(I)I" since="11" deprecated="29"/>
+ <method name="getWeekNumber()I" deprecated="29"/>
+ <method name="getWeeksSinceEpochFromJulianDay(II)I" since="11" deprecated="29"/>
+ <method name="isEpoch(Landroid/text/format/Time;)Z" deprecated="29"/>
+ <method name="normalize(Z)J" deprecated="29"/>
+ <method name="parse(Ljava/lang/String;)Z" deprecated="29"/>
+ <method name="parse3339(Ljava/lang/String;)Z" deprecated="29"/>
+ <method name="set(III)V" deprecated="29"/>
+ <method name="set(IIIIII)V" deprecated="29"/>
+ <method name="set(J)V" deprecated="29"/>
+ <method name="set(Landroid/text/format/Time;)V" deprecated="29"/>
+ <method name="setJulianDay(I)J" deprecated="29"/>
+ <method name="setToNow()V" deprecated="29"/>
+ <method name="switchTimezone(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="toMillis(Z)J" deprecated="29"/>
+ <field name="EPOCH_JULIAN_DAY" deprecated="29"/>
+ <field name="FRIDAY" deprecated="29"/>
+ <field name="HOUR" deprecated="29"/>
+ <field name="MINUTE" deprecated="29"/>
+ <field name="MONDAY" deprecated="29"/>
+ <field name="MONDAY_BEFORE_JULIAN_EPOCH" since="11" deprecated="29"/>
+ <field name="MONTH" deprecated="29"/>
+ <field name="MONTH_DAY" deprecated="29"/>
+ <field name="SATURDAY" deprecated="29"/>
+ <field name="SECOND" deprecated="29"/>
+ <field name="SUNDAY" deprecated="29"/>
+ <field name="THURSDAY" deprecated="29"/>
+ <field name="TIMEZONE_UTC" deprecated="29"/>
+ <field name="TUESDAY" deprecated="29"/>
+ <field name="WEDNESDAY" deprecated="29"/>
+ <field name="WEEK_DAY" deprecated="29"/>
+ <field name="WEEK_NUM" deprecated="29"/>
+ <field name="YEAR" deprecated="29"/>
+ <field name="YEAR_DAY" deprecated="29"/>
+ <field name="allDay" deprecated="29"/>
+ <field name="gmtoff" deprecated="29"/>
+ <field name="hour" deprecated="29"/>
+ <field name="isDst" deprecated="29"/>
+ <field name="minute" deprecated="29"/>
+ <field name="month" deprecated="29"/>
+ <field name="monthDay" deprecated="29"/>
+ <field name="second" deprecated="29"/>
+ <field name="timezone" deprecated="29"/>
+ <field name="weekDay" deprecated="29"/>
+ <field name="year" deprecated="29"/>
+ <field name="yearDay" deprecated="29"/>
</class>
<class name="android/text/method/ArrowKeyMovementMethod" since="1">
<extends name="android/text/method/BaseMovementMethod" since="11"/>
@@ -45360,7 +48290,6 @@
</class>
<class name="android/text/method/Touch" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getInitialScrollX(Landroid/widget/TextView;Landroid/text/Spannable;)I" since="3"/>
<method name="getInitialScrollY(Landroid/widget/TextView;Landroid/text/Spannable;)I" since="3"/>
<method name="onTouchEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z"/>
@@ -45442,6 +48371,7 @@
<method name="getVerticalAlignment()I" since="3"/>
<field name="ALIGN_BASELINE" since="3"/>
<field name="ALIGN_BOTTOM" since="3"/>
+ <field name="ALIGN_CENTER" since="29"/>
<field name="mVerticalAlignment" since="3"/>
</class>
<class name="android/text/style/EasyEditSpan" since="14">
@@ -45477,8 +48407,8 @@
<method name="&lt;init>(Landroid/content/Context;Landroid/graphics/Bitmap;I)V" since="4"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/net/Uri;)V"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/net/Uri;I)V" since="3"/>
- <method name="&lt;init>(Landroid/graphics/Bitmap;)V" deprecated="16"/>
- <method name="&lt;init>(Landroid/graphics/Bitmap;I)V" since="3" deprecated="16"/>
+ <method name="&lt;init>(Landroid/graphics/Bitmap;)V" deprecated="15"/>
+ <method name="&lt;init>(Landroid/graphics/Bitmap;I)V" since="3" deprecated="15"/>
<method name="&lt;init>(Landroid/graphics/drawable/Drawable;)V"/>
<method name="&lt;init>(Landroid/graphics/drawable/Drawable;I)V" since="3"/>
<method name="&lt;init>(Landroid/graphics/drawable/Drawable;Ljava/lang/String;)V"/>
@@ -45510,12 +48440,28 @@
<implements name="android/text/style/ParagraphStyle"/>
<method name="drawBackground(Landroid/graphics/Canvas;Landroid/graphics/Paint;IIIIILjava/lang/CharSequence;III)V"/>
</class>
+ <class name="android/text/style/LineBackgroundSpan$Standard" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/text/ParcelableSpan"/>
+ <implements name="android/text/style/LineBackgroundSpan"/>
+ <method name="&lt;init>(I)V"/>
+ <method name="&lt;init>(Landroid/os/Parcel;)V"/>
+ <method name="getColor()I"/>
+ </class>
<class name="android/text/style/LineHeightSpan" since="1">
<extends name="java/lang/Object"/>
<implements name="android/text/style/ParagraphStyle"/>
<implements name="android/text/style/WrapTogetherSpan"/>
<method name="chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V"/>
</class>
+ <class name="android/text/style/LineHeightSpan$Standard" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/text/ParcelableSpan"/>
+ <implements name="android/text/style/LineHeightSpan"/>
+ <method name="&lt;init>(I)V"/>
+ <method name="&lt;init>(Landroid/os/Parcel;)V"/>
+ <method name="getHeight()I"/>
+ </class>
<class name="android/text/style/LineHeightSpan$WithDensity" since="5">
<extends name="java/lang/Object"/>
<implements name="android/text/style/LineHeightSpan"/>
@@ -45618,16 +48564,17 @@
<method name="getLocale()Ljava/lang/String;" deprecated="24"/>
<method name="getLocaleObject()Ljava/util/Locale;" since="24"/>
<method name="getSuggestions()[Ljava/lang/String;"/>
+ <method name="getUnderlineColor()I" since="29"/>
<method name="setFlags(I)V"/>
- <field name="ACTION_SUGGESTION_PICKED"/>
+ <field name="ACTION_SUGGESTION_PICKED" deprecated="29"/>
<field name="CREATOR"/>
<field name="FLAG_AUTO_CORRECTION" since="15"/>
<field name="FLAG_EASY_CORRECT"/>
<field name="FLAG_MISSPELLED"/>
<field name="SUGGESTIONS_MAX_SIZE"/>
- <field name="SUGGESTION_SPAN_PICKED_AFTER"/>
- <field name="SUGGESTION_SPAN_PICKED_BEFORE"/>
- <field name="SUGGESTION_SPAN_PICKED_HASHCODE"/>
+ <field name="SUGGESTION_SPAN_PICKED_AFTER" deprecated="29"/>
+ <field name="SUGGESTION_SPAN_PICKED_BEFORE" deprecated="29"/>
+ <field name="SUGGESTION_SPAN_PICKED_HASHCODE" deprecated="29"/>
</class>
<class name="android/text/style/SuperscriptSpan" since="1">
<extends name="android/text/style/MetricAffectingSpan"/>
@@ -45653,10 +48600,20 @@
<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
<method name="&lt;init>(Ljava/lang/String;IILandroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;)V"/>
<method name="getFamily()Ljava/lang/String;"/>
+ <method name="getFontFeatureSettings()Ljava/lang/String;" since="29"/>
+ <method name="getFontVariationSettings()Ljava/lang/String;" since="29"/>
<method name="getLinkTextColor()Landroid/content/res/ColorStateList;"/>
+ <method name="getShadowColor()I" since="29"/>
+ <method name="getShadowDx()F" since="29"/>
+ <method name="getShadowDy()F" since="29"/>
+ <method name="getShadowRadius()F" since="29"/>
<method name="getTextColor()Landroid/content/res/ColorStateList;"/>
+ <method name="getTextFontWeight()I" since="29"/>
+ <method name="getTextLocales()Landroid/os/LocaleList;" since="29"/>
<method name="getTextSize()I"/>
<method name="getTextStyle()I"/>
+ <method name="getTypeface()Landroid/graphics/Typeface;" since="29"/>
+ <method name="isElegantTextHeight()Z" since="29"/>
</class>
<class name="android/text/style/TtsSpan" since="21">
<extends name="java/lang/Object"/>
@@ -45915,9 +48872,11 @@
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
<method name="addLinks(Landroid/text/Spannable;I)Z"/>
+ <method name="addLinks(Landroid/text/Spannable;ILjava/util/function/Function;)Z" since="29"/>
<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;)Z"/>
<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)Z"/>
<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)Z" since="24"/>
+ <method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;Ljava/util/function/Function;)Z" since="29"/>
<method name="addLinks(Landroid/widget/TextView;I)Z"/>
<method name="addLinks(Landroid/widget/TextView;Ljava/util/regex/Pattern;Ljava/lang/String;)V"/>
<method name="addLinks(Landroid/widget/TextView;Ljava/util/regex/Pattern;Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)V"/>
@@ -46046,6 +49005,7 @@
<method name="&lt;init>(Landroid/view/ViewGroup;Landroid/view/ViewGroup;)V" deprecated="21"/>
<method name="enter()V"/>
<method name="exit()V"/>
+ <method name="getCurrentScene(Landroid/view/ViewGroup;)Landroid/transition/Scene;" since="29"/>
<method name="getSceneForLayout(Landroid/view/ViewGroup;ILandroid/content/Context;)Landroid/transition/Scene;"/>
<method name="getSceneRoot()Landroid/view/ViewGroup;"/>
<method name="setEnterAction(Ljava/lang/Runnable;)V"/>
@@ -46134,8 +49094,6 @@
</class>
<class name="android/transition/TransitionInflater" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="from(Landroid/content/Context;)Landroid/transition/TransitionInflater;"/>
<method name="inflateTransition(I)Landroid/transition/Transition;"/>
<method name="inflateTransitionManager(ILandroid/view/ViewGroup;)Landroid/transition/TransitionManager;"/>
@@ -46193,7 +49151,8 @@
</class>
<class name="android/transition/TransitionValues" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/view/View;)V" since="29"/>
<field name="values"/>
<field name="view"/>
</class>
@@ -46241,6 +49200,7 @@
<method name="containsAll(Ljava/util/Collection;)Z"/>
<method name="ensureCapacity(I)V"/>
<method name="indexOfKey(Ljava/lang/Object;)I" since="21"/>
+ <method name="indexOfValue(Ljava/lang/Object;)I" since="29"/>
<method name="keyAt(I)Ljava/lang/Object;"/>
<method name="putAll(Landroid/util/ArrayMap;)V"/>
<method name="removeAll(Ljava/util/Collection;)Z"/>
@@ -46256,6 +49216,8 @@
<method name="&lt;init>()V"/>
<method name="&lt;init>(I)V"/>
<method name="&lt;init>(Landroid/util/ArraySet;)V"/>
+ <method name="&lt;init>(Ljava/util/Collection;)V" since="29"/>
+ <method name="&lt;init>([Ljava/lang/Object;)V" since="30"/>
<method name="addAll(Landroid/util/ArraySet;)V"/>
<method name="ensureCapacity(I)V"/>
<method name="indexOf(Ljava/lang/Object;)I"/>
@@ -46302,7 +49264,6 @@
</class>
<class name="android/util/Base64" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="decode(Ljava/lang/String;I)[B"/>
<method name="decode([BI)[B"/>
<method name="decode([BIII)[B"/>
@@ -46329,18 +49290,25 @@
<extends name="java/io/FilterOutputStream"/>
<method name="&lt;init>(Ljava/io/OutputStream;I)V"/>
</class>
- <class name="android/util/Config" since="1" deprecated="14">
+ <class name="android/util/CloseGuard" since="30">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
- <field name="DEBUG" deprecated="16"/>
- <field name="LOGD" deprecated="16"/>
- <field name="LOGV" deprecated="16"/>
- <field name="PROFILE" deprecated="16"/>
- <field name="RELEASE" deprecated="16"/>
+ <method name="close()V"/>
+ <method name="open(Ljava/lang/String;)V"/>
+ <method name="warnIfOpen()V"/>
+ </class>
+ <class name="android/util/Config" since="1" deprecated="14">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V" removed="12"/>
+ <field name="DEBUG" deprecated="15"/>
+ <field name="LOGD" deprecated="15"/>
+ <field name="LOGV" deprecated="15"/>
+ <field name="PROFILE" deprecated="15"/>
+ <field name="RELEASE" deprecated="15"/>
</class>
<class name="android/util/DebugUtils" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" removed="12"/>
<method name="isObjectSelected(Ljava/lang/Object;)Z"/>
</class>
<class name="android/util/DisplayMetrics" since="1">
@@ -46349,6 +49317,10 @@
<method name="equals(Landroid/util/DisplayMetrics;)Z" since="17"/>
<method name="setTo(Landroid/util/DisplayMetrics;)V"/>
<method name="setToDefaults()V"/>
+ <field name="DENSITY_140" since="29"/>
+ <field name="DENSITY_180" since="29"/>
+ <field name="DENSITY_200" since="29"/>
+ <field name="DENSITY_220" since="29"/>
<field name="DENSITY_260" since="25"/>
<field name="DENSITY_280" since="22"/>
<field name="DENSITY_300" since="25"/>
@@ -46357,7 +49329,9 @@
<field name="DENSITY_400" since="19"/>
<field name="DENSITY_420" since="23"/>
<field name="DENSITY_440" since="28"/>
+ <field name="DENSITY_450" since="29"/>
<field name="DENSITY_560" since="21"/>
+ <field name="DENSITY_600" since="29"/>
<field name="DENSITY_DEFAULT" since="4"/>
<field name="DENSITY_DEVICE_STABLE" since="24"/>
<field name="DENSITY_HIGH" since="4"/>
@@ -46377,7 +49351,7 @@
</class>
<class name="android/util/EventLog" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" removed="12"/>
<method name="getTagCode(Ljava/lang/String;)I"/>
<method name="getTagName(I)Ljava/lang/String;"/>
<method name="readEvents([ILjava/util/Collection;)V"/>
@@ -46389,8 +49363,6 @@
</class>
<class name="android/util/EventLog$Event" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>([B)V" since="29"/>
<method name="getData()Ljava/lang/Object;"/>
<method name="getProcessId()I"/>
<method name="getTag()I"/>
@@ -46399,21 +49371,18 @@
</class>
<class name="android/util/EventLogTags" since="1" deprecated="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Ljava/io/BufferedReader;)V"/>
- <method name="get(I)Landroid/util/EventLogTags$Description;"/>
- <method name="get(Ljava/lang/String;)Landroid/util/EventLogTags$Description;"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/io/BufferedReader;)V" deprecated="29"/>
+ <method name="get(I)Landroid/util/EventLogTags$Description;" deprecated="29"/>
+ <method name="get(Ljava/lang/String;)Landroid/util/EventLogTags$Description;" deprecated="29"/>
</class>
- <class name="android/util/EventLogTags$Description" since="1">
+ <class name="android/util/EventLogTags$Description" since="1" deprecated="29">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILjava/lang/String;)V" since="29"/>
- <field name="mName"/>
- <field name="mTag"/>
+ <field name="mName" deprecated="29"/>
+ <field name="mTag" deprecated="29"/>
</class>
<class name="android/util/FloatMath" since="1" deprecated="22">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="ceil(F)F" removed="23"/>
<method name="cos(F)F" removed="23"/>
<method name="exp(F)F" since="17" removed="23"/>
@@ -46550,7 +49519,6 @@
</class>
<class name="android/util/LayoutDirection" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="INHERIT"/>
<field name="LOCALE"/>
<field name="LTR"/>
@@ -46558,7 +49526,6 @@
</class>
<class name="android/util/Log" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="d(Ljava/lang/String;Ljava/lang/String;)I"/>
<method name="d(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I"/>
<method name="e(Ljava/lang/String;Ljava/lang/String;)I"/>
@@ -46654,43 +49621,43 @@
</class>
<class name="android/util/MutableBoolean" since="21" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Z)V"/>
- <field name="value"/>
+ <method name="&lt;init>(Z)V" deprecated="29"/>
+ <field name="value" deprecated="29"/>
</class>
<class name="android/util/MutableByte" since="21" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(B)V"/>
- <field name="value"/>
+ <method name="&lt;init>(B)V" deprecated="29"/>
+ <field name="value" deprecated="29"/>
</class>
<class name="android/util/MutableChar" since="21" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(C)V"/>
- <field name="value"/>
+ <method name="&lt;init>(C)V" deprecated="29"/>
+ <field name="value" deprecated="29"/>
</class>
<class name="android/util/MutableDouble" since="21" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(D)V"/>
- <field name="value"/>
+ <method name="&lt;init>(D)V" deprecated="29"/>
+ <field name="value" deprecated="29"/>
</class>
<class name="android/util/MutableFloat" since="21" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(F)V"/>
- <field name="value"/>
+ <method name="&lt;init>(F)V" deprecated="29"/>
+ <field name="value" deprecated="29"/>
</class>
<class name="android/util/MutableInt" since="21" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(I)V"/>
- <field name="value"/>
+ <method name="&lt;init>(I)V" deprecated="29"/>
+ <field name="value" deprecated="29"/>
</class>
<class name="android/util/MutableLong" since="21" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(J)V"/>
- <field name="value"/>
+ <method name="&lt;init>(J)V" deprecated="29"/>
+ <field name="value" deprecated="29"/>
</class>
<class name="android/util/MutableShort" since="21" deprecated="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(S)V"/>
- <field name="value"/>
+ <method name="&lt;init>(S)V" deprecated="29"/>
+ <field name="value" deprecated="29"/>
</class>
<class name="android/util/NoSuchPropertyException" since="14">
<extends name="java/lang/RuntimeException"/>
@@ -46705,7 +49672,6 @@
</class>
<class name="android/util/Patterns" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="concatGroups(Ljava/util/regex/Matcher;)Ljava/lang/String;"/>
<method name="digitsAndPlusOnly(Ljava/util/regex/Matcher;)Ljava/lang/String;"/>
<field name="DOMAIN_NAME"/>
@@ -46826,6 +49792,7 @@
<method name="keyAt(I)I"/>
<method name="put(IZ)V"/>
<method name="removeAt(I)V" since="28"/>
+ <method name="setValueAt(IZ)V" since="29"/>
<method name="size()I"/>
<method name="valueAt(I)Z"/>
</class>
@@ -46845,6 +49812,7 @@
<method name="keyAt(I)I"/>
<method name="put(II)V"/>
<method name="removeAt(I)V" since="3"/>
+ <method name="setValueAt(II)V" since="29"/>
<method name="size()I"/>
<method name="valueAt(I)I"/>
</class>
@@ -46869,7 +49837,7 @@
</class>
<class name="android/util/StateSet" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" removed="12"/>
<method name="dump([I)Ljava/lang/String;"/>
<method name="isWildCard([I)Z"/>
<method name="stateSetMatches([II)Z"/>
@@ -46880,7 +49848,7 @@
</class>
<class name="android/util/StatsLog" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="logBinaryPushStateChanged(Ljava/lang/String;JII[J)Z" since="29"/>
<method name="logEvent(I)Z"/>
<method name="logStart(I)Z"/>
<method name="logStop(I)Z"/>
@@ -46892,22 +49860,21 @@
</class>
<class name="android/util/TimeFormatException" since="1">
<extends name="java/lang/RuntimeException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
</class>
<class name="android/util/TimeUtils" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" removed="12"/>
<method name="getTimeZone(IZJLjava/lang/String;)Ljava/util/TimeZone;"/>
<method name="getTimeZoneDatabaseVersion()Ljava/lang/String;" since="3"/>
+ <method name="getTimeZoneIdsForCountryCode(Ljava/lang/String;)Ljava/util/List;" since="29"/>
</class>
- <class name="android/util/TimingLogger" since="1">
+ <class name="android/util/TimingLogger" since="1" deprecated="30">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
- <method name="addSplit(Ljava/lang/String;)V"/>
- <method name="dumpToLog()V"/>
- <method name="reset()V"/>
- <method name="reset(Ljava/lang/String;Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
+ <method name="addSplit(Ljava/lang/String;)V" deprecated="30"/>
+ <method name="dumpToLog()V" deprecated="30"/>
+ <method name="reset()V" deprecated="30"/>
+ <method name="reset(Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
</class>
<class name="android/util/TypedValue" since="1">
<extends name="java/lang/Object"/>
@@ -46925,6 +49892,7 @@
<method name="getDimension(Landroid/util/DisplayMetrics;)F"/>
<method name="getFloat()F"/>
<method name="getFraction(FF)F"/>
+ <method name="isColorType()Z" since="29"/>
<method name="setTo(Landroid/util/TypedValue;)V"/>
<field name="COMPLEX_MANTISSA_MASK"/>
<field name="COMPLEX_MANTISSA_SHIFT"/>
@@ -46971,12 +49939,13 @@
<field name="data"/>
<field name="density" since="4"/>
<field name="resourceId"/>
+ <field name="sourceResourceId" since="29"/>
<field name="string"/>
<field name="type"/>
</class>
<class name="android/util/Xml" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" removed="12"/>
<method name="asAttributeSet(Lorg/xmlpull/v1/XmlPullParser;)Landroid/util/AttributeSet;"/>
<method name="findEncodingByName(Ljava/lang/String;)Landroid/util/Xml$Encoding;"/>
<method name="newPullParser()Lorg/xmlpull/v1/XmlPullParser;"/>
@@ -46995,6 +49964,67 @@
<field name="UTF_16"/>
<field name="UTF_8"/>
</class>
+ <class name="android/util/proto/ProtoOutputStream" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="&lt;init>(I)V"/>
+ <method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+ <method name="checkFieldId(JJ)I"/>
+ <method name="dump(Ljava/lang/String;)V"/>
+ <method name="end(J)V"/>
+ <method name="flush()V"/>
+ <method name="getBytes()[B"/>
+ <method name="getFieldCountString(J)Ljava/lang/String;"/>
+ <method name="getFieldIdString(J)Ljava/lang/String;"/>
+ <method name="getFieldTypeString(J)Ljava/lang/String;"/>
+ <method name="getRawSize()I"/>
+ <method name="getWireTypeString(I)Ljava/lang/String;"/>
+ <method name="makeFieldId(IJ)J"/>
+ <method name="makeToken(IZIII)J"/>
+ <method name="start(J)J"/>
+ <method name="token2String(J)Ljava/lang/String;"/>
+ <method name="write(JD)V"/>
+ <method name="write(JF)V"/>
+ <method name="write(JI)V"/>
+ <method name="write(JJ)V"/>
+ <method name="write(JLjava/lang/String;)V"/>
+ <method name="write(JZ)V"/>
+ <method name="write(J[B)V"/>
+ <method name="writeTag(II)V"/>
+ <field name="FIELD_COUNT_MASK"/>
+ <field name="FIELD_COUNT_PACKED"/>
+ <field name="FIELD_COUNT_REPEATED"/>
+ <field name="FIELD_COUNT_SHIFT"/>
+ <field name="FIELD_COUNT_SINGLE"/>
+ <field name="FIELD_COUNT_UNKNOWN"/>
+ <field name="FIELD_ID_SHIFT"/>
+ <field name="FIELD_TYPE_BOOL"/>
+ <field name="FIELD_TYPE_BYTES"/>
+ <field name="FIELD_TYPE_DOUBLE"/>
+ <field name="FIELD_TYPE_ENUM"/>
+ <field name="FIELD_TYPE_FIXED32"/>
+ <field name="FIELD_TYPE_FIXED64"/>
+ <field name="FIELD_TYPE_FLOAT"/>
+ <field name="FIELD_TYPE_INT32"/>
+ <field name="FIELD_TYPE_INT64"/>
+ <field name="FIELD_TYPE_MASK"/>
+ <field name="FIELD_TYPE_MESSAGE"/>
+ <field name="FIELD_TYPE_SFIXED32"/>
+ <field name="FIELD_TYPE_SFIXED64"/>
+ <field name="FIELD_TYPE_SHIFT"/>
+ <field name="FIELD_TYPE_SINT32"/>
+ <field name="FIELD_TYPE_SINT64"/>
+ <field name="FIELD_TYPE_STRING"/>
+ <field name="FIELD_TYPE_UINT32"/>
+ <field name="FIELD_TYPE_UINT64"/>
+ <field name="WIRE_TYPE_END_GROUP"/>
+ <field name="WIRE_TYPE_FIXED32"/>
+ <field name="WIRE_TYPE_FIXED64"/>
+ <field name="WIRE_TYPE_LENGTH_DELIMITED"/>
+ <field name="WIRE_TYPE_MASK"/>
+ <field name="WIRE_TYPE_START_GROUP"/>
+ <field name="WIRE_TYPE_VARINT"/>
+ </class>
<class name="android/view/AbsSavedState" since="1">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
@@ -47066,8 +50096,6 @@
</class>
<class name="android/view/Choreographer" since="16">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Looper;I)V" since="29"/>
<method name="getInstance()Landroid/view/Choreographer;"/>
<method name="postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V"/>
<method name="postFrameCallbackDelayed(Landroid/view/Choreographer$FrameCallback;J)V"/>
@@ -47102,21 +50130,23 @@
<method name="&lt;init>(Landroid/content/Context;Landroid/content/res/Resources$Theme;)V" since="23"/>
<method name="applyOverrideConfiguration(Landroid/content/res/Configuration;)V" since="17"/>
<method name="onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V"/>
+ <method name="setTheme(Landroid/content/res/Resources$Theme;)V" since="29"/>
</class>
<class name="android/view/Display" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getAppVsyncOffsetNanos()J" since="21"/>
<method name="getCurrentSizeRange(Landroid/graphics/Point;Landroid/graphics/Point;)V" since="16"/>
+ <method name="getCutout()Landroid/view/DisplayCutout;" since="29"/>
<method name="getDisplayId()I"/>
<method name="getFlags()I" since="17"/>
<method name="getHdrCapabilities()Landroid/view/Display$HdrCapabilities;" since="24"/>
- <method name="getHeight()I" deprecated="16"/>
+ <method name="getHeight()I" deprecated="15"/>
<method name="getMetrics(Landroid/util/DisplayMetrics;)V"/>
<method name="getMode()Landroid/view/Display$Mode;" since="23"/>
<method name="getName()Ljava/lang/String;" since="17"/>
- <method name="getOrientation()I" deprecated="16"/>
+ <method name="getOrientation()I" deprecated="15"/>
<method name="getPixelFormat()I" deprecated="17"/>
+ <method name="getPreferredWideGamutColorSpace()Landroid/graphics/ColorSpace;" since="29"/>
<method name="getPresentationDeadlineNanos()J" since="21"/>
<method name="getRealMetrics(Landroid/util/DisplayMetrics;)V" since="17"/>
<method name="getRealSize(Landroid/graphics/Point;)V" since="17"/>
@@ -47127,7 +50157,7 @@
<method name="getState()I" since="20"/>
<method name="getSupportedModes()[Landroid/view/Display$Mode;" since="23"/>
<method name="getSupportedRefreshRates()[F" since="21" deprecated="23"/>
- <method name="getWidth()I" deprecated="16"/>
+ <method name="getWidth()I" deprecated="15"/>
<method name="isHdr()Z" since="26"/>
<method name="isValid()Z" since="17"/>
<method name="isWideColorGamut()Z" since="26"/>
@@ -47150,7 +50180,6 @@
<class name="android/view/Display$HdrCapabilities" since="24">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getDesiredMaxAverageLuminance()F"/>
<method name="getDesiredMaxLuminance()F"/>
<method name="getDesiredMinLuminance()F"/>
@@ -47158,14 +50187,13 @@
<field name="CREATOR"/>
<field name="HDR_TYPE_DOLBY_VISION"/>
<field name="HDR_TYPE_HDR10"/>
+ <field name="HDR_TYPE_HDR10_PLUS" since="29"/>
<field name="HDR_TYPE_HLG"/>
<field name="INVALID_LUMINANCE"/>
</class>
<class name="android/view/Display$Mode" since="23">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getModeId()I"/>
<method name="getPhysicalHeight()I"/>
<method name="getPhysicalWidth()I"/>
@@ -47174,7 +50202,12 @@
</class>
<class name="android/view/DisplayCutout" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/graphics/Rect;Ljava/util/List;)V"/>
+ <method name="&lt;init>(Landroid/graphics/Insets;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V" since="29"/>
+ <method name="&lt;init>(Landroid/graphics/Rect;Ljava/util/List;)V" deprecated="29"/>
+ <method name="getBoundingRectBottom()Landroid/graphics/Rect;" since="29"/>
+ <method name="getBoundingRectLeft()Landroid/graphics/Rect;" since="29"/>
+ <method name="getBoundingRectRight()Landroid/graphics/Rect;" since="29"/>
+ <method name="getBoundingRectTop()Landroid/graphics/Rect;" since="29"/>
<method name="getBoundingRects()Ljava/util/List;"/>
<method name="getSafeInsetBottom()I"/>
<method name="getSafeInsetLeft()I"/>
@@ -47183,16 +50216,13 @@
</class>
<class name="android/view/DragAndDropPermissions" since="24">
<extends name="java/lang/Object"/>
- <implements name="android/os/Parcelable" since="25"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
+ <implements name="android/os/Parcelable"/>
<method name="release()V"/>
- <field name="CREATOR" since="25"/>
+ <field name="CREATOR"/>
</class>
<class name="android/view/DragEvent" since="11">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getAction()I"/>
<method name="getClipData()Landroid/content/ClipData;"/>
<method name="getClipDescription()Landroid/content/ClipDescription;"/>
@@ -47210,7 +50240,6 @@
</class>
<class name="android/view/FocusFinder" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="findNearestTouchable(Landroid/view/ViewGroup;III[I)Landroid/view/View;"/>
<method name="findNextFocus(Landroid/view/ViewGroup;Landroid/view/View;I)Landroid/view/View;"/>
<method name="findNextFocusFromRect(Landroid/view/ViewGroup;Landroid/graphics/Rect;I)Landroid/view/View;"/>
@@ -47249,8 +50278,8 @@
<method name="&lt;init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;)V" since="3"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V" since="3"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;Z)V" since="8"/>
- <method name="&lt;init>(Landroid/view/GestureDetector$OnGestureListener;)V" deprecated="16"/>
- <method name="&lt;init>(Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V" deprecated="16"/>
+ <method name="&lt;init>(Landroid/view/GestureDetector$OnGestureListener;)V" deprecated="15"/>
+ <method name="&lt;init>(Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V" deprecated="15"/>
<method name="isLongpressEnabled()Z"/>
<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="23"/>
<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
@@ -47326,7 +50355,6 @@
</class>
<class name="android/view/HapticFeedbackConstants" since="3">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="CLOCK_TICK" since="21"/>
<field name="CONTEXT_CLICK" since="23"/>
<field name="FLAG_IGNORE_GLOBAL_SETTING"/>
@@ -47349,8 +50377,6 @@
<class name="android/view/InputDevice" since="9">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getControllerNumber()I" since="19"/>
<method name="getDescriptor()Ljava/lang/String;" since="16"/>
<method name="getDevice(I)Landroid/view/InputDevice;"/>
@@ -47369,21 +50395,22 @@
<method name="hasKeys([I)[Z" since="19"/>
<method name="hasMicrophone()Z" since="23"/>
<method name="isEnabled()Z" since="27"/>
+ <method name="isExternal()Z" since="29"/>
<method name="isVirtual()Z" since="16"/>
<method name="supportsSource(I)Z" since="21"/>
<field name="CREATOR"/>
<field name="KEYBOARD_TYPE_ALPHABETIC"/>
<field name="KEYBOARD_TYPE_NONE"/>
<field name="KEYBOARD_TYPE_NON_ALPHABETIC"/>
- <field name="MOTION_RANGE_ORIENTATION" deprecated="16"/>
- <field name="MOTION_RANGE_PRESSURE" deprecated="16"/>
- <field name="MOTION_RANGE_SIZE" deprecated="16"/>
- <field name="MOTION_RANGE_TOOL_MAJOR" deprecated="16"/>
- <field name="MOTION_RANGE_TOOL_MINOR" deprecated="16"/>
- <field name="MOTION_RANGE_TOUCH_MAJOR" deprecated="16"/>
- <field name="MOTION_RANGE_TOUCH_MINOR" deprecated="16"/>
- <field name="MOTION_RANGE_X" deprecated="16"/>
- <field name="MOTION_RANGE_Y" deprecated="16"/>
+ <field name="MOTION_RANGE_ORIENTATION" deprecated="15"/>
+ <field name="MOTION_RANGE_PRESSURE" deprecated="15"/>
+ <field name="MOTION_RANGE_SIZE" deprecated="15"/>
+ <field name="MOTION_RANGE_TOOL_MAJOR" deprecated="15"/>
+ <field name="MOTION_RANGE_TOOL_MINOR" deprecated="15"/>
+ <field name="MOTION_RANGE_TOUCH_MAJOR" deprecated="15"/>
+ <field name="MOTION_RANGE_TOUCH_MINOR" deprecated="15"/>
+ <field name="MOTION_RANGE_X" deprecated="15"/>
+ <field name="MOTION_RANGE_Y" deprecated="15"/>
<field name="SOURCE_ANY"/>
<field name="SOURCE_BLUETOOTH_STYLUS" since="23"/>
<field name="SOURCE_CLASS_BUTTON"/>
@@ -47410,8 +50437,6 @@
</class>
<class name="android/view/InputDevice$MotionRange" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIFFFFF)V" since="29"/>
<method name="getAxis()I" since="12"/>
<method name="getFlat()F"/>
<method name="getFuzz()F"/>
@@ -47425,7 +50450,6 @@
<class name="android/view/InputEvent" since="9">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getDevice()Landroid/view/InputDevice;"/>
<method name="getDeviceId()I"/>
<method name="getEventTime()J" since="16"/>
@@ -47435,7 +50459,6 @@
</class>
<class name="android/view/InputQueue" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/view/InputQueue$Callback" since="9">
<extends name="java/lang/Object"/>
@@ -47445,15 +50468,13 @@
<class name="android/view/KeyCharacterMap" since="1">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable" since="16"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="deviceHasKey(I)Z" since="3"/>
<method name="deviceHasKeys([I)[Z" since="3"/>
<method name="get(II)I"/>
<method name="getDeadChar(II)I"/>
<method name="getDisplayLabel(I)C"/>
<method name="getEvents([C)[Landroid/view/KeyEvent;"/>
- <method name="getKeyData(ILandroid/view/KeyCharacterMap$KeyData;)Z" deprecated="16"/>
+ <method name="getKeyData(ILandroid/view/KeyCharacterMap$KeyData;)Z" deprecated="15"/>
<method name="getKeyboardType()I"/>
<method name="getMatch(I[C)C"/>
<method name="getMatch(I[CI)C"/>
@@ -47462,7 +50483,7 @@
<method name="isPrintingKey(I)Z"/>
<method name="load(I)Landroid/view/KeyCharacterMap;"/>
<field name="ALPHA"/>
- <field name="BUILT_IN_KEYBOARD" deprecated="16"/>
+ <field name="BUILT_IN_KEYBOARD" deprecated="15"/>
<field name="COMBINING_ACCENT"/>
<field name="COMBINING_ACCENT_MASK"/>
<field name="CREATOR" since="16"/>
@@ -47478,11 +50499,11 @@
</class>
<class name="android/view/KeyCharacterMap$KeyData" since="1" deprecated="11">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <field name="META_LENGTH"/>
- <field name="displayLabel"/>
- <field name="meta"/>
- <field name="number"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <field name="META_LENGTH" deprecated="29"/>
+ <field name="displayLabel" deprecated="29"/>
+ <field name="meta" deprecated="29"/>
+ <field name="number" deprecated="29"/>
</class>
<class name="android/view/KeyCharacterMap$UnavailableException" since="11">
<extends name="android/util/AndroidRuntimeException"/>
@@ -47500,15 +50521,15 @@
<method name="&lt;init>(JJIIIIIIII)V" since="9"/>
<method name="&lt;init>(JLjava/lang/String;II)V" since="3"/>
<method name="&lt;init>(Landroid/view/KeyEvent;)V" since="3"/>
- <method name="&lt;init>(Landroid/view/KeyEvent;JI)V" deprecated="16"/>
+ <method name="&lt;init>(Landroid/view/KeyEvent;JI)V" deprecated="15"/>
<method name="changeAction(Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;" since="3"/>
<method name="changeFlags(Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;" since="3"/>
<method name="changeTimeRepeat(Landroid/view/KeyEvent;JI)Landroid/view/KeyEvent;" since="3"/>
<method name="changeTimeRepeat(Landroid/view/KeyEvent;JII)Landroid/view/KeyEvent;" since="5"/>
- <method name="dispatch(Landroid/view/KeyEvent$Callback;)Z" deprecated="16"/>
+ <method name="dispatch(Landroid/view/KeyEvent$Callback;)Z" deprecated="15"/>
<method name="dispatch(Landroid/view/KeyEvent$Callback;Landroid/view/KeyEvent$DispatcherState;Ljava/lang/Object;)Z" since="5"/>
<method name="getAction()I"/>
- <method name="getCharacters()Ljava/lang/String;" since="3"/>
+ <method name="getCharacters()Ljava/lang/String;" since="3" deprecated="29"/>
<method name="getDeadChar(II)I"/>
<method name="getDeviceId()I"/>
<method name="getDisplayLabel()C"/>
@@ -47517,7 +50538,7 @@
<method name="getFlags()I"/>
<method name="getKeyCharacterMap()Landroid/view/KeyCharacterMap;" since="11"/>
<method name="getKeyCode()I"/>
- <method name="getKeyData(Landroid/view/KeyCharacterMap$KeyData;)Z" deprecated="16"/>
+ <method name="getKeyData(Landroid/view/KeyCharacterMap$KeyData;)Z" deprecated="15"/>
<method name="getMatch([C)C"/>
<method name="getMatch([CI)C"/>
<method name="getMaxKeyCode()I" since="3"/>
@@ -47555,7 +50576,7 @@
<method name="setSource(I)V" since="12"/>
<method name="startTracking()V" since="5"/>
<field name="ACTION_DOWN"/>
- <field name="ACTION_MULTIPLE"/>
+ <field name="ACTION_MULTIPLE" deprecated="29"/>
<field name="ACTION_UP"/>
<field name="CREATOR"/>
<field name="FLAG_CANCELED" since="5"/>
@@ -47769,6 +50790,7 @@
<field name="KEYCODE_PLUS"/>
<field name="KEYCODE_POUND"/>
<field name="KEYCODE_POWER"/>
+ <field name="KEYCODE_PROFILE_SWITCH" since="29"/>
<field name="KEYCODE_PROG_BLUE" since="11"/>
<field name="KEYCODE_PROG_GREEN" since="11"/>
<field name="KEYCODE_PROG_RED" since="11"/>
@@ -47807,6 +50829,8 @@
<field name="KEYCODE_SYSTEM_NAVIGATION_UP" since="25"/>
<field name="KEYCODE_T"/>
<field name="KEYCODE_TAB"/>
+ <field name="KEYCODE_THUMBS_DOWN" since="29"/>
+ <field name="KEYCODE_THUMBS_UP" since="29"/>
<field name="KEYCODE_TV" since="11"/>
<field name="KEYCODE_TV_ANTENNA_CABLE" since="21"/>
<field name="KEYCODE_TV_AUDIO_DESCRIPTION" since="21"/>
@@ -47855,7 +50879,7 @@
<field name="KEYCODE_ZENKAKU_HANKAKU" since="16"/>
<field name="KEYCODE_ZOOM_IN" since="11"/>
<field name="KEYCODE_ZOOM_OUT" since="11"/>
- <field name="MAX_KEYCODE" deprecated="16"/>
+ <field name="MAX_KEYCODE" deprecated="15"/>
<field name="META_ALT_LEFT_ON"/>
<field name="META_ALT_MASK" since="11"/>
<field name="META_ALT_ON"/>
@@ -47921,6 +50945,7 @@
<method name="&lt;init>(Landroid/content/Context;)V"/>
<method name="&lt;init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V"/>
<method name="cloneInContext(Landroid/content/Context;)Landroid/view/LayoutInflater;"/>
+ <method name="createView(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;" since="29"/>
<method name="createView(Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;"/>
<method name="from(Landroid/content/Context;)Landroid/view/LayoutInflater;"/>
<method name="getContext()Landroid/content/Context;"/>
@@ -47931,6 +50956,7 @@
<method name="inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;"/>
<method name="inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;)Landroid/view/View;"/>
<method name="inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;Z)Landroid/view/View;"/>
+ <method name="onCreateView(Landroid/content/Context;Landroid/view/View;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;" since="29"/>
<method name="onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;" since="11"/>
<method name="onCreateView(Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;"/>
<method name="setFactory(Landroid/view/LayoutInflater$Factory;)V"/>
@@ -48004,6 +51030,7 @@
<method name="getContentDescription()Ljava/lang/CharSequence;" since="26"/>
<method name="getGroupId()I"/>
<method name="getIcon()Landroid/graphics/drawable/Drawable;"/>
+ <method name="getIconTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getIconTintList()Landroid/content/res/ColorStateList;" since="26"/>
<method name="getIconTintMode()Landroid/graphics/PorterDuff$Mode;" since="26"/>
<method name="getIntent()Landroid/content/Intent;"/>
@@ -48033,6 +51060,7 @@
<method name="setEnabled(Z)Landroid/view/MenuItem;"/>
<method name="setIcon(I)Landroid/view/MenuItem;"/>
<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/MenuItem;"/>
+ <method name="setIconTintBlendMode(Landroid/graphics/BlendMode;)Landroid/view/MenuItem;" since="29"/>
<method name="setIconTintList(Landroid/content/res/ColorStateList;)Landroid/view/MenuItem;" since="26"/>
<method name="setIconTintMode(Landroid/graphics/PorterDuff$Mode;)Landroid/view/MenuItem;" since="26"/>
<method name="setIntent(Landroid/content/Intent;)Landroid/view/MenuItem;"/>
@@ -48068,7 +51096,6 @@
<extends name="android/view/InputEvent" since="9"/>
<extends name="java/lang/Object" removed="9"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="actionToString(I)Ljava/lang/String;" since="19"/>
<method name="addBatch(JFFFFI)V"/>
<method name="addBatch(J[Landroid/view/MotionEvent$PointerCoords;I)V" since="9"/>
@@ -48082,6 +51109,7 @@
<method name="getAxisValue(I)F" since="12"/>
<method name="getAxisValue(II)F" since="12"/>
<method name="getButtonState()I" since="14"/>
+ <method name="getClassification()I" since="29"/>
<method name="getDeviceId()I"/>
<method name="getDownTime()J"/>
<method name="getEdgeFlags()I"/>
@@ -48120,7 +51148,9 @@
<method name="getPressure()F"/>
<method name="getPressure(I)F" since="5"/>
<method name="getRawX()F"/>
+ <method name="getRawX(I)F" since="29"/>
<method name="getRawY()F"/>
+ <method name="getRawY(I)F" since="29"/>
<method name="getSize()F"/>
<method name="getSize(I)F" since="5"/>
<method name="getToolMajor()F" since="9"/>
@@ -48141,8 +51171,8 @@
<method name="isButtonPressed(I)Z" since="21"/>
<method name="obtain(JJIFFFFIFFII)Landroid/view/MotionEvent;"/>
<method name="obtain(JJIFFI)Landroid/view/MotionEvent;"/>
- <method name="obtain(JJIIFFFFIFFII)Landroid/view/MotionEvent;" since="5" deprecated="16"/>
- <method name="obtain(JJII[I[Landroid/view/MotionEvent$PointerCoords;IFFIIII)Landroid/view/MotionEvent;" since="9" deprecated="16"/>
+ <method name="obtain(JJIIFFFFIFFII)Landroid/view/MotionEvent;" since="5" deprecated="15"/>
+ <method name="obtain(JJII[I[Landroid/view/MotionEvent$PointerCoords;IFFIIII)Landroid/view/MotionEvent;" since="9" deprecated="15"/>
<method name="obtain(JJII[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;IIFFIIII)Landroid/view/MotionEvent;" since="14"/>
<method name="obtain(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;"/>
<method name="obtainNoHistory(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;" since="5"/>
@@ -48163,15 +51193,15 @@
<field name="ACTION_MASK" since="5"/>
<field name="ACTION_MOVE"/>
<field name="ACTION_OUTSIDE" since="3"/>
- <field name="ACTION_POINTER_1_DOWN" since="5" deprecated="16"/>
- <field name="ACTION_POINTER_1_UP" since="5" deprecated="16"/>
- <field name="ACTION_POINTER_2_DOWN" since="5" deprecated="16"/>
- <field name="ACTION_POINTER_2_UP" since="5" deprecated="16"/>
- <field name="ACTION_POINTER_3_DOWN" since="5" deprecated="16"/>
- <field name="ACTION_POINTER_3_UP" since="5" deprecated="16"/>
+ <field name="ACTION_POINTER_1_DOWN" since="5" deprecated="15"/>
+ <field name="ACTION_POINTER_1_UP" since="5" deprecated="15"/>
+ <field name="ACTION_POINTER_2_DOWN" since="5" deprecated="15"/>
+ <field name="ACTION_POINTER_2_UP" since="5" deprecated="15"/>
+ <field name="ACTION_POINTER_3_DOWN" since="5" deprecated="15"/>
+ <field name="ACTION_POINTER_3_UP" since="5" deprecated="15"/>
<field name="ACTION_POINTER_DOWN" since="5"/>
- <field name="ACTION_POINTER_ID_MASK" since="5" deprecated="16"/>
- <field name="ACTION_POINTER_ID_SHIFT" since="5" deprecated="16"/>
+ <field name="ACTION_POINTER_ID_MASK" since="5" deprecated="15"/>
+ <field name="ACTION_POINTER_ID_SHIFT" since="5" deprecated="15"/>
<field name="ACTION_POINTER_INDEX_MASK" since="8"/>
<field name="ACTION_POINTER_INDEX_SHIFT" since="8"/>
<field name="ACTION_POINTER_UP" since="5"/>
@@ -48229,12 +51259,16 @@
<field name="BUTTON_STYLUS_PRIMARY" since="23"/>
<field name="BUTTON_STYLUS_SECONDARY" since="23"/>
<field name="BUTTON_TERTIARY" since="14"/>
+ <field name="CLASSIFICATION_AMBIGUOUS_GESTURE" since="29"/>
+ <field name="CLASSIFICATION_DEEP_PRESS" since="29"/>
+ <field name="CLASSIFICATION_NONE" since="29"/>
<field name="CREATOR"/>
<field name="EDGE_BOTTOM"/>
<field name="EDGE_LEFT"/>
<field name="EDGE_RIGHT"/>
<field name="EDGE_TOP"/>
<field name="FLAG_WINDOW_IS_OBSCURED" since="9"/>
+ <field name="FLAG_WINDOW_IS_PARTIALLY_OBSCURED" since="29"/>
<field name="INVALID_POINTER_ID" since="14"/>
<field name="TOOL_TYPE_ERASER" since="14"/>
<field name="TOOL_TYPE_FINGER" since="14"/>
@@ -48282,16 +51316,15 @@
<class name="android/view/OrientationListener" since="1" deprecated="3">
<extends name="java/lang/Object"/>
<implements name="android/hardware/SensorListener"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;I)V" since="3"/>
- <method name="disable()V"/>
- <method name="enable()V"/>
- <method name="onOrientationChanged(I)V"/>
- <field name="ORIENTATION_UNKNOWN"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;I)V" since="3" deprecated="29"/>
+ <method name="disable()V" deprecated="29"/>
+ <method name="enable()V" deprecated="29"/>
+ <method name="onOrientationChanged(I)V" deprecated="29"/>
+ <field name="ORIENTATION_UNKNOWN" deprecated="29"/>
</class>
<class name="android/view/PixelCopy" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="request(Landroid/view/Surface;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V"/>
<method name="request(Landroid/view/Surface;Landroid/graphics/Rect;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" since="26"/>
<method name="request(Landroid/view/SurfaceView;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V"/>
@@ -48312,8 +51345,6 @@
<class name="android/view/PointerIcon" since="24">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="create(Landroid/graphics/Bitmap;FF)Landroid/view/PointerIcon;"/>
<method name="getSystemIcon(Landroid/content/Context;I)Landroid/view/PointerIcon;"/>
<method name="load(Landroid/content/res/Resources;I)Landroid/view/PointerIcon;"/>
@@ -48382,7 +51413,6 @@
</class>
<class name="android/view/SoundEffectConstants" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getContantForFocusDirection(I)I"/>
<field name="CLICK"/>
<field name="NAVIGATION_DOWN"/>
@@ -48406,8 +51436,8 @@
<class name="android/view/Surface" since="1">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="14"/>
<method name="&lt;init>(Landroid/graphics/SurfaceTexture;)V" since="14"/>
+ <method name="&lt;init>(Landroid/view/SurfaceControl;)V" since="29"/>
<method name="freeze()V" removed="14"/>
<method name="hide()V" removed="14"/>
<method name="isValid()Z"/>
@@ -48455,6 +51485,37 @@
<method name="&lt;init>()V"/>
<method name="&lt;init>(Ljava/lang/String;)V"/>
</class>
+ <class name="android/view/SurfaceControl" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="isValid()Z"/>
+ <method name="readFromParcel(Landroid/os/Parcel;)V"/>
+ <method name="release()V"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/view/SurfaceControl$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="build()Landroid/view/SurfaceControl;"/>
+ <method name="setBufferSize(II)Landroid/view/SurfaceControl$Builder;"/>
+ <method name="setFormat(I)Landroid/view/SurfaceControl$Builder;"/>
+ <method name="setName(Ljava/lang/String;)Landroid/view/SurfaceControl$Builder;"/>
+ <method name="setOpaque(Z)Landroid/view/SurfaceControl$Builder;"/>
+ <method name="setParent(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Builder;"/>
+ </class>
+ <class name="android/view/SurfaceControl$Transaction" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="java/io/Closeable"/>
+ <method name="&lt;init>()V"/>
+ <method name="apply()V"/>
+ <method name="merge(Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl$Transaction;"/>
+ <method name="reparent(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;"/>
+ <method name="setAlpha(Landroid/view/SurfaceControl;F)Landroid/view/SurfaceControl$Transaction;"/>
+ <method name="setBufferSize(Landroid/view/SurfaceControl;II)Landroid/view/SurfaceControl$Transaction;"/>
+ <method name="setGeometry(Landroid/view/SurfaceControl;Landroid/graphics/Rect;Landroid/graphics/Rect;I)Landroid/view/SurfaceControl$Transaction;"/>
+ <method name="setLayer(Landroid/view/SurfaceControl;I)Landroid/view/SurfaceControl$Transaction;"/>
+ <method name="setVisibility(Landroid/view/SurfaceControl;Z)Landroid/view/SurfaceControl$Transaction;"/>
+ </class>
<class name="android/view/SurfaceHolder" since="1">
<extends name="java/lang/Object"/>
<method name="addCallback(Landroid/view/SurfaceHolder$Callback;)V"/>
@@ -48469,12 +51530,12 @@
<method name="setFormat(I)V"/>
<method name="setKeepScreenOn(Z)V"/>
<method name="setSizeFromLayout()V"/>
- <method name="setType(I)V" deprecated="16"/>
+ <method name="setType(I)V" deprecated="15"/>
<method name="unlockCanvasAndPost(Landroid/graphics/Canvas;)V"/>
- <field name="SURFACE_TYPE_GPU" deprecated="16"/>
- <field name="SURFACE_TYPE_HARDWARE" deprecated="16"/>
- <field name="SURFACE_TYPE_NORMAL" deprecated="16"/>
- <field name="SURFACE_TYPE_PUSH_BUFFERS" deprecated="16"/>
+ <field name="SURFACE_TYPE_GPU" deprecated="15"/>
+ <field name="SURFACE_TYPE_HARDWARE" deprecated="15"/>
+ <field name="SURFACE_TYPE_NORMAL" deprecated="15"/>
+ <field name="SURFACE_TYPE_PUSH_BUFFERS" deprecated="15"/>
</class>
<class name="android/view/SurfaceHolder$BadSurfaceTypeException" since="1">
<extends name="java/lang/RuntimeException"/>
@@ -48501,6 +51562,7 @@
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
<method name="gatherTransparentRegion(Landroid/graphics/Region;)Z"/>
<method name="getHolder()Landroid/view/SurfaceHolder;"/>
+ <method name="getSurfaceControl()Landroid/view/SurfaceControl;" since="29"/>
<method name="setSecure(Z)V" since="17"/>
<method name="setZOrderMediaOverlay(Z)V" since="5"/>
<method name="setZOrderOnTop(Z)V" since="5"/>
@@ -48536,7 +51598,9 @@
<class name="android/view/TouchDelegate" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>(Landroid/graphics/Rect;Landroid/view/View;)V"/>
+ <method name="getTouchDelegateInfo()Landroid/view/accessibility/AccessibilityNodeInfo$TouchDelegateInfo;" since="29"/>
<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
+ <method name="onTouchExplorationHoverEvent(Landroid/view/MotionEvent;)Z" since="29"/>
<field name="ABOVE"/>
<field name="BELOW"/>
<field name="TO_LEFT"/>
@@ -48544,8 +51608,6 @@
</class>
<class name="android/view/VelocityTracker" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
<method name="addMovement(Landroid/view/MotionEvent;)V"/>
<method name="clear()V"/>
<method name="computeCurrentVelocity(I)V"/>
@@ -48662,6 +51724,7 @@
<method name="forceLayout()V"/>
<method name="generateViewId()I" since="17"/>
<method name="getAccessibilityClassName()Ljava/lang/CharSequence;" since="23"/>
+ <method name="getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate;" since="29"/>
<method name="getAccessibilityLiveRegion()I" since="19"/>
<method name="getAccessibilityNodeProvider()Landroid/view/accessibility/AccessibilityNodeProvider;" since="16"/>
<method name="getAccessibilityPaneTitle()Ljava/lang/CharSequence;" since="28"/>
@@ -48669,12 +51732,16 @@
<method name="getAccessibilityTraversalBefore()I" since="22"/>
<method name="getAlpha()F" since="11"/>
<method name="getAnimation()Landroid/view/animation/Animation;"/>
+ <method name="getAnimationMatrix()Landroid/graphics/Matrix;" since="29"/>
<method name="getApplicationWindowToken()Landroid/os/IBinder;"/>
+ <method name="getAttributeResolutionStack(I)[I" since="29"/>
+ <method name="getAttributeSourceResourceMap()Ljava/util/Map;" since="29"/>
<method name="getAutofillHints()[Ljava/lang/String;" since="26"/>
<method name="getAutofillId()Landroid/view/autofill/AutofillId;" since="26"/>
<method name="getAutofillType()I" since="26"/>
<method name="getAutofillValue()Landroid/view/autofill/AutofillValue;" since="26"/>
<method name="getBackground()Landroid/graphics/drawable/Drawable;"/>
+ <method name="getBackgroundTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getBackgroundTintList()Landroid/content/res/ColorStateList;" since="21"/>
<method name="getBackgroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
<method name="getBaseline()I"/>
@@ -48685,6 +51752,7 @@
<method name="getClipBounds()Landroid/graphics/Rect;" since="18"/>
<method name="getClipBounds(Landroid/graphics/Rect;)Z" since="23"/>
<method name="getClipToOutline()Z" since="21"/>
+ <method name="getContentCaptureSession()Landroid/view/contentcapture/ContentCaptureSession;" since="29"/>
<method name="getContentDescription()Ljava/lang/CharSequence;" since="4"/>
<method name="getContext()Landroid/content/Context;"/>
<method name="getContextMenuInfo()Landroid/view/ContextMenu$ContextMenuInfo;"/>
@@ -48699,6 +51767,7 @@
<method name="getDrawingRect(Landroid/graphics/Rect;)V"/>
<method name="getDrawingTime()J"/>
<method name="getElevation()F" since="21"/>
+ <method name="getExplicitStyle()I" since="29"/>
<method name="getFilterTouchesWhenObscured()Z" since="9"/>
<method name="getFitsSystemWindows()Z" since="16"/>
<method name="getFocusable()I" since="26"/>
@@ -48706,6 +51775,7 @@
<method name="getFocusedRect(Landroid/graphics/Rect;)V"/>
<method name="getForeground()Landroid/graphics/drawable/Drawable;" since="23"/>
<method name="getForegroundGravity()I" since="23"/>
+ <method name="getForegroundTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getForegroundTintList()Landroid/content/res/ColorStateList;" since="23"/>
<method name="getForegroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="23"/>
<method name="getGlobalVisibleRect(Landroid/graphics/Rect;)Z"/>
@@ -48716,6 +51786,8 @@
<method name="getHitRect(Landroid/graphics/Rect;)V"/>
<method name="getHorizontalFadingEdgeLength()I"/>
<method name="getHorizontalScrollbarHeight()I"/>
+ <method name="getHorizontalScrollbarThumbDrawable()Landroid/graphics/drawable/Drawable;" since="29"/>
+ <method name="getHorizontalScrollbarTrackDrawable()Landroid/graphics/drawable/Drawable;" since="29"/>
<method name="getId()I"/>
<method name="getImportantForAccessibility()I" since="16"/>
<method name="getImportantForAutofill()I" since="26"/>
@@ -48729,6 +51801,7 @@
<method name="getLeftFadingEdgeStrength()F"/>
<method name="getLeftPaddingOffset()I" since="2"/>
<method name="getLocalVisibleRect(Landroid/graphics/Rect;)Z"/>
+ <method name="getLocationInSurface([I)V" since="29"/>
<method name="getLocationInWindow([I)V"/>
<method name="getLocationOnScreen([I)V"/>
<method name="getMatrix()Landroid/graphics/Matrix;" since="11"/>
@@ -48782,9 +51855,11 @@
<method name="getScrollX()I"/>
<method name="getScrollY()I"/>
<method name="getSolidColor()I"/>
+ <method name="getSourceLayoutResId()I" since="29"/>
<method name="getStateListAnimator()Landroid/animation/StateListAnimator;" since="21"/>
<method name="getSuggestedMinimumHeight()I"/>
<method name="getSuggestedMinimumWidth()I"/>
+ <method name="getSystemGestureExclusionRects()Ljava/util/List;" since="29"/>
<method name="getSystemUiVisibility()I" since="11"/>
<method name="getTag()Ljava/lang/Object;"/>
<method name="getTag(I)Ljava/lang/Object;" since="4"/>
@@ -48796,12 +51871,16 @@
<method name="getTopPaddingOffset()I" since="2"/>
<method name="getTouchDelegate()Landroid/view/TouchDelegate;"/>
<method name="getTouchables()Ljava/util/ArrayList;"/>
+ <method name="getTransitionAlpha()F" since="29"/>
<method name="getTransitionName()Ljava/lang/String;" since="21"/>
<method name="getTranslationX()F" since="11"/>
<method name="getTranslationY()F" since="11"/>
<method name="getTranslationZ()F" since="21"/>
+ <method name="getUniqueDrawingId()J" since="29"/>
<method name="getVerticalFadingEdgeLength()I"/>
<method name="getVerticalScrollbarPosition()I" since="11"/>
+ <method name="getVerticalScrollbarThumbDrawable()Landroid/graphics/drawable/Drawable;" since="29"/>
+ <method name="getVerticalScrollbarTrackDrawable()Landroid/graphics/drawable/Drawable;" since="29"/>
<method name="getVerticalScrollbarWidth()I"/>
<method name="getViewTreeObserver()Landroid/view/ViewTreeObserver;"/>
<method name="getVisibility()I"/>
@@ -48845,6 +51924,7 @@
<method name="isFocusableInTouchMode()Z"/>
<method name="isFocused()Z"/>
<method name="isFocusedByDefault()Z" since="26"/>
+ <method name="isForceDarkAllowed()Z" since="29"/>
<method name="isHapticFeedbackEnabled()Z" since="3"/>
<method name="isHardwareAccelerated()Z" since="11"/>
<method name="isHorizontalFadingEdgeEnabled()Z"/>
@@ -48983,6 +52063,7 @@
<method name="resolveSizeAndState(III)I" since="11"/>
<method name="restoreDefaultFocus()Z" since="26"/>
<method name="restoreHierarchyState(Landroid/util/SparseArray;)V"/>
+ <method name="saveAttributeDataForStyleable(Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V" since="29"/>
<method name="saveHierarchyState(Landroid/util/SparseArray;)V"/>
<method name="scrollBy(II)V"/>
<method name="scrollTo(II)V"/>
@@ -48995,12 +52076,14 @@
<method name="setActivated(Z)V" since="11"/>
<method name="setAlpha(F)V" since="11"/>
<method name="setAnimation(Landroid/view/animation/Animation;)V"/>
+ <method name="setAnimationMatrix(Landroid/graphics/Matrix;)V" since="29"/>
<method name="setAutofillHints([Ljava/lang/String;)V" since="26"/>
<method name="setAutofillId(Landroid/view/autofill/AutofillId;)V" since="28"/>
<method name="setBackground(Landroid/graphics/drawable/Drawable;)V" since="16"/>
<method name="setBackgroundColor(I)V"/>
<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" deprecated="16"/>
<method name="setBackgroundResource(I)V"/>
+ <method name="setBackgroundTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setBackgroundTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
<method name="setBackgroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
<method name="setBottom(I)V" since="11"/>
@@ -49008,6 +52091,7 @@
<method name="setClickable(Z)V"/>
<method name="setClipBounds(Landroid/graphics/Rect;)V" since="18"/>
<method name="setClipToOutline(Z)V" since="21"/>
+ <method name="setContentCaptureSession(Landroid/view/contentcapture/ContentCaptureSession;)V" since="29"/>
<method name="setContentDescription(Ljava/lang/CharSequence;)V" since="4"/>
<method name="setContextClickable(Z)V" since="23"/>
<method name="setDefaultFocusHighlightEnabled(Z)V" since="26"/>
@@ -49024,14 +52108,18 @@
<method name="setFocusable(Z)V"/>
<method name="setFocusableInTouchMode(Z)V"/>
<method name="setFocusedByDefault(Z)V" since="26"/>
+ <method name="setForceDarkAllowed(Z)V" since="29"/>
<method name="setForeground(Landroid/graphics/drawable/Drawable;)V" since="23"/>
<method name="setForegroundGravity(I)V" since="23"/>
+ <method name="setForegroundTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setForegroundTintList(Landroid/content/res/ColorStateList;)V" since="23"/>
<method name="setForegroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23"/>
<method name="setHapticFeedbackEnabled(Z)V" since="3"/>
<method name="setHasTransientState(Z)V" since="16"/>
<method name="setHorizontalFadingEdgeEnabled(Z)V"/>
<method name="setHorizontalScrollBarEnabled(Z)V"/>
+ <method name="setHorizontalScrollbarThumbDrawable(Landroid/graphics/drawable/Drawable;)V" since="29"/>
+ <method name="setHorizontalScrollbarTrackDrawable(Landroid/graphics/drawable/Drawable;)V" since="29"/>
<method name="setHovered(Z)V" since="14"/>
<method name="setId(I)V"/>
<method name="setImportantForAccessibility(I)V" since="16"/>
@@ -49044,6 +52132,7 @@
<method name="setLayoutDirection(I)V" since="17"/>
<method name="setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V"/>
<method name="setLeft(I)V" since="11"/>
+ <method name="setLeftTopRightBottom(IIII)V" since="29"/>
<method name="setLongClickable(Z)V"/>
<method name="setMeasuredDimension(II)V"/>
<method name="setMinimumHeight(I)V"/>
@@ -49102,6 +52191,7 @@
<method name="setSelected(Z)V"/>
<method name="setSoundEffectsEnabled(Z)V"/>
<method name="setStateListAnimator(Landroid/animation/StateListAnimator;)V" since="21"/>
+ <method name="setSystemGestureExclusionRects(Ljava/util/List;)V" since="29"/>
<method name="setSystemUiVisibility(I)V" since="11"/>
<method name="setTag(ILjava/lang/Object;)V" since="4"/>
<method name="setTag(Ljava/lang/Object;)V"/>
@@ -49110,13 +52200,17 @@
<method name="setTooltipText(Ljava/lang/CharSequence;)V" since="26"/>
<method name="setTop(I)V" since="11"/>
<method name="setTouchDelegate(Landroid/view/TouchDelegate;)V"/>
+ <method name="setTransitionAlpha(F)V" since="29"/>
<method name="setTransitionName(Ljava/lang/String;)V" since="21"/>
+ <method name="setTransitionVisibility(I)V" since="29"/>
<method name="setTranslationX(F)V" since="11"/>
<method name="setTranslationY(F)V" since="11"/>
<method name="setTranslationZ(F)V" since="21"/>
<method name="setVerticalFadingEdgeEnabled(Z)V"/>
<method name="setVerticalScrollBarEnabled(Z)V"/>
<method name="setVerticalScrollbarPosition(I)V" since="11"/>
+ <method name="setVerticalScrollbarThumbDrawable(Landroid/graphics/drawable/Drawable;)V" since="29"/>
+ <method name="setVerticalScrollbarTrackDrawable(Landroid/graphics/drawable/Drawable;)V" since="29"/>
<method name="setVisibility(I)V"/>
<method name="setWillNotCacheDrawing(Z)V" deprecated="28"/>
<method name="setWillNotDraw(Z)V"/>
@@ -49132,6 +52226,8 @@
<method name="startDragAndDrop(Landroid/content/ClipData;Landroid/view/View$DragShadowBuilder;Ljava/lang/Object;I)Z" since="24"/>
<method name="startNestedScroll(I)Z" since="21"/>
<method name="stopNestedScroll()V" since="21"/>
+ <method name="transformMatrixToGlobal(Landroid/graphics/Matrix;)V" since="29"/>
+ <method name="transformMatrixToLocal(Landroid/graphics/Matrix;)V" since="29"/>
<method name="unscheduleDrawable(Landroid/graphics/drawable/Drawable;)V"/>
<method name="updateDragShadow(Landroid/view/View$DragShadowBuilder;)V" since="24"/>
<method name="verifyDrawable(Landroid/graphics/drawable/Drawable;)Z"/>
@@ -49265,8 +52361,8 @@
<field name="SELECTED_STATE_SET"/>
<field name="SELECTED_WINDOW_FOCUSED_STATE_SET"/>
<field name="SOUND_EFFECTS_ENABLED"/>
- <field name="STATUS_BAR_HIDDEN" since="11" deprecated="16"/>
- <field name="STATUS_BAR_VISIBLE" since="11" deprecated="16"/>
+ <field name="STATUS_BAR_HIDDEN" since="11" deprecated="15"/>
+ <field name="STATUS_BAR_VISIBLE" since="11" deprecated="15"/>
<field name="SYSTEM_UI_FLAG_FULLSCREEN" since="16"/>
<field name="SYSTEM_UI_FLAG_HIDE_NAVIGATION" since="14"/>
<field name="SYSTEM_UI_FLAG_IMMERSIVE" since="19"/>
@@ -49416,25 +52512,25 @@
</class>
<class name="android/view/ViewAnimationUtils" since="21">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="createCircularReveal(Landroid/view/View;IIFF)Landroid/animation/Animator;"/>
</class>
<class name="android/view/ViewConfiguration" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" deprecated="16"/>
+ <method name="&lt;init>()V" deprecated="15"/>
<method name="get(Landroid/content/Context;)Landroid/view/ViewConfiguration;" since="3"/>
+ <method name="getAmbiguousGestureMultiplier()F" since="29"/>
<method name="getDefaultActionModeHideDuration()J" since="23"/>
<method name="getDoubleTapTimeout()I" since="3"/>
- <method name="getEdgeSlop()I" deprecated="16"/>
- <method name="getFadingEdgeLength()I" deprecated="16"/>
+ <method name="getEdgeSlop()I" deprecated="15"/>
+ <method name="getFadingEdgeLength()I" deprecated="15"/>
<method name="getGlobalActionKeyTimeout()J" deprecated="20"/>
<method name="getJumpTapTimeout()I"/>
<method name="getKeyRepeatDelay()I" since="12"/>
<method name="getKeyRepeatTimeout()I" since="12"/>
<method name="getLongPressTimeout()I"/>
- <method name="getMaximumDrawingCacheSize()I" deprecated="16"/>
- <method name="getMaximumFlingVelocity()I" since="4" deprecated="16"/>
- <method name="getMinimumFlingVelocity()I" deprecated="16"/>
+ <method name="getMaximumDrawingCacheSize()I" deprecated="15"/>
+ <method name="getMaximumFlingVelocity()I" since="4" deprecated="15"/>
+ <method name="getMinimumFlingVelocity()I" deprecated="15"/>
<method name="getPressedStateDuration()I"/>
<method name="getScaledDoubleTapSlop()I" since="3"/>
<method name="getScaledEdgeSlop()I" since="3"/>
@@ -49444,6 +52540,7 @@
<method name="getScaledMaximumDrawingCacheSize()I" since="3"/>
<method name="getScaledMaximumFlingVelocity()I" since="4"/>
<method name="getScaledMinimumFlingVelocity()I" since="3"/>
+ <method name="getScaledMinimumScalingSpan()I" since="29"/>
<method name="getScaledOverflingDistance()I" since="9"/>
<method name="getScaledOverscrollDistance()I" since="9"/>
<method name="getScaledPagingTouchSlop()I" since="8"/>
@@ -49452,12 +52549,12 @@
<method name="getScaledVerticalScrollFactor()F" since="26"/>
<method name="getScaledWindowTouchSlop()I" since="3"/>
<method name="getScrollBarFadeDuration()I" since="5"/>
- <method name="getScrollBarSize()I" deprecated="16"/>
+ <method name="getScrollBarSize()I" deprecated="15"/>
<method name="getScrollDefaultDelay()I" since="5"/>
<method name="getScrollFriction()F"/>
<method name="getTapTimeout()I"/>
- <method name="getTouchSlop()I" deprecated="16"/>
- <method name="getWindowTouchSlop()I" deprecated="16"/>
+ <method name="getTouchSlop()I" deprecated="15"/>
+ <method name="getWindowTouchSlop()I" deprecated="15"/>
<method name="getZoomControlsTimeout()J"/>
<method name="hasPermanentMenuKey()Z" since="14"/>
<method name="shouldShowMenuShortcutsWhenKeyboardPresent()Z" since="28"/>
@@ -49505,14 +52602,14 @@
<extends name="java/lang/Enum"/>
<method name="valueOf(Ljava/lang/String;)Landroid/view/ViewDebug$HierarchyTraceType;"/>
<method name="values()[Landroid/view/ViewDebug$HierarchyTraceType;"/>
- <field name="BUILD_CACHE"/>
- <field name="DRAW"/>
- <field name="INVALIDATE"/>
- <field name="INVALIDATE_CHILD"/>
- <field name="INVALIDATE_CHILD_IN_PARENT"/>
- <field name="ON_LAYOUT"/>
- <field name="ON_MEASURE"/>
- <field name="REQUEST_LAYOUT"/>
+ <field name="BUILD_CACHE" deprecated="29"/>
+ <field name="DRAW" deprecated="29"/>
+ <field name="INVALIDATE" deprecated="29"/>
+ <field name="INVALIDATE_CHILD" deprecated="29"/>
+ <field name="INVALIDATE_CHILD_IN_PARENT" deprecated="29"/>
+ <field name="ON_LAYOUT" deprecated="29"/>
+ <field name="ON_MEASURE" deprecated="29"/>
+ <field name="REQUEST_LAYOUT" deprecated="29"/>
</class>
<class name="android/view/ViewDebug$IntToString" since="1">
<extends name="java/lang/Object"/>
@@ -49524,13 +52621,13 @@
<extends name="java/lang/Enum"/>
<method name="valueOf(Ljava/lang/String;)Landroid/view/ViewDebug$RecyclerTraceType;"/>
<method name="values()[Landroid/view/ViewDebug$RecyclerTraceType;"/>
- <field name="BIND_VIEW"/>
- <field name="MOVE_FROM_ACTIVE_TO_SCRAP_HEAP"/>
+ <field name="BIND_VIEW" deprecated="29"/>
+ <field name="MOVE_FROM_ACTIVE_TO_SCRAP_HEAP" deprecated="29"/>
<field name="MOVE_TO_ACTIVE_HEAP" removed="8"/>
- <field name="MOVE_TO_SCRAP_HEAP"/>
- <field name="NEW_VIEW"/>
- <field name="RECYCLE_FROM_ACTIVE_HEAP"/>
- <field name="RECYCLE_FROM_SCRAP_HEAP"/>
+ <field name="MOVE_TO_SCRAP_HEAP" deprecated="29"/>
+ <field name="NEW_VIEW" deprecated="29"/>
+ <field name="RECYCLE_FROM_ACTIVE_HEAP" deprecated="29"/>
+ <field name="RECYCLE_FROM_SCRAP_HEAP" deprecated="29"/>
</class>
<class name="android/view/ViewGroup" since="1">
<extends name="android/view/View"/>
@@ -49568,6 +52665,7 @@
<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/view/ViewGroup$LayoutParams;"/>
<method name="getChildAt(I)Landroid/view/View;"/>
<method name="getChildCount()I"/>
+ <method name="getChildDrawingOrder(I)I" since="29"/>
<method name="getChildDrawingOrder(II)I"/>
<method name="getChildMeasureSpec(III)I"/>
<method name="getChildStaticTransformation(Landroid/view/View;Landroid/view/animation/Transformation;)Z"/>
@@ -49588,6 +52686,7 @@
<method name="isAnimationCacheEnabled()Z" deprecated="23"/>
<method name="isChildrenDrawingOrderEnabled()Z" since="7"/>
<method name="isChildrenDrawnWithCacheEnabled()Z" deprecated="23"/>
+ <method name="isLayoutSuppressed()Z" since="29"/>
<method name="isMotionEventSplittingEnabled()Z" since="11"/>
<method name="isTransitionGroup()Z" since="21"/>
<method name="measureChild(Landroid/view/View;II)V"/>
@@ -49634,6 +52733,7 @@
<method name="shouldDelayChildPressedState()Z" since="14"/>
<method name="startLayoutAnimation()V"/>
<method name="startViewTransition(Landroid/view/View;)V" since="11"/>
+ <method name="suppressLayout(Z)V" since="29"/>
<field name="CLIP_TO_PADDING_MASK"/>
<field name="FLAG_USE_CHILD_DRAWING_ORDER" removed="7"/>
<field name="FOCUS_AFTER_DESCENDANTS"/>
@@ -49653,7 +52753,7 @@
<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
<method name="resolveLayoutDirection(I)V" since="17"/>
<method name="setBaseAttributes(Landroid/content/res/TypedArray;II)V"/>
- <field name="FILL_PARENT" deprecated="16"/>
+ <field name="FILL_PARENT" deprecated="15"/>
<field name="MATCH_PARENT" since="8"/>
<field name="WRAP_CONTENT"/>
<field name="height"/>
@@ -49686,8 +52786,6 @@
</class>
<class name="android/view/ViewGroupOverlay" since="18">
<extends name="android/view/ViewOverlay"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/view/View;)V" since="29"/>
<method name="add(Landroid/view/View;)V"/>
<method name="remove(Landroid/view/View;)V"/>
</class>
@@ -49707,8 +52805,6 @@
</class>
<class name="android/view/ViewOverlay" since="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/view/View;)V" since="29"/>
<method name="add(Landroid/graphics/drawable/Drawable;)V"/>
<method name="clear()V"/>
<method name="remove(Landroid/graphics/drawable/Drawable;)V"/>
@@ -49763,8 +52859,6 @@
</class>
<class name="android/view/ViewPropertyAnimator" since="12">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/view/View;)V" since="29"/>
<method name="alpha(F)Landroid/view/ViewPropertyAnimator;"/>
<method name="alphaBy(F)Landroid/view/ViewPropertyAnimator;"/>
<method name="cancel()V" since="14"/>
@@ -49896,13 +52990,12 @@
</class>
<class name="android/view/ViewTreeObserver" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="addOnDrawListener(Landroid/view/ViewTreeObserver$OnDrawListener;)V" since="16"/>
<method name="addOnGlobalFocusChangeListener(Landroid/view/ViewTreeObserver$OnGlobalFocusChangeListener;)V"/>
<method name="addOnGlobalLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V"/>
<method name="addOnPreDrawListener(Landroid/view/ViewTreeObserver$OnPreDrawListener;)V"/>
<method name="addOnScrollChangedListener(Landroid/view/ViewTreeObserver$OnScrollChangedListener;)V" since="3"/>
+ <method name="addOnSystemGestureExclusionRectsChangedListener(Ljava/util/function/Consumer;)V" since="29"/>
<method name="addOnTouchModeChangeListener(Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;)V"/>
<method name="addOnWindowAttachListener(Landroid/view/ViewTreeObserver$OnWindowAttachListener;)V" since="18"/>
<method name="addOnWindowFocusChangeListener(Landroid/view/ViewTreeObserver$OnWindowFocusChangeListener;)V" since="18"/>
@@ -49910,15 +53003,18 @@
<method name="dispatchOnGlobalLayout()V"/>
<method name="dispatchOnPreDraw()Z"/>
<method name="isAlive()Z"/>
+ <method name="registerFrameCommitCallback(Ljava/lang/Runnable;)V" since="29"/>
<method name="removeGlobalOnLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V" deprecated="16"/>
<method name="removeOnDrawListener(Landroid/view/ViewTreeObserver$OnDrawListener;)V" since="16"/>
<method name="removeOnGlobalFocusChangeListener(Landroid/view/ViewTreeObserver$OnGlobalFocusChangeListener;)V"/>
<method name="removeOnGlobalLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V" since="16"/>
<method name="removeOnPreDrawListener(Landroid/view/ViewTreeObserver$OnPreDrawListener;)V"/>
<method name="removeOnScrollChangedListener(Landroid/view/ViewTreeObserver$OnScrollChangedListener;)V" since="3"/>
+ <method name="removeOnSystemGestureExclusionRectsChangedListener(Ljava/util/function/Consumer;)V" since="29"/>
<method name="removeOnTouchModeChangeListener(Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;)V"/>
<method name="removeOnWindowAttachListener(Landroid/view/ViewTreeObserver$OnWindowAttachListener;)V" since="18"/>
<method name="removeOnWindowFocusChangeListener(Landroid/view/ViewTreeObserver$OnWindowFocusChangeListener;)V" since="18"/>
+ <method name="unregisterFrameCommitCallback(Ljava/lang/Runnable;)Z" since="29"/>
</class>
<class name="android/view/ViewTreeObserver$OnDrawListener" since="16">
<extends name="java/lang/Object"/>
@@ -49991,6 +53087,7 @@
<method name="getSharedElementReturnTransition()Landroid/transition/Transition;" since="21"/>
<method name="getSharedElementsUseOverlay()Z" since="21"/>
<method name="getStatusBarColor()I" since="21"/>
+ <method name="getSystemGestureExclusionRects()Ljava/util/List;" since="29"/>
<method name="getTransitionBackgroundFadeDuration()J" since="21"/>
<method name="getTransitionManager()Landroid/transition/TransitionManager;" since="21"/>
<method name="getVolumeControlStream()I"/>
@@ -50003,7 +53100,9 @@
<method name="invalidatePanelMenu(I)V" since="11"/>
<method name="isActive()Z"/>
<method name="isFloating()Z"/>
+ <method name="isNavigationBarContrastEnforced()Z" since="29"/>
<method name="isShortcutKey(ILandroid/view/KeyEvent;)Z"/>
+ <method name="isStatusBarContrastEnforced()Z" since="29"/>
<method name="isWideColorGamut()Z" since="27"/>
<method name="makeActive()V"/>
<method name="onActive()V"/>
@@ -50052,6 +53151,7 @@
<method name="setLogo(I)V" since="19"/>
<method name="setMediaController(Landroid/media/session/MediaController;)V" since="21"/>
<method name="setNavigationBarColor(I)V" since="21"/>
+ <method name="setNavigationBarContrastEnforced(Z)V" since="29"/>
<method name="setNavigationBarDividerColor(I)V" since="28"/>
<method name="setReenterTransition(Landroid/transition/Transition;)V" since="21"/>
<method name="setResizingCaptionDrawable(Landroid/graphics/drawable/Drawable;)V" since="24"/>
@@ -50064,7 +53164,9 @@
<method name="setSharedElementsUseOverlay(Z)V" since="21"/>
<method name="setSoftInputMode(I)V" since="3"/>
<method name="setStatusBarColor(I)V" since="21"/>
+ <method name="setStatusBarContrastEnforced(Z)V" since="29"/>
<method name="setSustainedPerformanceMode(Z)V" since="24"/>
+ <method name="setSystemGestureExclusionRects(Ljava/util/List;)V" since="29"/>
<method name="setTitle(Ljava/lang/CharSequence;)V"/>
<method name="setTitleColor(I)V" deprecated="21"/>
<method name="setTransitionBackgroundFadeDuration(J)V" since="21"/>
@@ -50154,13 +53256,11 @@
<class name="android/view/WindowAnimationFrameStats" since="21">
<extends name="android/view/FrameStats"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<field name="CREATOR"/>
</class>
<class name="android/view/WindowContentFrameStats" since="21">
<extends name="android/view/FrameStats"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getFramePostedTimeNano(I)J"/>
<method name="getFrameReadyTimeNano(I)J"/>
<field name="CREATOR"/>
@@ -50168,8 +53268,6 @@
<class name="android/view/WindowId" since="18">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/IBinder;)V" since="29"/>
<method name="isFocused()Z"/>
<method name="registerFocusObserver(Landroid/view/WindowId$FocusObserver;)V"/>
<method name="unregisterFocusObserver(Landroid/view/WindowId$FocusObserver;)V"/>
@@ -50188,21 +53286,39 @@
<method name="consumeStableInsets()Landroid/view/WindowInsets;" since="21"/>
<method name="consumeSystemWindowInsets()Landroid/view/WindowInsets;"/>
<method name="getDisplayCutout()Landroid/view/DisplayCutout;" since="28"/>
+ <method name="getMandatorySystemGestureInsets()Landroid/graphics/Insets;" since="29"/>
<method name="getStableInsetBottom()I" since="21"/>
<method name="getStableInsetLeft()I" since="21"/>
<method name="getStableInsetRight()I" since="21"/>
<method name="getStableInsetTop()I" since="21"/>
+ <method name="getStableInsets()Landroid/graphics/Insets;" since="29"/>
+ <method name="getSystemGestureInsets()Landroid/graphics/Insets;" since="29"/>
<method name="getSystemWindowInsetBottom()I"/>
<method name="getSystemWindowInsetLeft()I"/>
<method name="getSystemWindowInsetRight()I"/>
<method name="getSystemWindowInsetTop()I"/>
+ <method name="getSystemWindowInsets()Landroid/graphics/Insets;" since="29"/>
+ <method name="getTappableElementInsets()Landroid/graphics/Insets;" since="29"/>
<method name="hasInsets()Z"/>
<method name="hasStableInsets()Z" since="21"/>
<method name="hasSystemWindowInsets()Z"/>
+ <method name="inset(IIII)Landroid/view/WindowInsets;" since="29"/>
<method name="isConsumed()Z" since="21"/>
<method name="isRound()Z"/>
- <method name="replaceSystemWindowInsets(IIII)Landroid/view/WindowInsets;"/>
- <method name="replaceSystemWindowInsets(Landroid/graphics/Rect;)Landroid/view/WindowInsets;" since="21"/>
+ <method name="replaceSystemWindowInsets(IIII)Landroid/view/WindowInsets;" deprecated="29"/>
+ <method name="replaceSystemWindowInsets(Landroid/graphics/Rect;)Landroid/view/WindowInsets;" since="21" deprecated="29"/>
+ </class>
+ <class name="android/view/WindowInsets$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="&lt;init>(Landroid/view/WindowInsets;)V"/>
+ <method name="build()Landroid/view/WindowInsets;"/>
+ <method name="setDisplayCutout(Landroid/view/DisplayCutout;)Landroid/view/WindowInsets$Builder;"/>
+ <method name="setMandatorySystemGestureInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;"/>
+ <method name="setStableInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;"/>
+ <method name="setSystemGestureInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;"/>
+ <method name="setSystemWindowInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;"/>
+ <method name="setTappableElementInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;"/>
</class>
<class name="android/view/WindowManager" since="1">
<extends name="java/lang/Object"/>
@@ -50250,7 +53366,7 @@
<field name="FLAGS_CHANGED"/>
<field name="FLAG_ALLOW_LOCK_WHILE_SCREEN_ON" since="8"/>
<field name="FLAG_ALT_FOCUSABLE_IM" since="3"/>
- <field name="FLAG_BLUR_BEHIND" deprecated="16"/>
+ <field name="FLAG_BLUR_BEHIND" deprecated="15"/>
<field name="FLAG_DIM_BEHIND"/>
<field name="FLAG_DISMISS_KEYGUARD" since="5" deprecated="26"/>
<field name="FLAG_DITHER" deprecated="17"/>
@@ -50288,10 +53404,10 @@
<field name="LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER" since="28"/>
<field name="LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES" since="28"/>
<field name="MEMORY_TYPE_CHANGED"/>
- <field name="MEMORY_TYPE_GPU" deprecated="16"/>
- <field name="MEMORY_TYPE_HARDWARE" deprecated="16"/>
- <field name="MEMORY_TYPE_NORMAL" deprecated="16"/>
- <field name="MEMORY_TYPE_PUSH_BUFFERS" deprecated="16"/>
+ <field name="MEMORY_TYPE_GPU" deprecated="15"/>
+ <field name="MEMORY_TYPE_HARDWARE" deprecated="15"/>
+ <field name="MEMORY_TYPE_NORMAL" deprecated="15"/>
+ <field name="MEMORY_TYPE_PUSH_BUFFERS" deprecated="15"/>
<field name="ROTATION_ANIMATION_CHANGED" since="18"/>
<field name="ROTATION_ANIMATION_CROSSFADE" since="18"/>
<field name="ROTATION_ANIMATION_JUMPCUT" since="18"/>
@@ -50350,7 +53466,7 @@
<field name="horizontalMargin"/>
<field name="horizontalWeight"/>
<field name="layoutInDisplayCutoutMode" since="28"/>
- <field name="memoryType" deprecated="16"/>
+ <field name="memoryType" deprecated="15"/>
<field name="packageName"/>
<field name="preferredDisplayModeId" since="23"/>
<field name="preferredRefreshRate" since="21" deprecated="23"/>
@@ -50371,7 +53487,6 @@
<extends name="android/view/accessibility/AccessibilityRecord" since="14"/>
<extends name="java/lang/Object" removed="14"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="appendRecord(Landroid/view/accessibility/AccessibilityRecord;)V" since="14"/>
<method name="eventTypeToString(I)Ljava/lang/String;" since="14"/>
<method name="getAction()I" since="16"/>
@@ -50430,7 +53545,7 @@
<field name="CONTENT_CHANGE_TYPE_UNDEFINED" since="19"/>
<field name="CREATOR"/>
<field name="INVALID_POSITION"/>
- <field name="MAX_TEXT_LENGTH" deprecated="16"/>
+ <field name="MAX_TEXT_LENGTH" deprecated="15"/>
<field name="TYPES_ALL_MASK"/>
<field name="TYPE_ANNOUNCEMENT" since="16"/>
<field name="TYPE_ASSIST_READING_CONTEXT" since="23"/>
@@ -50476,15 +53591,15 @@
</class>
<class name="android/view/accessibility/AccessibilityManager" since="4">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="addAccessibilityRequestPreparer(Landroid/view/accessibility/AccessibilityRequestPreparer;)V" since="27"/>
<method name="addAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;)Z" since="14"/>
<method name="addAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;Landroid/os/Handler;)V" since="26"/>
<method name="addTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;)Z" since="19"/>
<method name="addTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;Landroid/os/Handler;)V" since="26"/>
- <method name="getAccessibilityServiceList()Ljava/util/List;" deprecated="16"/>
+ <method name="getAccessibilityServiceList()Ljava/util/List;" deprecated="15"/>
<method name="getEnabledAccessibilityServiceList(I)Ljava/util/List;" since="14"/>
<method name="getInstalledAccessibilityServiceList()Ljava/util/List;" since="14"/>
+ <method name="getRecommendedTimeoutMillis(II)I" since="29"/>
<method name="interrupt()V"/>
<method name="isAccessibilityButtonSupported()Z" since="27"/>
<method name="isEnabled()Z"/>
@@ -50493,6 +53608,9 @@
<method name="removeAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;)Z" since="14"/>
<method name="removeTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;)Z" since="19"/>
<method name="sendAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V"/>
+ <field name="FLAG_CONTENT_CONTROLS" since="29"/>
+ <field name="FLAG_CONTENT_ICONS" since="29"/>
+ <field name="FLAG_CONTENT_TEXT" since="29"/>
</class>
<class name="android/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener" since="14">
<extends name="java/lang/Object"/>
@@ -50505,7 +53623,6 @@
<class name="android/view/accessibility/AccessibilityNodeInfo" since="14">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="addAction(I)V" deprecated="21"/>
<method name="addAction(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)V" since="21"/>
<method name="addChild(Landroid/view/View;)V"/>
@@ -50518,7 +53635,7 @@
<method name="getActionList()Ljava/util/List;" since="21"/>
<method name="getActions()I" deprecated="21"/>
<method name="getAvailableExtraData()Ljava/util/List;" since="26"/>
- <method name="getBoundsInParent(Landroid/graphics/Rect;)V"/>
+ <method name="getBoundsInParent(Landroid/graphics/Rect;)V" deprecated="29"/>
<method name="getBoundsInScreen(Landroid/graphics/Rect;)V"/>
<method name="getChild(I)Landroid/view/accessibility/AccessibilityNodeInfo;"/>
<method name="getChildCount()I"/>
@@ -50544,6 +53661,7 @@
<method name="getTextSelectionEnd()I" since="18"/>
<method name="getTextSelectionStart()I" since="18"/>
<method name="getTooltipText()Ljava/lang/CharSequence;" since="28"/>
+ <method name="getTouchDelegateInfo()Landroid/view/accessibility/AccessibilityNodeInfo$TouchDelegateInfo;" since="29"/>
<method name="getTraversalAfter()Landroid/view/accessibility/AccessibilityNodeInfo;" since="22"/>
<method name="getTraversalBefore()Landroid/view/accessibility/AccessibilityNodeInfo;" since="22"/>
<method name="getViewIdResourceName()Ljava/lang/String;" since="18"/>
@@ -50569,6 +53687,7 @@
<method name="isScrollable()Z"/>
<method name="isSelected()Z"/>
<method name="isShowingHintText()Z" since="26"/>
+ <method name="isTextEntryKey()Z" since="29"/>
<method name="isVisibleToUser()Z" since="16"/>
<method name="obtain()Landroid/view/accessibility/AccessibilityNodeInfo;"/>
<method name="obtain(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeInfo;"/>
@@ -50585,7 +53704,7 @@
<method name="removeChild(Landroid/view/View;I)Z" since="21"/>
<method name="setAccessibilityFocused(Z)V" since="16"/>
<method name="setAvailableExtraData(Ljava/util/List;)V" since="26"/>
- <method name="setBoundsInParent(Landroid/graphics/Rect;)V"/>
+ <method name="setBoundsInParent(Landroid/graphics/Rect;)V" deprecated="29"/>
<method name="setBoundsInScreen(Landroid/graphics/Rect;)V"/>
<method name="setCanOpenPopup(Z)V" since="19"/>
<method name="setCheckable(Z)V"/>
@@ -50630,8 +53749,10 @@
<method name="setSource(Landroid/view/View;)V"/>
<method name="setSource(Landroid/view/View;I)V" since="16"/>
<method name="setText(Ljava/lang/CharSequence;)V"/>
+ <method name="setTextEntryKey(Z)V" since="29"/>
<method name="setTextSelection(II)V" since="18"/>
<method name="setTooltipText(Ljava/lang/CharSequence;)V" since="28"/>
+ <method name="setTouchDelegateInfo(Landroid/view/accessibility/AccessibilityNodeInfo$TouchDelegateInfo;)V" since="29"/>
<method name="setTraversalAfter(Landroid/view/View;)V" since="22"/>
<method name="setTraversalAfter(Landroid/view/View;I)V" since="22"/>
<method name="setTraversalBefore(Landroid/view/View;)V" since="22"/>
@@ -50705,6 +53826,10 @@
<field name="ACTION_MOVE_WINDOW" since="26"/>
<field name="ACTION_NEXT_AT_MOVEMENT_GRANULARITY"/>
<field name="ACTION_NEXT_HTML_ELEMENT"/>
+ <field name="ACTION_PAGE_DOWN" since="29"/>
+ <field name="ACTION_PAGE_LEFT" since="29"/>
+ <field name="ACTION_PAGE_RIGHT" since="29"/>
+ <field name="ACTION_PAGE_UP" since="29"/>
<field name="ACTION_PASTE"/>
<field name="ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY"/>
<field name="ACTION_PREVIOUS_HTML_ELEMENT"/>
@@ -50724,8 +53849,6 @@
</class>
<class name="android/view/accessibility/AccessibilityNodeInfo$CollectionInfo" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIZI)V" since="29"/>
<method name="getColumnCount()I"/>
<method name="getRowCount()I"/>
<method name="getSelectionMode()I" since="21"/>
@@ -50738,8 +53861,6 @@
</class>
<class name="android/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIIIZZ)V" since="29"/>
<method name="getColumnIndex()I"/>
<method name="getColumnSpan()I"/>
<method name="getRowIndex()I"/>
@@ -50751,8 +53872,6 @@
</class>
<class name="android/view/accessibility/AccessibilityNodeInfo$RangeInfo" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IFFF)V" since="29"/>
<method name="getCurrent()F"/>
<method name="getMax()F"/>
<method name="getMin()F"/>
@@ -50762,6 +53881,15 @@
<field name="RANGE_TYPE_INT"/>
<field name="RANGE_TYPE_PERCENT"/>
</class>
+ <class name="android/view/accessibility/AccessibilityNodeInfo$TouchDelegateInfo" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="&lt;init>(Ljava/util/Map;)V"/>
+ <method name="getRegionAt(I)Landroid/graphics/Region;"/>
+ <method name="getRegionCount()I"/>
+ <method name="getTargetForRegion(Landroid/graphics/Region;)Landroid/view/accessibility/AccessibilityNodeInfo;"/>
+ <field name="CREATOR"/>
+ </class>
<class name="android/view/accessibility/AccessibilityNodeProvider" since="16">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
@@ -50774,7 +53902,6 @@
</class>
<class name="android/view/accessibility/AccessibilityRecord" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getAddedCount()I"/>
<method name="getBeforeText()Ljava/lang/CharSequence;"/>
<method name="getClassName()Ljava/lang/CharSequence;"/>
@@ -50836,7 +53963,6 @@
<class name="android/view/accessibility/AccessibilityWindowInfo" since="21">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<method name="getAnchor()Landroid/view/accessibility/AccessibilityNodeInfo;" since="24"/>
<method name="getBoundsInScreen(Landroid/graphics/Rect;)V"/>
<method name="getChild(I)Landroid/view/accessibility/AccessibilityWindowInfo;"/>
@@ -50863,8 +53989,6 @@
</class>
<class name="android/view/accessibility/CaptioningManager" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="addCaptioningChangeListener(Landroid/view/accessibility/CaptioningManager$CaptioningChangeListener;)V"/>
<method name="getFontScale()F"/>
<method name="getLocale()Ljava/util/Locale;"/>
@@ -50874,8 +53998,6 @@
</class>
<class name="android/view/accessibility/CaptioningManager$CaptionStyle" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIIIILjava/lang/String;)V" since="29"/>
<method name="getTypeface()Landroid/graphics/Typeface;"/>
<method name="hasBackgroundColor()Z" since="21"/>
<method name="hasEdgeColor()Z" since="21"/>
@@ -50933,7 +54055,7 @@
<method name="computeDurationHint()J" since="3"/>
<method name="ensureInterpolator()V"/>
<method name="getBackgroundColor()I" since="12"/>
- <method name="getDetachWallpaper()Z" since="5"/>
+ <method name="getDetachWallpaper()Z" since="5" deprecated="29"/>
<method name="getDuration()J"/>
<method name="getFillAfter()Z"/>
<method name="getFillBefore()Z"/>
@@ -50957,7 +54079,7 @@
<method name="scaleCurrentDuration(F)V"/>
<method name="setAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V"/>
<method name="setBackgroundColor(I)V" since="12"/>
- <method name="setDetachWallpaper(Z)V" since="5"/>
+ <method name="setDetachWallpaper(Z)V" since="5" deprecated="29"/>
<method name="setDuration(J)V"/>
<method name="setFillAfter(Z)V"/>
<method name="setFillBefore(Z)V"/>
@@ -51196,13 +54318,10 @@
<class name="android/view/autofill/AutofillId" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/view/autofill/AutofillManager" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="cancel()V"/>
<method name="commit()V"/>
<method name="disableAutofillServices()V"/>
@@ -51247,8 +54366,6 @@
<class name="android/view/autofill/AutofillValue" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="forDate(J)Landroid/view/autofill/AutofillValue;"/>
<method name="forList(I)Landroid/view/autofill/AutofillValue;"/>
<method name="forText(Ljava/lang/CharSequence;)Landroid/view/autofill/AutofillValue;"/>
@@ -51263,6 +54380,79 @@
<method name="isToggle()Z"/>
<field name="CREATOR"/>
</class>
+ <class name="android/view/contentcapture/ContentCaptureCondition" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="&lt;init>(Landroid/content/LocusId;I)V"/>
+ <method name="getFlags()I"/>
+ <method name="getLocusId()Landroid/content/LocusId;"/>
+ <field name="CREATOR"/>
+ <field name="FLAG_IS_REGEX"/>
+ </class>
+ <class name="android/view/contentcapture/ContentCaptureContext" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="forLocusId(Ljava/lang/String;)Landroid/view/contentcapture/ContentCaptureContext;"/>
+ <method name="getExtras()Landroid/os/Bundle;"/>
+ <method name="getLocusId()Landroid/content/LocusId;"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/view/contentcapture/ContentCaptureContext$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/content/LocusId;)V"/>
+ <method name="build()Landroid/view/contentcapture/ContentCaptureContext;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/view/contentcapture/ContentCaptureContext$Builder;"/>
+ </class>
+ <class name="android/view/contentcapture/ContentCaptureManager" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getContentCaptureConditions()Ljava/util/Set;"/>
+ <method name="getServiceComponentName()Landroid/content/ComponentName;"/>
+ <method name="isContentCaptureEnabled()Z"/>
+ <method name="removeData(Landroid/view/contentcapture/DataRemovalRequest;)V"/>
+ <method name="setContentCaptureEnabled(Z)V"/>
+ </class>
+ <class name="android/view/contentcapture/ContentCaptureSession" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="java/lang/AutoCloseable"/>
+ <method name="createContentCaptureSession(Landroid/view/contentcapture/ContentCaptureContext;)Landroid/view/contentcapture/ContentCaptureSession;"/>
+ <method name="destroy()V"/>
+ <method name="getContentCaptureContext()Landroid/view/contentcapture/ContentCaptureContext;"/>
+ <method name="getContentCaptureSessionId()Landroid/view/contentcapture/ContentCaptureSessionId;"/>
+ <method name="newAutofillId(Landroid/view/autofill/AutofillId;J)Landroid/view/autofill/AutofillId;"/>
+ <method name="newViewStructure(Landroid/view/View;)Landroid/view/ViewStructure;"/>
+ <method name="newVirtualViewStructure(Landroid/view/autofill/AutofillId;J)Landroid/view/ViewStructure;"/>
+ <method name="notifyViewAppeared(Landroid/view/ViewStructure;)V"/>
+ <method name="notifyViewDisappeared(Landroid/view/autofill/AutofillId;)V"/>
+ <method name="notifyViewTextChanged(Landroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V"/>
+ <method name="notifyViewsDisappeared(Landroid/view/autofill/AutofillId;[J)V"/>
+ <method name="setContentCaptureContext(Landroid/view/contentcapture/ContentCaptureContext;)V"/>
+ </class>
+ <class name="android/view/contentcapture/ContentCaptureSessionId" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/view/contentcapture/DataRemovalRequest" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getLocusIdRequests()Ljava/util/List;"/>
+ <method name="getPackageName()Ljava/lang/String;"/>
+ <method name="isForEverything()Z"/>
+ <field name="CREATOR"/>
+ <field name="FLAG_IS_PREFIX"/>
+ </class>
+ <class name="android/view/contentcapture/DataRemovalRequest$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="addLocusId(Landroid/content/LocusId;I)Landroid/view/contentcapture/DataRemovalRequest$Builder;"/>
+ <method name="build()Landroid/view/contentcapture/DataRemovalRequest;"/>
+ <method name="forEverything()Landroid/view/contentcapture/DataRemovalRequest$Builder;"/>
+ </class>
+ <class name="android/view/contentcapture/DataRemovalRequest$LocusIdRequest" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getFlags()I"/>
+ <method name="getLocusId()Landroid/content/LocusId;"/>
+ </class>
<class name="android/view/inputmethod/BaseInputConnection" since="3">
<extends name="java/lang/Object"/>
<implements name="android/view/inputmethod/InputConnection"/>
@@ -51500,7 +54690,6 @@
</class>
<class name="android/view/inputmethod/InputMethodManager" since="3">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="dispatchKeyEventFromInputMethod(Landroid/view/View;Landroid/view/KeyEvent;)V" since="24"/>
<method name="displayCompletions(Landroid/view/View;[Landroid/view/inputmethod/CompletionInfo;)V"/>
<method name="getCurrentInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;" since="11"/>
@@ -51520,8 +54709,8 @@
<method name="isWatchingCursor(Landroid/view/View;)Z" deprecated="21"/>
<method name="restartInput(Landroid/view/View;)V"/>
<method name="sendAppPrivateCommand(Landroid/view/View;Ljava/lang/String;Landroid/os/Bundle;)V"/>
- <method name="setAdditionalInputMethodSubtypes(Ljava/lang/String;[Landroid/view/inputmethod/InputMethodSubtype;)V" since="14"/>
- <method name="setCurrentInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)Z" since="11"/>
+ <method name="setAdditionalInputMethodSubtypes(Ljava/lang/String;[Landroid/view/inputmethod/InputMethodSubtype;)V" since="14" deprecated="29"/>
+ <method name="setCurrentInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)Z" since="11" deprecated="29"/>
<method name="setInputMethod(Landroid/os/IBinder;Ljava/lang/String;)V" deprecated="28"/>
<method name="setInputMethodAndSubtype(Landroid/os/IBinder;Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V" since="11" deprecated="28"/>
<method name="shouldOfferSwitchingToNextInputMethod(Landroid/os/IBinder;)Z" since="19" deprecated="28"/>
@@ -51539,7 +54728,7 @@
<method name="updateCursorAnchorInfo(Landroid/view/View;Landroid/view/inputmethod/CursorAnchorInfo;)V" since="21"/>
<method name="updateExtractedText(Landroid/view/View;ILandroid/view/inputmethod/ExtractedText;)V"/>
<method name="updateSelection(Landroid/view/View;IIII)V"/>
- <method name="viewClicked(Landroid/view/View;)V" since="14"/>
+ <method name="viewClicked(Landroid/view/View;)V" since="14" deprecated="29"/>
<field name="HIDE_IMPLICIT_ONLY"/>
<field name="HIDE_NOT_ALWAYS"/>
<field name="RESULT_HIDDEN"/>
@@ -51571,7 +54760,6 @@
<class name="android/view/inputmethod/InputMethodSubtype" since="11">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="14"/>
<method name="&lt;init>(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)V" since="14" deprecated="19"/>
<method name="&lt;init>(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZI)V" since="17" deprecated="19"/>
<method name="containsExtraValueKey(Ljava/lang/String;)Z" since="12"/>
@@ -51603,11 +54791,160 @@
<method name="setSubtypeMode(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
<method name="setSubtypeNameResId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
</class>
+ <class name="android/view/inspector/InspectionCompanion" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="mapProperties(Landroid/view/inspector/PropertyMapper;)V"/>
+ <method name="readProperties(Ljava/lang/Object;Landroid/view/inspector/PropertyReader;)V"/>
+ </class>
+ <class name="android/view/inspector/InspectionCompanion$UninitializedPropertyMapException" since="29">
+ <extends name="java/lang/RuntimeException"/>
+ <method name="&lt;init>()V"/>
+ </class>
+ <class name="android/view/inspector/InspectionCompanionProvider" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="provide(Ljava/lang/Class;)Landroid/view/inspector/InspectionCompanion;"/>
+ </class>
+ <class name="android/view/inspector/IntFlagMapping" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="add(IILjava/lang/String;)V"/>
+ <method name="get(I)Ljava/util/Set;"/>
+ </class>
+ <class name="android/view/inspector/PropertyMapper" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="mapBoolean(Ljava/lang/String;I)I"/>
+ <method name="mapByte(Ljava/lang/String;I)I"/>
+ <method name="mapChar(Ljava/lang/String;I)I"/>
+ <method name="mapColor(Ljava/lang/String;I)I"/>
+ <method name="mapDouble(Ljava/lang/String;I)I"/>
+ <method name="mapFloat(Ljava/lang/String;I)I"/>
+ <method name="mapGravity(Ljava/lang/String;I)I"/>
+ <method name="mapInt(Ljava/lang/String;I)I"/>
+ <method name="mapIntEnum(Ljava/lang/String;ILjava/util/function/IntFunction;)I"/>
+ <method name="mapIntFlag(Ljava/lang/String;ILjava/util/function/IntFunction;)I"/>
+ <method name="mapLong(Ljava/lang/String;I)I"/>
+ <method name="mapObject(Ljava/lang/String;I)I"/>
+ <method name="mapResourceId(Ljava/lang/String;I)I"/>
+ <method name="mapShort(Ljava/lang/String;I)I"/>
+ </class>
+ <class name="android/view/inspector/PropertyMapper$PropertyConflictException" since="29">
+ <extends name="java/lang/RuntimeException"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+ </class>
+ <class name="android/view/inspector/PropertyReader" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="readBoolean(IZ)V"/>
+ <method name="readByte(IB)V"/>
+ <method name="readChar(IC)V"/>
+ <method name="readColor(II)V"/>
+ <method name="readColor(IJ)V"/>
+ <method name="readColor(ILandroid/graphics/Color;)V"/>
+ <method name="readDouble(ID)V"/>
+ <method name="readFloat(IF)V"/>
+ <method name="readGravity(II)V"/>
+ <method name="readInt(II)V"/>
+ <method name="readIntEnum(II)V"/>
+ <method name="readIntFlag(II)V"/>
+ <method name="readLong(IJ)V"/>
+ <method name="readObject(ILjava/lang/Object;)V"/>
+ <method name="readResourceId(II)V"/>
+ <method name="readShort(IS)V"/>
+ </class>
+ <class name="android/view/inspector/PropertyReader$PropertyTypeMismatchException" since="29">
+ <extends name="java/lang/RuntimeException"/>
+ <method name="&lt;init>(ILjava/lang/String;Ljava/lang/String;)V"/>
+ <method name="&lt;init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+ </class>
+ <class name="android/view/inspector/StaticInspectionCompanionProvider" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/view/inspector/InspectionCompanionProvider"/>
+ <method name="&lt;init>()V"/>
+ </class>
+ <class name="android/view/inspector/WindowInspector" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="getGlobalWindowViews()Ljava/util/List;"/>
+ </class>
+ <class name="android/view/textclassifier/ConversationAction" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getAction()Landroid/app/RemoteAction;"/>
+ <method name="getConfidenceScore()F"/>
+ <method name="getExtras()Landroid/os/Bundle;"/>
+ <method name="getTextReply()Ljava/lang/CharSequence;"/>
+ <method name="getType()Ljava/lang/String;"/>
+ <field name="CREATOR"/>
+ <field name="TYPE_CALL_PHONE"/>
+ <field name="TYPE_CREATE_REMINDER"/>
+ <field name="TYPE_OPEN_URL"/>
+ <field name="TYPE_SEND_EMAIL"/>
+ <field name="TYPE_SEND_SMS"/>
+ <field name="TYPE_SHARE_LOCATION"/>
+ <field name="TYPE_TEXT_REPLY"/>
+ <field name="TYPE_TRACK_FLIGHT"/>
+ <field name="TYPE_VIEW_CALENDAR"/>
+ <field name="TYPE_VIEW_MAP"/>
+ </class>
+ <class name="android/view/textclassifier/ConversationAction$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="build()Landroid/view/textclassifier/ConversationAction;"/>
+ <method name="setAction(Landroid/app/RemoteAction;)Landroid/view/textclassifier/ConversationAction$Builder;"/>
+ <method name="setConfidenceScore(F)Landroid/view/textclassifier/ConversationAction$Builder;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/ConversationAction$Builder;"/>
+ <method name="setTextReply(Ljava/lang/CharSequence;)Landroid/view/textclassifier/ConversationAction$Builder;"/>
+ </class>
+ <class name="android/view/textclassifier/ConversationActions" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="&lt;init>(Ljava/util/List;Ljava/lang/String;)V"/>
+ <method name="getConversationActions()Ljava/util/List;"/>
+ <method name="getId()Ljava/lang/String;"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/view/textclassifier/ConversationActions$Message" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getAuthor()Landroid/app/Person;"/>
+ <method name="getExtras()Landroid/os/Bundle;"/>
+ <method name="getReferenceTime()Ljava/time/ZonedDateTime;"/>
+ <method name="getText()Ljava/lang/CharSequence;"/>
+ <field name="CREATOR"/>
+ <field name="PERSON_USER_OTHERS"/>
+ <field name="PERSON_USER_SELF"/>
+ </class>
+ <class name="android/view/textclassifier/ConversationActions$Message$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/app/Person;)V"/>
+ <method name="build()Landroid/view/textclassifier/ConversationActions$Message;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/ConversationActions$Message$Builder;"/>
+ <method name="setReferenceTime(Ljava/time/ZonedDateTime;)Landroid/view/textclassifier/ConversationActions$Message$Builder;"/>
+ <method name="setText(Ljava/lang/CharSequence;)Landroid/view/textclassifier/ConversationActions$Message$Builder;"/>
+ </class>
+ <class name="android/view/textclassifier/ConversationActions$Request" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getCallingPackageName()Ljava/lang/String;"/>
+ <method name="getConversation()Ljava/util/List;"/>
+ <method name="getExtras()Landroid/os/Bundle;"/>
+ <method name="getHints()Ljava/util/List;"/>
+ <method name="getMaxSuggestions()I"/>
+ <method name="getTypeConfig()Landroid/view/textclassifier/TextClassifier$EntityConfig;"/>
+ <field name="CREATOR"/>
+ <field name="HINT_FOR_IN_APP"/>
+ <field name="HINT_FOR_NOTIFICATION"/>
+ </class>
+ <class name="android/view/textclassifier/ConversationActions$Request$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Ljava/util/List;)V"/>
+ <method name="build()Landroid/view/textclassifier/ConversationActions$Request;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/ConversationActions$Request$Builder;"/>
+ <method name="setHints(Ljava/util/List;)Landroid/view/textclassifier/ConversationActions$Request$Builder;"/>
+ <method name="setMaxSuggestions(I)Landroid/view/textclassifier/ConversationActions$Request$Builder;"/>
+ <method name="setTypeConfig(Landroid/view/textclassifier/TextClassifier$EntityConfig;)Landroid/view/textclassifier/ConversationActions$Request$Builder;"/>
+ </class>
<class name="android/view/textclassifier/SelectionEvent" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="createSelectionActionEvent(III)Landroid/view/textclassifier/SelectionEvent;"/>
<method name="createSelectionActionEvent(IIILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/SelectionEvent;"/>
<method name="createSelectionModifiedEvent(II)Landroid/view/textclassifier/SelectionEvent;"/>
@@ -51655,12 +54992,11 @@
<class name="android/view/textclassifier/TextClassification" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable" since="28"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getActions()Ljava/util/List;" since="28"/>
<method name="getConfidenceScore(Ljava/lang/String;)F"/>
<method name="getEntity(I)Ljava/lang/String;"/>
<method name="getEntityCount()I"/>
+ <method name="getExtras()Landroid/os/Bundle;" since="29"/>
<method name="getIcon()Landroid/graphics/drawable/Drawable;" deprecated="28"/>
<method name="getId()Ljava/lang/String;" since="28"/>
<method name="getIntent()Landroid/content/Intent;" deprecated="28"/>
@@ -51675,6 +55011,7 @@
<method name="addAction(Landroid/app/RemoteAction;)Landroid/view/textclassifier/TextClassification$Builder;" since="28"/>
<method name="build()Landroid/view/textclassifier/TextClassification;"/>
<method name="setEntityType(Ljava/lang/String;F)Landroid/view/textclassifier/TextClassification$Builder;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextClassification$Builder;" since="29"/>
<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28"/>
<method name="setId(Ljava/lang/String;)Landroid/view/textclassifier/TextClassification$Builder;" since="28"/>
<method name="setIntent(Landroid/content/Intent;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28"/>
@@ -51685,10 +55022,10 @@
<class name="android/view/textclassifier/TextClassification$Request" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
+ <method name="getCallingPackageName()Ljava/lang/String;" since="29"/>
<method name="getDefaultLocales()Landroid/os/LocaleList;"/>
<method name="getEndIndex()I"/>
+ <method name="getExtras()Landroid/os/Bundle;" since="29"/>
<method name="getReferenceTime()Ljava/time/ZonedDateTime;"/>
<method name="getStartIndex()I"/>
<method name="getText()Ljava/lang/CharSequence;"/>
@@ -51699,13 +55036,12 @@
<method name="&lt;init>(Ljava/lang/CharSequence;II)V"/>
<method name="build()Landroid/view/textclassifier/TextClassification$Request;"/>
<method name="setDefaultLocales(Landroid/os/LocaleList;)Landroid/view/textclassifier/TextClassification$Request$Builder;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextClassification$Request$Builder;" since="29"/>
<method name="setReferenceTime(Ljava/time/ZonedDateTime;)Landroid/view/textclassifier/TextClassification$Request$Builder;"/>
</class>
<class name="android/view/textclassifier/TextClassificationContext" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getPackageName()Ljava/lang/String;"/>
<method name="getWidgetType()Ljava/lang/String;"/>
<method name="getWidgetVersion()Ljava/lang/String;"/>
@@ -51719,8 +55055,6 @@
</class>
<class name="android/view/textclassifier/TextClassificationManager" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
<method name="createTextClassificationSession(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifier;" since="28"/>
<method name="getTextClassifier()Landroid/view/textclassifier/TextClassifier;"/>
<method name="setTextClassificationSessionFactory(Landroid/view/textclassifier/TextClassificationSessionFactory;)V" since="28"/>
@@ -51733,7 +55067,6 @@
<class name="android/view/textclassifier/TextClassificationSessionId" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V"/>
<field name="CREATOR"/>
</class>
<class name="android/view/textclassifier/TextClassifier" since="26">
@@ -51741,12 +55074,16 @@
<method name="classifyText(Landroid/view/textclassifier/TextClassification$Request;)Landroid/view/textclassifier/TextClassification;" since="28"/>
<method name="classifyText(Ljava/lang/CharSequence;IILandroid/os/LocaleList;)Landroid/view/textclassifier/TextClassification;"/>
<method name="destroy()V" since="28"/>
+ <method name="detectLanguage(Landroid/view/textclassifier/TextLanguage$Request;)Landroid/view/textclassifier/TextLanguage;" since="29"/>
<method name="generateLinks(Landroid/view/textclassifier/TextLinks$Request;)Landroid/view/textclassifier/TextLinks;" since="28"/>
<method name="getMaxGenerateLinksTextLength()I" since="28"/>
<method name="isDestroyed()Z" since="28"/>
<method name="onSelectionEvent(Landroid/view/textclassifier/SelectionEvent;)V" since="28"/>
+ <method name="onTextClassifierEvent(Landroid/view/textclassifier/TextClassifierEvent;)V" since="29"/>
+ <method name="suggestConversationActions(Landroid/view/textclassifier/ConversationActions$Request;)Landroid/view/textclassifier/ConversationActions;" since="29"/>
<method name="suggestSelection(Landroid/view/textclassifier/TextSelection$Request;)Landroid/view/textclassifier/TextSelection;" since="28"/>
<method name="suggestSelection(Ljava/lang/CharSequence;IILandroid/os/LocaleList;)Landroid/view/textclassifier/TextSelection;"/>
+ <field name="EXTRA_FROM_TEXT_CLASSIFIER" since="29"/>
<field name="HINT_TEXT_IS_EDITABLE" since="28"/>
<field name="HINT_TEXT_IS_NOT_EDITABLE" since="28"/>
<field name="NO_OP"/>
@@ -51764,6 +55101,7 @@
<field name="WIDGET_TYPE_CUSTOM_UNSELECTABLE_TEXTVIEW" since="28"/>
<field name="WIDGET_TYPE_EDITTEXT" since="28"/>
<field name="WIDGET_TYPE_EDIT_WEBVIEW" since="28"/>
+ <field name="WIDGET_TYPE_NOTIFICATION" since="29"/>
<field name="WIDGET_TYPE_TEXTVIEW" since="28"/>
<field name="WIDGET_TYPE_UNKNOWN" since="28"/>
<field name="WIDGET_TYPE_UNSELECTABLE_TEXTVIEW" since="28"/>
@@ -51772,21 +55110,156 @@
<class name="android/view/textclassifier/TextClassifier$EntityConfig" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
- <method name="create(Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;"/>
- <method name="createWithExplicitEntityList(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;"/>
- <method name="createWithHints(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;"/>
+ <method name="create(Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;" deprecated="29"/>
+ <method name="createWithExplicitEntityList(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;" deprecated="29"/>
+ <method name="createWithHints(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;" deprecated="29"/>
<method name="getHints()Ljava/util/Collection;"/>
<method name="resolveEntityListModifications(Ljava/util/Collection;)Ljava/util/Collection;"/>
+ <method name="shouldIncludeTypesFromTextClassifier()Z" since="29"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/view/textclassifier/TextClassifier$EntityConfig$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="build()Landroid/view/textclassifier/TextClassifier$EntityConfig;"/>
+ <method name="includeTypesFromTextClassifier(Z)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;"/>
+ <method name="setExcludedTypes(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;"/>
+ <method name="setHints(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;"/>
+ <method name="setIncludedTypes(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;"/>
+ </class>
+ <class name="android/view/textclassifier/TextClassifierEvent" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getActionIndices()[I"/>
+ <method name="getEntityTypes()[Ljava/lang/String;"/>
+ <method name="getEventCategory()I"/>
+ <method name="getEventContext()Landroid/view/textclassifier/TextClassificationContext;"/>
+ <method name="getEventIndex()I"/>
+ <method name="getEventType()I"/>
+ <method name="getExtras()Landroid/os/Bundle;"/>
+ <method name="getLocale()Landroid/icu/util/ULocale;"/>
+ <method name="getModelName()Ljava/lang/String;"/>
+ <method name="getResultId()Ljava/lang/String;"/>
+ <method name="getScores()[F"/>
+ <field name="CATEGORY_CONVERSATION_ACTIONS"/>
+ <field name="CATEGORY_LANGUAGE_DETECTION"/>
+ <field name="CATEGORY_LINKIFY"/>
+ <field name="CATEGORY_SELECTION"/>
+ <field name="CREATOR"/>
+ <field name="TYPE_ACTIONS_GENERATED"/>
+ <field name="TYPE_ACTIONS_SHOWN"/>
+ <field name="TYPE_AUTO_SELECTION"/>
+ <field name="TYPE_COPY_ACTION"/>
+ <field name="TYPE_CUT_ACTION"/>
+ <field name="TYPE_LINK_CLICKED"/>
+ <field name="TYPE_MANUAL_REPLY"/>
+ <field name="TYPE_OTHER_ACTION"/>
+ <field name="TYPE_OVERTYPE"/>
+ <field name="TYPE_PASTE_ACTION"/>
+ <field name="TYPE_SELECTION_DESTROYED"/>
+ <field name="TYPE_SELECTION_DRAG"/>
+ <field name="TYPE_SELECTION_MODIFIED"/>
+ <field name="TYPE_SELECTION_RESET"/>
+ <field name="TYPE_SELECTION_STARTED"/>
+ <field name="TYPE_SELECT_ALL"/>
+ <field name="TYPE_SHARE_ACTION"/>
+ <field name="TYPE_SMART_ACTION"/>
+ <field name="TYPE_SMART_SELECTION_MULTI"/>
+ <field name="TYPE_SMART_SELECTION_SINGLE"/>
+ </class>
+ <class name="android/view/textclassifier/TextClassifierEvent$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="setActionIndices([I)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+ <method name="setEntityTypes([Ljava/lang/String;)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+ <method name="setEventContext(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+ <method name="setEventIndex(I)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+ <method name="setLocale(Landroid/icu/util/ULocale;)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+ <method name="setModelName(Ljava/lang/String;)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+ <method name="setResultId(Ljava/lang/String;)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+ <method name="setScores([F)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+ </class>
+ <class name="android/view/textclassifier/TextClassifierEvent$ConversationActionsEvent" since="29">
+ <extends name="android/view/textclassifier/TextClassifierEvent"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/view/textclassifier/TextClassifierEvent$ConversationActionsEvent$Builder" since="29">
+ <extends name="android/view/textclassifier/TextClassifierEvent$Builder"/>
+ <method name="&lt;init>(I)V"/>
+ <method name="build()Landroid/view/textclassifier/TextClassifierEvent$ConversationActionsEvent;"/>
+ </class>
+ <class name="android/view/textclassifier/TextClassifierEvent$LanguageDetectionEvent" since="29">
+ <extends name="android/view/textclassifier/TextClassifierEvent"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/view/textclassifier/TextClassifierEvent$LanguageDetectionEvent$Builder" since="29">
+ <extends name="android/view/textclassifier/TextClassifierEvent$Builder"/>
+ <method name="&lt;init>(I)V"/>
+ <method name="build()Landroid/view/textclassifier/TextClassifierEvent$LanguageDetectionEvent;"/>
+ </class>
+ <class name="android/view/textclassifier/TextClassifierEvent$TextLinkifyEvent" since="29">
+ <extends name="android/view/textclassifier/TextClassifierEvent"/>
<field name="CREATOR"/>
</class>
+ <class name="android/view/textclassifier/TextClassifierEvent$TextLinkifyEvent$Builder" since="29">
+ <extends name="android/view/textclassifier/TextClassifierEvent$Builder"/>
+ <method name="&lt;init>(I)V"/>
+ <method name="build()Landroid/view/textclassifier/TextClassifierEvent$TextLinkifyEvent;"/>
+ </class>
+ <class name="android/view/textclassifier/TextClassifierEvent$TextSelectionEvent" since="29">
+ <extends name="android/view/textclassifier/TextClassifierEvent"/>
+ <method name="getRelativeSuggestedWordEndIndex()I"/>
+ <method name="getRelativeSuggestedWordStartIndex()I"/>
+ <method name="getRelativeWordEndIndex()I"/>
+ <method name="getRelativeWordStartIndex()I"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder" since="29">
+ <extends name="android/view/textclassifier/TextClassifierEvent$Builder"/>
+ <method name="&lt;init>(I)V"/>
+ <method name="build()Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent;"/>
+ <method name="setRelativeSuggestedWordEndIndex(I)Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder;"/>
+ <method name="setRelativeSuggestedWordStartIndex(I)Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder;"/>
+ <method name="setRelativeWordEndIndex(I)Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder;"/>
+ <method name="setRelativeWordStartIndex(I)Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder;"/>
+ </class>
+ <class name="android/view/textclassifier/TextLanguage" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getConfidenceScore(Landroid/icu/util/ULocale;)F"/>
+ <method name="getExtras()Landroid/os/Bundle;"/>
+ <method name="getId()Ljava/lang/String;"/>
+ <method name="getLocale(I)Landroid/icu/util/ULocale;"/>
+ <method name="getLocaleHypothesisCount()I"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/view/textclassifier/TextLanguage$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="build()Landroid/view/textclassifier/TextLanguage;"/>
+ <method name="putLocale(Landroid/icu/util/ULocale;F)Landroid/view/textclassifier/TextLanguage$Builder;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextLanguage$Builder;"/>
+ <method name="setId(Ljava/lang/String;)Landroid/view/textclassifier/TextLanguage$Builder;"/>
+ </class>
+ <class name="android/view/textclassifier/TextLanguage$Request" since="29">
+ <extends name="java/lang/Object"/>
+ <implements name="android/os/Parcelable"/>
+ <method name="getCallingPackageName()Ljava/lang/String;"/>
+ <method name="getExtras()Landroid/os/Bundle;"/>
+ <method name="getText()Ljava/lang/CharSequence;"/>
+ <field name="CREATOR"/>
+ </class>
+ <class name="android/view/textclassifier/TextLanguage$Request$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
+ <method name="build()Landroid/view/textclassifier/TextLanguage$Request;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextLanguage$Request$Builder;"/>
+ </class>
<class name="android/view/textclassifier/TextLinks" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="apply(Landroid/text/Spannable;ILjava/util/function/Function;)I"/>
+ <method name="getExtras()Landroid/os/Bundle;" since="29"/>
<method name="getLinks()Ljava/util/Collection;"/>
<field name="APPLY_STRATEGY_IGNORE"/>
<field name="APPLY_STRATEGY_REPLACE"/>
@@ -51795,21 +55268,24 @@
<field name="STATUS_LINKS_APPLIED"/>
<field name="STATUS_NO_LINKS_APPLIED"/>
<field name="STATUS_NO_LINKS_FOUND"/>
+ <field name="STATUS_UNSUPPORTED_CHARACTER" since="29"/>
</class>
<class name="android/view/textclassifier/TextLinks$Builder" since="28">
<extends name="java/lang/Object"/>
<method name="&lt;init>(Ljava/lang/String;)V"/>
<method name="addLink(IILjava/util/Map;)Landroid/view/textclassifier/TextLinks$Builder;"/>
+ <method name="addLink(IILjava/util/Map;Landroid/os/Bundle;)Landroid/view/textclassifier/TextLinks$Builder;" since="29"/>
<method name="build()Landroid/view/textclassifier/TextLinks;"/>
<method name="clearTextLinks()Landroid/view/textclassifier/TextLinks$Builder;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextLinks$Builder;" since="29"/>
</class>
<class name="android/view/textclassifier/TextLinks$Request" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
+ <method name="getCallingPackageName()Ljava/lang/String;" since="29"/>
<method name="getDefaultLocales()Landroid/os/LocaleList;"/>
<method name="getEntityConfig()Landroid/view/textclassifier/TextClassifier$EntityConfig;"/>
+ <method name="getExtras()Landroid/os/Bundle;" since="29"/>
<method name="getText()Ljava/lang/CharSequence;"/>
<field name="CREATOR"/>
</class>
@@ -51819,16 +55295,16 @@
<method name="build()Landroid/view/textclassifier/TextLinks$Request;"/>
<method name="setDefaultLocales(Landroid/os/LocaleList;)Landroid/view/textclassifier/TextLinks$Request$Builder;"/>
<method name="setEntityConfig(Landroid/view/textclassifier/TextClassifier$EntityConfig;)Landroid/view/textclassifier/TextLinks$Request$Builder;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextLinks$Request$Builder;" since="29"/>
</class>
<class name="android/view/textclassifier/TextLinks$TextLink" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getConfidenceScore(Ljava/lang/String;)F"/>
<method name="getEnd()I"/>
<method name="getEntity(I)Ljava/lang/String;"/>
<method name="getEntityCount()I"/>
+ <method name="getExtras()Landroid/os/Bundle;" since="29"/>
<method name="getStart()I"/>
<field name="CREATOR"/>
</class>
@@ -51840,11 +55316,10 @@
<class name="android/view/textclassifier/TextSelection" since="26">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable" since="28"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getConfidenceScore(Ljava/lang/String;)F"/>
<method name="getEntity(I)Ljava/lang/String;"/>
<method name="getEntityCount()I"/>
+ <method name="getExtras()Landroid/os/Bundle;" since="29"/>
<method name="getId()Ljava/lang/String;" since="28"/>
<method name="getSelectionEndIndex()I"/>
<method name="getSelectionStartIndex()I"/>
@@ -51855,15 +55330,16 @@
<method name="&lt;init>(II)V"/>
<method name="build()Landroid/view/textclassifier/TextSelection;"/>
<method name="setEntityType(Ljava/lang/String;F)Landroid/view/textclassifier/TextSelection$Builder;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextSelection$Builder;" since="29"/>
<method name="setId(Ljava/lang/String;)Landroid/view/textclassifier/TextSelection$Builder;" since="28"/>
</class>
<class name="android/view/textclassifier/TextSelection$Request" since="28">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
+ <method name="getCallingPackageName()Ljava/lang/String;" since="29"/>
<method name="getDefaultLocales()Landroid/os/LocaleList;"/>
<method name="getEndIndex()I"/>
+ <method name="getExtras()Landroid/os/Bundle;" since="29"/>
<method name="getStartIndex()I"/>
<method name="getText()Ljava/lang/CharSequence;"/>
<field name="CREATOR"/>
@@ -51873,6 +55349,7 @@
<method name="&lt;init>(Ljava/lang/CharSequence;II)V"/>
<method name="build()Landroid/view/textclassifier/TextSelection$Request;"/>
<method name="setDefaultLocales(Landroid/os/LocaleList;)Landroid/view/textclassifier/TextSelection$Request$Builder;"/>
+ <method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextSelection$Request$Builder;" since="29"/>
</class>
<class name="android/view/textservice/SentenceSuggestionsInfo" since="16">
<extends name="java/lang/Object"/>
@@ -51888,8 +55365,6 @@
<class name="android/view/textservice/SpellCheckerInfo" since="14">
<extends name="java/lang/Object"/>
<implements name="android/os/Parcelable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
<method name="getComponent()Landroid/content/ComponentName;"/>
<method name="getId()Ljava/lang/String;"/>
<method name="getPackageName()Ljava/lang/String;"/>
@@ -51903,7 +55378,6 @@
</class>
<class name="android/view/textservice/SpellCheckerSession" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="cancel()V" since="15"/>
<method name="close()V"/>
<method name="getSentenceSuggestions([Landroid/view/textservice/TextInfo;I)V" since="16"/>
@@ -51963,18 +55437,17 @@
</class>
<class name="android/view/textservice/TextServicesManager" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="newSpellCheckerSession(Landroid/os/Bundle;Ljava/util/Locale;Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListener;Z)Landroid/view/textservice/SpellCheckerSession;"/>
</class>
<class name="android/webkit/CacheManager" since="1" deprecated="11" removed="17">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
- <method name="cacheDisabled()Z" deprecated="16"/>
- <method name="endCacheTransaction()Z" deprecated="16"/>
- <method name="getCacheFile(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/CacheManager$CacheResult;" deprecated="16"/>
- <method name="getCacheFileBaseDir()Ljava/io/File;" deprecated="16"/>
- <method name="saveCacheFile(Ljava/lang/String;Landroid/webkit/CacheManager$CacheResult;)V" deprecated="16"/>
- <method name="startCacheTransaction()Z" deprecated="16"/>
+ <method name="cacheDisabled()Z" deprecated="15"/>
+ <method name="endCacheTransaction()Z" deprecated="15"/>
+ <method name="getCacheFile(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/CacheManager$CacheResult;" deprecated="15"/>
+ <method name="getCacheFileBaseDir()Ljava/io/File;" deprecated="15"/>
+ <method name="saveCacheFile(Ljava/lang/String;Landroid/webkit/CacheManager$CacheResult;)V" deprecated="15"/>
+ <method name="startCacheTransaction()Z" deprecated="15"/>
</class>
<class name="android/webkit/CacheManager$CacheResult" since="1" deprecated="11" removed="17">
<extends name="java/lang/Object"/>
@@ -51995,48 +55468,6 @@
<method name="setEncoding(Ljava/lang/String;)V"/>
<method name="setInputStream(Ljava/io/InputStream;)V"/>
</class>
- <class name="android/webkit/CallbackProxy" since="1" removed="8">
- <extends name="android/os/Handler"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/webkit/WebView;)V"/>
- <method name="addMessageToConsole(Ljava/lang/String;ILjava/lang/String;)V" since="7"/>
- <method name="createWindow(ZZ)Landroid/webkit/WebView;"/>
- <method name="doUpdateVisitedHistory(Ljava/lang/String;Z)V"/>
- <method name="getBackForwardList()Landroid/webkit/WebBackForwardList;"/>
- <method name="getProgress()I"/>
- <method name="getVisitedHistory(Landroid/webkit/ValueCallback;)V" since="7"/>
- <method name="getWebChromeClient()Landroid/webkit/WebChromeClient;" since="7"/>
- <method name="onCloseWindow(Landroid/webkit/WebView;)V"/>
- <method name="onDownloadStart(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)Z"/>
- <method name="onExceededDatabaseQuota(Ljava/lang/String;Ljava/lang/String;JJJLandroid/webkit/WebStorage$QuotaUpdater;)V" since="5"/>
- <method name="onFormResubmission(Landroid/os/Message;Landroid/os/Message;)V"/>
- <method name="onGeolocationPermissionsHidePrompt()V" since="7"/>
- <method name="onGeolocationPermissionsShowPrompt(Ljava/lang/String;Landroid/webkit/GeolocationPermissions$Callback;)V" since="7"/>
- <method name="onJsAlert(Ljava/lang/String;Ljava/lang/String;)V"/>
- <method name="onJsBeforeUnload(Ljava/lang/String;Ljava/lang/String;)Z"/>
- <method name="onJsConfirm(Ljava/lang/String;Ljava/lang/String;)Z"/>
- <method name="onJsPrompt(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
- <method name="onJsTimeout()Z" since="7"/>
- <method name="onLoadResource(Ljava/lang/String;)V"/>
- <method name="onPageFinished(Ljava/lang/String;)V"/>
- <method name="onPageStarted(Ljava/lang/String;Landroid/graphics/Bitmap;)V"/>
- <method name="onProgressChanged(I)V"/>
- <method name="onReachedMaxAppCacheSize(JJLandroid/webkit/WebStorage$QuotaUpdater;)V" since="7"/>
- <method name="onReceivedError(ILjava/lang/String;Ljava/lang/String;)V"/>
- <method name="onReceivedHttpAuthRequest(Landroid/webkit/HttpAuthHandler;Ljava/lang/String;Ljava/lang/String;)V"/>
- <method name="onReceivedIcon(Landroid/graphics/Bitmap;)V"/>
- <method name="onReceivedTitle(Ljava/lang/String;)V"/>
- <method name="onRequestFocus()V"/>
- <method name="onSavePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)Z"/>
- <method name="onScaleChanged(FF)V"/>
- <method name="onTooManyRedirects(Landroid/os/Message;Landroid/os/Message;)V"/>
- <method name="onUnhandledKeyEvent(Landroid/view/KeyEvent;)V"/>
- <method name="setDownloadListener(Landroid/webkit/DownloadListener;)V"/>
- <method name="setWebChromeClient(Landroid/webkit/WebChromeClient;)V"/>
- <method name="setWebViewClient(Landroid/webkit/WebViewClient;)V"/>
- <method name="shouldOverrideUrlLoading(Ljava/lang/String;)Z"/>
- <method name="uiOverrideKeyEvent(Landroid/view/KeyEvent;)Z"/>
- <method name="uiOverrideUrlLoading(Ljava/lang/String;)Z"/>
- </class>
<class name="android/webkit/ClientCertRequest" since="21">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
@@ -52068,7 +55499,7 @@
</class>
<class name="android/webkit/CookieManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" since="22" deprecated="29"/>
<method name="acceptCookie()Z"/>
<method name="acceptThirdPartyCookies(Landroid/webkit/WebView;)Z" since="21"/>
<method name="allowFileSchemeCookies()Z" since="12"/>
@@ -52088,15 +55519,19 @@
<method name="setCookie(Ljava/lang/String;Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="21"/>
</class>
<class name="android/webkit/CookieSyncManager" since="1" deprecated="21">
- <extends name="android/webkit/WebSyncManager" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
- <method name="&lt;init>()V"/>
- <method name="createInstance(Landroid/content/Context;)Landroid/webkit/CookieSyncManager;"/>
- <method name="getInstance()Landroid/webkit/CookieSyncManager;"/>
+ <extends name="java/lang/Object"/>
+ <implements name="java/lang/Runnable"/>
+ <method name="createInstance(Landroid/content/Context;)Landroid/webkit/CookieSyncManager;" deprecated="29"/>
+ <method name="getInstance()Landroid/webkit/CookieSyncManager;" deprecated="29"/>
+ <method name="onSyncInit()V" since="28" removed="29"/>
+ <method name="resetSync()V" since="9" deprecated="21"/>
+ <method name="startSync()V" since="9" deprecated="21"/>
+ <method name="stopSync()V" since="9" deprecated="21"/>
+ <method name="sync()V" since="9" deprecated="21"/>
<method name="syncFromRamToFlash()V" deprecated="21"/>
- <field name="LOGTAG" since="21" removed="29"/>
- <field name="mDataBase" since="21" removed="29"/>
- <field name="mHandler" since="21" removed="29"/>
+ <field name="LOGTAG" since="21" removed="28"/>
+ <field name="mDataBase" since="21" removed="28"/>
+ <field name="mHandler" since="21" removed="28"/>
</class>
<class name="android/webkit/DateSorter" since="1">
<extends name="java/lang/Object"/>
@@ -52112,7 +55547,7 @@
</class>
<class name="android/webkit/GeolocationPermissions" since="5">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" removed="16"/>
<method name="allow(Ljava/lang/String;)V" since="7"/>
<method name="clear(Ljava/lang/String;)V" since="7"/>
<method name="clearAll()V" since="7"/>
@@ -52126,7 +55561,6 @@
</class>
<class name="android/webkit/HttpAuthHandler" since="1">
<extends name="android/os/Handler"/>
- <method name="&lt;init>()V"/>
<method name="cancel()V"/>
<method name="proceed(Ljava/lang/String;Ljava/lang/String;)V"/>
<method name="useHttpAuthUsernamePassword()Z"/>
@@ -52137,12 +55571,10 @@
</class>
<class name="android/webkit/JsPromptResult" since="1">
<extends name="android/webkit/JsResult"/>
- <method name="&lt;init>()V"/>
<method name="confirm(Ljava/lang/String;)V"/>
</class>
<class name="android/webkit/JsResult" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="cancel()V"/>
<method name="confirm()V"/>
<method name="wakeUp()V" removed="16"/>
@@ -52151,7 +55583,6 @@
</class>
<class name="android/webkit/MimeTypeMap" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getExtensionFromMimeType(Ljava/lang/String;)Ljava/lang/String;"/>
<method name="getFileExtensionFromUrl(Ljava/lang/String;)Ljava/lang/String;"/>
<method name="getMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String;"/>
@@ -52213,13 +55644,13 @@
</class>
<class name="android/webkit/RenderProcessGoneDetail" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
<method name="didCrash()Z"/>
<method name="rendererPriorityAtExit()I"/>
</class>
<class name="android/webkit/SafeBrowsingResponse" since="27">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
<method name="backToSafety(Z)V"/>
<method name="proceed(Z)V"/>
<method name="showInterstitial(Z)V"/>
@@ -52231,7 +55662,7 @@
</class>
<class name="android/webkit/ServiceWorkerController" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
<method name="getInstance()Landroid/webkit/ServiceWorkerController;"/>
<method name="getServiceWorkerWebSettings()Landroid/webkit/ServiceWorkerWebSettings;"/>
<method name="setServiceWorkerClient(Landroid/webkit/ServiceWorkerClient;)V"/>
@@ -52250,14 +55681,11 @@
</class>
<class name="android/webkit/SslErrorHandler" since="1">
<extends name="android/os/Handler"/>
- <method name="&lt;init>()V"/>
<method name="cancel()V"/>
<method name="proceed()V"/>
</class>
<class name="android/webkit/TracingConfig" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILjava/util/List;I)V" since="29"/>
<method name="getCustomIncludedCategories()Ljava/util/List;"/>
<method name="getPredefinedCategories()I"/>
<method name="getTracingMode()I"/>
@@ -52283,7 +55711,7 @@
</class>
<class name="android/webkit/TracingController" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
<method name="getInstance()Landroid/webkit/TracingController;"/>
<method name="isTracing()Z"/>
<method name="start(Landroid/webkit/TracingConfig;)V"/>
@@ -52299,7 +55727,7 @@
<method name="isAboutUrl(Ljava/lang/String;)Z"/>
<method name="isAssetUrl(Ljava/lang/String;)Z"/>
<method name="isContentUrl(Ljava/lang/String;)Z"/>
- <method name="isCookielessProxyUrl(Ljava/lang/String;)Z" deprecated="16"/>
+ <method name="isCookielessProxyUrl(Ljava/lang/String;)Z" deprecated="15"/>
<method name="isDataUrl(Ljava/lang/String;)Z"/>
<method name="isFileUrl(Ljava/lang/String;)Z"/>
<method name="isHttpUrl(Ljava/lang/String;)Z"/>
@@ -52332,7 +55760,7 @@
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
<implements name="java/lang/Cloneable"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" since="22"/>
<method name="clone()Landroid/webkit/WebBackForwardList;"/>
<method name="getCurrentIndex()I"/>
<method name="getCurrentItem()Landroid/webkit/WebHistoryItem;"/>
@@ -52347,7 +55775,7 @@
<method name="getVisitedHistory(Landroid/webkit/ValueCallback;)V" since="7"/>
<method name="onCloseWindow(Landroid/webkit/WebView;)V"/>
<method name="onConsoleMessage(Landroid/webkit/ConsoleMessage;)Z" since="8"/>
- <method name="onConsoleMessage(Ljava/lang/String;ILjava/lang/String;)V" since="7" deprecated="16"/>
+ <method name="onConsoleMessage(Ljava/lang/String;ILjava/lang/String;)V" since="7" deprecated="15"/>
<method name="onCreateWindow(Landroid/webkit/WebView;ZZLandroid/os/Message;)Z"/>
<method name="onExceededDatabaseQuota(Ljava/lang/String;Ljava/lang/String;JJJLandroid/webkit/WebStorage$QuotaUpdater;)V" since="5" deprecated="19"/>
<method name="onGeolocationPermissionsHidePrompt()V" since="5"/>
@@ -52391,28 +55819,28 @@
<class name="android/webkit/WebHistoryItem" since="1">
<extends name="java/lang/Object"/>
<implements name="java/lang/Cloneable"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" since="22"/>
<method name="clone()Landroid/webkit/WebHistoryItem;"/>
<method name="getFavicon()Landroid/graphics/Bitmap;"/>
- <method name="getId()I" deprecated="16" removed="17"/>
+ <method name="getId()I" deprecated="15" removed="17"/>
<method name="getOriginalUrl()Ljava/lang/String;" since="3"/>
<method name="getTitle()Ljava/lang/String;"/>
<method name="getUrl()Ljava/lang/String;"/>
</class>
<class name="android/webkit/WebIconDatabase" since="1" deprecated="18">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="close()V"/>
- <method name="getInstance()Landroid/webkit/WebIconDatabase;"/>
- <method name="open(Ljava/lang/String;)V"/>
- <method name="releaseIconForPageUrl(Ljava/lang/String;)V"/>
- <method name="removeAllIcons()V"/>
- <method name="requestIconForPageUrl(Ljava/lang/String;Landroid/webkit/WebIconDatabase$IconListener;)V"/>
- <method name="retainIconForPageUrl(Ljava/lang/String;)V"/>
+ <method name="&lt;init>()V" since="22" deprecated="29"/>
+ <method name="close()V" deprecated="29"/>
+ <method name="getInstance()Landroid/webkit/WebIconDatabase;" deprecated="29"/>
+ <method name="open(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="releaseIconForPageUrl(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="removeAllIcons()V" deprecated="29"/>
+ <method name="requestIconForPageUrl(Ljava/lang/String;Landroid/webkit/WebIconDatabase$IconListener;)V" deprecated="29"/>
+ <method name="retainIconForPageUrl(Ljava/lang/String;)V" deprecated="29"/>
</class>
<class name="android/webkit/WebIconDatabase$IconListener" since="1" deprecated="18">
<extends name="java/lang/Object"/>
- <method name="onReceivedIcon(Ljava/lang/String;Landroid/graphics/Bitmap;)V"/>
+ <method name="onReceivedIcon(Ljava/lang/String;Landroid/graphics/Bitmap;)V" deprecated="29"/>
</class>
<class name="android/webkit/WebMessage" since="23">
<extends name="java/lang/Object"/>
@@ -52423,7 +55851,6 @@
</class>
<class name="android/webkit/WebMessagePort" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="close()V"/>
<method name="postMessage(Landroid/webkit/WebMessage;)V"/>
<method name="setWebMessageCallback(Landroid/webkit/WebMessagePort$WebMessageCallback;)V"/>
@@ -52436,7 +55863,6 @@
</class>
<class name="android/webkit/WebResourceError" since="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getDescription()Ljava/lang/CharSequence;"/>
<method name="getErrorCode()I"/>
</class>
@@ -52467,7 +55893,7 @@
</class>
<class name="android/webkit/WebSettings" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" since="22"/>
<method name="enableSmoothTransition()Z" since="11" deprecated="17"/>
<method name="getAllowContentAccess()Z" since="11"/>
<method name="getAllowFileAccess()Z" since="3"/>
@@ -52490,6 +55916,7 @@
<method name="getDomStorageEnabled()Z" since="7"/>
<method name="getFantasyFontFamily()Ljava/lang/String;"/>
<method name="getFixedFontFamily()Ljava/lang/String;"/>
+ <method name="getForceDark()I" since="29"/>
<method name="getJavaScriptCanOpenWindowsAutomatically()Z"/>
<method name="getJavaScriptEnabled()Z"/>
<method name="getLayoutAlgorithm()Landroid/webkit/WebSettings$LayoutAlgorithm;"/>
@@ -52500,23 +55927,23 @@
<method name="getMinimumFontSize()I"/>
<method name="getMinimumLogicalFontSize()I"/>
<method name="getMixedContentMode()I" since="21"/>
- <method name="getNavDump()Z" deprecated="16" removed="17"/>
+ <method name="getNavDump()Z" deprecated="15" removed="17"/>
<method name="getOffscreenPreRaster()Z" since="23"/>
<method name="getPluginState()Landroid/webkit/WebSettings$PluginState;" since="8" deprecated="18"/>
- <method name="getPluginsEnabled()Z" deprecated="16" removed="18"/>
- <method name="getPluginsPath()Ljava/lang/String;" deprecated="16" removed="18"/>
+ <method name="getPluginsEnabled()Z" deprecated="15" removed="18"/>
+ <method name="getPluginsPath()Ljava/lang/String;" deprecated="15" removed="18"/>
<method name="getSafeBrowsingEnabled()Z" since="26"/>
<method name="getSansSerifFontFamily()Ljava/lang/String;"/>
<method name="getSaveFormData()Z" deprecated="26"/>
<method name="getSavePassword()Z" deprecated="18"/>
<method name="getSerifFontFamily()Ljava/lang/String;"/>
<method name="getStandardFontFamily()Ljava/lang/String;"/>
- <method name="getTextSize()Landroid/webkit/WebSettings$TextSize;" deprecated="16"/>
+ <method name="getTextSize()Landroid/webkit/WebSettings$TextSize;" deprecated="15"/>
<method name="getTextZoom()I" since="14"/>
- <method name="getUseDoubleTree()Z" deprecated="16" removed="17"/>
- <method name="getUseWebViewBackgroundForOverscrollBackground()Z" since="9" deprecated="16" removed="17"/>
+ <method name="getUseDoubleTree()Z" deprecated="15" removed="17"/>
+ <method name="getUseWebViewBackgroundForOverscrollBackground()Z" since="9" deprecated="15" removed="17"/>
<method name="getUseWideViewPort()Z"/>
- <method name="getUserAgent()I" deprecated="16" removed="17"/>
+ <method name="getUserAgent()I" deprecated="15" removed="17"/>
<method name="getUserAgentString()Ljava/lang/String;" since="3"/>
<method name="setAllowContentAccess(Z)V" since="11"/>
<method name="setAllowFileAccess(Z)V" since="3"/>
@@ -52542,6 +55969,7 @@
<method name="setEnableSmoothTransition(Z)V" since="11" deprecated="17"/>
<method name="setFantasyFontFamily(Ljava/lang/String;)V"/>
<method name="setFixedFontFamily(Ljava/lang/String;)V"/>
+ <method name="setForceDark(I)V" since="29"/>
<method name="setGeolocationDatabasePath(Ljava/lang/String;)V" since="5" deprecated="24"/>
<method name="setGeolocationEnabled(Z)V" since="5"/>
<method name="setJavaScriptCanOpenWindowsAutomatically(Z)V"/>
@@ -52554,12 +55982,12 @@
<method name="setMinimumFontSize(I)V"/>
<method name="setMinimumLogicalFontSize(I)V"/>
<method name="setMixedContentMode(I)V" since="21"/>
- <method name="setNavDump(Z)V" deprecated="16" removed="17"/>
+ <method name="setNavDump(Z)V" deprecated="15" removed="17"/>
<method name="setNeedInitialFocus(Z)V"/>
<method name="setOffscreenPreRaster(Z)V" since="23"/>
<method name="setPluginState(Landroid/webkit/WebSettings$PluginState;)V" since="8" deprecated="18"/>
- <method name="setPluginsEnabled(Z)V" deprecated="16" removed="18"/>
- <method name="setPluginsPath(Ljava/lang/String;)V" deprecated="16" removed="18"/>
+ <method name="setPluginsEnabled(Z)V" deprecated="15" removed="18"/>
+ <method name="setPluginsPath(Ljava/lang/String;)V" deprecated="15" removed="18"/>
<method name="setRenderPriority(Landroid/webkit/WebSettings$RenderPriority;)V" deprecated="18"/>
<method name="setSafeBrowsingEnabled(Z)V" since="26"/>
<method name="setSansSerifFontFamily(Ljava/lang/String;)V"/>
@@ -52569,15 +55997,18 @@
<method name="setStandardFontFamily(Ljava/lang/String;)V"/>
<method name="setSupportMultipleWindows(Z)V"/>
<method name="setSupportZoom(Z)V"/>
- <method name="setTextSize(Landroid/webkit/WebSettings$TextSize;)V" deprecated="16"/>
+ <method name="setTextSize(Landroid/webkit/WebSettings$TextSize;)V" deprecated="15"/>
<method name="setTextZoom(I)V" since="14"/>
- <method name="setUseDoubleTree(Z)V" deprecated="16" removed="17"/>
- <method name="setUseWebViewBackgroundForOverscrollBackground(Z)V" since="9" deprecated="16" removed="17"/>
+ <method name="setUseDoubleTree(Z)V" deprecated="15" removed="17"/>
+ <method name="setUseWebViewBackgroundForOverscrollBackground(Z)V" since="9" deprecated="15" removed="17"/>
<method name="setUseWideViewPort(Z)V"/>
- <method name="setUserAgent(I)V" deprecated="16" removed="17"/>
+ <method name="setUserAgent(I)V" deprecated="15" removed="17"/>
<method name="setUserAgentString(Ljava/lang/String;)V" since="3"/>
<method name="supportMultipleWindows()Z"/>
<method name="supportZoom()Z"/>
+ <field name="FORCE_DARK_AUTO" since="29"/>
+ <field name="FORCE_DARK_OFF" since="29"/>
+ <field name="FORCE_DARK_ON" since="29"/>
<field name="LOAD_CACHE_ELSE_NETWORK"/>
<field name="LOAD_CACHE_ONLY"/>
<field name="LOAD_DEFAULT"/>
@@ -52595,9 +56026,9 @@
<extends name="java/lang/Enum"/>
<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$LayoutAlgorithm;"/>
<method name="values()[Landroid/webkit/WebSettings$LayoutAlgorithm;"/>
- <field name="NARROW_COLUMNS" deprecated="28"/>
+ <field name="NARROW_COLUMNS" deprecated="29"/>
<field name="NORMAL"/>
- <field name="SINGLE_COLUMN" deprecated="28"/>
+ <field name="SINGLE_COLUMN" deprecated="29"/>
<field name="TEXT_AUTOSIZING" since="19"/>
</class>
<class name="android/webkit/WebSettings$PluginState" since="8">
@@ -52616,15 +56047,15 @@
<field name="LOW"/>
<field name="NORMAL"/>
</class>
- <class name="android/webkit/WebSettings$TextSize" since="1" deprecated="16">
+ <class name="android/webkit/WebSettings$TextSize" since="1" deprecated="15">
<extends name="java/lang/Enum"/>
<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$TextSize;"/>
<method name="values()[Landroid/webkit/WebSettings$TextSize;"/>
- <field name="LARGER"/>
- <field name="LARGEST"/>
- <field name="NORMAL"/>
- <field name="SMALLER"/>
- <field name="SMALLEST"/>
+ <field name="LARGER" deprecated="29"/>
+ <field name="LARGEST" deprecated="29"/>
+ <field name="NORMAL" deprecated="29"/>
+ <field name="SMALLER" deprecated="29"/>
+ <field name="SMALLEST" deprecated="29"/>
</class>
<class name="android/webkit/WebSettings$ZoomDensity" since="7">
<extends name="java/lang/Enum"/>
@@ -52636,7 +56067,7 @@
</class>
<class name="android/webkit/WebStorage" since="5">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" removed="16"/>
<method name="deleteAllData()V" since="7"/>
<method name="deleteOrigin(Ljava/lang/String;)V" since="7"/>
<method name="getInstance()Landroid/webkit/WebStorage;" since="7"/>
@@ -52647,28 +56078,13 @@
</class>
<class name="android/webkit/WebStorage$Origin" since="11">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;JJ)V" since="29"/>
<method name="getOrigin()Ljava/lang/String;"/>
<method name="getQuota()J"/>
<method name="getUsage()J"/>
</class>
<class name="android/webkit/WebStorage$QuotaUpdater" since="5" deprecated="19">
<extends name="java/lang/Object"/>
- <method name="updateQuota(J)V"/>
- </class>
- <class name="android/webkit/WebSyncManager" since="1" deprecated="21" removed="29">
- <extends name="java/lang/Object"/>
- <implements name="java/lang/Runnable"/>
- <method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V"/>
- <method name="onSyncInit()V"/>
- <method name="resetSync()V"/>
- <method name="startSync()V"/>
- <method name="stopSync()V"/>
- <method name="sync()V"/>
- <field name="LOGTAG"/>
- <field name="mDataBase"/>
- <field name="mHandler"/>
+ <method name="updateQuota(J)V" deprecated="29"/>
</class>
<class name="android/webkit/WebView" since="1">
<extends name="android/widget/AbsoluteLayout"/>
@@ -52697,13 +56113,13 @@
<method name="createPrintDocumentAdapter()Landroid/print/PrintDocumentAdapter;" since="19" deprecated="21"/>
<method name="createPrintDocumentAdapter(Ljava/lang/String;)Landroid/print/PrintDocumentAdapter;" since="21"/>
<method name="createWebMessageChannel()[Landroid/webkit/WebMessagePort;" since="23"/>
- <method name="debugDump()V" deprecated="16" removed="17"/>
+ <method name="debugDump()V" deprecated="15" removed="17"/>
<method name="destroy()V"/>
- <method name="disablePlatformNotifications()V" deprecated="16" removed="17"/>
+ <method name="disablePlatformNotifications()V" deprecated="15" removed="17"/>
<method name="disableWebView()V" since="28"/>
<method name="documentHasImages(Landroid/os/Message;)V"/>
- <method name="emulateShiftHeld()V" since="8" deprecated="16" removed="17"/>
- <method name="enablePlatformNotifications()V" deprecated="16" removed="17"/>
+ <method name="emulateShiftHeld()V" since="8" deprecated="15" removed="17"/>
+ <method name="enablePlatformNotifications()V" deprecated="15" removed="17"/>
<method name="enableSlowWholeDocumentDraw()V" since="21"/>
<method name="evaluateJavascript(Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="19"/>
<method name="findAddress(Ljava/lang/String;)Ljava/lang/String;" deprecated="28"/>
@@ -52729,12 +56145,14 @@
<method name="getTextClassifier()Landroid/view/textclassifier/TextClassifier;" since="27"/>
<method name="getTitle()Ljava/lang/String;"/>
<method name="getUrl()Ljava/lang/String;"/>
- <method name="getVisibleTitleHeight()I" since="11" deprecated="16" removed="17"/>
+ <method name="getVisibleTitleHeight()I" since="11" deprecated="15" removed="17"/>
<method name="getWebChromeClient()Landroid/webkit/WebChromeClient;" since="26"/>
<method name="getWebViewClassLoader()Ljava/lang/ClassLoader;" since="28"/>
<method name="getWebViewClient()Landroid/webkit/WebViewClient;" since="26"/>
<method name="getWebViewLooper()Landroid/os/Looper;" since="28"/>
- <method name="getZoomControls()Landroid/view/View;" removed="16"/>
+ <method name="getWebViewRenderProcess()Landroid/webkit/WebViewRenderProcess;" since="29"/>
+ <method name="getWebViewRenderProcessClient()Landroid/webkit/WebViewRenderProcessClient;" since="29"/>
+ <method name="getZoomControls()Landroid/view/View;" deprecated="15" removed="16"/>
<method name="goBack()V"/>
<method name="goBackOrForward(I)V"/>
<method name="goForward()V"/>
@@ -52759,11 +56177,11 @@
<method name="removeJavascriptInterface(Ljava/lang/String;)V" since="11"/>
<method name="requestFocusNodeHref(Landroid/os/Message;)V"/>
<method name="requestImageRef(Landroid/os/Message;)V"/>
- <method name="restorePicture(Landroid/os/Bundle;Ljava/io/File;)Z" since="3" deprecated="16" removed="17"/>
+ <method name="restorePicture(Landroid/os/Bundle;Ljava/io/File;)Z" since="3" deprecated="15" removed="17"/>
<method name="restoreState(Landroid/os/Bundle;)Landroid/webkit/WebBackForwardList;"/>
<method name="resumeTimers()V"/>
<method name="savePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="18"/>
- <method name="savePicture(Landroid/os/Bundle;Ljava/io/File;)Z" since="3" deprecated="16" removed="17"/>
+ <method name="savePicture(Landroid/os/Bundle;Ljava/io/File;)Z" since="3" deprecated="15" removed="17"/>
<method name="saveState(Landroid/os/Bundle;)Landroid/webkit/WebBackForwardList;"/>
<method name="saveWebArchive(Ljava/lang/String;)V" since="11"/>
<method name="saveWebArchive(Ljava/lang/String;ZLandroid/webkit/ValueCallback;)V" since="11"/>
@@ -52776,7 +56194,7 @@
<method name="setInitialScale(I)V"/>
<method name="setMapTrackballToArrowKeys(Z)V" deprecated="17"/>
<method name="setNetworkAvailable(Z)V" since="3"/>
- <method name="setPictureListener(Landroid/webkit/WebView$PictureListener;)V" deprecated="16"/>
+ <method name="setPictureListener(Landroid/webkit/WebView$PictureListener;)V" deprecated="15"/>
<method name="setRendererPriorityPolicy(IZ)V" since="26"/>
<method name="setSafeBrowsingWhitelist(Ljava/util/List;Landroid/webkit/ValueCallback;)V" since="27"/>
<method name="setTextClassifier(Landroid/view/textclassifier/TextClassifier;)V" since="27"/>
@@ -52784,6 +56202,8 @@
<method name="setWebChromeClient(Landroid/webkit/WebChromeClient;)V"/>
<method name="setWebContentsDebuggingEnabled(Z)V" since="19"/>
<method name="setWebViewClient(Landroid/webkit/WebViewClient;)V"/>
+ <method name="setWebViewRenderProcessClient(Landroid/webkit/WebViewRenderProcessClient;)V" since="29"/>
+ <method name="setWebViewRenderProcessClient(Ljava/util/concurrent/Executor;Landroid/webkit/WebViewRenderProcessClient;)V" since="29"/>
<method name="showFindDialog(Ljava/lang/String;Z)Z" since="11" deprecated="18"/>
<method name="startSafeBrowsing(Landroid/content/Context;Landroid/webkit/ValueCallback;)V" since="27"/>
<method name="stopLoading()V"/>
@@ -52803,15 +56223,13 @@
</class>
<class name="android/webkit/WebView$HitTestResult" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" since="16"/>
- <method name="&lt;init>(Landroid/webkit/WebView;)V" removed="16"/>
<method name="getExtra()Ljava/lang/String;"/>
<method name="getType()I"/>
- <field name="ANCHOR_TYPE" deprecated="16"/>
+ <field name="ANCHOR_TYPE" deprecated="15"/>
<field name="EDIT_TEXT_TYPE"/>
<field name="EMAIL_TYPE"/>
<field name="GEO_TYPE"/>
- <field name="IMAGE_ANCHOR_TYPE" deprecated="16"/>
+ <field name="IMAGE_ANCHOR_TYPE" deprecated="15"/>
<field name="IMAGE_TYPE"/>
<field name="PHONE_TYPE"/>
<field name="SRC_ANCHOR_TYPE"/>
@@ -52820,7 +56238,7 @@
</class>
<class name="android/webkit/WebView$PictureListener" since="1" deprecated="12">
<extends name="java/lang/Object"/>
- <method name="onNewPicture(Landroid/webkit/WebView;Landroid/graphics/Picture;)V" deprecated="16"/>
+ <method name="onNewPicture(Landroid/webkit/WebView;Landroid/graphics/Picture;)V" deprecated="15"/>
</class>
<class name="android/webkit/WebView$VisualStateCallback" since="23">
<extends name="java/lang/Object"/>
@@ -52852,7 +56270,7 @@
<method name="onRenderProcessGone(Landroid/webkit/WebView;Landroid/webkit/RenderProcessGoneDetail;)Z" since="26"/>
<method name="onSafeBrowsingHit(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;ILandroid/webkit/SafeBrowsingResponse;)V" since="27"/>
<method name="onScaleChanged(Landroid/webkit/WebView;FF)V"/>
- <method name="onTooManyRedirects(Landroid/webkit/WebView;Landroid/os/Message;Landroid/os/Message;)V" deprecated="16"/>
+ <method name="onTooManyRedirects(Landroid/webkit/WebView;Landroid/os/Message;Landroid/os/Message;)V" deprecated="15"/>
<method name="onUnhandledInputEvent(Landroid/webkit/WebView;Landroid/view/InputEvent;)V" since="21" removed="24"/>
<method name="onUnhandledKeyEvent(Landroid/webkit/WebView;Landroid/view/KeyEvent;)V" deprecated="21"/>
<method name="shouldInterceptRequest(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;)Landroid/webkit/WebResourceResponse;" since="21"/>
@@ -52876,6 +56294,7 @@
<field name="ERROR_UNSAFE_RESOURCE" since="26"/>
<field name="ERROR_UNSUPPORTED_AUTH_SCHEME" since="5"/>
<field name="ERROR_UNSUPPORTED_SCHEME" since="5"/>
+ <field name="SAFE_BROWSING_THREAT_BILLING" since="29"/>
<field name="SAFE_BROWSING_THREAT_MALWARE" since="27"/>
<field name="SAFE_BROWSING_THREAT_PHISHING" since="27"/>
<field name="SAFE_BROWSING_THREAT_UNKNOWN" since="27"/>
@@ -52883,7 +56302,7 @@
</class>
<class name="android/webkit/WebViewDatabase" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" since="22" deprecated="29"/>
<method name="clearFormData()V" deprecated="26"/>
<method name="clearHttpAuthUsernamePassword()V"/>
<method name="clearUsernamePassword()V" deprecated="18"/>
@@ -52897,8 +56316,19 @@
</class>
<class name="android/webkit/WebViewFragment" since="11" deprecated="28">
<extends name="android/app/Fragment"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="getWebView()Landroid/webkit/WebView;" deprecated="29"/>
+ </class>
+ <class name="android/webkit/WebViewRenderProcess" since="29">
+ <extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
- <method name="getWebView()Landroid/webkit/WebView;"/>
+ <method name="terminate()Z"/>
+ </class>
+ <class name="android/webkit/WebViewRenderProcessClient" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="onRenderProcessResponsive(Landroid/webkit/WebView;Landroid/webkit/WebViewRenderProcess;)V"/>
+ <method name="onRenderProcessUnresponsive(Landroid/webkit/WebView;Landroid/webkit/WebViewRenderProcess;)V"/>
</class>
<class name="android/widget/AbsListView" since="1">
<extends name="android/widget/AdapterView"/>
@@ -52916,6 +56346,7 @@
<method name="deferNotifyDataSetChanged()V" since="14"/>
<method name="fling(I)V" since="21"/>
<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/AbsListView$LayoutParams;"/>
+ <method name="getBottomEdgeEffectColor()I" since="29"/>
<method name="getCacheColorHint()I"/>
<method name="getCheckedItemCount()I" since="11"/>
<method name="getCheckedItemIds()[J" since="11"/>
@@ -52928,10 +56359,12 @@
<method name="getListPaddingTop()I"/>
<method name="getSelector()Landroid/graphics/drawable/Drawable;"/>
<method name="getTextFilter()Ljava/lang/CharSequence;" since="3"/>
+ <method name="getTopEdgeEffectColor()I" since="29"/>
<method name="getTranscriptMode()I"/>
<method name="handleDataChanged()V"/>
<method name="hasTextFilter()Z"/>
<method name="invalidateViews()V"/>
+ <method name="isDrawSelectorOnTop()Z" since="29"/>
<method name="isFastScrollAlwaysVisible()Z" since="11"/>
<method name="isFastScrollEnabled()Z" since="3"/>
<method name="isInFilterMode()Z"/>
@@ -52949,9 +56382,11 @@
<method name="reclaimViews(Ljava/util/List;)V"/>
<method name="scrollListBy(I)V" since="19"/>
<method name="setAdapter(Landroid/widget/ListAdapter;)V" since="11"/>
+ <method name="setBottomEdgeEffectColor(I)V" since="29"/>
<method name="setCacheColorHint(I)V"/>
<method name="setChoiceMode(I)V" since="11"/>
<method name="setDrawSelectorOnTop(Z)V"/>
+ <method name="setEdgeEffectColor(I)V" since="29"/>
<method name="setFastScrollAlwaysVisible(Z)V" since="11"/>
<method name="setFastScrollEnabled(Z)V" since="3"/>
<method name="setFastScrollStyle(I)V" since="21"/>
@@ -52970,6 +56405,7 @@
<method name="setSmoothScrollbarEnabled(Z)V" since="3"/>
<method name="setStackFromBottom(Z)V"/>
<method name="setTextFilterEnabled(Z)V"/>
+ <method name="setTopEdgeEffectColor(I)V" since="29"/>
<method name="setTranscriptMode(I)V"/>
<method name="setVelocityScale(F)V" since="11"/>
<method name="smoothScrollBy(II)V" since="8"/>
@@ -53023,18 +56459,22 @@
<method name="getSplitTrack()Z" since="21"/>
<method name="getThumb()Landroid/graphics/drawable/Drawable;" since="16"/>
<method name="getThumbOffset()I"/>
+ <method name="getThumbTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getThumbTintList()Landroid/content/res/ColorStateList;" since="21"/>
<method name="getThumbTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
<method name="getTickMark()Landroid/graphics/drawable/Drawable;" since="24"/>
+ <method name="getTickMarkTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getTickMarkTintList()Landroid/content/res/ColorStateList;" since="24"/>
<method name="getTickMarkTintMode()Landroid/graphics/PorterDuff$Mode;" since="24"/>
<method name="setKeyProgressIncrement(I)V" since="3"/>
<method name="setSplitTrack(Z)V" since="21"/>
<method name="setThumb(Landroid/graphics/drawable/Drawable;)V"/>
<method name="setThumbOffset(I)V"/>
+ <method name="setThumbTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setThumbTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
<method name="setThumbTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
<method name="setTickMark(Landroid/graphics/drawable/Drawable;)V" since="24"/>
+ <method name="setTickMarkTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setTickMarkTintList(Landroid/content/res/ColorStateList;)V" since="24"/>
<method name="setTickMarkTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="24"/>
</class>
@@ -53051,19 +56491,19 @@
</class>
<class name="android/widget/AbsoluteLayout" since="1" deprecated="3">
<extends name="android/view/ViewGroup"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
</class>
- <class name="android/widget/AbsoluteLayout$LayoutParams" since="1">
+ <class name="android/widget/AbsoluteLayout$LayoutParams" since="1" deprecated="29">
<extends name="android/view/ViewGroup$LayoutParams"/>
- <method name="&lt;init>(IIII)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
- <method name="debug(Ljava/lang/String;)Ljava/lang/String;"/>
- <field name="x"/>
- <field name="y"/>
+ <method name="&lt;init>(IIII)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V" deprecated="29"/>
+ <method name="debug(Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+ <field name="x" deprecated="29"/>
+ <field name="y" deprecated="29"/>
</class>
<class name="android/widget/ActionMenuView" since="21">
<extends name="android/widget/LinearLayout"/>
@@ -53221,10 +56661,10 @@
</class>
<class name="android/widget/AnalogClock" since="1" deprecated="23">
<extends name="android/view/View"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
</class>
<class name="android/widget/ArrayAdapter" since="1">
<extends name="android/widget/BaseAdapter"/>
@@ -53270,8 +56710,9 @@
<method name="getDropDownVerticalOffset()I" since="5"/>
<method name="getDropDownWidth()I" since="3"/>
<method name="getFilter()Landroid/widget/Filter;"/>
- <method name="getItemClickListener()Landroid/widget/AdapterView$OnItemClickListener;" deprecated="16"/>
- <method name="getItemSelectedListener()Landroid/widget/AdapterView$OnItemSelectedListener;" deprecated="16"/>
+ <method name="getInputMethodMode()I" since="29"/>
+ <method name="getItemClickListener()Landroid/widget/AdapterView$OnItemClickListener;" deprecated="15"/>
+ <method name="getItemSelectedListener()Landroid/widget/AdapterView$OnItemSelectedListener;" deprecated="15"/>
<method name="getListSelection()I" since="3"/>
<method name="getOnItemClickListener()Landroid/widget/AdapterView$OnItemClickListener;" since="3"/>
<method name="getOnItemSelectedListener()Landroid/widget/AdapterView$OnItemSelectedListener;" since="3"/>
@@ -53282,6 +56723,7 @@
<method name="performCompletion()V"/>
<method name="performFiltering(Ljava/lang/CharSequence;I)V"/>
<method name="performValidation()V"/>
+ <method name="refreshAutoCompleteResults()V" since="29"/>
<method name="replaceText(Ljava/lang/CharSequence;)V"/>
<method name="setAdapter(Landroid/widget/ListAdapter;)V"/>
<method name="setCompletionHint(Ljava/lang/CharSequence;)V"/>
@@ -53292,6 +56734,7 @@
<method name="setDropDownHorizontalOffset(I)V" since="5"/>
<method name="setDropDownVerticalOffset(I)V" since="5"/>
<method name="setDropDownWidth(I)V" since="3"/>
+ <method name="setInputMethodMode(I)V" since="29"/>
<method name="setListSelection(I)V" since="3"/>
<method name="setOnDismissListener(Landroid/widget/AutoCompleteTextView$OnDismissListener;)V" since="17"/>
<method name="setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V"/>
@@ -53397,11 +56840,13 @@
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
<method name="getCheckMarkDrawable()Landroid/graphics/drawable/Drawable;" since="16"/>
+ <method name="getCheckMarkTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getCheckMarkTintList()Landroid/content/res/ColorStateList;" since="21"/>
<method name="getCheckMarkTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
<method name="onPaddingChanged(I)V" since="16" removed="17"/>
<method name="setCheckMarkDrawable(I)V"/>
<method name="setCheckMarkDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+ <method name="setCheckMarkTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setCheckMarkTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
<method name="setCheckMarkTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
</class>
@@ -53435,10 +56880,12 @@
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
<method name="getButtonDrawable()Landroid/graphics/drawable/Drawable;" since="23"/>
+ <method name="getButtonTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getButtonTintList()Landroid/content/res/ColorStateList;" since="21"/>
<method name="getButtonTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
<method name="setButtonDrawable(I)V"/>
<method name="setButtonDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+ <method name="setButtonTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setButtonTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
<method name="setButtonTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
<method name="setOnCheckedChangeListener(Landroid/widget/CompoundButton$OnCheckedChangeListener;)V"/>
@@ -53451,7 +56898,7 @@
<extends name="android/widget/BaseAdapter"/>
<implements name="android/widget/Filterable"/>
<implements name="android/widget/ThemedSpinnerAdapter" since="23"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;)V" deprecated="16"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;)V" deprecated="15"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;I)V" since="11"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;Z)V"/>
<method name="bindView(Landroid/view/View;Landroid/content/Context;Landroid/database/Cursor;)V"/>
@@ -53459,14 +56906,14 @@
<method name="convertToString(Landroid/database/Cursor;)Ljava/lang/CharSequence;"/>
<method name="getCursor()Landroid/database/Cursor;"/>
<method name="getFilterQueryProvider()Landroid/widget/FilterQueryProvider;"/>
- <method name="init(Landroid/content/Context;Landroid/database/Cursor;Z)V" deprecated="16"/>
+ <method name="init(Landroid/content/Context;Landroid/database/Cursor;Z)V" deprecated="15"/>
<method name="newDropDownView(Landroid/content/Context;Landroid/database/Cursor;Landroid/view/ViewGroup;)Landroid/view/View;"/>
<method name="newView(Landroid/content/Context;Landroid/database/Cursor;Landroid/view/ViewGroup;)Landroid/view/View;"/>
<method name="onContentChanged()V" since="3"/>
<method name="runQueryOnBackgroundThread(Ljava/lang/CharSequence;)Landroid/database/Cursor;"/>
<method name="setFilterQueryProvider(Landroid/widget/FilterQueryProvider;)V"/>
<method name="swapCursor(Landroid/database/Cursor;)Landroid/database/Cursor;" since="11"/>
- <field name="FLAG_AUTO_REQUERY" since="11" deprecated="16"/>
+ <field name="FLAG_AUTO_REQUERY" since="11" deprecated="15"/>
<field name="FLAG_REGISTER_CONTENT_OBSERVER" since="11"/>
</class>
<class name="android/widget/CursorTreeAdapter" since="1">
@@ -53521,37 +56968,38 @@
</class>
<class name="android/widget/DialerFilter" since="1" deprecated="26">
<extends name="android/widget/RelativeLayout"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="append(Ljava/lang/String;)V"/>
- <method name="clearText()V"/>
- <method name="getDigits()Ljava/lang/CharSequence;"/>
- <method name="getFilterText()Ljava/lang/CharSequence;"/>
- <method name="getLetters()Ljava/lang/CharSequence;"/>
- <method name="getMode()I"/>
- <method name="isQwertyKeyboard()Z"/>
- <method name="onModeChange(II)V"/>
- <method name="removeFilterWatcher(Landroid/text/TextWatcher;)V"/>
- <method name="setDigitsWatcher(Landroid/text/TextWatcher;)V"/>
- <method name="setFilterWatcher(Landroid/text/TextWatcher;)V"/>
- <method name="setLettersWatcher(Landroid/text/TextWatcher;)V"/>
- <method name="setMode(I)V"/>
- <field name="DIGITS_AND_LETTERS"/>
- <field name="DIGITS_AND_LETTERS_NO_DIGITS"/>
- <field name="DIGITS_AND_LETTERS_NO_LETTERS"/>
- <field name="DIGITS_ONLY"/>
- <field name="LETTERS_ONLY"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="append(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="clearText()V" deprecated="29"/>
+ <method name="getDigits()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getFilterText()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getLetters()Ljava/lang/CharSequence;" deprecated="29"/>
+ <method name="getMode()I" deprecated="29"/>
+ <method name="isQwertyKeyboard()Z" deprecated="29"/>
+ <method name="onModeChange(II)V" deprecated="29"/>
+ <method name="removeFilterWatcher(Landroid/text/TextWatcher;)V" deprecated="29"/>
+ <method name="setDigitsWatcher(Landroid/text/TextWatcher;)V" deprecated="29"/>
+ <method name="setFilterWatcher(Landroid/text/TextWatcher;)V" deprecated="29"/>
+ <method name="setLettersWatcher(Landroid/text/TextWatcher;)V" deprecated="29"/>
+ <method name="setMode(I)V" deprecated="29"/>
+ <field name="DIGITS_AND_LETTERS" deprecated="29"/>
+ <field name="DIGITS_AND_LETTERS_NO_DIGITS" deprecated="29"/>
+ <field name="DIGITS_AND_LETTERS_NO_LETTERS" deprecated="29"/>
+ <field name="DIGITS_ONLY" deprecated="29"/>
+ <field name="LETTERS_ONLY" deprecated="29"/>
</class>
<class name="android/widget/DigitalClock" since="1" deprecated="17">
<extends name="android/widget/TextView"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
</class>
<class name="android/widget/EdgeEffect" since="14">
<extends name="java/lang/Object"/>
<method name="&lt;init>(Landroid/content/Context;)V"/>
<method name="draw(Landroid/graphics/Canvas;)Z"/>
<method name="finish()V"/>
+ <method name="getBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getColor()I" since="21"/>
<method name="getMaxHeight()I" since="21"/>
<method name="isFinished()Z"/>
@@ -53559,8 +57007,10 @@
<method name="onPull(F)V"/>
<method name="onPull(FF)V" since="21"/>
<method name="onRelease()V"/>
+ <method name="setBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setColor(I)V" since="21"/>
<method name="setSize(II)V"/>
+ <field name="DEFAULT_BLEND_MODE" since="29"/>
</class>
<class name="android/widget/EditText" since="1">
<extends name="android/widget/TextView"/>
@@ -53694,7 +57144,7 @@
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
<method name="generateDefaultLayoutParams()Landroid/widget/FrameLayout$LayoutParams;"/>
<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/FrameLayout$LayoutParams;"/>
- <method name="getConsiderGoneChildrenWhenMeasuring()Z" deprecated="16"/>
+ <method name="getConsiderGoneChildrenWhenMeasuring()Z" deprecated="15"/>
<method name="getForeground()Landroid/graphics/drawable/Drawable;" removed="23"/>
<method name="getForegroundGravity()I" since="16" removed="23"/>
<method name="getForegroundTintList()Landroid/content/res/ColorStateList;" since="21" removed="23"/>
@@ -53720,21 +57170,21 @@
<class name="android/widget/Gallery" since="1" deprecated="16">
<extends name="android/widget/AbsSpinner"/>
<implements name="android/view/GestureDetector$OnGestureListener"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="setAnimationDuration(I)V"/>
- <method name="setCallbackDuringFling(Z)V"/>
- <method name="setGravity(I)V"/>
- <method name="setSpacing(I)V"/>
- <method name="setUnselectedAlpha(F)V"/>
- </class>
- <class name="android/widget/Gallery$LayoutParams" since="1">
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="setAnimationDuration(I)V" deprecated="29"/>
+ <method name="setCallbackDuringFling(Z)V" deprecated="29"/>
+ <method name="setGravity(I)V" deprecated="29"/>
+ <method name="setSpacing(I)V" deprecated="29"/>
+ <method name="setUnselectedAlpha(F)V" deprecated="29"/>
+ </class>
+ <class name="android/widget/Gallery$LayoutParams" since="1" deprecated="29">
<extends name="android/view/ViewGroup$LayoutParams"/>
- <method name="&lt;init>(II)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+ <method name="&lt;init>(II)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V" deprecated="29"/>
</class>
<class name="android/widget/GridLayout" since="14">
<extends name="android/view/ViewGroup"/>
@@ -53784,7 +57234,6 @@
</class>
<class name="android/widget/GridLayout$Alignment" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
</class>
<class name="android/widget/GridLayout$LayoutParams" since="14">
<extends name="android/view/ViewGroup$MarginLayoutParams"/>
@@ -53800,8 +57249,6 @@
</class>
<class name="android/widget/GridLayout$Spec" since="14">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ZIILandroid/widget/GridLayout$Alignment;F)V" since="29"/>
</class>
<class name="android/widget/GridView" since="1">
<extends name="android/widget/AbsListView"/>
@@ -53860,11 +57307,16 @@
<method name="executeKeyEvent(Landroid/view/KeyEvent;)Z"/>
<method name="fling(I)V"/>
<method name="fullScroll(I)Z"/>
+ <method name="getLeftEdgeEffectColor()I" since="29"/>
<method name="getMaxScrollAmount()I"/>
+ <method name="getRightEdgeEffectColor()I" since="29"/>
<method name="isFillViewport()Z"/>
<method name="isSmoothScrollingEnabled()Z"/>
<method name="pageScroll(I)Z"/>
+ <method name="setEdgeEffectColor(I)V" since="29"/>
<method name="setFillViewport(Z)V"/>
+ <method name="setLeftEdgeEffectColor(I)V" since="29"/>
+ <method name="setRightEdgeEffectColor(I)V" since="29"/>
<method name="setSmoothScrollingEnabled(Z)V"/>
<method name="smoothScrollBy(II)V"/>
<method name="smoothScrollTo(II)V"/>
@@ -53890,6 +57342,7 @@
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+ <method name="animateTransform(Landroid/graphics/Matrix;)V" since="29"/>
<method name="clearColorFilter()V"/>
<method name="getAdjustViewBounds()Z" since="16"/>
<method name="getBaselineAlignBottom()Z" since="11"/>
@@ -53898,6 +57351,7 @@
<method name="getDrawable()Landroid/graphics/drawable/Drawable;"/>
<method name="getImageAlpha()I" since="16"/>
<method name="getImageMatrix()Landroid/graphics/Matrix;"/>
+ <method name="getImageTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getImageTintList()Landroid/content/res/ColorStateList;" since="21"/>
<method name="getImageTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
<method name="getMaxHeight()I" since="16"/>
@@ -53920,6 +57374,7 @@
<method name="setImageMatrix(Landroid/graphics/Matrix;)V"/>
<method name="setImageResource(I)V"/>
<method name="setImageState([IZ)V"/>
+ <method name="setImageTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setImageTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
<method name="setImageTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
<method name="setImageURI(Landroid/net/Uri;)V"/>
@@ -54006,6 +57461,7 @@
<method name="getAnchorView()Landroid/view/View;"/>
<method name="getAnimationStyle()I"/>
<method name="getBackground()Landroid/graphics/drawable/Drawable;"/>
+ <method name="getEpicenterBounds()Landroid/graphics/Rect;" since="29"/>
<method name="getHeight()I"/>
<method name="getHorizontalOffset()I"/>
<method name="getInputMethodMode()I"/>
@@ -54032,6 +57488,7 @@
<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V"/>
<method name="setContentWidth(I)V"/>
<method name="setDropDownGravity(I)V" since="19"/>
+ <method name="setEpicenterBounds(Landroid/graphics/Rect;)V" since="29"/>
<method name="setHeight(I)V"/>
<method name="setHorizontalOffset(I)V"/>
<method name="setInputMethodMode(I)V"/>
@@ -54072,7 +57529,7 @@
<method name="findViewTraversal(I)Landroid/view/View;" removed="26"/>
<method name="findViewWithTagTraversal(Ljava/lang/Object;)Landroid/view/View;" removed="26"/>
<method name="getAdapter()Landroid/widget/ListAdapter;"/>
- <method name="getCheckItemIds()[J" since="4" deprecated="16"/>
+ <method name="getCheckItemIds()[J" since="4" deprecated="15"/>
<method name="getCheckedItemIds()[J" since="8" removed="11"/>
<method name="getCheckedItemPosition()I" removed="11"/>
<method name="getCheckedItemPositions()Landroid/util/SparseBooleanArray;" removed="11"/>
@@ -54114,13 +57571,40 @@
</class>
<class name="android/widget/Magnifier" since="28">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/view/View;)V"/>
+ <method name="&lt;init>(Landroid/view/View;)V" deprecated="29"/>
<method name="dismiss()V"/>
+ <method name="getCornerRadius()F" since="29"/>
+ <method name="getDefaultHorizontalSourceToMagnifierOffset()I" since="29"/>
+ <method name="getDefaultVerticalSourceToMagnifierOffset()I" since="29"/>
+ <method name="getElevation()F" since="29"/>
<method name="getHeight()I"/>
+ <method name="getOverlay()Landroid/graphics/drawable/Drawable;" since="29"/>
+ <method name="getPosition()Landroid/graphics/Point;" since="29"/>
+ <method name="getSourceHeight()I" since="29"/>
+ <method name="getSourcePosition()Landroid/graphics/Point;" since="29"/>
+ <method name="getSourceWidth()I" since="29"/>
<method name="getWidth()I"/>
<method name="getZoom()F"/>
+ <method name="isClippingEnabled()Z" since="29"/>
+ <method name="setZoom(F)V" since="29"/>
<method name="show(FF)V"/>
+ <method name="show(FFFF)V" since="29"/>
<method name="update()V"/>
+ <field name="SOURCE_BOUND_MAX_IN_SURFACE" since="29"/>
+ <field name="SOURCE_BOUND_MAX_VISIBLE" since="29"/>
+ </class>
+ <class name="android/widget/Magnifier$Builder" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Landroid/view/View;)V"/>
+ <method name="build()Landroid/widget/Magnifier;"/>
+ <method name="setClippingEnabled(Z)Landroid/widget/Magnifier$Builder;"/>
+ <method name="setCornerRadius(F)Landroid/widget/Magnifier$Builder;"/>
+ <method name="setDefaultSourceToMagnifierOffset(II)Landroid/widget/Magnifier$Builder;"/>
+ <method name="setElevation(F)Landroid/widget/Magnifier$Builder;"/>
+ <method name="setInitialZoom(F)Landroid/widget/Magnifier$Builder;"/>
+ <method name="setOverlay(Landroid/graphics/drawable/Drawable;)Landroid/widget/Magnifier$Builder;"/>
+ <method name="setSize(II)Landroid/widget/Magnifier$Builder;"/>
+ <method name="setSourceBounds(IIII)Landroid/widget/Magnifier$Builder;"/>
</class>
<class name="android/widget/MediaController" since="1">
<extends name="android/widget/FrameLayout"/>
@@ -54178,6 +57662,9 @@
<method name="getDisplayedValues()[Ljava/lang/String;"/>
<method name="getMaxValue()I"/>
<method name="getMinValue()I"/>
+ <method name="getSelectionDividerHeight()I" since="29"/>
+ <method name="getTextColor()I" since="29"/>
+ <method name="getTextSize()F" since="29"/>
<method name="getValue()I"/>
<method name="getWrapSelectorWheel()Z"/>
<method name="setDisplayedValues([Ljava/lang/String;)V"/>
@@ -54187,6 +57674,9 @@
<method name="setOnLongPressUpdateInterval(J)V"/>
<method name="setOnScrollListener(Landroid/widget/NumberPicker$OnScrollListener;)V"/>
<method name="setOnValueChangedListener(Landroid/widget/NumberPicker$OnValueChangeListener;)V"/>
+ <method name="setSelectionDividerHeight(I)V" since="29"/>
+ <method name="setTextColor(I)V" since="29"/>
+ <method name="setTextSize(F)V" since="29"/>
<method name="setValue(I)V"/>
<method name="setWrapSelectorWheel(Z)V"/>
</class>
@@ -54243,6 +57733,7 @@
<method name="getMenu()Landroid/view/Menu;"/>
<method name="getMenuInflater()Landroid/view/MenuInflater;"/>
<method name="inflate(I)V" since="14"/>
+ <method name="setForceShowIcon(Z)V" since="29"/>
<method name="setGravity(I)V" since="23"/>
<method name="setOnDismissListener(Landroid/widget/PopupMenu$OnDismissListener;)V" since="14"/>
<method name="setOnMenuItemClickListener(Landroid/widget/PopupMenu$OnMenuItemClickListener;)V"/>
@@ -54273,6 +57764,7 @@
<method name="getContentView()Landroid/view/View;"/>
<method name="getElevation()F" since="21"/>
<method name="getEnterTransition()Landroid/transition/Transition;" since="24"/>
+ <method name="getEpicenterBounds()Landroid/graphics/Rect;" since="29"/>
<method name="getExitTransition()Landroid/transition/Transition;" since="24"/>
<method name="getHeight()I"/>
<method name="getInputMethodMode()I" since="3"/>
@@ -54285,11 +57777,14 @@
<method name="getWindowLayoutType()I" since="23"/>
<method name="isAboveAnchor()Z" since="3"/>
<method name="isAttachedInDecor()Z" since="22"/>
+ <method name="isClippedToScreen()Z" since="29"/>
<method name="isClippingEnabled()Z" since="3"/>
<method name="isFocusable()Z"/>
+ <method name="isLaidOutInScreen()Z" since="29"/>
<method name="isOutsideTouchable()Z" since="3"/>
<method name="isShowing()Z"/>
<method name="isSplitTouchEnabled()Z" since="11"/>
+ <method name="isTouchModal()Z" since="29"/>
<method name="isTouchable()Z" since="3"/>
<method name="setAnimationStyle(I)V"/>
<method name="setAttachedInDecor(Z)V" since="22"/>
@@ -54298,17 +57793,21 @@
<method name="setContentView(Landroid/view/View;)V"/>
<method name="setElevation(F)V" since="21"/>
<method name="setEnterTransition(Landroid/transition/Transition;)V" since="23"/>
+ <method name="setEpicenterBounds(Landroid/graphics/Rect;)V" since="29"/>
<method name="setExitTransition(Landroid/transition/Transition;)V" since="23"/>
<method name="setFocusable(Z)V"/>
<method name="setHeight(I)V"/>
<method name="setIgnoreCheekPress()V"/>
<method name="setInputMethodMode(I)V" since="3"/>
+ <method name="setIsClippedToScreen(Z)V" since="29"/>
+ <method name="setIsLaidOutInScreen(Z)V" since="29"/>
<method name="setOnDismissListener(Landroid/widget/PopupWindow$OnDismissListener;)V"/>
<method name="setOutsideTouchable(Z)V" since="3"/>
<method name="setOverlapAnchor(Z)V" since="23"/>
<method name="setSoftInputMode(I)V" since="4"/>
<method name="setSplitTouchEnabled(Z)V" since="11"/>
<method name="setTouchInterceptor(Landroid/view/View$OnTouchListener;)V" since="3"/>
+ <method name="setTouchModal(Z)V" since="29"/>
<method name="setTouchable(Z)V" since="3"/>
<method name="setWidth(I)V"/>
<method name="setWindowLayoutMode(II)V" since="3" deprecated="23"/>
@@ -54337,19 +57836,28 @@
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+ <method name="getCurrentDrawable()Landroid/graphics/drawable/Drawable;" since="29"/>
<method name="getIndeterminateDrawable()Landroid/graphics/drawable/Drawable;"/>
+ <method name="getIndeterminateTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getIndeterminateTintList()Landroid/content/res/ColorStateList;" since="21"/>
<method name="getIndeterminateTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
<method name="getInterpolator()Landroid/view/animation/Interpolator;"/>
<method name="getMax()I"/>
+ <method name="getMaxHeight()I" since="29"/>
+ <method name="getMaxWidth()I" since="29"/>
<method name="getMin()I" since="26"/>
+ <method name="getMinHeight()I" since="29"/>
+ <method name="getMinWidth()I" since="29"/>
<method name="getProgress()I"/>
+ <method name="getProgressBackgroundTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getProgressBackgroundTintList()Landroid/content/res/ColorStateList;" since="21"/>
<method name="getProgressBackgroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
<method name="getProgressDrawable()Landroid/graphics/drawable/Drawable;"/>
+ <method name="getProgressTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getProgressTintList()Landroid/content/res/ColorStateList;" since="21"/>
<method name="getProgressTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
<method name="getSecondaryProgress()I"/>
+ <method name="getSecondaryProgressTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getSecondaryProgressTintList()Landroid/content/res/ColorStateList;" since="21"/>
<method name="getSecondaryProgressTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
<method name="incrementProgressBy(I)V"/>
@@ -54359,21 +57867,29 @@
<method name="setIndeterminate(Z)V"/>
<method name="setIndeterminateDrawable(Landroid/graphics/drawable/Drawable;)V"/>
<method name="setIndeterminateDrawableTiled(Landroid/graphics/drawable/Drawable;)V" since="21"/>
+ <method name="setIndeterminateTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setIndeterminateTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
<method name="setIndeterminateTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
<method name="setInterpolator(Landroid/content/Context;I)V"/>
<method name="setInterpolator(Landroid/view/animation/Interpolator;)V"/>
<method name="setMax(I)V"/>
+ <method name="setMaxHeight(I)V" since="29"/>
+ <method name="setMaxWidth(I)V" since="29"/>
<method name="setMin(I)V" since="26"/>
+ <method name="setMinHeight(I)V" since="29"/>
+ <method name="setMinWidth(I)V" since="29"/>
<method name="setProgress(I)V"/>
<method name="setProgress(IZ)V" since="24"/>
+ <method name="setProgressBackgroundTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setProgressBackgroundTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
<method name="setProgressBackgroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
<method name="setProgressDrawable(Landroid/graphics/drawable/Drawable;)V"/>
<method name="setProgressDrawableTiled(Landroid/graphics/drawable/Drawable;)V" since="21"/>
+ <method name="setProgressTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setProgressTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
<method name="setProgressTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
<method name="setSecondaryProgress(I)V"/>
+ <method name="setSecondaryProgressTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setSecondaryProgressTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
<method name="setSecondaryProgressTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
</class>
@@ -54454,6 +57970,7 @@
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/RelativeLayout$LayoutParams;"/>
<method name="getGravity()I" since="16"/>
+ <method name="getIgnoreGravity()I" since="29"/>
<method name="setGravity(I)V"/>
<method name="setHorizontalGravity(I)V"/>
<method name="setIgnoreGravity(I)V"/>
@@ -54535,13 +58052,15 @@
<method name="setInt(ILjava/lang/String;I)V" since="3"/>
<method name="setIntent(ILjava/lang/String;Landroid/content/Intent;)V" since="11"/>
<method name="setLabelFor(II)V" since="17"/>
+ <method name="setLightBackgroundLayoutId(I)V" since="29"/>
<method name="setLong(ILjava/lang/String;J)V" since="3"/>
<method name="setOnClickFillInIntent(ILandroid/content/Intent;)V" since="11"/>
<method name="setOnClickPendingIntent(ILandroid/app/PendingIntent;)V" since="3"/>
+ <method name="setOnClickResponse(ILandroid/widget/RemoteViews$RemoteResponse;)V" since="29"/>
<method name="setPendingIntentTemplate(ILandroid/app/PendingIntent;)V" since="11"/>
<method name="setProgressBar(IIIZ)V"/>
<method name="setRelativeScrollPosition(II)V" since="11"/>
- <method name="setRemoteAdapter(IILandroid/content/Intent;)V" since="11" deprecated="16"/>
+ <method name="setRemoteAdapter(IILandroid/content/Intent;)V" since="11" deprecated="15"/>
<method name="setRemoteAdapter(ILandroid/content/Intent;)V" since="14"/>
<method name="setScrollPosition(II)V" since="11"/>
<method name="setShort(ILjava/lang/String;S)V" since="3"/>
@@ -54557,12 +58076,20 @@
<method name="showNext(I)V" since="11"/>
<method name="showPrevious(I)V" since="11"/>
<field name="CREATOR"/>
+ <field name="EXTRA_SHARED_ELEMENT_BOUNDS" since="29"/>
</class>
<class name="android/widget/RemoteViews$ActionException" since="1">
<extends name="java/lang/RuntimeException"/>
<method name="&lt;init>(Ljava/lang/Exception;)V" since="3"/>
<method name="&lt;init>(Ljava/lang/String;)V"/>
</class>
+ <class name="android/widget/RemoteViews$RemoteResponse" since="29">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="addSharedElement(ILjava/lang/String;)Landroid/widget/RemoteViews$RemoteResponse;"/>
+ <method name="fromFillInIntent(Landroid/content/Intent;)Landroid/widget/RemoteViews$RemoteResponse;"/>
+ <method name="fromPendingIntent(Landroid/app/PendingIntent;)Landroid/widget/RemoteViews$RemoteResponse;"/>
+ </class>
<class name="android/widget/RemoteViews$RemoteView" since="1">
<extends name="java/lang/Object"/>
<implements name="java/lang/annotation/Annotation"/>
@@ -54586,7 +58113,7 @@
</class>
<class name="android/widget/ResourceCursorAdapter" since="1">
<extends name="android/widget/CursorAdapter"/>
- <method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;)V" deprecated="16"/>
+ <method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;)V" deprecated="15"/>
<method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;I)V" since="11"/>
<method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;Z)V" since="3"/>
<method name="setDropDownViewResource(I)V"/>
@@ -54609,12 +58136,18 @@
<method name="executeKeyEvent(Landroid/view/KeyEvent;)Z"/>
<method name="fling(I)V"/>
<method name="fullScroll(I)Z"/>
+ <method name="getBottomEdgeEffectColor()I" since="29"/>
<method name="getMaxScrollAmount()I"/>
+ <method name="getTopEdgeEffectColor()I" since="29"/>
<method name="isFillViewport()Z"/>
<method name="isSmoothScrollingEnabled()Z"/>
<method name="pageScroll(I)Z"/>
+ <method name="scrollToDescendant(Landroid/view/View;)V" since="29"/>
+ <method name="setBottomEdgeEffectColor(I)V" since="29"/>
+ <method name="setEdgeEffectColor(I)V" since="29"/>
<method name="setFillViewport(Z)V"/>
<method name="setSmoothScrollingEnabled(Z)V"/>
+ <method name="setTopEdgeEffectColor(I)V" since="29"/>
<method name="smoothScrollBy(II)V"/>
<method name="smoothScrollTo(II)V"/>
</class>
@@ -54657,8 +58190,9 @@
<method name="getQuery()Ljava/lang/CharSequence;"/>
<method name="getQueryHint()Ljava/lang/CharSequence;" since="16"/>
<method name="getSuggestionsAdapter()Landroid/widget/CursorAdapter;"/>
- <method name="isIconfiedByDefault()Z"/>
+ <method name="isIconfiedByDefault()Z" deprecated="29"/>
<method name="isIconified()Z"/>
+ <method name="isIconifiedByDefault()Z" since="29"/>
<method name="isQueryRefinementEnabled()Z"/>
<method name="isSubmitButtonEnabled()Z"/>
<method name="setIconified(Z)V"/>
@@ -54742,7 +58276,7 @@
</class>
<class name="android/widget/SimpleCursorAdapter" since="1">
<extends name="android/widget/ResourceCursorAdapter"/>
- <method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;[Ljava/lang/String;[I)V" deprecated="16"/>
+ <method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;[Ljava/lang/String;[I)V" deprecated="15"/>
<method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;[Ljava/lang/String;[II)V" since="11"/>
<method name="changeCursorAndColumns(Landroid/database/Cursor;[Ljava/lang/String;[I)V" since="3"/>
<method name="getCursorToStringConverter()Landroid/widget/SimpleCursorAdapter$CursorToStringConverter;"/>
@@ -54786,39 +58320,39 @@
</class>
<class name="android/widget/SlidingDrawer" since="3" deprecated="17">
<extends name="android/view/ViewGroup"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="animateClose()V"/>
- <method name="animateOpen()V"/>
- <method name="animateToggle()V"/>
- <method name="close()V"/>
- <method name="getContent()Landroid/view/View;"/>
- <method name="getHandle()Landroid/view/View;"/>
- <method name="isMoving()Z"/>
- <method name="isOpened()Z"/>
- <method name="lock()V"/>
- <method name="open()V"/>
- <method name="setOnDrawerCloseListener(Landroid/widget/SlidingDrawer$OnDrawerCloseListener;)V"/>
- <method name="setOnDrawerOpenListener(Landroid/widget/SlidingDrawer$OnDrawerOpenListener;)V"/>
- <method name="setOnDrawerScrollListener(Landroid/widget/SlidingDrawer$OnDrawerScrollListener;)V"/>
- <method name="toggle()V"/>
- <method name="unlock()V"/>
- <field name="ORIENTATION_HORIZONTAL"/>
- <field name="ORIENTATION_VERTICAL"/>
- </class>
- <class name="android/widget/SlidingDrawer$OnDrawerCloseListener" since="3">
- <extends name="java/lang/Object"/>
- <method name="onDrawerClosed()V"/>
- </class>
- <class name="android/widget/SlidingDrawer$OnDrawerOpenListener" since="3">
- <extends name="java/lang/Object"/>
- <method name="onDrawerOpened()V"/>
- </class>
- <class name="android/widget/SlidingDrawer$OnDrawerScrollListener" since="3">
- <extends name="java/lang/Object"/>
- <method name="onScrollEnded()V"/>
- <method name="onScrollStarted()V"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="animateClose()V" deprecated="29"/>
+ <method name="animateOpen()V" deprecated="29"/>
+ <method name="animateToggle()V" deprecated="29"/>
+ <method name="close()V" deprecated="29"/>
+ <method name="getContent()Landroid/view/View;" deprecated="29"/>
+ <method name="getHandle()Landroid/view/View;" deprecated="29"/>
+ <method name="isMoving()Z" deprecated="29"/>
+ <method name="isOpened()Z" deprecated="29"/>
+ <method name="lock()V" deprecated="29"/>
+ <method name="open()V" deprecated="29"/>
+ <method name="setOnDrawerCloseListener(Landroid/widget/SlidingDrawer$OnDrawerCloseListener;)V" deprecated="29"/>
+ <method name="setOnDrawerOpenListener(Landroid/widget/SlidingDrawer$OnDrawerOpenListener;)V" deprecated="29"/>
+ <method name="setOnDrawerScrollListener(Landroid/widget/SlidingDrawer$OnDrawerScrollListener;)V" deprecated="29"/>
+ <method name="toggle()V" deprecated="29"/>
+ <method name="unlock()V" deprecated="29"/>
+ <field name="ORIENTATION_HORIZONTAL" deprecated="29"/>
+ <field name="ORIENTATION_VERTICAL" deprecated="29"/>
+ </class>
+ <class name="android/widget/SlidingDrawer$OnDrawerCloseListener" since="3" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <method name="onDrawerClosed()V" deprecated="29"/>
+ </class>
+ <class name="android/widget/SlidingDrawer$OnDrawerOpenListener" since="3" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <method name="onDrawerOpened()V" deprecated="29"/>
+ </class>
+ <class name="android/widget/SlidingDrawer$OnDrawerScrollListener" since="3" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <method name="onScrollEnded()V" deprecated="29"/>
+ <method name="onScrollStarted()V" deprecated="29"/>
</class>
<class name="android/widget/Space" since="14">
<extends name="android/view/View"/>
@@ -54881,9 +58415,11 @@
<method name="getTextOn()Ljava/lang/CharSequence;"/>
<method name="getThumbDrawable()Landroid/graphics/drawable/Drawable;" since="16"/>
<method name="getThumbTextPadding()I" since="16"/>
+ <method name="getThumbTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getThumbTintList()Landroid/content/res/ColorStateList;" since="23"/>
<method name="getThumbTintMode()Landroid/graphics/PorterDuff$Mode;" since="23"/>
<method name="getTrackDrawable()Landroid/graphics/drawable/Drawable;" since="16"/>
+ <method name="getTrackTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getTrackTintList()Landroid/content/res/ColorStateList;" since="23"/>
<method name="getTrackTintMode()Landroid/graphics/PorterDuff$Mode;" since="23"/>
<method name="setShowText(Z)V" since="21"/>
@@ -54898,10 +58434,12 @@
<method name="setThumbDrawable(Landroid/graphics/drawable/Drawable;)V" since="16"/>
<method name="setThumbResource(I)V" since="16"/>
<method name="setThumbTextPadding(I)V" since="16"/>
+ <method name="setThumbTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setThumbTintList(Landroid/content/res/ColorStateList;)V" since="23"/>
<method name="setThumbTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23"/>
<method name="setTrackDrawable(Landroid/graphics/drawable/Drawable;)V" since="16"/>
<method name="setTrackResource(I)V" since="16"/>
+ <method name="setTrackTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setTrackTintList(Landroid/content/res/ColorStateList;)V" since="23"/>
<method name="setTrackTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23"/>
</class>
@@ -54937,8 +58475,6 @@
</class>
<class name="android/widget/TabHost$TabSpec" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Landroid/widget/TabHost;)V" removed="29"/>
- <method name="&lt;init>(Landroid/widget/TabHost;Ljava/lang/String;)V" since="29"/>
<method name="getTag()Ljava/lang/String;" since="4"/>
<method name="setContent(I)Landroid/widget/TabHost$TabSpec;"/>
<method name="setContent(Landroid/content/Intent;)Landroid/widget/TabHost$TabSpec;"/>
@@ -55062,6 +58598,7 @@
<method name="getAutoSizeTextType()I" since="26"/>
<method name="getBreakStrategy()I" since="23"/>
<method name="getCompoundDrawablePadding()I"/>
+ <method name="getCompoundDrawableTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
<method name="getCompoundDrawableTintList()Landroid/content/res/ColorStateList;" since="23"/>
<method name="getCompoundDrawableTintMode()Landroid/graphics/PorterDuff$Mode;" since="23"/>
<method name="getCompoundDrawables()[Landroid/graphics/drawable/Drawable;"/>
@@ -55138,10 +58675,15 @@
<method name="getTextColor(Landroid/content/Context;Landroid/content/res/TypedArray;I)I" removed="21"/>
<method name="getTextColors()Landroid/content/res/ColorStateList;"/>
<method name="getTextColors(Landroid/content/Context;Landroid/content/res/TypedArray;)Landroid/content/res/ColorStateList;" removed="21"/>
+ <method name="getTextCursorDrawable()Landroid/graphics/drawable/Drawable;" since="29"/>
+ <method name="getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic;" since="29"/>
<method name="getTextLocale()Ljava/util/Locale;" since="17"/>
<method name="getTextLocales()Landroid/os/LocaleList;" since="24"/>
<method name="getTextMetricsParams()Landroid/text/PrecomputedText$Params;" since="28"/>
<method name="getTextScaleX()F"/>
+ <method name="getTextSelectHandle()Landroid/graphics/drawable/Drawable;" since="29"/>
+ <method name="getTextSelectHandleLeft()Landroid/graphics/drawable/Drawable;" since="29"/>
+ <method name="getTextSelectHandleRight()Landroid/graphics/drawable/Drawable;" since="29"/>
<method name="getTextSize()F"/>
<method name="getTotalPaddingBottom()I"/>
<method name="getTotalPaddingEnd()I" since="17"/>
@@ -55157,7 +58699,9 @@
<method name="isCursorVisible()Z" since="16"/>
<method name="isElegantTextHeight()Z" since="28"/>
<method name="isFallbackLineSpacing()Z" since="28"/>
+ <method name="isHorizontallyScrollable()Z" since="29"/>
<method name="isInputMethodTarget()Z" since="3"/>
+ <method name="isSingleLine()Z" since="29"/>
<method name="isSuggestionsEnabled()Z" since="14"/>
<method name="isTextSelectable()Z" since="11"/>
<method name="length()I"/>
@@ -55183,6 +58727,7 @@
<method name="setAutoSizeTextTypeWithDefaults(I)V" since="26"/>
<method name="setBreakStrategy(I)V" since="23"/>
<method name="setCompoundDrawablePadding(I)V"/>
+ <method name="setCompoundDrawableTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
<method name="setCompoundDrawableTintList(Landroid/content/res/ColorStateList;)V" since="23"/>
<method name="setCompoundDrawableTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23"/>
<method name="setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V"/>
@@ -55265,6 +58810,8 @@
<method name="setTextClassifier(Landroid/view/textclassifier/TextClassifier;)V" since="26"/>
<method name="setTextColor(I)V"/>
<method name="setTextColor(Landroid/content/res/ColorStateList;)V"/>
+ <method name="setTextCursorDrawable(I)V" since="29"/>
+ <method name="setTextCursorDrawable(Landroid/graphics/drawable/Drawable;)V" since="29"/>
<method name="setTextIsSelectable(Z)V" since="11"/>
<method name="setTextKeepState(Ljava/lang/CharSequence;)V"/>
<method name="setTextKeepState(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;)V"/>
@@ -55272,6 +58819,12 @@
<method name="setTextLocales(Landroid/os/LocaleList;)V" since="24"/>
<method name="setTextMetricsParams(Landroid/text/PrecomputedText$Params;)V" since="28"/>
<method name="setTextScaleX(F)V"/>
+ <method name="setTextSelectHandle(I)V" since="29"/>
+ <method name="setTextSelectHandle(Landroid/graphics/drawable/Drawable;)V" since="29"/>
+ <method name="setTextSelectHandleLeft(I)V" since="29"/>
+ <method name="setTextSelectHandleLeft(Landroid/graphics/drawable/Drawable;)V" since="29"/>
+ <method name="setTextSelectHandleRight(I)V" since="29"/>
+ <method name="setTextSelectHandleRight(Landroid/graphics/drawable/Drawable;)V" since="29"/>
<method name="setTextSize(F)V"/>
<method name="setTextSize(IF)V"/>
<method name="setTransformationMethod(Landroid/text/method/TransformationMethod;)V"/>
@@ -55295,8 +58848,6 @@
</class>
<class name="android/widget/TextView$SavedState" since="1">
<extends name="android/view/View$BaseSavedState"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/os/Parcelable;)V" since="29"/>
<field name="CREATOR"/>
</class>
<class name="android/widget/ThemedSpinnerAdapter" since="23">
@@ -55357,6 +58908,7 @@
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+ <method name="getDisabledAlpha()F" since="29"/>
<method name="getTextOff()Ljava/lang/CharSequence;"/>
<method name="getTextOn()Ljava/lang/CharSequence;"/>
<method name="setTextOff(Ljava/lang/CharSequence;)V"/>
@@ -55373,6 +58925,8 @@
<method name="generateDefaultLayoutParams()Landroid/widget/Toolbar$LayoutParams;"/>
<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/Toolbar$LayoutParams;"/>
<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/Toolbar$LayoutParams;"/>
+ <method name="getCollapseContentDescription()Ljava/lang/CharSequence;" since="29"/>
+ <method name="getCollapseIcon()Landroid/graphics/drawable/Drawable;" since="29"/>
<method name="getContentInsetEnd()I"/>
<method name="getContentInsetEndWithActions()I" since="24"/>
<method name="getContentInsetLeft()I"/>
@@ -55400,6 +58954,10 @@
<method name="hideOverflowMenu()Z"/>
<method name="inflateMenu(I)V"/>
<method name="isOverflowMenuShowing()Z"/>
+ <method name="setCollapseContentDescription(I)V" since="29"/>
+ <method name="setCollapseContentDescription(Ljava/lang/CharSequence;)V" since="29"/>
+ <method name="setCollapseIcon(I)V" since="29"/>
+ <method name="setCollapseIcon(Landroid/graphics/drawable/Drawable;)V" since="29"/>
<method name="setContentInsetEndWithActions(I)V" since="24"/>
<method name="setContentInsetStartWithNavigation(I)V" since="24"/>
<method name="setContentInsetsAbsolute(II)V"/>
@@ -55448,12 +59006,12 @@
</class>
<class name="android/widget/TwoLineListItem" since="1" deprecated="17">
<extends name="android/widget/RelativeLayout"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="getText1()Landroid/widget/TextView;"/>
- <method name="getText2()Landroid/widget/TextView;"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="getText1()Landroid/widget/TextView;" deprecated="29"/>
+ <method name="getText2()Landroid/widget/TextView;" deprecated="29"/>
</class>
<class name="android/widget/VideoView" since="1">
<extends name="android/view/SurfaceView"/>
@@ -55500,6 +59058,7 @@
<extends name="android/widget/ViewAnimator"/>
<method name="&lt;init>(Landroid/content/Context;)V"/>
<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+ <method name="getFlipInterval()I" since="29"/>
<method name="isAutoStart()Z" since="7"/>
<method name="isFlipping()Z"/>
<method name="setAutoStart(Z)V" since="7"/>
@@ -55527,56 +59086,101 @@
<class name="android/widget/ZoomButton" since="1" deprecated="26">
<extends name="android/widget/ImageButton"/>
<implements name="android/view/View$OnLongClickListener"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
- <method name="setZoomSpeed(J)V"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+ <method name="setZoomSpeed(J)V" deprecated="29"/>
</class>
<class name="android/widget/ZoomButtonsController" since="4" deprecated="26">
<extends name="java/lang/Object"/>
<implements name="android/view/View$OnTouchListener"/>
- <method name="&lt;init>(Landroid/view/View;)V"/>
- <method name="getContainer()Landroid/view/ViewGroup;"/>
- <method name="getZoomControls()Landroid/view/View;"/>
- <method name="isAutoDismissed()Z"/>
- <method name="isVisible()Z"/>
- <method name="setAutoDismissed(Z)V"/>
- <method name="setFocusable(Z)V"/>
- <method name="setOnZoomListener(Landroid/widget/ZoomButtonsController$OnZoomListener;)V"/>
- <method name="setVisible(Z)V"/>
- <method name="setZoomInEnabled(Z)V"/>
- <method name="setZoomOutEnabled(Z)V"/>
- <method name="setZoomSpeed(J)V"/>
+ <method name="&lt;init>(Landroid/view/View;)V" deprecated="29"/>
+ <method name="getContainer()Landroid/view/ViewGroup;" deprecated="29"/>
+ <method name="getZoomControls()Landroid/view/View;" deprecated="29"/>
+ <method name="isAutoDismissed()Z" deprecated="29"/>
+ <method name="isVisible()Z" deprecated="29"/>
+ <method name="setAutoDismissed(Z)V" deprecated="29"/>
+ <method name="setFocusable(Z)V" deprecated="29"/>
+ <method name="setOnZoomListener(Landroid/widget/ZoomButtonsController$OnZoomListener;)V" deprecated="29"/>
+ <method name="setVisible(Z)V" deprecated="29"/>
+ <method name="setZoomInEnabled(Z)V" deprecated="29"/>
+ <method name="setZoomOutEnabled(Z)V" deprecated="29"/>
+ <method name="setZoomSpeed(J)V" deprecated="29"/>
+ </class>
+ <class name="android/widget/ZoomButtonsController$OnZoomListener" since="4" deprecated="29">
+ <extends name="java/lang/Object"/>
+ <method name="onVisibilityChanged(Z)V" deprecated="29"/>
+ <method name="onZoom(Z)V" deprecated="29"/>
+ </class>
+ <class name="android/widget/ZoomControls" since="1" deprecated="29">
+ <extends name="android/widget/LinearLayout"/>
+ <method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+ <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+ <method name="hide()V" deprecated="29"/>
+ <method name="setIsZoomInEnabled(Z)V" deprecated="29"/>
+ <method name="setIsZoomOutEnabled(Z)V" deprecated="29"/>
+ <method name="setOnZoomInClickListener(Landroid/view/View$OnClickListener;)V" deprecated="29"/>
+ <method name="setOnZoomOutClickListener(Landroid/view/View$OnClickListener;)V" deprecated="29"/>
+ <method name="setZoomSpeed(J)V" deprecated="29"/>
+ <method name="show()V" deprecated="29"/>
</class>
- <class name="android/widget/ZoomButtonsController$OnZoomListener" since="4">
+ <class name="com/android/internal/util/Predicate" since="1" deprecated="26" removed="28">
<extends name="java/lang/Object"/>
- <method name="onVisibilityChanged(Z)V"/>
- <method name="onZoom(Z)V"/>
+ <method name="apply(Ljava/lang/Object;)Z"/>
</class>
- <class name="android/widget/ZoomControls" since="1">
- <extends name="android/widget/LinearLayout"/>
- <method name="&lt;init>(Landroid/content/Context;)V"/>
- <method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
- <method name="hide()V"/>
- <method name="setIsZoomInEnabled(Z)V"/>
- <method name="setIsZoomOutEnabled(Z)V"/>
- <method name="setOnZoomInClickListener(Landroid/view/View$OnClickListener;)V"/>
- <method name="setOnZoomOutClickListener(Landroid/view/View$OnClickListener;)V"/>
- <method name="setZoomSpeed(J)V"/>
- <method name="show()V"/>
+ <class name="com/google/android/collect/Lists" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="newArrayList()Ljava/util/ArrayList;"/>
+ <method name="newArrayList([Ljava/lang/Object;)Ljava/util/ArrayList;"/>
</class>
- <class name="androidx/annotation/RecentlyNonNull" since="29">
+ <class name="com/google/android/collect/Maps" since="30">
<extends name="java/lang/Object"/>
- <implements name="java/lang/annotation/Annotation"/>
+ <method name="&lt;init>()V"/>
+ <method name="newArrayMap()Landroid/util/ArrayMap;"/>
+ <method name="newHashMap()Ljava/util/HashMap;"/>
</class>
- <class name="androidx/annotation/RecentlyNullable" since="29">
+ <class name="com/google/android/collect/Sets" since="30">
<extends name="java/lang/Object"/>
- <implements name="java/lang/annotation/Annotation"/>
+ <method name="&lt;init>()V"/>
+ <method name="newArraySet()Landroid/util/ArraySet;"/>
+ <method name="newArraySet([Ljava/lang/Object;)Landroid/util/ArraySet;"/>
+ <method name="newHashSet()Ljava/util/HashSet;"/>
+ <method name="newHashSet([Ljava/lang/Object;)Ljava/util/HashSet;"/>
+ <method name="newSortedSet()Ljava/util/SortedSet;"/>
+ <method name="newSortedSet([Ljava/lang/Object;)Ljava/util/SortedSet;"/>
</class>
- <class name="com/android/internal/util/Predicate" since="1" deprecated="26" removed="28">
+ <class name="com/google/android/gles_jni/EGLConfigImpl" since="30">
+ <extends name="javax/microedition/khronos/egl/EGLConfig"/>
+ </class>
+ <class name="com/google/android/gles_jni/EGLContextImpl" since="30">
+ <extends name="javax/microedition/khronos/egl/EGLContext"/>
+ <method name="&lt;init>(J)V"/>
+ </class>
+ <class name="com/google/android/gles_jni/EGLDisplayImpl" since="30">
+ <extends name="javax/microedition/khronos/egl/EGLDisplay"/>
+ <method name="&lt;init>(J)V"/>
+ </class>
+ <class name="com/google/android/gles_jni/EGLImpl" since="30">
<extends name="java/lang/Object"/>
- <method name="apply(Ljava/lang/Object;)Z"/>
+ <implements name="javax/microedition/khronos/egl/EGL10"/>
+ <method name="&lt;init>()V"/>
+ </class>
+ <class name="com/google/android/gles_jni/EGLSurfaceImpl" since="30">
+ <extends name="javax/microedition/khronos/egl/EGLSurface"/>
+ <method name="&lt;init>()V"/>
+ <method name="&lt;init>(J)V"/>
+ </class>
+ <class name="com/google/android/gles_jni/GLImpl" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="javax/microedition/khronos/opengles/GL10"/>
+ <implements name="javax/microedition/khronos/opengles/GL10Ext"/>
+ <implements name="javax/microedition/khronos/opengles/GL11"/>
+ <implements name="javax/microedition/khronos/opengles/GL11Ext"/>
+ <implements name="javax/microedition/khronos/opengles/GL11ExtensionPack"/>
+ <method name="&lt;init>()V"/>
+ <method name="_glGetString(I)Ljava/lang/String;"/>
</class>
<class name="com/google/android/maps/GeoPoint" since="1" removed="3">
<extends name="java/lang/Object"/>
@@ -55620,7 +59224,6 @@
<class name="com/google/android/maps/MapController" since="1" removed="3">
<extends name="java/lang/Object"/>
<implements name="android/view/View$OnKeyListener"/>
- <method name="&lt;init>()V"/>
<method name="animateTo(Lcom/google/android/maps/GeoPoint;)V"/>
<method name="animateTo(Lcom/google/android/maps/GeoPoint;Landroid/os/Message;)V"/>
<method name="animateTo(Lcom/google/android/maps/GeoPoint;Ljava/lang/Runnable;)V"/>
@@ -55755,7 +59358,6 @@
</class>
<class name="com/google/android/maps/TrackballGestureDetector" since="1" removed="3">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="analyze(Landroid/view/MotionEvent;)V"/>
<method name="getCurrentDownX()F"/>
<method name="getCurrentDownY()F"/>
@@ -55768,21 +59370,185 @@
<method name="scrollX()F"/>
<method name="scrollY()F"/>
</class>
+ <class name="com/google/android/util/AbstractMessageParser" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;ZZZZZZ)V"/>
+ <method name="getPart(I)Lcom/google/android/util/AbstractMessageParser$Part;"/>
+ <method name="getPartCount()I"/>
+ <method name="getParts()Ljava/util/List;"/>
+ <method name="getRawText()Ljava/lang/String;"/>
+ <method name="getResources()Lcom/google/android/util/AbstractMessageParser$Resources;"/>
+ <method name="parse()V"/>
+ <method name="reverse(Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="toHtml()Ljava/lang/String;"/>
+ <method name="tokenForUrl(Ljava/lang/String;Ljava/lang/String;)Lcom/google/android/util/AbstractMessageParser$Token;"/>
+ <field name="musicNote"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$Acronym" since="30">
+ <extends name="com/google/android/util/AbstractMessageParser$Token"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+ <method name="getValue()Ljava/lang/String;"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$FlickrPhoto" since="30">
+ <extends name="com/google/android/util/AbstractMessageParser$Token"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+ <method name="getGrouping()Ljava/lang/String;"/>
+ <method name="getGroupingId()Ljava/lang/String;"/>
+ <method name="getPhoto()Ljava/lang/String;"/>
+ <method name="getPhotoURL(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getRssUrl(Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getTagsURL(Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getUrl()Ljava/lang/String;"/>
+ <method name="getUser()Ljava/lang/String;"/>
+ <method name="getUserSetsURL(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getUserTagsURL(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getUserURL(Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="matchURL(Ljava/lang/String;Ljava/lang/String;)Lcom/google/android/util/AbstractMessageParser$FlickrPhoto;"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$Format" since="30">
+ <extends name="com/google/android/util/AbstractMessageParser$Token"/>
+ <method name="&lt;init>(CZ)V"/>
+ <method name="setMatched(Z)V"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$Html" since="30">
+ <extends name="com/google/android/util/AbstractMessageParser$Token"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+ <method name="trimLeadingWhitespace()V"/>
+ <method name="trimTrailingWhitespace()V"/>
+ <method name="trimTrailingWhitespace(Ljava/lang/String;)Ljava/lang/String;"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$Link" since="30">
+ <extends name="com/google/android/util/AbstractMessageParser$Token"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+ <method name="getURL()Ljava/lang/String;"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$MusicTrack" since="30">
+ <extends name="com/google/android/util/AbstractMessageParser$Token"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="getTrack()Ljava/lang/String;"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$Part" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="add(Lcom/google/android/util/AbstractMessageParser$Token;)V"/>
+ <method name="getMediaToken()Lcom/google/android/util/AbstractMessageParser$Token;"/>
+ <method name="getRawText()Ljava/lang/String;"/>
+ <method name="getTokens()Ljava/util/ArrayList;"/>
+ <method name="getType(Z)Ljava/lang/String;"/>
+ <method name="isMedia()Z"/>
+ <method name="setMeText(Ljava/lang/String;)V"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$Photo" since="30">
+ <extends name="com/google/android/util/AbstractMessageParser$Token"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+ <method name="getAlbum()Ljava/lang/String;"/>
+ <method name="getAlbumURL(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getPhoto()Ljava/lang/String;"/>
+ <method name="getPhotoURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getRssUrl(Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getUser()Ljava/lang/String;"/>
+ <method name="matchURL(Ljava/lang/String;Ljava/lang/String;)Lcom/google/android/util/AbstractMessageParser$Photo;"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$Resources" since="30">
+ <method name="getAcronyms()Lcom/google/android/util/AbstractMessageParser$TrieNode;"/>
+ <method name="getDomainSuffixes()Lcom/google/android/util/AbstractMessageParser$TrieNode;"/>
+ <method name="getSchemes()Ljava/util/Set;"/>
+ <method name="getSmileys()Lcom/google/android/util/AbstractMessageParser$TrieNode;"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$Smiley" since="30">
+ <extends name="com/google/android/util/AbstractMessageParser$Token"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$Token" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>(Lcom/google/android/util/AbstractMessageParser$Token$Type;Ljava/lang/String;)V"/>
+ <method name="controlCaps()Z"/>
+ <method name="getInfo()Ljava/util/List;"/>
+ <method name="getRawText()Ljava/lang/String;"/>
+ <method name="getType()Lcom/google/android/util/AbstractMessageParser$Token$Type;"/>
+ <method name="isArray()Z"/>
+ <method name="isHtml()Z"/>
+ <method name="isMedia()Z"/>
+ <method name="setCaps()Z"/>
+ <method name="toHtml(Z)Ljava/lang/String;"/>
+ <field name="text"/>
+ <field name="type"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$Token$Type" since="30">
+ <extends name="java/lang/Enum"/>
+ <method name="valueOf(Ljava/lang/String;)Lcom/google/android/util/AbstractMessageParser$Token$Type;"/>
+ <method name="values()[Lcom/google/android/util/AbstractMessageParser$Token$Type;"/>
+ <field name="ACRONYM"/>
+ <field name="FLICKR"/>
+ <field name="FORMAT"/>
+ <field name="GOOGLE_VIDEO"/>
+ <field name="HTML"/>
+ <field name="LINK"/>
+ <field name="MUSIC"/>
+ <field name="PHOTO"/>
+ <field name="SMILEY"/>
+ <field name="YOUTUBE_VIDEO"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$TrieNode" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="&lt;init>()V"/>
+ <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="addToTrie(Lcom/google/android/util/AbstractMessageParser$TrieNode;Ljava/lang/String;Ljava/lang/String;)V"/>
+ <method name="exists()Z"/>
+ <method name="getChild(C)Lcom/google/android/util/AbstractMessageParser$TrieNode;"/>
+ <method name="getOrCreateChild(C)Lcom/google/android/util/AbstractMessageParser$TrieNode;"/>
+ <method name="getText()Ljava/lang/String;"/>
+ <method name="getValue()Ljava/lang/String;"/>
+ <method name="setValue(Ljava/lang/String;)V"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$Video" since="30">
+ <extends name="com/google/android/util/AbstractMessageParser$Token"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+ <method name="getDocID()Ljava/lang/String;"/>
+ <method name="getRssUrl(Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getURL(Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getURL(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="matchURL(Ljava/lang/String;Ljava/lang/String;)Lcom/google/android/util/AbstractMessageParser$Video;"/>
+ </class>
+ <class name="com/google/android/util/AbstractMessageParser$YouTubeVideo" since="30">
+ <extends name="com/google/android/util/AbstractMessageParser$Token"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+ <method name="getDocID()Ljava/lang/String;"/>
+ <method name="getPrefixedURL(ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getRssUrl(Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getURL(Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getURL(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="matchURL(Ljava/lang/String;Ljava/lang/String;)Lcom/google/android/util/AbstractMessageParser$YouTubeVideo;"/>
+ </class>
+ <class name="com/google/android/util/Procedure" since="30">
+ <method name="apply(Ljava/lang/Object;)V"/>
+ </class>
+ <class name="com/google/android/util/SmileyParser" since="30">
+ <extends name="com/google/android/util/AbstractMessageParser"/>
+ <method name="&lt;init>(Ljava/lang/String;Lcom/google/android/util/SmileyResources;)V"/>
+ <method name="getSpannableString(Landroid/content/Context;)Ljava/lang/CharSequence;"/>
+ </class>
+ <class name="com/google/android/util/SmileyResources" since="30">
+ <extends name="java/lang/Object"/>
+ <implements name="com/google/android/util/AbstractMessageParser$Resources"/>
+ <method name="&lt;init>([Ljava/lang/String;[I)V"/>
+ <method name="getSmileyRes(Ljava/lang/String;)I"/>
+ </class>
<class name="dalvik/annotation/TestTarget" since="1" deprecated="14">
<extends name="java/lang/Object"/>
<implements name="java/lang/annotation/Annotation"/>
- <method name="conceptName()Ljava/lang/String;" since="3"/>
- <method name="methodArgs()[Ljava/lang/Class;"/>
- <method name="methodName()Ljava/lang/String;"/>
+ <method name="conceptName()Ljava/lang/String;" since="3" deprecated="29"/>
+ <method name="methodArgs()[Ljava/lang/Class;" deprecated="29"/>
+ <method name="methodName()Ljava/lang/String;" deprecated="29"/>
</class>
<class name="dalvik/annotation/TestTargetClass" since="1" deprecated="14">
<extends name="java/lang/Object"/>
<implements name="java/lang/annotation/Annotation"/>
- <method name="value()Ljava/lang/Class;"/>
+ <method name="value()Ljava/lang/Class;" deprecated="29"/>
</class>
<class name="dalvik/bytecode/OpcodeInfo" since="11">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="MAXIMUM_PACKED_VALUE"/>
<field name="MAXIMUM_VALUE"/>
</class>
@@ -55819,7 +59585,7 @@
<field name="OP_APUT_SHORT"/>
<field name="OP_APUT_WIDE"/>
<field name="OP_ARRAY_LENGTH"/>
- <field name="OP_BREAKPOINT" since="8" deprecated="16"/>
+ <field name="OP_BREAKPOINT" since="8" deprecated="15"/>
<field name="OP_CHECK_CAST"/>
<field name="OP_CHECK_CAST_JUMBO" since="11"/>
<field name="OP_CMPG_DOUBLE"/>
@@ -55854,8 +59620,8 @@
<field name="OP_DOUBLE_TO_FLOAT"/>
<field name="OP_DOUBLE_TO_INT"/>
<field name="OP_DOUBLE_TO_LONG"/>
- <field name="OP_EXECUTE_INLINE" deprecated="16"/>
- <field name="OP_EXECUTE_INLINE_RANGE" since="8" deprecated="16"/>
+ <field name="OP_EXECUTE_INLINE" deprecated="15"/>
+ <field name="OP_EXECUTE_INLINE_RANGE" since="8" deprecated="15"/>
<field name="OP_FILLED_NEW_ARRAY"/>
<field name="OP_FILLED_NEW_ARRAY_JUMBO" since="11"/>
<field name="OP_FILLED_NEW_ARRAY_RANGE"/>
@@ -55888,14 +59654,14 @@
<field name="OP_IGET_JUMBO" since="11"/>
<field name="OP_IGET_OBJECT"/>
<field name="OP_IGET_OBJECT_JUMBO" since="11"/>
- <field name="OP_IGET_OBJECT_QUICK" deprecated="16"/>
- <field name="OP_IGET_QUICK" deprecated="16"/>
+ <field name="OP_IGET_OBJECT_QUICK" deprecated="15"/>
+ <field name="OP_IGET_QUICK" deprecated="15"/>
<field name="OP_IGET_SHORT"/>
<field name="OP_IGET_SHORT_JUMBO" since="11"/>
<field name="OP_IGET_WIDE"/>
<field name="OP_IGET_WIDE_JUMBO" since="11"/>
- <field name="OP_IGET_WIDE_QUICK" deprecated="16"/>
- <field name="OP_IGET_WIDE_VOLATILE" since="9" deprecated="16"/>
+ <field name="OP_IGET_WIDE_QUICK" deprecated="15"/>
+ <field name="OP_IGET_WIDE_VOLATILE" since="9" deprecated="15"/>
<field name="OP_INSTANCE_OF"/>
<field name="OP_INSTANCE_OF_JUMBO" since="11"/>
<field name="OP_INT_TO_BYTE"/>
@@ -55907,7 +59673,7 @@
<field name="OP_INVOKE_CUSTOM" since="26"/>
<field name="OP_INVOKE_CUSTOM_RANGE" since="26"/>
<field name="OP_INVOKE_DIRECT"/>
- <field name="OP_INVOKE_DIRECT_EMPTY" deprecated="16"/>
+ <field name="OP_INVOKE_DIRECT_EMPTY" deprecated="15"/>
<field name="OP_INVOKE_DIRECT_JUMBO" since="11"/>
<field name="OP_INVOKE_DIRECT_RANGE"/>
<field name="OP_INVOKE_INTERFACE"/>
@@ -55920,13 +59686,13 @@
<field name="OP_INVOKE_STATIC_RANGE"/>
<field name="OP_INVOKE_SUPER"/>
<field name="OP_INVOKE_SUPER_JUMBO" since="11"/>
- <field name="OP_INVOKE_SUPER_QUICK" deprecated="16"/>
- <field name="OP_INVOKE_SUPER_QUICK_RANGE" deprecated="16"/>
+ <field name="OP_INVOKE_SUPER_QUICK" deprecated="15"/>
+ <field name="OP_INVOKE_SUPER_QUICK_RANGE" deprecated="15"/>
<field name="OP_INVOKE_SUPER_RANGE"/>
<field name="OP_INVOKE_VIRTUAL"/>
<field name="OP_INVOKE_VIRTUAL_JUMBO" since="11"/>
- <field name="OP_INVOKE_VIRTUAL_QUICK" deprecated="16"/>
- <field name="OP_INVOKE_VIRTUAL_QUICK_RANGE" deprecated="16"/>
+ <field name="OP_INVOKE_VIRTUAL_QUICK" deprecated="15"/>
+ <field name="OP_INVOKE_VIRTUAL_QUICK_RANGE" deprecated="15"/>
<field name="OP_INVOKE_VIRTUAL_RANGE"/>
<field name="OP_IPUT"/>
<field name="OP_IPUT_BOOLEAN"/>
@@ -55938,14 +59704,14 @@
<field name="OP_IPUT_JUMBO" since="11"/>
<field name="OP_IPUT_OBJECT"/>
<field name="OP_IPUT_OBJECT_JUMBO" since="11"/>
- <field name="OP_IPUT_OBJECT_QUICK" deprecated="16"/>
- <field name="OP_IPUT_QUICK" deprecated="16"/>
+ <field name="OP_IPUT_OBJECT_QUICK" deprecated="15"/>
+ <field name="OP_IPUT_QUICK" deprecated="15"/>
<field name="OP_IPUT_SHORT"/>
<field name="OP_IPUT_SHORT_JUMBO" since="11"/>
<field name="OP_IPUT_WIDE"/>
<field name="OP_IPUT_WIDE_JUMBO" since="11"/>
- <field name="OP_IPUT_WIDE_QUICK" deprecated="16"/>
- <field name="OP_IPUT_WIDE_VOLATILE" since="9" deprecated="16"/>
+ <field name="OP_IPUT_WIDE_QUICK" deprecated="15"/>
+ <field name="OP_IPUT_WIDE_VOLATILE" since="9" deprecated="15"/>
<field name="OP_LONG_TO_DOUBLE"/>
<field name="OP_LONG_TO_FLOAT"/>
<field name="OP_LONG_TO_INT"/>
@@ -56022,7 +59788,7 @@
<field name="OP_SGET_SHORT_JUMBO" since="11"/>
<field name="OP_SGET_WIDE"/>
<field name="OP_SGET_WIDE_JUMBO" since="11"/>
- <field name="OP_SGET_WIDE_VOLATILE" since="9" deprecated="16"/>
+ <field name="OP_SGET_WIDE_VOLATILE" since="9" deprecated="15"/>
<field name="OP_SHL_INT"/>
<field name="OP_SHL_INT_2ADDR"/>
<field name="OP_SHL_INT_LIT8"/>
@@ -56048,7 +59814,7 @@
<field name="OP_SPUT_SHORT_JUMBO" since="11"/>
<field name="OP_SPUT_WIDE"/>
<field name="OP_SPUT_WIDE_JUMBO" since="11"/>
- <field name="OP_SPUT_WIDE_VOLATILE" since="9" deprecated="16"/>
+ <field name="OP_SPUT_WIDE_VOLATILE" since="9" deprecated="15"/>
<field name="OP_SUB_DOUBLE"/>
<field name="OP_SUB_DOUBLE_2ADDR"/>
<field name="OP_SUB_FLOAT"/>
@@ -56058,7 +59824,7 @@
<field name="OP_SUB_LONG"/>
<field name="OP_SUB_LONG_2ADDR"/>
<field name="OP_THROW"/>
- <field name="OP_THROW_VERIFICATION_ERROR" since="8" deprecated="16"/>
+ <field name="OP_THROW_VERIFICATION_ERROR" since="8" deprecated="15"/>
<field name="OP_UNUSED_3e" removed="8"/>
<field name="OP_UNUSED_3f" removed="8"/>
<field name="OP_UNUSED_40" removed="8"/>
@@ -56110,6 +59876,7 @@
<extends name="dalvik/system/PathClassLoader"/>
<method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)V" since="29"/>
</class>
<class name="dalvik/system/DexClassLoader" since="3">
<extends name="dalvik/system/BaseDexClassLoader" since="14"/>
@@ -56120,17 +59887,18 @@
<extends name="java/lang/Object"/>
<method name="&lt;init>(Ljava/io/File;)V" deprecated="26"/>
<method name="&lt;init>(Ljava/lang/String;)V" deprecated="26"/>
- <method name="close()V"/>
- <method name="entries()Ljava/util/Enumeration;"/>
- <method name="getName()Ljava/lang/String;"/>
- <method name="isDexOptNeeded(Ljava/lang/String;)Z"/>
- <method name="loadClass(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Class;"/>
+ <method name="close()V" deprecated="29"/>
+ <method name="entries()Ljava/util/Enumeration;" deprecated="29"/>
+ <method name="getName()Ljava/lang/String;" deprecated="29"/>
+ <method name="isDexOptNeeded(Ljava/lang/String;)Z" deprecated="29"/>
+ <method name="loadClass(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Class;" deprecated="29"/>
<method name="loadDex(Ljava/lang/String;Ljava/lang/String;I)Ldalvik/system/DexFile;" since="3" deprecated="26"/>
</class>
<class name="dalvik/system/InMemoryDexClassLoader" since="26">
<extends name="dalvik/system/BaseDexClassLoader"/>
<method name="&lt;init>(Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;)V"/>
<method name="&lt;init>([Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;)V" since="27"/>
+ <method name="&lt;init>([Ljava/nio/ByteBuffer;Ljava/lang/String;Ljava/lang/ClassLoader;)V" since="29"/>
</class>
<class name="dalvik/system/PathClassLoader" since="1">
<extends name="dalvik/system/BaseDexClassLoader" since="14"/>
@@ -56162,7 +59930,6 @@
</class>
<class name="dalvik/system/VMDebug" since="1" removed="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="dumpHprofData(Ljava/lang/String;)V" since="3"/>
<method name="getAllocCount(I)I"/>
<method name="getInstructionCount([I)V"/>
@@ -56213,7 +59980,6 @@
</class>
<class name="dalvik/system/VMRuntime" since="1" removed="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="gcSoftReferences()V"/>
<method name="getExternalBytesAllocated()J"/>
<method name="getMinimumHeapSize()J"/>
@@ -56233,7 +59999,6 @@
</class>
<class name="dalvik/system/Zygote" since="1" removed="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="fork()I"/>
<method name="forkAndSpecialize(II[II[[I)I" since="3"/>
<method name="forkAndSpecialize(II[IZ[[I)I"/>
@@ -56247,8 +60012,6 @@
<class name="java/awt/font/NumericShaper" since="1">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(II)V" since="29"/>
<method name="getContextualShaper(I)Ljava/awt/font/NumericShaper;"/>
<method name="getContextualShaper(II)Ljava/awt/font/NumericShaper;"/>
<method name="getContextualShaper(Ljava/util/Set;)Ljava/awt/font/NumericShaper;" since="24"/>
@@ -56475,7 +60238,7 @@
<method name="reset()V"/>
<method name="size()I"/>
<method name="toByteArray()[B"/>
- <method name="toString(I)Ljava/lang/String;" deprecated="16"/>
+ <method name="toString(I)Ljava/lang/String;" deprecated="15"/>
<method name="toString(Ljava/lang/String;)Ljava/lang/String;"/>
<method name="writeTo(Ljava/io/OutputStream;)V"/>
<field name="buf"/>
@@ -56517,7 +60280,6 @@
<class name="java/io/Console" since="9">
<extends name="java/lang/Object"/>
<implements name="java/io/Flushable"/>
- <method name="&lt;init>()V"/>
<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/Console;"/>
<method name="printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/Console;"/>
<method name="readLine()Ljava/lang/String;"/>
@@ -56640,7 +60402,7 @@
<method name="setWritable(ZZ)Z" since="9"/>
<method name="toPath()Ljava/nio/file/Path;" since="26"/>
<method name="toURI()Ljava/net/URI;"/>
- <method name="toURL()Ljava/net/URL;" deprecated="16"/>
+ <method name="toURL()Ljava/net/URL;" deprecated="15"/>
<field name="pathSeparator"/>
<field name="pathSeparatorChar"/>
<field name="separator"/>
@@ -56778,9 +60540,9 @@
</class>
<class name="java/io/LineNumberInputStream" since="1" deprecated="1">
<extends name="java/io/FilterInputStream"/>
- <method name="&lt;init>(Ljava/io/InputStream;)V"/>
- <method name="getLineNumber()I"/>
- <method name="setLineNumber(I)V"/>
+ <method name="&lt;init>(Ljava/io/InputStream;)V" deprecated="29"/>
+ <method name="getLineNumber()I" deprecated="29"/>
+ <method name="setLineNumber(I)V" deprecated="29"/>
</class>
<class name="java/io/LineNumberReader" since="1">
<extends name="java/io/BufferedReader"/>
@@ -56889,12 +60651,11 @@
<method name="put(Ljava/lang/String;Ljava/lang/Object;)V"/>
<method name="put(Ljava/lang/String;S)V"/>
<method name="put(Ljava/lang/String;Z)V"/>
- <method name="write(Ljava/io/ObjectOutput;)V" deprecated="16"/>
+ <method name="write(Ljava/io/ObjectOutput;)V" deprecated="15"/>
</class>
<class name="java/io/ObjectStreamClass" since="1">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V"/>
<method name="forClass()Ljava/lang/Class;"/>
<method name="getField(Ljava/lang/String;)Ljava/io/ObjectStreamField;"/>
<method name="getFields()[Ljava/io/ObjectStreamField;"/>
@@ -56957,8 +60718,6 @@
</class>
<class name="java/io/OptionalDataException" since="1">
<extends name="java/io/ObjectStreamException"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<field name="eof"/>
<field name="length"/>
</class>
@@ -57164,7 +60923,7 @@
</class>
<class name="java/io/StreamTokenizer" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>(Ljava/io/InputStream;)V" deprecated="16"/>
+ <method name="&lt;init>(Ljava/io/InputStream;)V" deprecated="15"/>
<method name="&lt;init>(Ljava/io/Reader;)V"/>
<method name="commentChar(I)V"/>
<method name="eolIsSignificant(Z)V"/>
@@ -57191,10 +60950,10 @@
</class>
<class name="java/io/StringBufferInputStream" since="1" deprecated="1">
<extends name="java/io/InputStream"/>
- <method name="&lt;init>(Ljava/lang/String;)V"/>
- <field name="buffer"/>
- <field name="count"/>
- <field name="pos"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+ <field name="buffer" deprecated="29"/>
+ <field name="count" deprecated="29"/>
+ <field name="pos" deprecated="29"/>
</class>
<class name="java/io/StringReader" since="1">
<extends name="java/io/Reader"/>
@@ -57256,34 +61015,6 @@
<method name="&lt;init>()V"/>
<method name="&lt;init>(Ljava/lang/String;)V"/>
</class>
- <class name="java/lang/AbstractStringBuilder" since="1" removed="29">
- <extends name="java/lang/Object"/>
- <implements name="java/lang/Appendable" since="26"/>
- <implements name="java/lang/CharSequence" since="24"/>
- <method name="&lt;init>()V"/>
- <method name="append(C)Ljava/lang/AbstractStringBuilder;" since="26"/>
- <method name="append(Ljava/lang/CharSequence;)Ljava/lang/AbstractStringBuilder;" since="26"/>
- <method name="append(Ljava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder;" since="26"/>
- <method name="capacity()I"/>
- <method name="charAt(I)C"/>
- <method name="codePointAt(I)I"/>
- <method name="codePointBefore(I)I"/>
- <method name="codePointCount(II)I"/>
- <method name="ensureCapacity(I)V"/>
- <method name="getChars(II[CI)V"/>
- <method name="indexOf(Ljava/lang/String;)I"/>
- <method name="indexOf(Ljava/lang/String;I)I"/>
- <method name="lastIndexOf(Ljava/lang/String;)I"/>
- <method name="lastIndexOf(Ljava/lang/String;I)I"/>
- <method name="length()I"/>
- <method name="offsetByCodePoints(II)I"/>
- <method name="setCharAt(IC)V"/>
- <method name="setLength(I)V"/>
- <method name="subSequence(II)Ljava/lang/CharSequence;"/>
- <method name="substring(I)Ljava/lang/String;"/>
- <method name="substring(II)Ljava/lang/String;"/>
- <method name="trimToSize()V"/>
- </class>
<class name="java/lang/Appendable" since="1">
<extends name="java/lang/Object"/>
<method name="append(C)Ljava/lang/Appendable;"/>
@@ -57427,8 +61158,8 @@
<method name="isJavaIdentifierPart(I)Z"/>
<method name="isJavaIdentifierStart(C)Z"/>
<method name="isJavaIdentifierStart(I)Z"/>
- <method name="isJavaLetter(C)Z" deprecated="16"/>
- <method name="isJavaLetterOrDigit(C)Z" deprecated="16"/>
+ <method name="isJavaLetter(C)Z" deprecated="15"/>
+ <method name="isJavaLetterOrDigit(C)Z" deprecated="15"/>
<method name="isLetter(C)Z"/>
<method name="isLetter(I)Z"/>
<method name="isLetterOrDigit(C)Z"/>
@@ -57438,7 +61169,7 @@
<method name="isLowerCase(I)Z"/>
<method name="isMirrored(C)Z"/>
<method name="isMirrored(I)Z"/>
- <method name="isSpace(C)Z" deprecated="16"/>
+ <method name="isSpace(C)Z" deprecated="15"/>
<method name="isSpaceChar(C)Z"/>
<method name="isSpaceChar(I)Z"/>
<method name="isSupplementaryCodePoint(I)Z"/>
@@ -57543,8 +61274,6 @@
</class>
<class name="java/lang/Character$UnicodeBlock" since="1">
<extends name="java/lang/Character$Subset"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
<method name="forName(Ljava/lang/String;)Ljava/lang/Character$UnicodeBlock;"/>
<method name="of(C)Ljava/lang/Character$UnicodeBlock;"/>
<method name="of(I)Ljava/lang/Character$UnicodeBlock;"/>
@@ -57740,7 +61469,7 @@
<field name="SUPPLEMENTAL_PUNCTUATION" since="19"/>
<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_A"/>
<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_B"/>
- <field name="SURROGATES_AREA" deprecated="16"/>
+ <field name="SURROGATES_AREA" deprecated="15"/>
<field name="SYLOTI_NAGRI" since="19"/>
<field name="SYRIAC"/>
<field name="TAGALOG"/>
@@ -57886,7 +61615,6 @@
<implements name="java/lang/reflect/AnnotatedElement"/>
<implements name="java/lang/reflect/GenericDeclaration"/>
<implements name="java/lang/reflect/Type"/>
- <method name="&lt;init>()V"/>
<method name="asSubclass(Ljava/lang/Class;)Ljava/lang/Class;"/>
<method name="cast(Ljava/lang/Object;)Ljava/lang/Object;"/>
<method name="desiredAssertionStatus()Z"/>
@@ -57964,7 +61692,7 @@
<method name="defineClass(Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/ProtectionDomain;)Ljava/lang/Class;"/>
<method name="defineClass(Ljava/lang/String;[BII)Ljava/lang/Class;"/>
<method name="defineClass(Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class;"/>
- <method name="defineClass([BII)Ljava/lang/Class;" deprecated="16"/>
+ <method name="defineClass([BII)Ljava/lang/Class;" deprecated="15"/>
<method name="definePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;)Ljava/lang/Package;"/>
<method name="findClass(Ljava/lang/String;)Ljava/lang/Class;"/>
<method name="findLibrary(Ljava/lang/String;)Ljava/lang/String;"/>
@@ -58013,7 +61741,6 @@
</class>
<class name="java/lang/Compiler" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="command(Ljava/lang/Object;)Ljava/lang/Object;"/>
<method name="compileClass(Ljava/lang/Class;)Z"/>
<method name="compileClasses(Ljava/lang/String;)Z"/>
@@ -58325,7 +62052,6 @@
</class>
<class name="java/lang/Math" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="IEEEremainder(DD)D"/>
<method name="abs(D)D"/>
<method name="abs(F)F"/>
@@ -58481,8 +62207,6 @@
<class name="java/lang/Package" since="1">
<extends name="java/lang/Object"/>
<implements name="java/lang/reflect/AnnotatedElement"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/util/jar/Manifest;Ljava/net/URL;Ljava/lang/ClassLoader;)V" since="29"/>
<method name="getImplementationTitle()Ljava/lang/String;"/>
<method name="getImplementationVendor()Ljava/lang/String;"/>
<method name="getImplementationVersion()Ljava/lang/String;"/>
@@ -58535,7 +62259,6 @@
</class>
<class name="java/lang/ProcessBuilder$Redirect" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="appendTo(Ljava/io/File;)Ljava/lang/ProcessBuilder$Redirect;"/>
<method name="file()Ljava/io/File;"/>
<method name="from(Ljava/io/File;)Ljava/lang/ProcessBuilder$Redirect;"/>
@@ -58571,7 +62294,6 @@
</class>
<class name="java/lang/Runtime" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="addShutdownHook(Ljava/lang/Thread;)V"/>
<method name="availableProcessors()I"/>
<method name="exec(Ljava/lang/String;)Ljava/lang/Process;"/>
@@ -58583,8 +62305,8 @@
<method name="exit(I)V"/>
<method name="freeMemory()J"/>
<method name="gc()V"/>
- <method name="getLocalizedInputStream(Ljava/io/InputStream;)Ljava/io/InputStream;" deprecated="16"/>
- <method name="getLocalizedOutputStream(Ljava/io/OutputStream;)Ljava/io/OutputStream;" deprecated="16"/>
+ <method name="getLocalizedInputStream(Ljava/io/InputStream;)Ljava/io/InputStream;" deprecated="15"/>
+ <method name="getLocalizedOutputStream(Ljava/io/OutputStream;)Ljava/io/OutputStream;" deprecated="15"/>
<method name="getRuntime()Ljava/lang/Runtime;"/>
<method name="halt(I)V"/>
<method name="load(Ljava/lang/String;)V"/>
@@ -58592,7 +62314,7 @@
<method name="maxMemory()J"/>
<method name="removeShutdownHook(Ljava/lang/Thread;)Z"/>
<method name="runFinalization()V"/>
- <method name="runFinalizersOnExit(Z)V" deprecated="16"/>
+ <method name="runFinalizersOnExit(Z)V" deprecated="15"/>
<method name="totalMemory()J"/>
<method name="traceInstructions(Z)V"/>
<method name="traceMethodCalls(Z)V"/>
@@ -58638,7 +62360,7 @@
<method name="checkListen(I)V"/>
<method name="checkMemberAccess(Ljava/lang/Class;I)V"/>
<method name="checkMulticast(Ljava/net/InetAddress;)V"/>
- <method name="checkMulticast(Ljava/net/InetAddress;B)V" deprecated="16"/>
+ <method name="checkMulticast(Ljava/net/InetAddress;B)V" deprecated="15"/>
<method name="checkPackageAccess(Ljava/lang/String;)V"/>
<method name="checkPackageDefinition(Ljava/lang/String;)V"/>
<method name="checkPermission(Ljava/security/Permission;)V"/>
@@ -58655,17 +62377,17 @@
<method name="checkTopLevelWindow(Ljava/lang/Object;)Z"/>
<method name="checkWrite(Ljava/io/FileDescriptor;)V"/>
<method name="checkWrite(Ljava/lang/String;)V"/>
- <method name="classDepth(Ljava/lang/String;)I" deprecated="16"/>
- <method name="classLoaderDepth()I" deprecated="16"/>
- <method name="currentClassLoader()Ljava/lang/ClassLoader;" deprecated="16"/>
- <method name="currentLoadedClass()Ljava/lang/Class;" deprecated="16"/>
+ <method name="classDepth(Ljava/lang/String;)I" deprecated="15"/>
+ <method name="classLoaderDepth()I" deprecated="15"/>
+ <method name="currentClassLoader()Ljava/lang/ClassLoader;" deprecated="15"/>
+ <method name="currentLoadedClass()Ljava/lang/Class;" deprecated="15"/>
<method name="getClassContext()[Ljava/lang/Class;"/>
- <method name="getInCheck()Z" deprecated="16"/>
+ <method name="getInCheck()Z" deprecated="15"/>
<method name="getSecurityContext()Ljava/lang/Object;"/>
<method name="getThreadGroup()Ljava/lang/ThreadGroup;"/>
- <method name="inClass(Ljava/lang/String;)Z" deprecated="16"/>
- <method name="inClassLoader()Z" deprecated="16"/>
- <field name="inCheck" deprecated="16"/>
+ <method name="inClass(Ljava/lang/String;)Z" deprecated="15"/>
+ <method name="inClassLoader()Z" deprecated="15"/>
+ <field name="inCheck" deprecated="15"/>
</class>
<class name="java/lang/Short" since="1">
<extends name="java/lang/Number"/>
@@ -58708,7 +62430,6 @@
</class>
<class name="java/lang/StrictMath" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="IEEEremainder(DD)D"/>
<method name="abs(D)D"/>
<method name="abs(F)F"/>
@@ -58789,9 +62510,9 @@
<method name="&lt;init>(Ljava/lang/StringBuffer;)V"/>
<method name="&lt;init>(Ljava/lang/StringBuilder;)V"/>
<method name="&lt;init>([B)V"/>
- <method name="&lt;init>([BI)V" deprecated="16"/>
+ <method name="&lt;init>([BI)V" deprecated="15"/>
<method name="&lt;init>([BII)V"/>
- <method name="&lt;init>([BIII)V" deprecated="16"/>
+ <method name="&lt;init>([BIII)V" deprecated="15"/>
<method name="&lt;init>([BIILjava/lang/String;)V"/>
<method name="&lt;init>([BIILjava/nio/charset/Charset;)V" since="9"/>
<method name="&lt;init>([BLjava/lang/String;)V"/>
@@ -58815,7 +62536,7 @@
<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"/>
<method name="format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"/>
<method name="getBytes()[B"/>
- <method name="getBytes(II[BI)V" deprecated="16"/>
+ <method name="getBytes(II[BI)V" deprecated="15"/>
<method name="getBytes(Ljava/lang/String;)[B"/>
<method name="getBytes(Ljava/nio/charset/Charset;)[B" since="9"/>
<method name="getChars(II[CI)V"/>
@@ -58863,8 +62584,7 @@
<field name="CASE_INSENSITIVE_ORDER"/>
</class>
<class name="java/lang/StringBuffer" since="1">
- <extends name="java/lang/AbstractStringBuilder" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
+ <extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
<implements name="java/lang/Appendable"/>
<implements name="java/lang/CharSequence"/>
@@ -58904,8 +62624,7 @@
<method name="reverse()Ljava/lang/StringBuffer;"/>
</class>
<class name="java/lang/StringBuilder" since="1">
- <extends name="java/lang/AbstractStringBuilder" removed="29"/>
- <extends name="java/lang/Object" since="29"/>
+ <extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
<implements name="java/lang/Appendable"/>
<implements name="java/lang/CharSequence"/>
@@ -58957,7 +62676,6 @@
</class>
<class name="java/lang/System" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V"/>
<method name="clearProperty(Ljava/lang/String;)Ljava/lang/String;"/>
<method name="console()Ljava/io/Console;" since="9"/>
@@ -58978,7 +62696,7 @@
<method name="mapLibraryName(Ljava/lang/String;)Ljava/lang/String;"/>
<method name="nanoTime()J"/>
<method name="runFinalization()V"/>
- <method name="runFinalizersOnExit(Z)V" deprecated="16"/>
+ <method name="runFinalizersOnExit(Z)V" deprecated="15"/>
<method name="setErr(Ljava/io/PrintStream;)V"/>
<method name="setIn(Ljava/io/InputStream;)V"/>
<method name="setOut(Ljava/io/PrintStream;)V"/>
@@ -59002,9 +62720,9 @@
<method name="&lt;init>(Ljava/lang/ThreadGroup;Ljava/lang/String;)V"/>
<method name="activeCount()I"/>
<method name="checkAccess()V"/>
- <method name="countStackFrames()I" deprecated="16"/>
+ <method name="countStackFrames()I" deprecated="15"/>
<method name="currentThread()Ljava/lang/Thread;"/>
- <method name="destroy()V" deprecated="16"/>
+ <method name="destroy()V" deprecated="15"/>
<method name="dumpStack()V"/>
<method name="enumerate([Ljava/lang/Thread;)I"/>
<method name="getAllStackTraces()Ljava/util/Map;"/>
@@ -59026,7 +62744,7 @@
<method name="join()V"/>
<method name="join(J)V"/>
<method name="join(JI)V"/>
- <method name="resume()V" deprecated="16"/>
+ <method name="resume()V" deprecated="15"/>
<method name="setContextClassLoader(Ljava/lang/ClassLoader;)V"/>
<method name="setDaemon(Z)V"/>
<method name="setDefaultUncaughtExceptionHandler(Ljava/lang/Thread$UncaughtExceptionHandler;)V"/>
@@ -59036,9 +62754,9 @@
<method name="sleep(J)V"/>
<method name="sleep(JI)V"/>
<method name="start()V"/>
- <method name="stop()V" deprecated="16"/>
- <method name="stop(Ljava/lang/Throwable;)V" deprecated="16"/>
- <method name="suspend()V" deprecated="16"/>
+ <method name="stop()V" deprecated="15"/>
+ <method name="stop(Ljava/lang/Throwable;)V" deprecated="15"/>
+ <method name="suspend()V" deprecated="15"/>
<method name="yield()V"/>
<field name="MAX_PRIORITY"/>
<field name="MIN_PRIORITY"/>
@@ -59070,7 +62788,7 @@
<method name="&lt;init>(Ljava/lang/ThreadGroup;Ljava/lang/String;)V"/>
<method name="activeCount()I"/>
<method name="activeGroupCount()I"/>
- <method name="allowThreadSuspension(Z)Z" deprecated="16"/>
+ <method name="allowThreadSuspension(Z)Z" deprecated="15"/>
<method name="checkAccess()V"/>
<method name="destroy()V"/>
<method name="enumerate([Ljava/lang/Thread;)I"/>
@@ -59085,11 +62803,11 @@
<method name="isDestroyed()Z"/>
<method name="list()V"/>
<method name="parentOf(Ljava/lang/ThreadGroup;)Z"/>
- <method name="resume()V" deprecated="16"/>
+ <method name="resume()V" deprecated="15"/>
<method name="setDaemon(Z)V"/>
<method name="setMaxPriority(I)V"/>
- <method name="stop()V" deprecated="16"/>
- <method name="suspend()V" deprecated="16"/>
+ <method name="stop()V" deprecated="15"/>
+ <method name="suspend()V" deprecated="15"/>
</class>
<class name="java/lang/ThreadLocal" since="1">
<extends name="java/lang/Object"/>
@@ -59162,7 +62880,6 @@
</class>
<class name="java/lang/Void" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="TYPE"/>
</class>
<class name="java/lang/annotation/Annotation" since="1">
@@ -59239,8 +62956,6 @@
</class>
<class name="java/lang/invoke/CallSite" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/invoke/MethodType;)V" since="29"/>
<method name="dynamicInvoker()Ljava/lang/invoke/MethodHandle;"/>
<method name="getTarget()Ljava/lang/invoke/MethodHandle;"/>
<method name="setTarget(Ljava/lang/invoke/MethodHandle;)V"/>
@@ -59261,8 +62976,6 @@
</class>
<class name="java/lang/invoke/MethodHandle" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JILjava/lang/invoke/MethodType;)V" since="29"/>
<method name="asCollector(Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle;"/>
<method name="asFixedArity()Ljava/lang/invoke/MethodHandle;"/>
<method name="asSpreader(Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle;"/>
@@ -59284,9 +62997,9 @@
<method name="getName()Ljava/lang/String;"/>
<method name="getReferenceKind()I"/>
<method name="isVarArgs()Z"/>
- <method name="refKindIsField(I)Z"/>
- <method name="refKindIsValid(I)Z"/>
- <method name="refKindName(I)Ljava/lang/String;"/>
+ <method name="refKindIsField(I)Z" deprecated="29"/>
+ <method name="refKindIsValid(I)Z" deprecated="29"/>
+ <method name="refKindName(I)Ljava/lang/String;" deprecated="29"/>
<method name="referenceKindToString(I)Ljava/lang/String;"/>
<method name="reflectAs(Ljava/lang/Class;Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/reflect/Member;"/>
<method name="toString(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/String;"/>
@@ -59302,7 +63015,6 @@
</class>
<class name="java/lang/invoke/MethodHandles" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="arrayElementGetter(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
<method name="arrayElementSetter(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
<method name="catchException(Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;"/>
@@ -59328,8 +63040,6 @@
</class>
<class name="java/lang/invoke/MethodHandles$Lookup" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/Class;)V" since="29"/>
<method name="bind(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
<method name="findConstructor(Ljava/lang/Class;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
<method name="findGetter(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
@@ -59356,7 +63066,6 @@
<class name="java/lang/invoke/MethodType" since="26">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V"/>
<method name="appendParameterTypes(Ljava/util/List;)Ljava/lang/invoke/MethodType;"/>
<method name="appendParameterTypes([Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
<method name="changeParameterType(ILjava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
@@ -59407,8 +63116,6 @@
</class>
<class name="java/lang/ref/Reference" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/Object;)V" since="29"/>
<method name="clear()V"/>
<method name="enqueue()Z"/>
<method name="get()Ljava/lang/Object;"/>
@@ -59452,7 +63159,6 @@
</class>
<class name="java/lang/reflect/Array" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="get(Ljava/lang/Object;I)Ljava/lang/Object;"/>
<method name="getBoolean(Ljava/lang/Object;I)Z"/>
<method name="getByte(Ljava/lang/Object;I)B"/>
@@ -59480,7 +63186,6 @@
<extends name="java/lang/reflect/Executable" since="26"/>
<implements name="java/lang/reflect/GenericDeclaration" removed="26"/>
<implements name="java/lang/reflect/Member" removed="26"/>
- <method name="&lt;init>()V"/>
<method name="getExceptionTypes()[Ljava/lang/Class;"/>
<method name="getGenericExceptionTypes()[Ljava/lang/reflect/Type;"/>
<method name="getGenericParameterTypes()[Ljava/lang/reflect/Type;"/>
@@ -59494,7 +63199,6 @@
<extends name="java/lang/reflect/AccessibleObject"/>
<implements name="java/lang/reflect/GenericDeclaration"/>
<implements name="java/lang/reflect/Member"/>
- <method name="&lt;init>()V"/>
<method name="getExceptionTypes()[Ljava/lang/Class;"/>
<method name="getGenericExceptionTypes()[Ljava/lang/reflect/Type;"/>
<method name="getGenericParameterTypes()[Ljava/lang/reflect/Type;"/>
@@ -59508,7 +63212,6 @@
<class name="java/lang/reflect/Field" since="1">
<extends name="java/lang/reflect/AccessibleObject"/>
<implements name="java/lang/reflect/Member"/>
- <method name="&lt;init>()V"/>
<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
<method name="getBoolean(Ljava/lang/Object;)Z"/>
<method name="getByte(Ljava/lang/Object;)B"/>
@@ -59582,7 +63285,6 @@
<extends name="java/lang/reflect/Executable" since="26"/>
<implements name="java/lang/reflect/GenericDeclaration" removed="26"/>
<implements name="java/lang/reflect/Member" removed="26"/>
- <method name="&lt;init>()V"/>
<method name="getDefaultValue()Ljava/lang/Object;"/>
<method name="getExceptionTypes()[Ljava/lang/Class;"/>
<method name="getGenericExceptionTypes()[Ljava/lang/reflect/Type;"/>
@@ -59635,8 +63337,6 @@
<class name="java/lang/reflect/Parameter" since="26">
<extends name="java/lang/Object"/>
<implements name="java/lang/reflect/AnnotatedElement"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;ILjava/lang/reflect/Executable;I)V" since="29"/>
<method name="getDeclaringExecutable()Ljava/lang/reflect/Executable;"/>
<method name="getModifiers()I"/>
<method name="getName()Ljava/lang/String;"/>
@@ -60011,7 +63711,7 @@
<method name="disconnect()V"/>
<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
<method name="getLocalPort()I"/>
- <method name="getTTL()B" deprecated="16"/>
+ <method name="getTTL()B" deprecated="15"/>
<method name="getTimeToLive()I"/>
<method name="join(Ljava/net/InetAddress;)V"/>
<method name="joinGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V"/>
@@ -60021,7 +63721,7 @@
<method name="peekData(Ljava/net/DatagramPacket;)I"/>
<method name="receive(Ljava/net/DatagramPacket;)V"/>
<method name="send(Ljava/net/DatagramPacket;)V"/>
- <method name="setTTL(B)V" deprecated="16"/>
+ <method name="setTTL(B)V" deprecated="15"/>
<method name="setTimeToLive(I)V"/>
<field name="fd"/>
<field name="localPort"/>
@@ -60120,7 +63820,7 @@
<field name="HTTP_REQ_TOO_LONG"/>
<field name="HTTP_RESET"/>
<field name="HTTP_SEE_OTHER"/>
- <field name="HTTP_SERVER_ERROR" deprecated="16"/>
+ <field name="HTTP_SERVER_ERROR" deprecated="15"/>
<field name="HTTP_UNAUTHORIZED"/>
<field name="HTTP_UNAVAILABLE"/>
<field name="HTTP_UNSUPPORTED_TYPE"/>
@@ -60136,7 +63836,6 @@
</class>
<class name="java/net/IDN" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="toASCII(Ljava/lang/String;)Ljava/lang/String;"/>
<method name="toASCII(Ljava/lang/String;I)Ljava/lang/String;"/>
<method name="toUnicode(Ljava/lang/String;)Ljava/lang/String;"/>
@@ -60146,11 +63845,9 @@
</class>
<class name="java/net/Inet4Address" since="1">
<extends name="java/net/InetAddress"/>
- <method name="&lt;init>()V"/>
</class>
<class name="java/net/Inet6Address" since="1">
<extends name="java/net/InetAddress"/>
- <method name="&lt;init>()V"/>
<method name="getByAddress(Ljava/lang/String;[BI)Ljava/net/Inet6Address;"/>
<method name="getByAddress(Ljava/lang/String;[BLjava/net/NetworkInterface;)Ljava/net/Inet6Address;"/>
<method name="getScopeId()I"/>
@@ -60160,7 +63857,6 @@
<class name="java/net/InetAddress" since="1">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V"/>
<method name="getAddress()[B"/>
<method name="getAllByName(Ljava/lang/String;)[Ljava/net/InetAddress;"/>
<method name="getByAddress(Ljava/lang/String;[B)Ljava/net/InetAddress;"/>
@@ -60198,7 +63894,6 @@
</class>
<class name="java/net/InterfaceAddress" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getAddress()Ljava/net/InetAddress;"/>
<method name="getBroadcast()Ljava/net/InetAddress;"/>
<method name="getNetworkPrefixLength()S"/>
@@ -60229,17 +63924,17 @@
<method name="getInterface()Ljava/net/InetAddress;"/>
<method name="getLoopbackMode()Z"/>
<method name="getNetworkInterface()Ljava/net/NetworkInterface;"/>
- <method name="getTTL()B" deprecated="16"/>
+ <method name="getTTL()B" deprecated="15"/>
<method name="getTimeToLive()I"/>
<method name="joinGroup(Ljava/net/InetAddress;)V"/>
<method name="joinGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V"/>
<method name="leaveGroup(Ljava/net/InetAddress;)V"/>
<method name="leaveGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V"/>
- <method name="send(Ljava/net/DatagramPacket;B)V" deprecated="16"/>
+ <method name="send(Ljava/net/DatagramPacket;B)V" deprecated="15"/>
<method name="setInterface(Ljava/net/InetAddress;)V"/>
<method name="setLoopbackMode(Z)V"/>
<method name="setNetworkInterface(Ljava/net/NetworkInterface;)V"/>
- <method name="setTTL(B)V" deprecated="16"/>
+ <method name="setTTL(B)V" deprecated="15"/>
<method name="setTimeToLive(I)V"/>
</class>
<class name="java/net/NetPermission" since="1">
@@ -60249,7 +63944,6 @@
</class>
<class name="java/net/NetworkInterface" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getByIndex(I)Ljava/net/NetworkInterface;" since="19"/>
<method name="getByInetAddress(Ljava/net/InetAddress;)Ljava/net/NetworkInterface;"/>
<method name="getByName(Ljava/lang/String;)Ljava/net/NetworkInterface;"/>
@@ -60368,10 +64062,10 @@
<method name="&lt;init>()V"/>
<method name="&lt;init>(Ljava/lang/String;I)V"/>
<method name="&lt;init>(Ljava/lang/String;ILjava/net/InetAddress;I)V"/>
- <method name="&lt;init>(Ljava/lang/String;IZ)V" deprecated="16"/>
+ <method name="&lt;init>(Ljava/lang/String;IZ)V" deprecated="15"/>
<method name="&lt;init>(Ljava/net/InetAddress;I)V"/>
<method name="&lt;init>(Ljava/net/InetAddress;ILjava/net/InetAddress;I)V"/>
- <method name="&lt;init>(Ljava/net/InetAddress;IZ)V" deprecated="16"/>
+ <method name="&lt;init>(Ljava/net/InetAddress;IZ)V" deprecated="15"/>
<method name="&lt;init>(Ljava/net/Proxy;)V"/>
<method name="&lt;init>(Ljava/net/SocketImpl;)V"/>
<method name="bind(Ljava/net/SocketAddress;)V"/>
@@ -60502,7 +64196,6 @@
</class>
<class name="java/net/StandardSocketOptions" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="IP_MULTICAST_IF"/>
<field name="IP_MULTICAST_LOOP"/>
<field name="IP_MULTICAST_TTL"/>
@@ -60617,7 +64310,7 @@
<method name="getContentType()Ljava/lang/String;"/>
<method name="getDate()J"/>
<method name="getDefaultAllowUserInteraction()Z"/>
- <method name="getDefaultRequestProperty(Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
+ <method name="getDefaultRequestProperty(Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
<method name="getDefaultUseCaches()Z"/>
<method name="getDoInput()Z"/>
<method name="getDoOutput()Z"/>
@@ -60646,7 +64339,7 @@
<method name="setConnectTimeout(I)V"/>
<method name="setContentHandlerFactory(Ljava/net/ContentHandlerFactory;)V"/>
<method name="setDefaultAllowUserInteraction(Z)V"/>
- <method name="setDefaultRequestProperty(Ljava/lang/String;Ljava/lang/String;)V" deprecated="16"/>
+ <method name="setDefaultRequestProperty(Ljava/lang/String;Ljava/lang/String;)V" deprecated="15"/>
<method name="setDefaultUseCaches(Z)V"/>
<method name="setDoInput(Z)V"/>
<method name="setDoOutput(Z)V"/>
@@ -60666,13 +64359,12 @@
<class name="java/net/URLDecoder" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
- <method name="decode(Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
+ <method name="decode(Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
<method name="decode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
</class>
<class name="java/net/URLEncoder" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="encode(Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
+ <method name="encode(Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
<method name="encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
</class>
<class name="java/net/URLStreamHandler" since="1">
@@ -60687,7 +64379,7 @@
<method name="openConnection(Ljava/net/URL;Ljava/net/Proxy;)Ljava/net/URLConnection;"/>
<method name="parseURL(Ljava/net/URL;Ljava/lang/String;II)V"/>
<method name="sameFile(Ljava/net/URL;Ljava/net/URL;)Z"/>
- <method name="setURL(Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" deprecated="16"/>
+ <method name="setURL(Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" deprecated="15"/>
<method name="setURL(Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
<method name="toExternalForm(Ljava/net/URL;)Ljava/lang/String;"/>
</class>
@@ -60707,8 +64399,6 @@
</class>
<class name="java/nio/Buffer" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIIII)V" since="29"/>
<method name="array()Ljava/lang/Object;" since="9"/>
<method name="arrayOffset()I" since="9"/>
<method name="capacity()I"/>
@@ -60738,8 +64428,6 @@
<class name="java/nio/ByteBuffer" since="1">
<extends name="java/nio/Buffer"/>
<implements name="java/lang/Comparable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIII)V" since="29"/>
<method name="allocate(I)Ljava/nio/ByteBuffer;"/>
<method name="allocateDirect(I)Ljava/nio/ByteBuffer;"/>
<method name="array()[B"/>
@@ -60797,8 +64485,6 @@
</class>
<class name="java/nio/ByteOrder" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
<method name="nativeOrder()Ljava/nio/ByteOrder;"/>
<field name="BIG_ENDIAN"/>
<field name="LITTLE_ENDIAN"/>
@@ -60809,8 +64495,6 @@
<implements name="java/lang/CharSequence"/>
<implements name="java/lang/Comparable"/>
<implements name="java/lang/Readable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIII)V" since="29"/>
<method name="allocate(I)Ljava/nio/CharBuffer;"/>
<method name="append(C)Ljava/nio/CharBuffer;"/>
<method name="append(Ljava/lang/CharSequence;)Ljava/nio/CharBuffer;"/>
@@ -60845,8 +64529,6 @@
<class name="java/nio/DoubleBuffer" since="1">
<extends name="java/nio/Buffer"/>
<implements name="java/lang/Comparable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIII)V" since="29"/>
<method name="allocate(I)Ljava/nio/DoubleBuffer;"/>
<method name="array()[D"/>
<method name="arrayOffset()I"/>
@@ -60873,8 +64555,6 @@
<class name="java/nio/FloatBuffer" since="1">
<extends name="java/nio/Buffer"/>
<implements name="java/lang/Comparable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIII)V" since="29"/>
<method name="allocate(I)Ljava/nio/FloatBuffer;"/>
<method name="array()[F"/>
<method name="arrayOffset()I"/>
@@ -60901,8 +64581,6 @@
<class name="java/nio/IntBuffer" since="1">
<extends name="java/nio/Buffer"/>
<implements name="java/lang/Comparable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIII)V" since="29"/>
<method name="allocate(I)Ljava/nio/IntBuffer;"/>
<method name="array()[I"/>
<method name="arrayOffset()I"/>
@@ -60933,8 +64611,6 @@
<class name="java/nio/LongBuffer" since="1">
<extends name="java/nio/Buffer"/>
<implements name="java/lang/Comparable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIII)V" since="29"/>
<method name="allocate(I)Ljava/nio/LongBuffer;"/>
<method name="array()[J"/>
<method name="arrayOffset()I"/>
@@ -60960,8 +64636,6 @@
</class>
<class name="java/nio/MappedByteBuffer" since="1">
<extends name="java/nio/ByteBuffer"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIII)V" since="29"/>
<method name="force()Ljava/nio/MappedByteBuffer;"/>
<method name="isLoaded()Z"/>
<method name="load()Ljava/nio/MappedByteBuffer;"/>
@@ -60973,8 +64647,6 @@
<class name="java/nio/ShortBuffer" since="1">
<extends name="java/nio/Buffer"/>
<implements name="java/lang/Comparable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIII)V" since="29"/>
<method name="allocate(I)Ljava/nio/ShortBuffer;"/>
<method name="array()[S"/>
<method name="arrayOffset()I"/>
@@ -61109,7 +64781,6 @@
</class>
<class name="java/nio/channels/Channels" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="newChannel(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;"/>
<method name="newChannel(Ljava/io/OutputStream;)Ljava/nio/channels/WritableByteChannel;"/>
<method name="newInputStream(Ljava/nio/channels/AsynchronousByteChannel;)Ljava/io/InputStream;" since="26"/>
@@ -61188,8 +64859,6 @@
</class>
<class name="java/nio/channels/FileChannel$MapMode" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
<field name="PRIVATE"/>
<field name="READ_ONLY"/>
<field name="READ_WRITE"/>
@@ -61567,8 +65236,6 @@
</class>
<class name="java/nio/charset/CoderResult" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(II)V" since="29"/>
<method name="isError()Z"/>
<method name="isMalformed()Z"/>
<method name="isOverflow()Z"/>
@@ -61583,8 +65250,6 @@
</class>
<class name="java/nio/charset/CodingErrorAction" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
<field name="IGNORE"/>
<field name="REPLACE"/>
<field name="REPORT"/>
@@ -61601,7 +65266,6 @@
</class>
<class name="java/nio/charset/StandardCharsets" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="ISO_8859_1"/>
<field name="US_ASCII"/>
<field name="UTF_16"/>
@@ -61734,7 +65398,6 @@
</class>
<class name="java/nio/file/FileSystems" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getDefault()Ljava/nio/file/FileSystem;"/>
<method name="getFileSystem(Ljava/net/URI;)Ljava/nio/file/FileSystem;"/>
<method name="newFileSystem(Ljava/net/URI;Ljava/util/Map;)Ljava/nio/file/FileSystem;"/>
@@ -61765,7 +65428,6 @@
</class>
<class name="java/nio/file/Files" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="copy(Ljava/io/InputStream;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)J"/>
<method name="copy(Ljava/nio/file/Path;Ljava/io/OutputStream;)J"/>
<method name="copy(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)Ljava/nio/file/Path;"/>
@@ -61905,7 +65567,6 @@
</class>
<class name="java/nio/file/Paths" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="get(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;"/>
<method name="get(Ljava/net/URI;)Ljava/nio/file/Path;"/>
</class>
@@ -61966,7 +65627,6 @@
</class>
<class name="java/nio/file/StandardWatchEventKinds" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="ENTRY_CREATE"/>
<field name="ENTRY_DELETE"/>
<field name="ENTRY_MODIFY"/>
@@ -62009,8 +65669,6 @@
</class>
<class name="java/nio/file/attribute/AclEntry" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/nio/file/attribute/AclEntryType;Ljava/nio/file/attribute/UserPrincipal;Ljava/util/Set;Ljava/util/Set;)V" since="29"/>
<method name="flags()Ljava/util/Set;"/>
<method name="newBuilder()Ljava/nio/file/attribute/AclEntry$Builder;"/>
<method name="newBuilder(Ljava/nio/file/attribute/AclEntry;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
@@ -62020,8 +65678,6 @@
</class>
<class name="java/nio/file/attribute/AclEntry$Builder" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/nio/file/attribute/AclEntryType;Ljava/nio/file/attribute/UserPrincipal;Ljava/util/Set;Ljava/util/Set;)V" since="29"/>
<method name="build()Ljava/nio/file/attribute/AclEntry;"/>
<method name="setFlags(Ljava/util/Set;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
<method name="setFlags([Ljava/nio/file/attribute/AclEntryFlag;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
@@ -62137,8 +65793,6 @@
<class name="java/nio/file/attribute/FileTime" since="26">
<extends name="java/lang/Object"/>
<implements name="java/lang/Comparable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JLjava/util/concurrent/TimeUnit;Ljava/time/Instant;)V" since="29"/>
<method name="compareTo(Ljava/nio/file/attribute/FileTime;)I"/>
<method name="from(JLjava/util/concurrent/TimeUnit;)Ljava/nio/file/attribute/FileTime;"/>
<method name="from(Ljava/time/Instant;)Ljava/nio/file/attribute/FileTime;"/>
@@ -62182,7 +65836,6 @@
</class>
<class name="java/nio/file/attribute/PosixFilePermissions" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="asFileAttribute(Ljava/util/Set;)Ljava/nio/file/attribute/FileAttribute;"/>
<method name="fromString(Ljava/lang/String;)Ljava/util/Set;"/>
<method name="toString(Ljava/util/Set;)Ljava/lang/String;"/>
@@ -62263,7 +65916,6 @@
</class>
<class name="java/security/AccessController" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="checkPermission(Ljava/security/Permission;)V"/>
<method name="doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object;"/>
<method name="doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;"/>
@@ -62345,13 +65997,13 @@
</class>
<class name="java/security/Certificate" since="1" deprecated="3">
<extends name="java/lang/Object"/>
- <method name="decode(Ljava/io/InputStream;)V"/>
- <method name="encode(Ljava/io/OutputStream;)V"/>
- <method name="getFormat()Ljava/lang/String;"/>
- <method name="getGuarantor()Ljava/security/Principal;"/>
- <method name="getPrincipal()Ljava/security/Principal;"/>
- <method name="getPublicKey()Ljava/security/PublicKey;"/>
- <method name="toString(Z)Ljava/lang/String;"/>
+ <method name="decode(Ljava/io/InputStream;)V" deprecated="29"/>
+ <method name="encode(Ljava/io/OutputStream;)V" deprecated="29"/>
+ <method name="getFormat()Ljava/lang/String;" deprecated="29"/>
+ <method name="getGuarantor()Ljava/security/Principal;" deprecated="29"/>
+ <method name="getPrincipal()Ljava/security/Principal;" deprecated="29"/>
+ <method name="getPublicKey()Ljava/security/PublicKey;" deprecated="29"/>
+ <method name="toString(Z)Ljava/lang/String;" deprecated="29"/>
</class>
<class name="java/security/CodeSigner" since="1">
<extends name="java/lang/Object"/>
@@ -62440,34 +66092,34 @@
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
<implements name="java/security/Principal"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Ljava/lang/String;)V"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/security/IdentityScope;)V"/>
- <method name="addCertificate(Ljava/security/Certificate;)V"/>
- <method name="certificates()[Ljava/security/Certificate;"/>
- <method name="getInfo()Ljava/lang/String;"/>
- <method name="getPublicKey()Ljava/security/PublicKey;"/>
- <method name="getScope()Ljava/security/IdentityScope;"/>
- <method name="identityEquals(Ljava/security/Identity;)Z"/>
- <method name="removeCertificate(Ljava/security/Certificate;)V"/>
- <method name="setInfo(Ljava/lang/String;)V"/>
- <method name="setPublicKey(Ljava/security/PublicKey;)V"/>
- <method name="toString(Z)Ljava/lang/String;"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/security/IdentityScope;)V" deprecated="29"/>
+ <method name="addCertificate(Ljava/security/Certificate;)V" deprecated="29"/>
+ <method name="certificates()[Ljava/security/Certificate;" deprecated="29"/>
+ <method name="getInfo()Ljava/lang/String;" deprecated="29"/>
+ <method name="getPublicKey()Ljava/security/PublicKey;" deprecated="29"/>
+ <method name="getScope()Ljava/security/IdentityScope;" deprecated="29"/>
+ <method name="identityEquals(Ljava/security/Identity;)Z" deprecated="29"/>
+ <method name="removeCertificate(Ljava/security/Certificate;)V" deprecated="29"/>
+ <method name="setInfo(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="setPublicKey(Ljava/security/PublicKey;)V" deprecated="29"/>
+ <method name="toString(Z)Ljava/lang/String;" deprecated="29"/>
</class>
<class name="java/security/IdentityScope" since="1" deprecated="3">
<extends name="java/security/Identity"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Ljava/lang/String;)V"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/security/IdentityScope;)V"/>
- <method name="addIdentity(Ljava/security/Identity;)V"/>
- <method name="getIdentity(Ljava/lang/String;)Ljava/security/Identity;"/>
- <method name="getIdentity(Ljava/security/Principal;)Ljava/security/Identity;"/>
- <method name="getIdentity(Ljava/security/PublicKey;)Ljava/security/Identity;"/>
- <method name="getSystemScope()Ljava/security/IdentityScope;"/>
- <method name="identities()Ljava/util/Enumeration;"/>
- <method name="removeIdentity(Ljava/security/Identity;)V"/>
- <method name="setSystemScope(Ljava/security/IdentityScope;)V"/>
- <method name="size()I"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/security/IdentityScope;)V" deprecated="29"/>
+ <method name="addIdentity(Ljava/security/Identity;)V" deprecated="29"/>
+ <method name="getIdentity(Ljava/lang/String;)Ljava/security/Identity;" deprecated="29"/>
+ <method name="getIdentity(Ljava/security/Principal;)Ljava/security/Identity;" deprecated="29"/>
+ <method name="getIdentity(Ljava/security/PublicKey;)Ljava/security/Identity;" deprecated="29"/>
+ <method name="getSystemScope()Ljava/security/IdentityScope;" deprecated="29"/>
+ <method name="identities()Ljava/util/Enumeration;" deprecated="29"/>
+ <method name="removeIdentity(Ljava/security/Identity;)V" deprecated="29"/>
+ <method name="setSystemScope(Ljava/security/IdentityScope;)V" deprecated="29"/>
+ <method name="size()I" deprecated="29"/>
</class>
<class name="java/security/InvalidAlgorithmParameterException" since="1">
<extends name="java/security/GeneralSecurityException"/>
@@ -62900,9 +66552,8 @@
</class>
<class name="java/security/Security" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="addProvider(Ljava/security/Provider;)I"/>
- <method name="getAlgorithmProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
+ <method name="getAlgorithmProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
<method name="getAlgorithms(Ljava/lang/String;)Ljava/util/Set;"/>
<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;"/>
<method name="getProvider(Ljava/lang/String;)Ljava/security/Provider;"/>
@@ -62925,14 +66576,14 @@
<method name="getInstance(Ljava/lang/String;)Ljava/security/Signature;"/>
<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Signature;"/>
<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/Signature;"/>
- <method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;" deprecated="16"/>
+ <method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;" deprecated="15"/>
<method name="getParameters()Ljava/security/AlgorithmParameters;"/>
<method name="getProvider()Ljava/security/Provider;"/>
<method name="initSign(Ljava/security/PrivateKey;)V"/>
<method name="initSign(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V"/>
<method name="initVerify(Ljava/security/PublicKey;)V"/>
<method name="initVerify(Ljava/security/cert/Certificate;)V"/>
- <method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="16"/>
+ <method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="15"/>
<method name="setParameter(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
<method name="sign()[B"/>
<method name="sign([BII)I"/>
@@ -62957,12 +66608,12 @@
<class name="java/security/SignatureSpi" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
- <method name="engineGetParameter(Ljava/lang/String;)Ljava/lang/Object;" deprecated="16"/>
+ <method name="engineGetParameter(Ljava/lang/String;)Ljava/lang/Object;" deprecated="15"/>
<method name="engineGetParameters()Ljava/security/AlgorithmParameters;"/>
<method name="engineInitSign(Ljava/security/PrivateKey;)V"/>
<method name="engineInitSign(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V"/>
<method name="engineInitVerify(Ljava/security/PublicKey;)V"/>
- <method name="engineSetParameter(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="16"/>
+ <method name="engineSetParameter(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="15"/>
<method name="engineSetParameter(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
<method name="engineSign()[B"/>
<method name="engineSign([BII)I"/>
@@ -62984,11 +66635,11 @@
</class>
<class name="java/security/Signer" since="1" deprecated="3">
<extends name="java/security/Identity"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Ljava/lang/String;)V"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/security/IdentityScope;)V"/>
- <method name="getPrivateKey()Ljava/security/PrivateKey;"/>
- <method name="setKeyPair(Ljava/security/KeyPair;)V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/security/IdentityScope;)V" deprecated="29"/>
+ <method name="getPrivateKey()Ljava/security/PrivateKey;" deprecated="29"/>
+ <method name="setKeyPair(Ljava/security/KeyPair;)V" deprecated="29"/>
</class>
<class name="java/security/Timestamp" since="1">
<extends name="java/lang/Object"/>
@@ -63958,7 +67609,7 @@
<method name="getArray(I)Ljava/sql/Array;"/>
<method name="getArray(Ljava/lang/String;)Ljava/sql/Array;"/>
<method name="getBigDecimal(I)Ljava/math/BigDecimal;"/>
- <method name="getBigDecimal(II)Ljava/math/BigDecimal;" deprecated="16"/>
+ <method name="getBigDecimal(II)Ljava/math/BigDecimal;" deprecated="15"/>
<method name="getBigDecimal(Ljava/lang/String;)Ljava/math/BigDecimal;"/>
<method name="getBlob(I)Ljava/sql/Blob;"/>
<method name="getBlob(Ljava/lang/String;)Ljava/sql/Blob;"/>
@@ -64398,7 +68049,7 @@
</class>
<class name="java/sql/Date" since="1">
<extends name="java/util/Date"/>
- <method name="&lt;init>(III)V" deprecated="16"/>
+ <method name="&lt;init>(III)V" deprecated="15"/>
<method name="&lt;init>(J)V"/>
<method name="valueOf(Ljava/lang/String;)Ljava/sql/Date;"/>
</class>
@@ -64413,19 +68064,18 @@
</class>
<class name="java/sql/DriverManager" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="deregisterDriver(Ljava/sql/Driver;)V"/>
<method name="getConnection(Ljava/lang/String;)Ljava/sql/Connection;"/>
<method name="getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;"/>
<method name="getConnection(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;"/>
<method name="getDriver(Ljava/lang/String;)Ljava/sql/Driver;"/>
<method name="getDrivers()Ljava/util/Enumeration;"/>
- <method name="getLogStream()Ljava/io/PrintStream;" deprecated="16"/>
+ <method name="getLogStream()Ljava/io/PrintStream;" deprecated="15"/>
<method name="getLogWriter()Ljava/io/PrintWriter;"/>
<method name="getLoginTimeout()I"/>
<method name="println(Ljava/lang/String;)V"/>
<method name="registerDriver(Ljava/sql/Driver;)V"/>
- <method name="setLogStream(Ljava/io/PrintStream;)V" deprecated="16"/>
+ <method name="setLogStream(Ljava/io/PrintStream;)V" deprecated="15"/>
<method name="setLogWriter(Ljava/io/PrintWriter;)V"/>
<method name="setLoginTimeout(I)V"/>
</class>
@@ -64519,7 +68169,7 @@
<method name="setTimestamp(ILjava/sql/Timestamp;)V"/>
<method name="setTimestamp(ILjava/sql/Timestamp;Ljava/util/Calendar;)V"/>
<method name="setURL(ILjava/net/URL;)V"/>
- <method name="setUnicodeStream(ILjava/io/InputStream;I)V" deprecated="16"/>
+ <method name="setUnicodeStream(ILjava/io/InputStream;I)V" deprecated="15"/>
</class>
<class name="java/sql/Ref" since="1">
<extends name="java/lang/Object"/>
@@ -64546,9 +68196,9 @@
<method name="getAsciiStream(I)Ljava/io/InputStream;"/>
<method name="getAsciiStream(Ljava/lang/String;)Ljava/io/InputStream;"/>
<method name="getBigDecimal(I)Ljava/math/BigDecimal;"/>
- <method name="getBigDecimal(II)Ljava/math/BigDecimal;" deprecated="16"/>
+ <method name="getBigDecimal(II)Ljava/math/BigDecimal;" deprecated="15"/>
<method name="getBigDecimal(Ljava/lang/String;)Ljava/math/BigDecimal;"/>
- <method name="getBigDecimal(Ljava/lang/String;I)Ljava/math/BigDecimal;" deprecated="16"/>
+ <method name="getBigDecimal(Ljava/lang/String;I)Ljava/math/BigDecimal;" deprecated="15"/>
<method name="getBinaryStream(I)Ljava/io/InputStream;"/>
<method name="getBinaryStream(Ljava/lang/String;)Ljava/io/InputStream;"/>
<method name="getBlob(I)Ljava/sql/Blob;"/>
@@ -64614,8 +68264,8 @@
<method name="getType()I"/>
<method name="getURL(I)Ljava/net/URL;"/>
<method name="getURL(Ljava/lang/String;)Ljava/net/URL;"/>
- <method name="getUnicodeStream(I)Ljava/io/InputStream;" deprecated="16"/>
- <method name="getUnicodeStream(Ljava/lang/String;)Ljava/io/InputStream;" deprecated="16"/>
+ <method name="getUnicodeStream(I)Ljava/io/InputStream;" deprecated="15"/>
+ <method name="getUnicodeStream(Ljava/lang/String;)Ljava/io/InputStream;" deprecated="15"/>
<method name="getWarnings()Ljava/sql/SQLWarning;"/>
<method name="insertRow()V"/>
<method name="isAfterLast()Z"/>
@@ -65094,13 +68744,13 @@
</class>
<class name="java/sql/Time" since="1">
<extends name="java/util/Date"/>
- <method name="&lt;init>(III)V" deprecated="16"/>
+ <method name="&lt;init>(III)V" deprecated="15"/>
<method name="&lt;init>(J)V"/>
<method name="valueOf(Ljava/lang/String;)Ljava/sql/Time;"/>
</class>
<class name="java/sql/Timestamp" since="1">
<extends name="java/util/Date"/>
- <method name="&lt;init>(IIIIIII)V" deprecated="16"/>
+ <method name="&lt;init>(IIIIIII)V" deprecated="15"/>
<method name="&lt;init>(J)V"/>
<method name="after(Ljava/sql/Timestamp;)Z"/>
<method name="before(Ljava/sql/Timestamp;)Z"/>
@@ -65112,7 +68762,6 @@
</class>
<class name="java/sql/Types" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="ARRAY"/>
<field name="BIGINT"/>
<field name="BINARY"/>
@@ -65280,8 +68929,6 @@
</class>
<class name="java/text/CollationElementIterator" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/icu/text/CollationElementIterator;)V" since="29"/>
<method name="getMaxExpansion(I)I"/>
<method name="getOffset()I"/>
<method name="next()I"/>
@@ -65298,7 +68945,6 @@
<class name="java/text/CollationKey" since="1">
<extends name="java/lang/Object"/>
<implements name="java/lang/Comparable"/>
- <method name="&lt;init>()V" removed="9"/>
<method name="&lt;init>(Ljava/lang/String;)V" since="9"/>
<method name="compareTo(Ljava/text/CollationKey;)I"/>
<method name="getSourceString()Ljava/lang/String;"/>
@@ -65550,7 +69196,6 @@
</class>
<class name="java/text/Normalizer" since="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="isNormalized(Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Z"/>
<method name="normalize(Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Ljava/lang/String;"/>
</class>
@@ -65706,8 +69351,6 @@
<implements name="java/io/Serializable"/>
<implements name="java/lang/Comparable"/>
<implements name="java/time/temporal/TemporalAmount"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JI)V" since="29"/>
<method name="abs()Ljava/time/Duration;"/>
<method name="between(Ljava/time/temporal/Temporal;Ljava/time/temporal/Temporal;)Ljava/time/Duration;"/>
<method name="compareTo(Ljava/time/Duration;)I"/>
@@ -65759,8 +69402,6 @@
<implements name="java/lang/Comparable"/>
<implements name="java/time/temporal/Temporal"/>
<implements name="java/time/temporal/TemporalAdjuster"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JI)V" since="29"/>
<method name="atOffset(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
<method name="atZone(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
<method name="compareTo(Ljava/time/Instant;)I"/>
@@ -65799,8 +69440,6 @@
<implements name="java/time/chrono/ChronoLocalDate"/>
<implements name="java/time/temporal/Temporal"/>
<implements name="java/time/temporal/TemporalAdjuster"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(III)V" since="29"/>
<method name="atStartOfDay()Ljava/time/LocalDateTime;"/>
<method name="atStartOfDay(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
<method name="atTime(II)Ljava/time/LocalDateTime;"/>
@@ -65853,8 +69492,6 @@
<implements name="java/time/chrono/ChronoLocalDateTime"/>
<implements name="java/time/temporal/Temporal"/>
<implements name="java/time/temporal/TemporalAdjuster"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/time/LocalDate;Ljava/time/LocalTime;)V" since="29"/>
<method name="atOffset(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
<method name="atZone(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDateTime;"/>
@@ -65923,8 +69560,6 @@
<implements name="java/lang/Comparable"/>
<implements name="java/time/temporal/Temporal"/>
<implements name="java/time/temporal/TemporalAdjuster"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(IIII)V" since="29"/>
<method name="atDate(Ljava/time/LocalDate;)Ljava/time/LocalDateTime;"/>
<method name="atOffset(Ljava/time/ZoneOffset;)Ljava/time/OffsetTime;"/>
<method name="compareTo(Ljava/time/LocalTime;)I"/>
@@ -66008,8 +69643,6 @@
<implements name="java/lang/Comparable"/>
<implements name="java/time/temporal/TemporalAccessor"/>
<implements name="java/time/temporal/TemporalAdjuster"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(II)V" since="29"/>
<method name="atYear(I)Ljava/time/LocalDate;"/>
<method name="compareTo(Ljava/time/MonthDay;)I"/>
<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
@@ -66037,8 +69670,6 @@
<implements name="java/lang/Comparable"/>
<implements name="java/time/temporal/Temporal"/>
<implements name="java/time/temporal/TemporalAdjuster"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;)V" since="29"/>
<method name="atZoneSameInstant(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
<method name="atZoneSimilarLocal(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
<method name="compareTo(Ljava/time/OffsetDateTime;)I"/>
@@ -66117,8 +69748,6 @@
<implements name="java/lang/Comparable"/>
<implements name="java/time/temporal/Temporal"/>
<implements name="java/time/temporal/TemporalAdjuster"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/time/LocalTime;Ljava/time/ZoneOffset;)V" since="29"/>
<method name="atDate(Ljava/time/LocalDate;)Ljava/time/OffsetDateTime;"/>
<method name="compareTo(Ljava/time/OffsetTime;)I"/>
<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
@@ -66168,8 +69797,6 @@
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
<implements name="java/time/chrono/ChronoPeriod"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(III)V" since="29"/>
<method name="between(Ljava/time/LocalDate;Ljava/time/LocalDate;)Ljava/time/Period;"/>
<method name="from(Ljava/time/temporal/TemporalAmount;)Ljava/time/Period;"/>
<method name="getChronology()Ljava/time/chrono/IsoChronology;"/>
@@ -66205,8 +69832,6 @@
<implements name="java/lang/Comparable"/>
<implements name="java/time/temporal/Temporal"/>
<implements name="java/time/temporal/TemporalAdjuster"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="atDay(I)Ljava/time/LocalDate;"/>
<method name="atMonth(I)Ljava/time/YearMonth;"/>
<method name="atMonth(Ljava/time/Month;)Ljava/time/YearMonth;"/>
@@ -66244,8 +69869,6 @@
<implements name="java/lang/Comparable"/>
<implements name="java/time/temporal/Temporal"/>
<implements name="java/time/temporal/TemporalAdjuster"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(II)V" since="29"/>
<method name="atDay(I)Ljava/time/LocalDate;"/>
<method name="atEndOfMonth()Ljava/time/LocalDate;"/>
<method name="compareTo(Ljava/time/YearMonth;)I"/>
@@ -66283,7 +69906,6 @@
<class name="java/time/ZoneId" since="26">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V"/>
<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneId;"/>
<method name="getAvailableZoneIds()Ljava/util/Set;"/>
<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;"/>
@@ -66301,8 +69923,6 @@
<implements name="java/lang/Comparable"/>
<implements name="java/time/temporal/TemporalAccessor"/>
<implements name="java/time/temporal/TemporalAdjuster"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(I)V" since="29"/>
<method name="compareTo(Ljava/time/ZoneOffset;)I"/>
<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneOffset;"/>
<method name="getTotalSeconds()I"/>
@@ -66320,8 +69940,6 @@
<implements name="java/io/Serializable"/>
<implements name="java/time/chrono/ChronoZonedDateTime"/>
<implements name="java/time/temporal/Temporal"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneId;)V" since="29"/>
<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZonedDateTime;"/>
<method name="getDayOfMonth()I"/>
<method name="getDayOfWeek()Ljava/time/DayOfWeek;"/>
@@ -66417,14 +70035,6 @@
<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/ChronoLocalDate;"/>
<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ChronoLocalDate;"/>
</class>
- <class name="java/time/chrono/ChronoLocalDateImpl" since="26" removed="29">
- <extends name="java/lang/Object"/>
- <implements name="java/io/Serializable"/>
- <implements name="java/time/chrono/ChronoLocalDate"/>
- <implements name="java/time/temporal/Temporal"/>
- <implements name="java/time/temporal/TemporalAdjuster"/>
- <method name="&lt;init>()V"/>
- </class>
<class name="java/time/chrono/ChronoLocalDateTime" since="26">
<extends name="java/lang/Object"/>
<implements name="java/lang/Comparable"/>
@@ -66534,8 +70144,6 @@
<class name="java/time/chrono/HijrahChronology" since="26">
<extends name="java/time/chrono/AbstractChronology"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
<method name="date(III)Ljava/time/chrono/HijrahDate;"/>
<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/HijrahDate;"/>
<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/HijrahDate;"/>
@@ -66550,10 +70158,7 @@
<field name="INSTANCE"/>
</class>
<class name="java/time/chrono/HijrahDate" since="26">
- <extends name="java/lang/Object" since="29"/>
- <extends name="java/time/chrono/ChronoLocalDateImpl" removed="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/time/chrono/HijrahChronology;J)V" since="29"/>
+ <extends name="java/lang/Object"/>
<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/HijrahDate;"/>
<method name="getChronology()Ljava/time/chrono/HijrahChronology;"/>
<method name="getEra()Ljava/time/chrono/HijrahEra;"/>
@@ -66580,7 +70185,6 @@
<class name="java/time/chrono/IsoChronology" since="26">
<extends name="java/time/chrono/AbstractChronology"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V"/>
<method name="date(III)Ljava/time/LocalDate;"/>
<method name="date(Ljava/time/chrono/Era;III)Ljava/time/LocalDate;"/>
<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDate;"/>
@@ -66610,7 +70214,6 @@
<class name="java/time/chrono/JapaneseChronology" since="26">
<extends name="java/time/chrono/AbstractChronology"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V"/>
<method name="date(III)Ljava/time/chrono/JapaneseDate;"/>
<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/JapaneseDate;"/>
<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/JapaneseDate;"/>
@@ -66625,10 +70228,7 @@
<field name="INSTANCE"/>
</class>
<class name="java/time/chrono/JapaneseDate" since="26">
- <extends name="java/lang/Object" since="29"/>
- <extends name="java/time/chrono/ChronoLocalDateImpl" removed="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/time/LocalDate;)V" since="29"/>
+ <extends name="java/lang/Object"/>
<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/JapaneseDate;"/>
<method name="getChronology()Ljava/time/chrono/JapaneseChronology;"/>
<method name="getEra()Ljava/time/chrono/JapaneseEra;"/>
@@ -66648,20 +70248,18 @@
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
<implements name="java/time/chrono/Era"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ILjava/time/LocalDate;)V" since="29"/>
<method name="of(I)Ljava/time/chrono/JapaneseEra;"/>
<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/JapaneseEra;"/>
<method name="values()[Ljava/time/chrono/JapaneseEra;"/>
<field name="HEISEI"/>
<field name="MEIJI"/>
+ <field name="REIWA" since="30"/>
<field name="SHOWA"/>
<field name="TAISHO"/>
</class>
<class name="java/time/chrono/MinguoChronology" since="26">
<extends name="java/time/chrono/AbstractChronology"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V"/>
<method name="date(III)Ljava/time/chrono/MinguoDate;"/>
<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/MinguoDate;"/>
<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/MinguoDate;"/>
@@ -66676,10 +70274,7 @@
<field name="INSTANCE"/>
</class>
<class name="java/time/chrono/MinguoDate" since="26">
- <extends name="java/lang/Object" since="29"/>
- <extends name="java/time/chrono/ChronoLocalDateImpl" removed="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/time/LocalDate;)V" since="29"/>
+ <extends name="java/lang/Object"/>
<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/MinguoDate;"/>
<method name="getChronology()Ljava/time/chrono/MinguoChronology;"/>
<method name="getEra()Ljava/time/chrono/MinguoEra;"/>
@@ -66706,7 +70301,6 @@
<class name="java/time/chrono/ThaiBuddhistChronology" since="26">
<extends name="java/time/chrono/AbstractChronology"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V"/>
<method name="date(III)Ljava/time/chrono/ThaiBuddhistDate;"/>
<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/ThaiBuddhistDate;"/>
<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ThaiBuddhistDate;"/>
@@ -66721,10 +70315,7 @@
<field name="INSTANCE"/>
</class>
<class name="java/time/chrono/ThaiBuddhistDate" since="26">
- <extends name="java/lang/Object" since="29"/>
- <extends name="java/time/chrono/ChronoLocalDateImpl" removed="29"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/time/LocalDate;)V" since="29"/>
+ <extends name="java/lang/Object"/>
<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ThaiBuddhistDate;"/>
<method name="getChronology()Ljava/time/chrono/ThaiBuddhistChronology;"/>
<method name="getEra()Ljava/time/chrono/ThaiBuddhistEra;"/>
@@ -66750,7 +70341,6 @@
</class>
<class name="java/time/format/DateTimeFormatter" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="format(Ljava/time/temporal/TemporalAccessor;)Ljava/lang/String;"/>
<method name="formatTo(Ljava/time/temporal/TemporalAccessor;Ljava/lang/Appendable;)V"/>
<method name="getChronology()Ljava/time/chrono/Chronology;"/>
@@ -66849,8 +70439,6 @@
</class>
<class name="java/time/format/DecimalStyle" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(CCCC)V" since="29"/>
<method name="getAvailableLocales()Ljava/util/Set;"/>
<method name="getDecimalSeparator()C"/>
<method name="getNegativeSign()C"/>
@@ -66967,7 +70555,6 @@
</class>
<class name="java/time/temporal/IsoFields" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="DAY_OF_QUARTER"/>
<field name="QUARTER_OF_YEAR"/>
<field name="QUARTER_YEARS"/>
@@ -66977,7 +70564,6 @@
</class>
<class name="java/time/temporal/JulianFields" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="JULIAN_DAY"/>
<field name="MODIFIED_JULIAN_DAY"/>
<field name="RATA_DIE"/>
@@ -67008,7 +70594,6 @@
</class>
<class name="java/time/temporal/TemporalAdjusters" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="dayOfWeekInMonth(ILjava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
<method name="firstDayOfMonth()Ljava/time/temporal/TemporalAdjuster;"/>
<method name="firstDayOfNextMonth()Ljava/time/temporal/TemporalAdjuster;"/>
@@ -67047,7 +70632,6 @@
</class>
<class name="java/time/temporal/TemporalQueries" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="chronology()Ljava/time/temporal/TemporalQuery;"/>
<method name="localDate()Ljava/time/temporal/TemporalQuery;"/>
<method name="localTime()Ljava/time/temporal/TemporalQuery;"/>
@@ -67078,8 +70662,6 @@
<class name="java/time/temporal/ValueRange" since="26">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(JJJJ)V" since="29"/>
<method name="checkValidIntValue(JLjava/time/temporal/TemporalField;)I"/>
<method name="checkValidValue(JLjava/time/temporal/TemporalField;)J"/>
<method name="getLargestMinimum()J"/>
@@ -67097,8 +70679,6 @@
<class name="java/time/temporal/WeekFields" since="26">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/time/DayOfWeek;I)V" since="29"/>
<method name="dayOfWeek()Ljava/time/temporal/TemporalField;"/>
<method name="getFirstDayOfWeek()Ljava/time/DayOfWeek;"/>
<method name="getMinimalDaysInFirstWeek()I"/>
@@ -67116,8 +70696,6 @@
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
<implements name="java/lang/Comparable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)V" since="29"/>
<method name="compareTo(Ljava/time/zone/ZoneOffsetTransition;)I"/>
<method name="getDateTimeAfter()Ljava/time/LocalDateTime;"/>
<method name="getDateTimeBefore()Ljava/time/LocalDateTime;"/>
@@ -67134,8 +70712,6 @@
<class name="java/time/zone/ZoneOffsetTransitionRule" since="26">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/time/Month;ILjava/time/DayOfWeek;Ljava/time/LocalTime;ZLjava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)V" since="29"/>
<method name="createTransition(I)Ljava/time/zone/ZoneOffsetTransition;"/>
<method name="getDayOfMonthIndicator()I"/>
<method name="getDayOfWeek()Ljava/time/DayOfWeek;"/>
@@ -67160,8 +70736,6 @@
<class name="java/time/zone/ZoneRules" since="26">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/time/ZoneOffset;)V" since="29"/>
<method name="getDaylightSavings(Ljava/time/Instant;)Ljava/time/Duration;"/>
<method name="getOffset(Ljava/time/Instant;)Ljava/time/ZoneOffset;"/>
<method name="getOffset(Ljava/time/LocalDateTime;)Ljava/time/ZoneOffset;"/>
@@ -67251,7 +70825,6 @@
</class>
<class name="java/util/Arrays" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="asList([Ljava/lang/Object;)Ljava/util/List;"/>
<method name="binarySearch([BB)I"/>
<method name="binarySearch([BIIB)I" since="9"/>
@@ -67410,7 +70983,6 @@
</class>
<class name="java/util/Base64" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getDecoder()Ljava/util/Base64$Decoder;"/>
<method name="getEncoder()Ljava/util/Base64$Encoder;"/>
<method name="getMimeDecoder()Ljava/util/Base64$Decoder;"/>
@@ -67421,8 +70993,6 @@
</class>
<class name="java/util/Base64$Decoder" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(ZZ)V" since="29"/>
<method name="decode(Ljava/lang/String;)[B"/>
<method name="decode(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;"/>
<method name="decode([B)[B"/>
@@ -67431,8 +71001,6 @@
</class>
<class name="java/util/Base64$Encoder" since="26">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Z[BIZ)V" since="29"/>
<method name="encode(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;"/>
<method name="encode([B)[B"/>
<method name="encode([B[B)I"/>
@@ -67630,7 +71198,6 @@
</class>
<class name="java/util/Collections" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z"/>
<method name="asLifoQueue(Ljava/util/Deque;)Ljava/util/Queue;" since="9"/>
<method name="binarySearch(Ljava/util/List;Ljava/lang/Object;)I"/>
@@ -67731,8 +71298,6 @@
<class name="java/util/Currency" since="1">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Landroid/icu/util/Currency;)V" since="29"/>
<method name="getAvailableCurrencies()Ljava/util/Set;" since="19"/>
<method name="getCurrencyCode()Ljava/lang/String;"/>
<method name="getDefaultFractionDigits()I"/>
@@ -67750,36 +71315,36 @@
<implements name="java/lang/Cloneable"/>
<implements name="java/lang/Comparable"/>
<method name="&lt;init>()V"/>
- <method name="&lt;init>(III)V" deprecated="16"/>
- <method name="&lt;init>(IIIII)V" deprecated="16"/>
- <method name="&lt;init>(IIIIII)V" deprecated="16"/>
+ <method name="&lt;init>(III)V" deprecated="15"/>
+ <method name="&lt;init>(IIIII)V" deprecated="15"/>
+ <method name="&lt;init>(IIIIII)V" deprecated="15"/>
<method name="&lt;init>(J)V"/>
- <method name="&lt;init>(Ljava/lang/String;)V" deprecated="16"/>
- <method name="UTC(IIIIII)J" deprecated="16"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" deprecated="15"/>
+ <method name="UTC(IIIIII)J" deprecated="15"/>
<method name="after(Ljava/util/Date;)Z"/>
<method name="before(Ljava/util/Date;)Z"/>
<method name="compareTo(Ljava/util/Date;)I"/>
<method name="from(Ljava/time/Instant;)Ljava/util/Date;" since="26"/>
- <method name="getDate()I" deprecated="16"/>
- <method name="getDay()I" deprecated="16"/>
- <method name="getHours()I" deprecated="16"/>
- <method name="getMinutes()I" deprecated="16"/>
- <method name="getMonth()I" deprecated="16"/>
- <method name="getSeconds()I" deprecated="16"/>
+ <method name="getDate()I" deprecated="15"/>
+ <method name="getDay()I" deprecated="15"/>
+ <method name="getHours()I" deprecated="15"/>
+ <method name="getMinutes()I" deprecated="15"/>
+ <method name="getMonth()I" deprecated="15"/>
+ <method name="getSeconds()I" deprecated="15"/>
<method name="getTime()J"/>
- <method name="getTimezoneOffset()I" deprecated="16"/>
- <method name="getYear()I" deprecated="16"/>
- <method name="parse(Ljava/lang/String;)J" deprecated="16"/>
- <method name="setDate(I)V" deprecated="16"/>
- <method name="setHours(I)V" deprecated="16"/>
- <method name="setMinutes(I)V" deprecated="16"/>
- <method name="setMonth(I)V" deprecated="16"/>
- <method name="setSeconds(I)V" deprecated="16"/>
+ <method name="getTimezoneOffset()I" deprecated="15"/>
+ <method name="getYear()I" deprecated="15"/>
+ <method name="parse(Ljava/lang/String;)J" deprecated="15"/>
+ <method name="setDate(I)V" deprecated="15"/>
+ <method name="setHours(I)V" deprecated="15"/>
+ <method name="setMinutes(I)V" deprecated="15"/>
+ <method name="setMonth(I)V" deprecated="15"/>
+ <method name="setSeconds(I)V" deprecated="15"/>
<method name="setTime(J)V"/>
- <method name="setYear(I)V" deprecated="16"/>
- <method name="toGMTString()Ljava/lang/String;" deprecated="16"/>
+ <method name="setYear(I)V" deprecated="15"/>
+ <method name="toGMTString()Ljava/lang/String;" deprecated="15"/>
<method name="toInstant()Ljava/time/Instant;" since="26"/>
- <method name="toLocaleString()Ljava/lang/String;" deprecated="16"/>
+ <method name="toLocaleString()Ljava/lang/String;" deprecated="15"/>
</class>
<class name="java/util/Deque" since="9">
<extends name="java/lang/Object"/>
@@ -67847,8 +71412,6 @@
<extends name="java/util/AbstractSet"/>
<implements name="java/io/Serializable"/>
<implements name="java/lang/Cloneable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/Class;[Ljava/lang/Enum;)V" since="29"/>
<method name="allOf(Ljava/lang/Class;)Ljava/util/EnumSet;"/>
<method name="clone()Ljava/util/EnumSet;"/>
<method name="complementOf(Ljava/util/EnumSet;)Ljava/util/EnumSet;"/>
@@ -67896,7 +71459,6 @@
</class>
<class name="java/util/FormattableFlags" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="ALTERNATE"/>
<field name="LEFT_JUSTIFY"/>
<field name="UPPERCASE"/>
@@ -68004,7 +71566,6 @@
</class>
<class name="java/util/IllegalFormatException" since="1">
<extends name="java/lang/IllegalArgumentException"/>
- <method name="&lt;init>()V"/>
</class>
<class name="java/util/IllegalFormatFlagsException" since="1">
<extends name="java/util/IllegalFormatException"/>
@@ -68097,6 +71658,18 @@
<method name="lastIndexOf(Ljava/lang/Object;)I"/>
<method name="listIterator()Ljava/util/ListIterator;"/>
<method name="listIterator(I)Ljava/util/ListIterator;"/>
+ <method name="of()Ljava/util/List;" since="30"/>
+ <method name="of(Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+ <method name="of([Ljava/lang/Object;)Ljava/util/List;" since="30"/>
<method name="remove(I)Ljava/lang/Object;"/>
<method name="replaceAll(Ljava/util/function/UnaryOperator;)V" since="24"/>
<method name="set(ILjava/lang/Object;)Ljava/lang/Object;"/>
@@ -68254,6 +71827,7 @@
<method name="computeIfPresent(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
<method name="containsKey(Ljava/lang/Object;)Z"/>
<method name="containsValue(Ljava/lang/Object;)Z"/>
+ <method name="entry(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map$Entry;" since="30"/>
<method name="entrySet()Ljava/util/Set;"/>
<method name="forEach(Ljava/util/function/BiConsumer;)V" since="24"/>
<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
@@ -68261,6 +71835,18 @@
<method name="isEmpty()Z"/>
<method name="keySet()Ljava/util/Set;"/>
<method name="merge(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
+ <method name="of()Ljava/util/Map;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+ <method name="ofEntries([Ljava/util/Map$Entry;)Ljava/util/Map;" since="30"/>
<method name="put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
<method name="putAll(Ljava/util/Map;)V"/>
<method name="putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" since="24"/>
@@ -68342,7 +71928,9 @@
</class>
<class name="java/util/Objects" since="19">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="checkFromIndexSize(III)I" since="30"/>
+ <method name="checkFromToIndex(III)I" since="30"/>
+ <method name="checkIndex(II)I" since="30"/>
<method name="compare(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/Comparator;)I"/>
<method name="deepEquals(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
<method name="equals(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
@@ -68353,6 +71941,8 @@
<method name="requireNonNull(Ljava/lang/Object;)Ljava/lang/Object;"/>
<method name="requireNonNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;"/>
<method name="requireNonNull(Ljava/lang/Object;Ljava/util/function/Supplier;)Ljava/lang/Object;" since="24"/>
+ <method name="requireNonNullElse(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" since="30"/>
+ <method name="requireNonNullElseGet(Ljava/lang/Object;Ljava/util/function/Supplier;)Ljava/lang/Object;" since="30"/>
<method name="toString(Ljava/lang/Object;)Ljava/lang/String;"/>
<method name="toString(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;"/>
</class>
@@ -68375,7 +71965,6 @@
</class>
<class name="java/util/Optional" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="empty()Ljava/util/Optional;"/>
<method name="filter(Ljava/util/function/Predicate;)Ljava/util/Optional;"/>
<method name="flatMap(Ljava/util/function/Function;)Ljava/util/Optional;"/>
@@ -68391,7 +71980,6 @@
</class>
<class name="java/util/OptionalDouble" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="empty()Ljava/util/OptionalDouble;"/>
<method name="getAsDouble()D"/>
<method name="ifPresent(Ljava/util/function/DoubleConsumer;)V"/>
@@ -68403,7 +71991,6 @@
</class>
<class name="java/util/OptionalInt" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="empty()Ljava/util/OptionalInt;"/>
<method name="getAsInt()I"/>
<method name="ifPresent(Ljava/util/function/IntConsumer;)V"/>
@@ -68415,7 +72002,6 @@
</class>
<class name="java/util/OptionalLong" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="empty()Ljava/util/OptionalLong;"/>
<method name="getAsLong()J"/>
<method name="ifPresent(Ljava/util/function/LongConsumer;)V"/>
@@ -68475,7 +72061,7 @@
<method name="load(Ljava/io/Reader;)V" since="9"/>
<method name="loadFromXML(Ljava/io/InputStream;)V"/>
<method name="propertyNames()Ljava/util/Enumeration;"/>
- <method name="save(Ljava/io/OutputStream;Ljava/lang/String;)V" deprecated="16"/>
+ <method name="save(Ljava/io/OutputStream;Ljava/lang/String;)V" deprecated="15"/>
<method name="setProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;"/>
<method name="store(Ljava/io/OutputStream;Ljava/lang/String;)V"/>
<method name="store(Ljava/io/Writer;Ljava/lang/String;)V" since="9"/>
@@ -68651,8 +72237,6 @@
<class name="java/util/ServiceLoader" since="9">
<extends name="java/lang/Object"/>
<implements name="java/lang/Iterable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/Class;Ljava/lang/ClassLoader;)V" since="29"/>
<method name="load(Ljava/lang/Class;)Ljava/util/ServiceLoader;"/>
<method name="load(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader;"/>
<method name="loadInstalled(Ljava/lang/Class;)Ljava/util/ServiceLoader;"/>
@@ -68661,6 +72245,18 @@
<class name="java/util/Set" since="1">
<extends name="java/lang/Object"/>
<implements name="java/util/Collection"/>
+ <method name="of()Ljava/util/Set;" since="30"/>
+ <method name="of(Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+ <method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+ <method name="of([Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
</class>
<class name="java/util/SimpleTimeZone" since="1">
<extends name="java/util/TimeZone"/>
@@ -68749,7 +72345,6 @@
</class>
<class name="java/util/Spliterators" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="emptyDoubleSpliterator()Ljava/util/Spliterator$OfDouble;"/>
<method name="emptyIntSpliterator()Ljava/util/Spliterator$OfInt;"/>
<method name="emptyLongSpliterator()Ljava/util/Spliterator$OfLong;"/>
@@ -69214,19 +72809,9 @@
<method name="searchKeys(JLjava/util/function/Function;)Ljava/lang/Object;" since="24"/>
<method name="searchValues(JLjava/util/function/Function;)Ljava/lang/Object;" since="24"/>
</class>
- <class name="java/util/concurrent/ConcurrentHashMap$CollectionView" since="24" removed="29">
- <extends name="java/lang/Object"/>
- <implements name="java/io/Serializable"/>
- <implements name="java/util/Collection"/>
- <method name="&lt;init>()V"/>
- <method name="getMap()Ljava/util/concurrent/ConcurrentHashMap;"/>
- </class>
<class name="java/util/concurrent/ConcurrentHashMap$KeySetView" since="24">
- <extends name="java/lang/Object" since="29"/>
- <extends name="java/util/concurrent/ConcurrentHashMap$CollectionView" removed="29"/>
+ <extends name="java/lang/Object"/>
<implements name="java/util/Set"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/concurrent/ConcurrentHashMap;Ljava/lang/Object;)V" since="29"/>
<method name="getMappedValue()Ljava/lang/Object;"/>
</class>
<class name="java/util/concurrent/ConcurrentLinkedDeque" since="21">
@@ -69409,7 +72994,6 @@
</class>
<class name="java/util/concurrent/Executors" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="callable(Ljava/lang/Runnable;)Ljava/util/concurrent/Callable;"/>
<method name="callable(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Callable;"/>
<method name="callable(Ljava/security/PrivilegedAction;)Ljava/util/concurrent/Callable;"/>
@@ -69433,6 +73017,27 @@
<method name="unconfigurableExecutorService(Ljava/util/concurrent/ExecutorService;)Ljava/util/concurrent/ExecutorService;"/>
<method name="unconfigurableScheduledExecutorService(Ljava/util/concurrent/ScheduledExecutorService;)Ljava/util/concurrent/ScheduledExecutorService;"/>
</class>
+ <class name="java/util/concurrent/Flow" since="30">
+ <extends name="java/lang/Object"/>
+ <method name="defaultBufferSize()I"/>
+ </class>
+ <class name="java/util/concurrent/Flow$Processor" since="30">
+ <implements name="java/util/concurrent/Flow$Publisher"/>
+ <implements name="java/util/concurrent/Flow$Subscriber"/>
+ </class>
+ <class name="java/util/concurrent/Flow$Publisher" since="30">
+ <method name="subscribe(Ljava/util/concurrent/Flow$Subscriber;)V"/>
+ </class>
+ <class name="java/util/concurrent/Flow$Subscriber" since="30">
+ <method name="onComplete()V"/>
+ <method name="onError(Ljava/lang/Throwable;)V"/>
+ <method name="onNext(Ljava/lang/Object;)V"/>
+ <method name="onSubscribe(Ljava/util/concurrent/Flow$Subscription;)V"/>
+ </class>
+ <class name="java/util/concurrent/Flow$Subscription" since="30">
+ <method name="cancel()V"/>
+ <method name="request(J)V"/>
+ </class>
<class name="java/util/concurrent/ForkJoinPool" since="21">
<extends name="java/util/concurrent/AbstractExecutorService"/>
<method name="&lt;init>()V"/>
@@ -69697,7 +73302,6 @@
</class>
<class name="java/util/concurrent/ThreadLocalRandom" since="21">
<extends name="java/util/Random"/>
- <method name="&lt;init>()V"/>
<method name="current()Ljava/util/concurrent/ThreadLocalRandom;"/>
<method name="nextDouble(D)D"/>
<method name="nextDouble(DD)D"/>
@@ -70008,8 +73612,7 @@
<method name="weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;II)Z"/>
</class>
<class name="java/util/concurrent/atomic/DoubleAccumulator" since="24">
- <extends name="java/lang/Number" since="29"/>
- <extends name="java/util/concurrent/atomic/Striped64" removed="29"/>
+ <extends name="java/lang/Number"/>
<method name="&lt;init>(Ljava/util/function/DoubleBinaryOperator;D)V"/>
<method name="accumulate(D)V"/>
<method name="get()D"/>
@@ -70017,8 +73620,7 @@
<method name="reset()V"/>
</class>
<class name="java/util/concurrent/atomic/DoubleAdder" since="24">
- <extends name="java/lang/Number" since="29"/>
- <extends name="java/util/concurrent/atomic/Striped64" removed="29"/>
+ <extends name="java/lang/Number"/>
<method name="&lt;init>()V"/>
<method name="add(D)V"/>
<method name="reset()V"/>
@@ -70026,8 +73628,7 @@
<method name="sumThenReset()D"/>
</class>
<class name="java/util/concurrent/atomic/LongAccumulator" since="24">
- <extends name="java/lang/Number" since="29"/>
- <extends name="java/util/concurrent/atomic/Striped64" removed="29"/>
+ <extends name="java/lang/Number"/>
<method name="&lt;init>(Ljava/util/function/LongBinaryOperator;J)V"/>
<method name="accumulate(J)V"/>
<method name="get()J"/>
@@ -70035,8 +73636,7 @@
<method name="reset()V"/>
</class>
<class name="java/util/concurrent/atomic/LongAdder" since="24">
- <extends name="java/lang/Number" since="29"/>
- <extends name="java/util/concurrent/atomic/Striped64" removed="29"/>
+ <extends name="java/lang/Number"/>
<method name="&lt;init>()V"/>
<method name="add(J)V"/>
<method name="decrement()V"/>
@@ -70045,10 +73645,6 @@
<method name="sum()J"/>
<method name="sumThenReset()J"/>
</class>
- <class name="java/util/concurrent/atomic/Striped64" since="24" removed="29">
- <extends name="java/lang/Number"/>
- <method name="&lt;init>()V"/>
- </class>
<class name="java/util/concurrent/locks/AbstractOwnableSynchronizer" since="5">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
@@ -70163,7 +73759,6 @@
</class>
<class name="java/util/concurrent/locks/LockSupport" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getBlocker(Ljava/lang/Thread;)Ljava/lang/Object;" since="9"/>
<method name="park()V"/>
<method name="park(Ljava/lang/Object;)V" since="9"/>
@@ -70515,46 +74110,46 @@
<method name="getAttributes()Ljava/util/jar/Attributes;"/>
<method name="getCertificates()[Ljava/security/cert/Certificate;"/>
<method name="getCodeSigners()[Ljava/security/CodeSigner;"/>
- <field name="CENATT" since="29"/>
- <field name="CENATX" since="29"/>
- <field name="CENCOM" since="29"/>
- <field name="CENCRC" since="29"/>
- <field name="CENDSK" since="29"/>
- <field name="CENEXT" since="29"/>
- <field name="CENFLG" since="29"/>
- <field name="CENHDR" since="29"/>
- <field name="CENHOW" since="29"/>
- <field name="CENLEN" since="29"/>
- <field name="CENNAM" since="29"/>
- <field name="CENOFF" since="29"/>
- <field name="CENSIG" since="29"/>
- <field name="CENSIZ" since="29"/>
- <field name="CENTIM" since="29"/>
- <field name="CENVEM" since="29"/>
- <field name="CENVER" since="29"/>
- <field name="ENDCOM" since="29"/>
- <field name="ENDHDR" since="29"/>
- <field name="ENDOFF" since="29"/>
- <field name="ENDSIG" since="29"/>
- <field name="ENDSIZ" since="29"/>
- <field name="ENDSUB" since="29"/>
- <field name="ENDTOT" since="29"/>
- <field name="EXTCRC" since="29"/>
- <field name="EXTHDR" since="29"/>
- <field name="EXTLEN" since="29"/>
- <field name="EXTSIG" since="29"/>
- <field name="EXTSIZ" since="29"/>
- <field name="LOCCRC" since="29"/>
- <field name="LOCEXT" since="29"/>
- <field name="LOCFLG" since="29"/>
- <field name="LOCHDR" since="29"/>
- <field name="LOCHOW" since="29"/>
- <field name="LOCLEN" since="29"/>
- <field name="LOCNAM" since="29"/>
- <field name="LOCSIG" since="29"/>
- <field name="LOCSIZ" since="29"/>
- <field name="LOCTIM" since="29"/>
- <field name="LOCVER" since="29"/>
+ <field name="CENATT" since="28"/>
+ <field name="CENATX" since="28"/>
+ <field name="CENCOM" since="28"/>
+ <field name="CENCRC" since="28"/>
+ <field name="CENDSK" since="28"/>
+ <field name="CENEXT" since="28"/>
+ <field name="CENFLG" since="28"/>
+ <field name="CENHDR" since="28"/>
+ <field name="CENHOW" since="28"/>
+ <field name="CENLEN" since="28"/>
+ <field name="CENNAM" since="28"/>
+ <field name="CENOFF" since="28"/>
+ <field name="CENSIG" since="28"/>
+ <field name="CENSIZ" since="28"/>
+ <field name="CENTIM" since="28"/>
+ <field name="CENVEM" since="28"/>
+ <field name="CENVER" since="28"/>
+ <field name="ENDCOM" since="28"/>
+ <field name="ENDHDR" since="28"/>
+ <field name="ENDOFF" since="28"/>
+ <field name="ENDSIG" since="28"/>
+ <field name="ENDSIZ" since="28"/>
+ <field name="ENDSUB" since="28"/>
+ <field name="ENDTOT" since="28"/>
+ <field name="EXTCRC" since="28"/>
+ <field name="EXTHDR" since="28"/>
+ <field name="EXTLEN" since="28"/>
+ <field name="EXTSIG" since="28"/>
+ <field name="EXTSIZ" since="28"/>
+ <field name="LOCCRC" since="28"/>
+ <field name="LOCEXT" since="28"/>
+ <field name="LOCFLG" since="28"/>
+ <field name="LOCHDR" since="28"/>
+ <field name="LOCHOW" since="28"/>
+ <field name="LOCLEN" since="28"/>
+ <field name="LOCNAM" since="28"/>
+ <field name="LOCSIG" since="28"/>
+ <field name="LOCSIZ" since="28"/>
+ <field name="LOCTIM" since="28"/>
+ <field name="LOCVER" since="28"/>
</class>
<class name="java/util/jar/JarException" since="1">
<extends name="java/util/zip/ZipException"/>
@@ -70570,46 +74165,46 @@
<method name="&lt;init>(Ljava/lang/String;Z)V"/>
<method name="getJarEntry(Ljava/lang/String;)Ljava/util/jar/JarEntry;"/>
<method name="getManifest()Ljava/util/jar/Manifest;"/>
- <field name="CENATT" since="29"/>
- <field name="CENATX" since="29"/>
- <field name="CENCOM" since="29"/>
- <field name="CENCRC" since="29"/>
- <field name="CENDSK" since="29"/>
- <field name="CENEXT" since="29"/>
- <field name="CENFLG" since="29"/>
- <field name="CENHDR" since="29"/>
- <field name="CENHOW" since="29"/>
- <field name="CENLEN" since="29"/>
- <field name="CENNAM" since="29"/>
- <field name="CENOFF" since="29"/>
- <field name="CENSIG" since="29"/>
- <field name="CENSIZ" since="29"/>
- <field name="CENTIM" since="29"/>
- <field name="CENVEM" since="29"/>
- <field name="CENVER" since="29"/>
- <field name="ENDCOM" since="29"/>
- <field name="ENDHDR" since="29"/>
- <field name="ENDOFF" since="29"/>
- <field name="ENDSIG" since="29"/>
- <field name="ENDSIZ" since="29"/>
- <field name="ENDSUB" since="29"/>
- <field name="ENDTOT" since="29"/>
- <field name="EXTCRC" since="29"/>
- <field name="EXTHDR" since="29"/>
- <field name="EXTLEN" since="29"/>
- <field name="EXTSIG" since="29"/>
- <field name="EXTSIZ" since="29"/>
- <field name="LOCCRC" since="29"/>
- <field name="LOCEXT" since="29"/>
- <field name="LOCFLG" since="29"/>
- <field name="LOCHDR" since="29"/>
- <field name="LOCHOW" since="29"/>
- <field name="LOCLEN" since="29"/>
- <field name="LOCNAM" since="29"/>
- <field name="LOCSIG" since="29"/>
- <field name="LOCSIZ" since="29"/>
- <field name="LOCTIM" since="29"/>
- <field name="LOCVER" since="29"/>
+ <field name="CENATT" since="28"/>
+ <field name="CENATX" since="28"/>
+ <field name="CENCOM" since="28"/>
+ <field name="CENCRC" since="28"/>
+ <field name="CENDSK" since="28"/>
+ <field name="CENEXT" since="28"/>
+ <field name="CENFLG" since="28"/>
+ <field name="CENHDR" since="28"/>
+ <field name="CENHOW" since="28"/>
+ <field name="CENLEN" since="28"/>
+ <field name="CENNAM" since="28"/>
+ <field name="CENOFF" since="28"/>
+ <field name="CENSIG" since="28"/>
+ <field name="CENSIZ" since="28"/>
+ <field name="CENTIM" since="28"/>
+ <field name="CENVEM" since="28"/>
+ <field name="CENVER" since="28"/>
+ <field name="ENDCOM" since="28"/>
+ <field name="ENDHDR" since="28"/>
+ <field name="ENDOFF" since="28"/>
+ <field name="ENDSIG" since="28"/>
+ <field name="ENDSIZ" since="28"/>
+ <field name="ENDSUB" since="28"/>
+ <field name="ENDTOT" since="28"/>
+ <field name="EXTCRC" since="28"/>
+ <field name="EXTHDR" since="28"/>
+ <field name="EXTLEN" since="28"/>
+ <field name="EXTSIG" since="28"/>
+ <field name="EXTSIZ" since="28"/>
+ <field name="LOCCRC" since="28"/>
+ <field name="LOCEXT" since="28"/>
+ <field name="LOCFLG" since="28"/>
+ <field name="LOCHDR" since="28"/>
+ <field name="LOCHOW" since="28"/>
+ <field name="LOCLEN" since="28"/>
+ <field name="LOCNAM" since="28"/>
+ <field name="LOCSIG" since="28"/>
+ <field name="LOCSIZ" since="28"/>
+ <field name="LOCTIM" since="28"/>
+ <field name="LOCVER" since="28"/>
<field name="MANIFEST_NAME"/>
</class>
<class name="java/util/jar/JarInputStream" since="1">
@@ -70618,91 +74213,91 @@
<method name="&lt;init>(Ljava/io/InputStream;Z)V"/>
<method name="getManifest()Ljava/util/jar/Manifest;"/>
<method name="getNextJarEntry()Ljava/util/jar/JarEntry;"/>
- <field name="CENATT" since="29"/>
- <field name="CENATX" since="29"/>
- <field name="CENCOM" since="29"/>
- <field name="CENCRC" since="29"/>
- <field name="CENDSK" since="29"/>
- <field name="CENEXT" since="29"/>
- <field name="CENFLG" since="29"/>
- <field name="CENHDR" since="29"/>
- <field name="CENHOW" since="29"/>
- <field name="CENLEN" since="29"/>
- <field name="CENNAM" since="29"/>
- <field name="CENOFF" since="29"/>
- <field name="CENSIG" since="29"/>
- <field name="CENSIZ" since="29"/>
- <field name="CENTIM" since="29"/>
- <field name="CENVEM" since="29"/>
- <field name="CENVER" since="29"/>
- <field name="ENDCOM" since="29"/>
- <field name="ENDHDR" since="29"/>
- <field name="ENDOFF" since="29"/>
- <field name="ENDSIG" since="29"/>
- <field name="ENDSIZ" since="29"/>
- <field name="ENDSUB" since="29"/>
- <field name="ENDTOT" since="29"/>
- <field name="EXTCRC" since="29"/>
- <field name="EXTHDR" since="29"/>
- <field name="EXTLEN" since="29"/>
- <field name="EXTSIG" since="29"/>
- <field name="EXTSIZ" since="29"/>
- <field name="LOCCRC" since="29"/>
- <field name="LOCEXT" since="29"/>
- <field name="LOCFLG" since="29"/>
- <field name="LOCHDR" since="29"/>
- <field name="LOCHOW" since="29"/>
- <field name="LOCLEN" since="29"/>
- <field name="LOCNAM" since="29"/>
- <field name="LOCSIG" since="29"/>
- <field name="LOCSIZ" since="29"/>
- <field name="LOCTIM" since="29"/>
- <field name="LOCVER" since="29"/>
+ <field name="CENATT" since="28"/>
+ <field name="CENATX" since="28"/>
+ <field name="CENCOM" since="28"/>
+ <field name="CENCRC" since="28"/>
+ <field name="CENDSK" since="28"/>
+ <field name="CENEXT" since="28"/>
+ <field name="CENFLG" since="28"/>
+ <field name="CENHDR" since="28"/>
+ <field name="CENHOW" since="28"/>
+ <field name="CENLEN" since="28"/>
+ <field name="CENNAM" since="28"/>
+ <field name="CENOFF" since="28"/>
+ <field name="CENSIG" since="28"/>
+ <field name="CENSIZ" since="28"/>
+ <field name="CENTIM" since="28"/>
+ <field name="CENVEM" since="28"/>
+ <field name="CENVER" since="28"/>
+ <field name="ENDCOM" since="28"/>
+ <field name="ENDHDR" since="28"/>
+ <field name="ENDOFF" since="28"/>
+ <field name="ENDSIG" since="28"/>
+ <field name="ENDSIZ" since="28"/>
+ <field name="ENDSUB" since="28"/>
+ <field name="ENDTOT" since="28"/>
+ <field name="EXTCRC" since="28"/>
+ <field name="EXTHDR" since="28"/>
+ <field name="EXTLEN" since="28"/>
+ <field name="EXTSIG" since="28"/>
+ <field name="EXTSIZ" since="28"/>
+ <field name="LOCCRC" since="28"/>
+ <field name="LOCEXT" since="28"/>
+ <field name="LOCFLG" since="28"/>
+ <field name="LOCHDR" since="28"/>
+ <field name="LOCHOW" since="28"/>
+ <field name="LOCLEN" since="28"/>
+ <field name="LOCNAM" since="28"/>
+ <field name="LOCSIG" since="28"/>
+ <field name="LOCSIZ" since="28"/>
+ <field name="LOCTIM" since="28"/>
+ <field name="LOCVER" since="28"/>
</class>
<class name="java/util/jar/JarOutputStream" since="1">
<extends name="java/util/zip/ZipOutputStream"/>
<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/jar/Manifest;)V"/>
- <field name="CENATT" since="29"/>
- <field name="CENATX" since="29"/>
- <field name="CENCOM" since="29"/>
- <field name="CENCRC" since="29"/>
- <field name="CENDSK" since="29"/>
- <field name="CENEXT" since="29"/>
- <field name="CENFLG" since="29"/>
- <field name="CENHDR" since="29"/>
- <field name="CENHOW" since="29"/>
- <field name="CENLEN" since="29"/>
- <field name="CENNAM" since="29"/>
- <field name="CENOFF" since="29"/>
- <field name="CENSIG" since="29"/>
- <field name="CENSIZ" since="29"/>
- <field name="CENTIM" since="29"/>
- <field name="CENVEM" since="29"/>
- <field name="CENVER" since="29"/>
- <field name="ENDCOM" since="29"/>
- <field name="ENDHDR" since="29"/>
- <field name="ENDOFF" since="29"/>
- <field name="ENDSIG" since="29"/>
- <field name="ENDSIZ" since="29"/>
- <field name="ENDSUB" since="29"/>
- <field name="ENDTOT" since="29"/>
- <field name="EXTCRC" since="29"/>
- <field name="EXTHDR" since="29"/>
- <field name="EXTLEN" since="29"/>
- <field name="EXTSIG" since="29"/>
- <field name="EXTSIZ" since="29"/>
- <field name="LOCCRC" since="29"/>
- <field name="LOCEXT" since="29"/>
- <field name="LOCFLG" since="29"/>
- <field name="LOCHDR" since="29"/>
- <field name="LOCHOW" since="29"/>
- <field name="LOCLEN" since="29"/>
- <field name="LOCNAM" since="29"/>
- <field name="LOCSIG" since="29"/>
- <field name="LOCSIZ" since="29"/>
- <field name="LOCTIM" since="29"/>
- <field name="LOCVER" since="29"/>
+ <field name="CENATT" since="28"/>
+ <field name="CENATX" since="28"/>
+ <field name="CENCOM" since="28"/>
+ <field name="CENCRC" since="28"/>
+ <field name="CENDSK" since="28"/>
+ <field name="CENEXT" since="28"/>
+ <field name="CENFLG" since="28"/>
+ <field name="CENHDR" since="28"/>
+ <field name="CENHOW" since="28"/>
+ <field name="CENLEN" since="28"/>
+ <field name="CENNAM" since="28"/>
+ <field name="CENOFF" since="28"/>
+ <field name="CENSIG" since="28"/>
+ <field name="CENSIZ" since="28"/>
+ <field name="CENTIM" since="28"/>
+ <field name="CENVEM" since="28"/>
+ <field name="CENVER" since="28"/>
+ <field name="ENDCOM" since="28"/>
+ <field name="ENDHDR" since="28"/>
+ <field name="ENDOFF" since="28"/>
+ <field name="ENDSIG" since="28"/>
+ <field name="ENDSIZ" since="28"/>
+ <field name="ENDSUB" since="28"/>
+ <field name="ENDTOT" since="28"/>
+ <field name="EXTCRC" since="28"/>
+ <field name="EXTHDR" since="28"/>
+ <field name="EXTLEN" since="28"/>
+ <field name="EXTSIG" since="28"/>
+ <field name="EXTSIZ" since="28"/>
+ <field name="LOCCRC" since="28"/>
+ <field name="LOCEXT" since="28"/>
+ <field name="LOCFLG" since="28"/>
+ <field name="LOCHDR" since="28"/>
+ <field name="LOCHOW" since="28"/>
+ <field name="LOCLEN" since="28"/>
+ <field name="LOCNAM" since="28"/>
+ <field name="LOCSIG" since="28"/>
+ <field name="LOCSIZ" since="28"/>
+ <field name="LOCTIM" since="28"/>
+ <field name="LOCVER" since="28"/>
</class>
<class name="java/util/jar/Manifest" since="1">
<extends name="java/lang/Object"/>
@@ -70719,7 +74314,6 @@
</class>
<class name="java/util/jar/Pack200" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="newPacker()Ljava/util/jar/Pack200$Packer;"/>
<method name="newUnpacker()Ljava/util/jar/Pack200$Unpacker;"/>
</class>
@@ -70947,7 +74541,7 @@
<method name="warning(Ljava/lang/String;)V"/>
<method name="warning(Ljava/util/function/Supplier;)V" since="26"/>
<field name="GLOBAL_LOGGER_NAME" since="9"/>
- <field name="global" deprecated="16"/>
+ <field name="global" deprecated="15"/>
</class>
<class name="java/util/logging/LoggingMXBean" since="1">
<extends name="java/lang/Object"/>
@@ -71103,8 +74697,6 @@
<class name="java/util/regex/Matcher" since="1">
<extends name="java/lang/Object"/>
<implements name="java/util/regex/MatchResult"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/util/regex/Pattern;Ljava/lang/CharSequence;)V" since="29"/>
<method name="appendReplacement(Ljava/lang/StringBuffer;Ljava/lang/String;)Ljava/util/regex/Matcher;"/>
<method name="appendTail(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;"/>
<method name="end(Ljava/lang/String;)I" since="26"/>
@@ -71135,8 +74727,6 @@
<class name="java/util/regex/Pattern" since="1">
<extends name="java/lang/Object"/>
<implements name="java/io/Serializable"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;I)V" since="29"/>
<method name="asPredicate()Ljava/util/function/Predicate;" since="24"/>
<method name="compile(Ljava/lang/String;)Ljava/util/regex/Pattern;"/>
<method name="compile(Ljava/lang/String;I)Ljava/util/regex/Pattern;"/>
@@ -71196,7 +74786,6 @@
</class>
<class name="java/util/stream/Collectors" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="averagingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/Collector;"/>
<method name="averagingInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/Collector;"/>
<method name="averagingLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/Collector;"/>
@@ -71443,7 +75032,6 @@
</class>
<class name="java/util/stream/StreamSupport" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="doubleStream(Ljava/util/Spliterator$OfDouble;Z)Ljava/util/stream/DoubleStream;"/>
<method name="doubleStream(Ljava/util/function/Supplier;IZ)Ljava/util/stream/DoubleStream;"/>
<method name="intStream(Ljava/util/Spliterator$OfInt;Z)Ljava/util/stream/IntStream;"/>
@@ -73320,10 +76908,13 @@
<method name="beginHandshake()V"/>
<method name="closeInbound()V"/>
<method name="closeOutbound()V"/>
+ <method name="getApplicationProtocol()Ljava/lang/String;" since="29"/>
<method name="getDelegatedTask()Ljava/lang/Runnable;"/>
<method name="getEnableSessionCreation()Z"/>
<method name="getEnabledCipherSuites()[Ljava/lang/String;"/>
<method name="getEnabledProtocols()[Ljava/lang/String;"/>
+ <method name="getHandshakeApplicationProtocol()Ljava/lang/String;" since="29"/>
+ <method name="getHandshakeApplicationProtocolSelector()Ljava/util/function/BiFunction;" since="29"/>
<method name="getHandshakeSession()Ljavax/net/ssl/SSLSession;" since="24"/>
<method name="getHandshakeStatus()Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;"/>
<method name="getNeedClientAuth()Z"/>
@@ -73340,6 +76931,7 @@
<method name="setEnableSessionCreation(Z)V"/>
<method name="setEnabledCipherSuites([Ljava/lang/String;)V"/>
<method name="setEnabledProtocols([Ljava/lang/String;)V"/>
+ <method name="setHandshakeApplicationProtocolSelector(Ljava/util/function/BiFunction;)V" since="29"/>
<method name="setNeedClientAuth(Z)V"/>
<method name="setSSLParameters(Ljavax/net/ssl/SSLParameters;)V" since="9"/>
<method name="setUseClientMode(Z)V"/>
@@ -73398,6 +76990,7 @@
<method name="&lt;init>([Ljava/lang/String;)V"/>
<method name="&lt;init>([Ljava/lang/String;[Ljava/lang/String;)V"/>
<method name="getAlgorithmConstraints()Ljava/security/AlgorithmConstraints;" since="24"/>
+ <method name="getApplicationProtocols()[Ljava/lang/String;" since="29"/>
<method name="getCipherSuites()[Ljava/lang/String;"/>
<method name="getEndpointIdentificationAlgorithm()Ljava/lang/String;" since="24"/>
<method name="getNeedClientAuth()Z"/>
@@ -73407,6 +77000,7 @@
<method name="getUseCipherSuitesOrder()Z" since="24"/>
<method name="getWantClientAuth()Z"/>
<method name="setAlgorithmConstraints(Ljava/security/AlgorithmConstraints;)V" since="24"/>
+ <method name="setApplicationProtocols([Ljava/lang/String;)V" since="29"/>
<method name="setCipherSuites([Ljava/lang/String;)V"/>
<method name="setEndpointIdentificationAlgorithm(Ljava/lang/String;)V" since="24"/>
<method name="setNeedClientAuth(Z)V"/>
@@ -73511,9 +77105,12 @@
<method name="&lt;init>(Ljava/net/InetAddress;I)V"/>
<method name="&lt;init>(Ljava/net/InetAddress;ILjava/net/InetAddress;I)V"/>
<method name="addHandshakeCompletedListener(Ljavax/net/ssl/HandshakeCompletedListener;)V"/>
+ <method name="getApplicationProtocol()Ljava/lang/String;" since="29"/>
<method name="getEnableSessionCreation()Z"/>
<method name="getEnabledCipherSuites()[Ljava/lang/String;"/>
<method name="getEnabledProtocols()[Ljava/lang/String;"/>
+ <method name="getHandshakeApplicationProtocol()Ljava/lang/String;" since="29"/>
+ <method name="getHandshakeApplicationProtocolSelector()Ljava/util/function/BiFunction;" since="29"/>
<method name="getHandshakeSession()Ljavax/net/ssl/SSLSession;" since="24"/>
<method name="getNeedClientAuth()Z"/>
<method name="getSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9"/>
@@ -73526,6 +77123,7 @@
<method name="setEnableSessionCreation(Z)V"/>
<method name="setEnabledCipherSuites([Ljava/lang/String;)V"/>
<method name="setEnabledProtocols([Ljava/lang/String;)V"/>
+ <method name="setHandshakeApplicationProtocolSelector(Ljava/util/function/BiFunction;)V" since="29"/>
<method name="setNeedClientAuth(Z)V"/>
<method name="setSSLParameters(Ljavax/net/ssl/SSLParameters;)V" since="9"/>
<method name="setUseClientMode(Z)V"/>
@@ -73541,7 +77139,6 @@
</class>
<class name="javax/net/ssl/StandardConstants" since="24">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="SNI_HOST_NAME"/>
</class>
<class name="javax/net/ssl/TrustManager" since="1">
@@ -73972,7 +77569,7 @@
</class>
<class name="javax/xml/XMLConstants" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" removed="8"/>
<field name="DEFAULT_NS_PREFIX"/>
<field name="FEATURE_SECURE_PROCESSING"/>
<field name="NULL_NS_URI"/>
@@ -73995,7 +77592,6 @@
</class>
<class name="javax/xml/datatype/DatatypeConstants" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="APRIL"/>
<field name="AUGUST"/>
<field name="DATE"/>
@@ -74035,8 +77631,6 @@
</class>
<class name="javax/xml/datatype/DatatypeConstants$Field" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V" removed="29"/>
- <method name="&lt;init>(Ljava/lang/String;I)V" since="29"/>
<method name="getId()I"/>
</class>
<class name="javax/xml/datatype/DatatypeFactory" since="8">
@@ -74258,7 +77852,6 @@
</class>
<class name="javax/xml/transform/OutputKeys" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="CDATA_SECTION_ELEMENTS"/>
<field name="DOCTYPE_PUBLIC"/>
<field name="DOCTYPE_SYSTEM"/>
@@ -74566,7 +78159,6 @@
</class>
<class name="javax/xml/xpath/XPathConstants" since="8">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="BOOLEAN"/>
<field name="DOM_OBJECT_MODEL"/>
<field name="NODE"/>
@@ -74628,7 +78220,7 @@
<extends name="java/lang/Object"/>
<method name="resolveVariable(Ljavax/xml/namespace/QName;)Ljava/lang/Object;"/>
</class>
- <class name="junit/framework/Assert" since="1" removed="28">
+ <class name="junit/framework/Assert" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
<method name="assertEquals(BB)V"/>
@@ -74670,28 +78262,28 @@
<method name="failSame(Ljava/lang/String;)V" since="16"/>
<method name="format(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/String;" since="16"/>
</class>
- <class name="junit/framework/AssertionFailedError" since="1" removed="28">
+ <class name="junit/framework/AssertionFailedError" since="1">
<extends name="java/lang/AssertionError" since="16"/>
<extends name="java/lang/Error" removed="16"/>
<method name="&lt;init>()V"/>
<method name="&lt;init>(Ljava/lang/String;)V"/>
</class>
- <class name="junit/framework/ComparisonFailure" since="1" removed="28">
+ <class name="junit/framework/ComparisonFailure" since="1">
<extends name="junit/framework/AssertionFailedError"/>
<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
<method name="getActual()Ljava/lang/String;" since="16"/>
<method name="getExpected()Ljava/lang/String;" since="16"/>
</class>
- <class name="junit/framework/Protectable" since="1" removed="28">
+ <class name="junit/framework/Protectable" since="1">
<extends name="java/lang/Object"/>
<method name="protect()V"/>
</class>
- <class name="junit/framework/Test" since="1" removed="28">
+ <class name="junit/framework/Test" since="1">
<extends name="java/lang/Object"/>
<method name="countTestCases()I"/>
<method name="run(Ljunit/framework/TestResult;)V"/>
</class>
- <class name="junit/framework/TestCase" since="1" removed="28">
+ <class name="junit/framework/TestCase" since="1">
<extends name="junit/framework/Assert"/>
<implements name="junit/framework/Test"/>
<method name="&lt;init>()V"/>
@@ -74705,7 +78297,7 @@
<method name="setUp()V"/>
<method name="tearDown()V"/>
</class>
- <class name="junit/framework/TestFailure" since="1" removed="28">
+ <class name="junit/framework/TestFailure" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>(Ljunit/framework/Test;Ljava/lang/Throwable;)V"/>
<method name="exceptionMessage()Ljava/lang/String;"/>
@@ -74716,14 +78308,14 @@
<field name="fFailedTest"/>
<field name="fThrownException"/>
</class>
- <class name="junit/framework/TestListener" since="1" removed="28">
+ <class name="junit/framework/TestListener" since="1">
<extends name="java/lang/Object"/>
<method name="addError(Ljunit/framework/Test;Ljava/lang/Throwable;)V"/>
<method name="addFailure(Ljunit/framework/Test;Ljunit/framework/AssertionFailedError;)V"/>
<method name="endTest(Ljunit/framework/Test;)V"/>
<method name="startTest(Ljunit/framework/Test;)V"/>
</class>
- <class name="junit/framework/TestResult" since="1" removed="28">
+ <class name="junit/framework/TestResult" since="1">
<extends name="java/lang/Object"/>
<method name="&lt;init>()V"/>
<method name="addError(Ljunit/framework/Test;Ljava/lang/Throwable;)V"/>
@@ -74747,7 +78339,7 @@
<field name="fListeners"/>
<field name="fRunTests"/>
</class>
- <class name="junit/framework/TestSuite" since="1" removed="28">
+ <class name="junit/framework/TestSuite" since="1">
<extends name="java/lang/Object"/>
<implements name="junit/framework/Test"/>
<method name="&lt;init>()V"/>
@@ -74768,7 +78360,7 @@
<method name="tests()Ljava/util/Enumeration;"/>
<method name="warning(Ljava/lang/String;)Ljunit/framework/Test;" since="16"/>
</class>
- <class name="junit/runner/BaseTestRunner" since="1" removed="28">
+ <class name="junit/runner/BaseTestRunner" since="1">
<extends name="java/lang/Object"/>
<implements name="junit/framework/TestListener"/>
<method name="&lt;init>()V"/>
@@ -74798,14 +78390,13 @@
<method name="useReloadingTestSuiteLoader()Z"/>
<field name="SUITE_METHODNAME"/>
</class>
- <class name="junit/runner/TestSuiteLoader" since="1" removed="28">
+ <class name="junit/runner/TestSuiteLoader" since="1">
<extends name="java/lang/Object"/>
<method name="load(Ljava/lang/String;)Ljava/lang/Class;"/>
<method name="reload(Ljava/lang/Class;)Ljava/lang/Class;"/>
</class>
- <class name="junit/runner/Version" since="1" removed="28">
+ <class name="junit/runner/Version" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="id()Ljava/lang/String;"/>
</class>
<class name="org/apache/commons/logging/Log" since="1" deprecated="22" removed="23">
@@ -75148,7 +78739,6 @@
</class>
<class name="org/apache/http/auth/AUTH" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="PROXY_AUTH"/>
<field name="PROXY_AUTH_RESP"/>
<field name="WWW_AUTH"/>
@@ -75268,7 +78858,6 @@
</class>
<class name="org/apache/http/auth/params/AuthParams" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getCredentialCharset(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
<method name="setCredentialCharset(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V"/>
</class>
@@ -75449,7 +79038,6 @@
</class>
<class name="org/apache/http/client/params/AuthPolicy" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="BASIC"/>
<field name="DIGEST"/>
<field name="NTLM"/>
@@ -75485,7 +79073,6 @@
</class>
<class name="org/apache/http/client/params/CookiePolicy" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<field name="BEST_MATCH"/>
<field name="BROWSER_COMPATIBILITY"/>
<field name="NETSCAPE"/>
@@ -75494,7 +79081,6 @@
</class>
<class name="org/apache/http/client/params/HttpClientParams" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getCookiePolicy(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
<method name="isAuthenticating(Lorg/apache/http/params/HttpParams;)Z"/>
<method name="isRedirecting(Lorg/apache/http/params/HttpParams;)Z"/>
@@ -75552,12 +79138,10 @@
</class>
<class name="org/apache/http/client/utils/CloneUtils" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="clone(Ljava/lang/Object;)Ljava/lang/Object;"/>
</class>
<class name="org/apache/http/client/utils/URIUtils" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="createURI(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/net/URI;"/>
<method name="resolve(Ljava/net/URI;Ljava/lang/String;)Ljava/net/URI;"/>
<method name="resolve(Ljava/net/URI;Ljava/net/URI;)Ljava/net/URI;"/>
@@ -75616,8 +79200,8 @@
</class>
<class name="org/apache/http/conn/ConnectTimeoutException" since="1" deprecated="22">
<extends name="java/io/InterruptedIOException"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Ljava/lang/String;)V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
</class>
<class name="org/apache/http/conn/ConnectionKeepAliveStrategy" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
@@ -75676,7 +79260,6 @@
<class name="org/apache/http/conn/MultihomePlainSocketFactory" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
<implements name="org/apache/http/conn/scheme/SocketFactory"/>
- <method name="&lt;init>()V"/>
<method name="getSocketFactory()Lorg/apache/http/conn/MultihomePlainSocketFactory;"/>
</class>
<class name="org/apache/http/conn/OperatedClientConnection" since="1" deprecated="22" removed="23">
@@ -75755,7 +79338,6 @@
<class name="org/apache/http/conn/params/ConnRouteParams" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
<implements name="org/apache/http/conn/params/ConnRoutePNames"/>
- <method name="&lt;init>()V"/>
<method name="getDefaultProxy(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/HttpHost;"/>
<method name="getForcedRoute(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/conn/routing/HttpRoute;"/>
<method name="getLocalAddress(Lorg/apache/http/params/HttpParams;)Ljava/net/InetAddress;"/>
@@ -75841,12 +79423,12 @@
</class>
<class name="org/apache/http/conn/scheme/HostNameResolver" since="1" deprecated="22">
<extends name="java/lang/Object"/>
- <method name="resolve(Ljava/lang/String;)Ljava/net/InetAddress;"/>
+ <method name="resolve(Ljava/lang/String;)Ljava/net/InetAddress;" deprecated="29"/>
</class>
<class name="org/apache/http/conn/scheme/LayeredSocketFactory" since="1" deprecated="22">
<extends name="java/lang/Object"/>
<implements name="org/apache/http/conn/scheme/SocketFactory"/>
- <method name="createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;"/>
+ <method name="createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;" deprecated="29"/>
</class>
<class name="org/apache/http/conn/scheme/PlainSocketFactory" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
@@ -75877,59 +79459,58 @@
</class>
<class name="org/apache/http/conn/scheme/SocketFactory" since="1" deprecated="22">
<extends name="java/lang/Object"/>
- <method name="connectSocket(Ljava/net/Socket;Ljava/lang/String;ILjava/net/InetAddress;ILorg/apache/http/params/HttpParams;)Ljava/net/Socket;"/>
- <method name="createSocket()Ljava/net/Socket;"/>
- <method name="isSecure(Ljava/net/Socket;)Z"/>
+ <method name="connectSocket(Ljava/net/Socket;Ljava/lang/String;ILjava/net/InetAddress;ILorg/apache/http/params/HttpParams;)Ljava/net/Socket;" deprecated="29"/>
+ <method name="createSocket()Ljava/net/Socket;" deprecated="29"/>
+ <method name="isSecure(Ljava/net/Socket;)Z" deprecated="29"/>
</class>
<class name="org/apache/http/conn/ssl/AbstractVerifier" since="1" deprecated="22">
<extends name="java/lang/Object"/>
<implements name="org/apache/http/conn/ssl/X509HostnameVerifier"/>
- <method name="&lt;init>()V"/>
- <method name="acceptableCountryWildcard(Ljava/lang/String;)Z"/>
- <method name="countDots(Ljava/lang/String;)I"/>
- <method name="getCNs(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;"/>
- <method name="getDNSSubjectAlts(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;"/>
- <method name="verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Z)V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="acceptableCountryWildcard(Ljava/lang/String;)Z" deprecated="29"/>
+ <method name="countDots(Ljava/lang/String;)I" deprecated="29"/>
+ <method name="getCNs(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;" deprecated="29"/>
+ <method name="getDNSSubjectAlts(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;" deprecated="29"/>
+ <method name="verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Z)V" deprecated="29"/>
</class>
<class name="org/apache/http/conn/ssl/AllowAllHostnameVerifier" since="1" deprecated="22">
<extends name="org/apache/http/conn/ssl/AbstractVerifier"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
</class>
<class name="org/apache/http/conn/ssl/BrowserCompatHostnameVerifier" since="1" deprecated="22">
<extends name="org/apache/http/conn/ssl/AbstractVerifier"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
</class>
<class name="org/apache/http/conn/ssl/SSLSocketFactory" since="1" deprecated="22">
<extends name="java/lang/Object"/>
<implements name="org/apache/http/conn/scheme/LayeredSocketFactory"/>
- <method name="&lt;init>(Ljava/lang/String;Ljava/security/KeyStore;Ljava/lang/String;Ljava/security/KeyStore;Ljava/security/SecureRandom;Lorg/apache/http/conn/scheme/HostNameResolver;)V"/>
- <method name="&lt;init>(Ljava/security/KeyStore;)V"/>
- <method name="&lt;init>(Ljava/security/KeyStore;Ljava/lang/String;)V"/>
- <method name="&lt;init>(Ljava/security/KeyStore;Ljava/lang/String;Ljava/security/KeyStore;)V"/>
- <method name="getHostnameVerifier()Lorg/apache/http/conn/ssl/X509HostnameVerifier;"/>
- <method name="getSocketFactory()Lorg/apache/http/conn/ssl/SSLSocketFactory;"/>
- <method name="setHostnameVerifier(Lorg/apache/http/conn/ssl/X509HostnameVerifier;)V"/>
- <field name="ALLOW_ALL_HOSTNAME_VERIFIER"/>
- <field name="BROWSER_COMPATIBLE_HOSTNAME_VERIFIER"/>
- <field name="SSL"/>
- <field name="SSLV2"/>
- <field name="STRICT_HOSTNAME_VERIFIER"/>
- <field name="TLS"/>
+ <method name="&lt;init>(Ljava/lang/String;Ljava/security/KeyStore;Ljava/lang/String;Ljava/security/KeyStore;Ljava/security/SecureRandom;Lorg/apache/http/conn/scheme/HostNameResolver;)V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/security/KeyStore;)V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/security/KeyStore;Ljava/lang/String;)V" deprecated="29"/>
+ <method name="&lt;init>(Ljava/security/KeyStore;Ljava/lang/String;Ljava/security/KeyStore;)V" deprecated="29"/>
+ <method name="getHostnameVerifier()Lorg/apache/http/conn/ssl/X509HostnameVerifier;" deprecated="29"/>
+ <method name="getSocketFactory()Lorg/apache/http/conn/ssl/SSLSocketFactory;" deprecated="29"/>
+ <method name="setHostnameVerifier(Lorg/apache/http/conn/ssl/X509HostnameVerifier;)V" deprecated="29"/>
+ <field name="ALLOW_ALL_HOSTNAME_VERIFIER" deprecated="29"/>
+ <field name="BROWSER_COMPATIBLE_HOSTNAME_VERIFIER" deprecated="29"/>
+ <field name="SSL" deprecated="29"/>
+ <field name="SSLV2" deprecated="29"/>
+ <field name="STRICT_HOSTNAME_VERIFIER" deprecated="29"/>
+ <field name="TLS" deprecated="29"/>
</class>
<class name="org/apache/http/conn/ssl/StrictHostnameVerifier" since="1" deprecated="22">
<extends name="org/apache/http/conn/ssl/AbstractVerifier"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
</class>
<class name="org/apache/http/conn/ssl/X509HostnameVerifier" since="1" deprecated="22">
<extends name="java/lang/Object"/>
<implements name="javax/net/ssl/HostnameVerifier"/>
- <method name="verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)V"/>
- <method name="verify(Ljava/lang/String;Ljavax/net/ssl/SSLSocket;)V"/>
- <method name="verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V"/>
+ <method name="verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)V" deprecated="29"/>
+ <method name="verify(Ljava/lang/String;Ljavax/net/ssl/SSLSocket;)V" deprecated="29"/>
+ <method name="verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V" deprecated="29"/>
</class>
<class name="org/apache/http/conn/util/InetAddressUtils" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="isIPv4Address(Ljava/lang/String;)Z"/>
<method name="isIPv6Address(Ljava/lang/String;)Z"/>
<method name="isIPv6HexCompressedAddress(Ljava/lang/String;)Z"/>
@@ -76824,7 +80405,6 @@
</class>
<class name="org/apache/http/impl/cookie/DateUtils" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="formatDate(Ljava/util/Date;)Ljava/lang/String;"/>
<method name="formatDate(Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;"/>
<method name="parseDate(Ljava/lang/String;)Ljava/util/Date;"/>
@@ -77312,14 +80892,14 @@
</class>
<class name="org/apache/http/params/CoreConnectionPNames" since="1" deprecated="22">
<extends name="java/lang/Object"/>
- <field name="CONNECTION_TIMEOUT"/>
- <field name="MAX_HEADER_COUNT"/>
- <field name="MAX_LINE_LENGTH"/>
- <field name="SOCKET_BUFFER_SIZE"/>
- <field name="SO_LINGER"/>
- <field name="SO_TIMEOUT"/>
- <field name="STALE_CONNECTION_CHECK"/>
- <field name="TCP_NODELAY"/>
+ <field name="CONNECTION_TIMEOUT" deprecated="29"/>
+ <field name="MAX_HEADER_COUNT" deprecated="29"/>
+ <field name="MAX_LINE_LENGTH" deprecated="29"/>
+ <field name="SOCKET_BUFFER_SIZE" deprecated="29"/>
+ <field name="SO_LINGER" deprecated="29"/>
+ <field name="SO_TIMEOUT" deprecated="29"/>
+ <field name="STALE_CONNECTION_CHECK" deprecated="29"/>
+ <field name="TCP_NODELAY" deprecated="29"/>
</class>
<class name="org/apache/http/params/CoreProtocolPNames" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
@@ -77355,36 +80935,35 @@
<class name="org/apache/http/params/HttpConnectionParams" since="1" deprecated="22">
<extends name="java/lang/Object"/>
<implements name="org/apache/http/params/CoreConnectionPNames"/>
- <method name="&lt;init>()V"/>
- <method name="getConnectionTimeout(Lorg/apache/http/params/HttpParams;)I"/>
- <method name="getLinger(Lorg/apache/http/params/HttpParams;)I"/>
- <method name="getSoTimeout(Lorg/apache/http/params/HttpParams;)I"/>
- <method name="getSocketBufferSize(Lorg/apache/http/params/HttpParams;)I"/>
- <method name="getTcpNoDelay(Lorg/apache/http/params/HttpParams;)Z"/>
- <method name="isStaleCheckingEnabled(Lorg/apache/http/params/HttpParams;)Z"/>
- <method name="setConnectionTimeout(Lorg/apache/http/params/HttpParams;I)V"/>
- <method name="setLinger(Lorg/apache/http/params/HttpParams;I)V"/>
- <method name="setSoTimeout(Lorg/apache/http/params/HttpParams;I)V"/>
- <method name="setSocketBufferSize(Lorg/apache/http/params/HttpParams;I)V"/>
- <method name="setStaleCheckingEnabled(Lorg/apache/http/params/HttpParams;Z)V"/>
- <method name="setTcpNoDelay(Lorg/apache/http/params/HttpParams;Z)V"/>
+ <method name="getConnectionTimeout(Lorg/apache/http/params/HttpParams;)I" deprecated="29"/>
+ <method name="getLinger(Lorg/apache/http/params/HttpParams;)I" deprecated="29"/>
+ <method name="getSoTimeout(Lorg/apache/http/params/HttpParams;)I" deprecated="29"/>
+ <method name="getSocketBufferSize(Lorg/apache/http/params/HttpParams;)I" deprecated="29"/>
+ <method name="getTcpNoDelay(Lorg/apache/http/params/HttpParams;)Z" deprecated="29"/>
+ <method name="isStaleCheckingEnabled(Lorg/apache/http/params/HttpParams;)Z" deprecated="29"/>
+ <method name="setConnectionTimeout(Lorg/apache/http/params/HttpParams;I)V" deprecated="29"/>
+ <method name="setLinger(Lorg/apache/http/params/HttpParams;I)V" deprecated="29"/>
+ <method name="setSoTimeout(Lorg/apache/http/params/HttpParams;I)V" deprecated="29"/>
+ <method name="setSocketBufferSize(Lorg/apache/http/params/HttpParams;I)V" deprecated="29"/>
+ <method name="setStaleCheckingEnabled(Lorg/apache/http/params/HttpParams;Z)V" deprecated="29"/>
+ <method name="setTcpNoDelay(Lorg/apache/http/params/HttpParams;Z)V" deprecated="29"/>
</class>
<class name="org/apache/http/params/HttpParams" since="1" deprecated="22">
<extends name="java/lang/Object"/>
- <method name="copy()Lorg/apache/http/params/HttpParams;"/>
- <method name="getBooleanParameter(Ljava/lang/String;Z)Z"/>
- <method name="getDoubleParameter(Ljava/lang/String;D)D"/>
- <method name="getIntParameter(Ljava/lang/String;I)I"/>
- <method name="getLongParameter(Ljava/lang/String;J)J"/>
- <method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;"/>
- <method name="isParameterFalse(Ljava/lang/String;)Z"/>
- <method name="isParameterTrue(Ljava/lang/String;)Z"/>
- <method name="removeParameter(Ljava/lang/String;)Z"/>
- <method name="setBooleanParameter(Ljava/lang/String;Z)Lorg/apache/http/params/HttpParams;"/>
- <method name="setDoubleParameter(Ljava/lang/String;D)Lorg/apache/http/params/HttpParams;"/>
- <method name="setIntParameter(Ljava/lang/String;I)Lorg/apache/http/params/HttpParams;"/>
- <method name="setLongParameter(Ljava/lang/String;J)Lorg/apache/http/params/HttpParams;"/>
- <method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)Lorg/apache/http/params/HttpParams;"/>
+ <method name="copy()Lorg/apache/http/params/HttpParams;" deprecated="29"/>
+ <method name="getBooleanParameter(Ljava/lang/String;Z)Z" deprecated="29"/>
+ <method name="getDoubleParameter(Ljava/lang/String;D)D" deprecated="29"/>
+ <method name="getIntParameter(Ljava/lang/String;I)I" deprecated="29"/>
+ <method name="getLongParameter(Ljava/lang/String;J)J" deprecated="29"/>
+ <method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;" deprecated="29"/>
+ <method name="isParameterFalse(Ljava/lang/String;)Z" deprecated="29"/>
+ <method name="isParameterTrue(Ljava/lang/String;)Z" deprecated="29"/>
+ <method name="removeParameter(Ljava/lang/String;)Z" deprecated="29"/>
+ <method name="setBooleanParameter(Ljava/lang/String;Z)Lorg/apache/http/params/HttpParams;" deprecated="29"/>
+ <method name="setDoubleParameter(Ljava/lang/String;D)Lorg/apache/http/params/HttpParams;" deprecated="29"/>
+ <method name="setIntParameter(Ljava/lang/String;I)Lorg/apache/http/params/HttpParams;" deprecated="29"/>
+ <method name="setLongParameter(Ljava/lang/String;J)Lorg/apache/http/params/HttpParams;" deprecated="29"/>
+ <method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)Lorg/apache/http/params/HttpParams;" deprecated="29"/>
</class>
<class name="org/apache/http/params/HttpProtocolParamBean" since="1" deprecated="22" removed="23">
<extends name="org/apache/http/params/HttpAbstractParamBean"/>
@@ -77398,7 +80977,6 @@
<class name="org/apache/http/params/HttpProtocolParams" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
<implements name="org/apache/http/params/CoreProtocolPNames"/>
- <method name="&lt;init>()V"/>
<method name="getContentCharset(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
<method name="getHttpElementCharset(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
<method name="getUserAgent(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
@@ -77450,7 +81028,6 @@
</class>
<class name="org/apache/http/protocol/HTTP" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="isWhitespace(C)Z"/>
<field name="ASCII"/>
<field name="CHARSET_PARAM"/>
@@ -77524,7 +81101,7 @@
<extends name="java/lang/Object"/>
<implements name="org/apache/http/protocol/HttpRequestHandlerResolver"/>
<method name="&lt;init>()V"/>
- <method name="matchUriRequestPattern(Ljava/lang/String;Ljava/lang/String;)Z" deprecated="16"/>
+ <method name="matchUriRequestPattern(Ljava/lang/String;Ljava/lang/String;)Z" deprecated="15"/>
<method name="register(Ljava/lang/String;Lorg/apache/http/protocol/HttpRequestHandler;)V"/>
<method name="setHandlers(Ljava/util/Map;)V"/>
<method name="unregister(Ljava/lang/String;)V"/>
@@ -77675,7 +81252,6 @@
</class>
<class name="org/apache/http/util/EncodingUtils" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getAsciiBytes(Ljava/lang/String;)[B"/>
<method name="getAsciiString([B)Ljava/lang/String;"/>
<method name="getAsciiString([BII)Ljava/lang/String;"/>
@@ -77685,7 +81261,6 @@
</class>
<class name="org/apache/http/util/EntityUtils" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="getContentCharSet(Lorg/apache/http/HttpEntity;)Ljava/lang/String;"/>
<method name="toByteArray(Lorg/apache/http/HttpEntity;)[B"/>
<method name="toString(Lorg/apache/http/HttpEntity;)Ljava/lang/String;"/>
@@ -77693,12 +81268,10 @@
</class>
<class name="org/apache/http/util/ExceptionUtils" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="initCause(Ljava/lang/Throwable;Ljava/lang/Throwable;)V"/>
</class>
<class name="org/apache/http/util/LangUtils" since="1" deprecated="22" removed="23">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="equals(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
<method name="equals([Ljava/lang/Object;[Ljava/lang/Object;)Z"/>
<method name="hashCode(II)I"/>
@@ -78259,12 +81832,12 @@
</class>
<class name="org/xml/sax/AttributeList" since="1" deprecated="9">
<extends name="java/lang/Object"/>
- <method name="getLength()I"/>
- <method name="getName(I)Ljava/lang/String;"/>
- <method name="getType(I)Ljava/lang/String;"/>
- <method name="getType(Ljava/lang/String;)Ljava/lang/String;"/>
- <method name="getValue(I)Ljava/lang/String;"/>
- <method name="getValue(Ljava/lang/String;)Ljava/lang/String;"/>
+ <method name="getLength()I" deprecated="29"/>
+ <method name="getName(I)Ljava/lang/String;" deprecated="29"/>
+ <method name="getType(I)Ljava/lang/String;" deprecated="29"/>
+ <method name="getType(Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+ <method name="getValue(I)Ljava/lang/String;" deprecated="29"/>
+ <method name="getValue(Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
</class>
<class name="org/xml/sax/Attributes" since="1">
<extends name="java/lang/Object"/>
@@ -78302,14 +81875,14 @@
</class>
<class name="org/xml/sax/DocumentHandler" since="1" deprecated="9">
<extends name="java/lang/Object"/>
- <method name="characters([CII)V"/>
- <method name="endDocument()V"/>
- <method name="endElement(Ljava/lang/String;)V"/>
- <method name="ignorableWhitespace([CII)V"/>
- <method name="processingInstruction(Ljava/lang/String;Ljava/lang/String;)V"/>
- <method name="setDocumentLocator(Lorg/xml/sax/Locator;)V"/>
- <method name="startDocument()V"/>
- <method name="startElement(Ljava/lang/String;Lorg/xml/sax/AttributeList;)V"/>
+ <method name="characters([CII)V" deprecated="29"/>
+ <method name="endDocument()V" deprecated="29"/>
+ <method name="endElement(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="ignorableWhitespace([CII)V" deprecated="29"/>
+ <method name="processingInstruction(Ljava/lang/String;Ljava/lang/String;)V" deprecated="29"/>
+ <method name="setDocumentLocator(Lorg/xml/sax/Locator;)V" deprecated="29"/>
+ <method name="startDocument()V" deprecated="29"/>
+ <method name="startElement(Ljava/lang/String;Lorg/xml/sax/AttributeList;)V" deprecated="29"/>
</class>
<class name="org/xml/sax/EntityResolver" since="1">
<extends name="java/lang/Object"/>
@@ -78327,7 +81900,7 @@
<implements name="org/xml/sax/DocumentHandler"/>
<implements name="org/xml/sax/EntityResolver"/>
<implements name="org/xml/sax/ErrorHandler"/>
- <method name="&lt;init>()V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
</class>
<class name="org/xml/sax/InputSource" since="1">
<extends name="java/lang/Object"/>
@@ -78355,13 +81928,13 @@
</class>
<class name="org/xml/sax/Parser" since="1" deprecated="9">
<extends name="java/lang/Object"/>
- <method name="parse(Ljava/lang/String;)V"/>
- <method name="parse(Lorg/xml/sax/InputSource;)V"/>
- <method name="setDTDHandler(Lorg/xml/sax/DTDHandler;)V"/>
- <method name="setDocumentHandler(Lorg/xml/sax/DocumentHandler;)V"/>
- <method name="setEntityResolver(Lorg/xml/sax/EntityResolver;)V"/>
- <method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V"/>
- <method name="setLocale(Ljava/util/Locale;)V"/>
+ <method name="parse(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="parse(Lorg/xml/sax/InputSource;)V" deprecated="29"/>
+ <method name="setDTDHandler(Lorg/xml/sax/DTDHandler;)V" deprecated="29"/>
+ <method name="setDocumentHandler(Lorg/xml/sax/DocumentHandler;)V" deprecated="29"/>
+ <method name="setEntityResolver(Lorg/xml/sax/EntityResolver;)V" deprecated="29"/>
+ <method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V" deprecated="29"/>
+ <method name="setLocale(Ljava/util/Locale;)V" deprecated="29"/>
</class>
<class name="org/xml/sax/SAXException" since="1">
<extends name="java/lang/Exception"/>
@@ -78480,12 +82053,12 @@
<class name="org/xml/sax/helpers/AttributeListImpl" since="1" deprecated="9">
<extends name="java/lang/Object"/>
<implements name="org/xml/sax/AttributeList"/>
- <method name="&lt;init>()V"/>
- <method name="&lt;init>(Lorg/xml/sax/AttributeList;)V"/>
- <method name="addAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
- <method name="clear()V"/>
- <method name="removeAttribute(Ljava/lang/String;)V"/>
- <method name="setAttributeList(Lorg/xml/sax/AttributeList;)V"/>
+ <method name="&lt;init>()V" deprecated="29"/>
+ <method name="&lt;init>(Lorg/xml/sax/AttributeList;)V" deprecated="29"/>
+ <method name="addAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="29"/>
+ <method name="clear()V" deprecated="29"/>
+ <method name="removeAttribute(Ljava/lang/String;)V" deprecated="29"/>
+ <method name="setAttributeList(Lorg/xml/sax/AttributeList;)V" deprecated="29"/>
</class>
<class name="org/xml/sax/helpers/AttributesImpl" since="1">
<extends name="java/lang/Object"/>
@@ -78548,9 +82121,8 @@
</class>
<class name="org/xml/sax/helpers/ParserFactory" since="1" deprecated="9">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
- <method name="makeParser()Lorg/xml/sax/Parser;"/>
- <method name="makeParser(Ljava/lang/String;)Lorg/xml/sax/Parser;"/>
+ <method name="makeParser()Lorg/xml/sax/Parser;" deprecated="29"/>
+ <method name="makeParser(Ljava/lang/String;)Lorg/xml/sax/Parser;" deprecated="29"/>
</class>
<class name="org/xml/sax/helpers/XMLFilterImpl" since="1">
<extends name="java/lang/Object"/>
@@ -78571,7 +82143,6 @@
</class>
<class name="org/xml/sax/helpers/XMLReaderFactory" since="1">
<extends name="java/lang/Object"/>
- <method name="&lt;init>()V"/>
<method name="createXMLReader()Lorg/xml/sax/XMLReader;"/>
<method name="createXMLReader(Ljava/lang/String;)Lorg/xml/sax/XMLReader;"/>
</class>
diff --git a/dmtracedump b/dmtracedump
index 81b0376..d034437 100755
--- a/dmtracedump
+++ b/dmtracedump
Binary files differ
diff --git a/e2fsdroid b/e2fsdroid
index 94e6ca6..bf1653a 100755
--- a/e2fsdroid
+++ b/e2fsdroid
Binary files differ
diff --git a/etc1tool b/etc1tool
index 7b11a2d..1047413 100755
--- a/etc1tool
+++ b/etc1tool
Binary files differ
diff --git a/fastboot b/fastboot
index e511ef2..fb62d69 100755
--- a/fastboot
+++ b/fastboot
Binary files differ
diff --git a/hprof-conv b/hprof-conv
index 3d4a729..74675cc 100755
--- a/hprof-conv
+++ b/hprof-conv
Binary files differ
diff --git a/lib/libc++.dylib b/lib/libc++.dylib
deleted file mode 100755
index 5d654be..0000000
--- a/lib/libc++.dylib
+++ /dev/null
Binary files differ
diff --git a/lib64/libc++.dylib b/lib64/libc++.dylib
new file mode 100755
index 0000000..db4f34b
--- /dev/null
+++ b/lib64/libc++.dylib
Binary files differ
diff --git a/make_f2fs b/make_f2fs
index f5c77f6..5024ddf 100755
--- a/make_f2fs
+++ b/make_f2fs
Binary files differ
diff --git a/mke2fs b/mke2fs
index d5fd034..a0d14ab 100755
--- a/mke2fs
+++ b/mke2fs
Binary files differ
diff --git a/mke2fs.conf b/mke2fs.conf
index abf0dae..8ea960d 100755
--- a/mke2fs.conf
+++ b/mke2fs.conf
@@ -1,5 +1,5 @@
[defaults]
- base_features = sparse_super,large_file,filetype,resize_inode,dir_index,ext_attr
+ base_features = sparse_super,large_file,filetype,dir_index,ext_attr
default_mntopts = acl,user_xattr
enable_periodic_fsck = 0
blocksize = 4096
diff --git a/sload_f2fs b/sload_f2fs
index 2fe3d5a..dbafd04 100755
--- a/sload_f2fs
+++ b/sload_f2fs
Binary files differ
diff --git a/source.properties b/source.properties
index 2f6b7b0..1c7e417 100644
--- a/source.properties
+++ b/source.properties
@@ -1,2 +1,2 @@
Pkg.UserSrc=false
-Pkg.Revision=28.0.1
+Pkg.Revision=30.0.4
diff --git a/sqlite3 b/sqlite3
index 1b21595..73dc0fb 100755
--- a/sqlite3
+++ b/sqlite3
Binary files differ
diff --git a/systrace/UPSTREAM_REVISION b/systrace/UPSTREAM_REVISION
index 872cc65..2856b7a 100644
--- a/systrace/UPSTREAM_REVISION
+++ b/systrace/UPSTREAM_REVISION
@@ -1 +1 @@
-3fe65c60e0314212730f3e5363a58dfda949d761
+cad35e22dcad126c6a20663ded101565e6326d82
diff --git a/systrace/catapult/common/battor/battor/__init__.py b/systrace/catapult/common/battor/battor/__init__.py
deleted file mode 100644
index f18f330..0000000
--- a/systrace/catapult/common/battor/battor/__init__.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import os
-import sys
-
-def _JoinPath(*path_parts):
- return os.path.abspath(os.path.join(*path_parts))
-
-
-def _AddDirToPythonPath(*path_parts):
- path = _JoinPath(*path_parts)
- if os.path.isdir(path) and path not in sys.path:
- # Some call sites that use Telemetry assume that sys.path[0] is the
- # directory containing the script, so we add these extra paths to right
- # after sys.path[0].
- sys.path.insert(1, path)
-
-_CATAPULT_DIR = os.path.join(
- os.path.dirname(os.path.abspath(__file__)),
- os.path.pardir, os.path.pardir, os.path.pardir)
-
-_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'battor')
-_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'py_utils')
-_AddDirToPythonPath(_CATAPULT_DIR, 'dependency_manager')
-_AddDirToPythonPath(_CATAPULT_DIR, 'devil')
-_AddDirToPythonPath(_CATAPULT_DIR, 'third_party', 'pyserial')
diff --git a/systrace/catapult/common/battor/battor/battor_binary_dependencies.json b/systrace/catapult/common/battor/battor/battor_binary_dependencies.json
deleted file mode 100644
index 23be1a3..0000000
--- a/systrace/catapult/common/battor/battor/battor_binary_dependencies.json
+++ /dev/null
@@ -1,100 +0,0 @@
-{
- "config_type": "BaseConfig",
- "dependencies": {
- "avrdude_binary": {
- "cloud_storage_base_folder": "binary_dependencies/battor",
- "cloud_storage_bucket": "chromium-telemetry",
- "file_info": {
- "mac_x86_64": {
- "cloud_storage_hash": "6de6324c279ea75c79c68cab4c2ddcc68da1b286",
- "download_path": "../bin/darwin/x86_64/avrdude",
- "local_paths": [
- "../bin/override/avrdude"
- ]
- },
- "linux_x86_64": {
- "cloud_storage_hash": "db29526605f6f95a75ab33f4060b8c330152de69",
- "download_path": "../bin/linux/x86_64/avrdude",
- "local_paths": [
- "../bin/override/avrdude"
- ]
- },
- "win_AMD64": {
- "cloud_storage_hash": "517aa73b093e254007076cf5ac7afb94151df2ed",
- "download_path": "../bin/win/x86_64/avrdude.exe",
- "local_paths": [
- "../bin/override/avrdude.exe"
- ]
- },
- "win_x86": {
- "cloud_storage_hash": "517aa73b093e254007076cf5ac7afb94151df2ed",
- "download_path": "../bin/win/x86_64/avrdude.exe",
- "local_paths": [
- "../bin/override/avrdude.exe"
- ]
- }
- }
- },
- "avrdude_config": {
- "cloud_storage_base_folder": "binary_dependencies/battor",
- "cloud_storage_bucket": "chromium-telemetry",
- "file_info": {
- "default": {
- "cloud_storage_hash": "ccdfa12743429b8b92b61a20163d6311ab55a4fa",
- "download_path": "../bin/battor/avrdude.conf",
- "local_paths": [
- "../bin/override/avrdude.conf"
- ]
- }
- }
- },
- "battor_agent_binary": {
- "cloud_storage_base_folder": "binary_dependencies/battor",
- "cloud_storage_bucket": "chromium-telemetry",
- "file_info": {
- "mac_x86_64": {
- "cloud_storage_hash": "154613804a1855a4871422bf99aa8e0dd0d7f62e",
- "download_path": "../bin/darwin/x86_64/battor_agent",
- "local_paths": [
- "../bin/override/battor_agent"
- ]
- },
- "linux_x86_64": {
- "cloud_storage_hash": "f53e15b97301e9dab00e893800ec67a98e9f13ea",
- "download_path": "../bin/linux/x86_64/battor_agent",
- "local_paths": [
- "../bin/override/battor_agent"
- ]
- },
- "win_AMD64": {
- "cloud_storage_hash": "4095a9159dd189ec591679e43b14d34ae30335eb",
- "download_path": "../bin/win/x86_64/battor_agent.exe",
- "local_paths": [
- "../bin/override/battor_agent.exe"
- ]
- },
- "win_x86": {
- "cloud_storage_hash": "4095a9159dd189ec591679e43b14d34ae30335eb",
- "download_path": "../bin/win/x86_64/battor_agent.exe",
- "local_paths": [
- "../bin/override/battor_agent.exe"
- ]
- }
- }
- },
- "battor_firmware": {
- "cloud_storage_base_folder": "binary_dependencies/battor",
- "cloud_storage_bucket": "chromium-telemetry",
- "file_info": {
- "default": {
- "cloud_storage_hash": "0649655f78698368a16a4e9ec37967b80528fdbf",
- "download_path": "../bin/battor/battor_firmware.hex",
- "local_paths": [
- "../bin/override/battor_firmware.hex"
- ],
- "version_in_cs": "de05458"
- }
- }
- }
- }
-}
diff --git a/systrace/catapult/common/battor/battor/battor_error.py b/systrace/catapult/common/battor/battor/battor_error.py
deleted file mode 100644
index 3ea6efc..0000000
--- a/systrace/catapult/common/battor/battor/battor_error.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from devil import base_error
-
-class BattOrError(base_error.BaseError):
- pass
diff --git a/systrace/catapult/common/battor/battor/battor_wrapper.py b/systrace/catapult/common/battor/battor/battor_wrapper.py
deleted file mode 100644
index 93aed8b..0000000
--- a/systrace/catapult/common/battor/battor/battor_wrapper.py
+++ /dev/null
@@ -1,436 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import datetime
-import os
-import logging
-import platform
-import random
-import subprocess
-import sys
-import tempfile
-import time
-
-from battor import battor_error
-import py_utils
-from py_utils import atexit_with_log
-from py_utils import cloud_storage
-import dependency_manager
-from devil.utils import battor_device_mapping
-from devil.utils import find_usb_devices
-
-import serial
-from serial.tools import list_ports
-
-
-DEFAULT_SHELL_CLOSE_TIMEOUT_S = 60
-
-
-def IsBattOrConnected(*args, **kwargs):
- """Returns True if BattOr is detected.
-
- See _IsBattOrConnected below for arguments.
- """
- is_connected = _IsBattOrConnected(*args, **kwargs)
- if is_connected:
- logging.info('BattOr power monitor is connected.')
- else:
- logging.info('BattOr power monitor is not connected.')
- return is_connected
-
-
-def _IsBattOrConnected(test_platform, android_device=None,
- android_device_map=None, android_device_file=None):
- """Returns True if BattOr is detected."""
- if test_platform == 'android':
- if not android_device:
- raise ValueError('Must pass android device serial when determining '
- 'support on android platform')
-
- if not android_device_map:
- device_tree = find_usb_devices.GetBusNumberToDeviceTreeMap()
- if device_tree:
- for _, node in sorted(device_tree.iteritems()):
- node.Display()
- if len(battor_device_mapping.GetBattOrList(device_tree)) == 1:
- return True
- if android_device_file:
- android_device_map = battor_device_mapping.ReadSerialMapFile(
- android_device_file)
- else:
- try:
- android_device_map = battor_device_mapping.GenerateSerialMap()
- except battor_error.BattOrError:
- return False
-
- # If neither if statement above is triggered, it means that an
- # android_device_map was passed in and will be used.
- return str(android_device) in android_device_map
-
- elif test_platform == 'win':
- for (_1, desc, _2) in serial.tools.list_ports.comports():
- if 'USB Serial Port' in desc:
- return True
- logging.info('No usb serial port discovered. Available ones are: %s' %
- list(serial.tools.list_ports.comports()))
- return False
-
- elif test_platform == 'mac':
- for (_1, desc, _2) in serial.tools.list_ports.comports():
- if 'BattOr' in desc:
- return True
- return False
-
- elif test_platform == 'linux':
- device_tree = find_usb_devices.GetBusNumberToDeviceTreeMap(fast=True)
- return bool(battor_device_mapping.GetBattOrList(device_tree))
-
- return False
-
-
-class BattOrWrapper(object):
- """A class for communicating with a BattOr in python."""
- _EXIT_CMD = 'Exit'
- _GET_FIRMWARE_GIT_HASH_CMD = 'GetFirmwareGitHash'
- _START_TRACING_CMD = 'StartTracing'
- _STOP_TRACING_CMD = 'StopTracing'
- _SUPPORTS_CLOCKSYNC_CMD = 'SupportsExplicitClockSync'
- _RECORD_CLOCKSYNC_CMD = 'RecordClockSyncMarker'
- _SUPPORTED_PLATFORMS = ['android', 'chromeos', 'linux', 'mac', 'win']
-
- _BATTOR_PARTNO = 'x192a3u'
- _BATTOR_PROGRAMMER = 'avr109'
- _BATTOR_BAUDRATE = '115200'
-
- def __init__(self, target_platform, android_device=None, battor_path=None,
- battor_map_file=None, battor_map=None, serial_log_bucket=None,
- autoflash=True):
- """Constructor.
-
- Args:
- target_platform: Platform BattOr is attached to.
- android_device: Serial number of Android device.
- battor_path: Path to BattOr device.
- battor_map_file: File giving map of [device serial: BattOr path]
- battor_map: Map of [device serial: BattOr path]
- serial_log_bucket: The cloud storage bucket to which BattOr agent serial
- logs are uploaded on failure.
-
- Attributes:
- _battor_path: Path to BattOr. Typically similar to /tty/USB0.
- _battor_agent_binary: Path to the BattOr agent binary used to communicate
- with the BattOr.
- _tracing: A bool saying if tracing has been started.
- _battor_shell: A subprocess running the battor_agent_binary
- _trace_results_path: Path to BattOr trace results file.
- _serial_log_bucket: Cloud storage bucket to which BattOr agent serial logs
- are uploaded on failure.
- _serial_log_file: Temp file for the BattOr agent serial log.
- """
- self._battor_path = self._GetBattOrPath(target_platform, android_device,
- battor_path, battor_map_file, battor_map)
- config = os.path.join(
- os.path.dirname(os.path.abspath(__file__)),
- 'battor_binary_dependencies.json')
-
- self._dm = dependency_manager.DependencyManager(
- [dependency_manager.BaseConfig(config)])
- self._battor_agent_binary = self._dm.FetchPath(
- 'battor_agent_binary',
- '%s_%s' % (py_utils.GetHostOsName(), py_utils.GetHostArchName()))
-
- self._autoflash = autoflash
- self._serial_log_bucket = serial_log_bucket
- self._tracing = False
- self._battor_shell = None
- self._trace_results_path = None
- self._start_tracing_time = None
- self._stop_tracing_time = None
- self._trace_results = None
- self._serial_log_file = None
- self._target_platform = target_platform
- self._git_hash = None
-
- atexit_with_log.Register(self.KillBattOrShell)
-
- def _FlashBattOr(self):
- assert self._battor_shell, (
- 'Must start shell before attempting to flash BattOr')
-
- try:
- device_git_hash = self.GetFirmwareGitHash()
- battor_firmware, cs_git_hash = self._dm.FetchPathWithVersion(
- 'battor_firmware', 'default')
- if cs_git_hash != device_git_hash:
- logging.info(
- 'Flashing BattOr with old firmware version <%s> with new '
- 'version <%s>.', device_git_hash, cs_git_hash)
- avrdude_config = self._dm.FetchPath('avrdude_config', 'default')
- self.StopShell()
- return self.FlashFirmware(battor_firmware, avrdude_config)
- return False
- except ValueError:
- logging.exception('Git hash returned from BattOr was not as expected: %s'
- % self._git_hash)
- self.StopShell()
-
- finally:
- if not self._battor_shell:
- # TODO(charliea): Once we understand why BattOrs are crashing, remove
- # this log.
- # http://crbug.com/699581
- logging.info('_FlashBattOr serial log:')
- self._UploadSerialLogToCloudStorage()
- self._serial_log_file = None
-
- self.StartShell()
-
- def KillBattOrShell(self):
- if self._battor_shell:
- logging.critical('BattOr shell was not properly closed. Killing now.')
- self._battor_shell.kill()
-
- def GetShellReturnCode(self):
- """Gets the return code of the BattOr agent shell."""
- rc = self._battor_shell.poll()
- return rc
-
- def StartShell(self):
- """Start BattOr binary shell."""
- assert not self._battor_shell, 'Attempting to start running BattOr shell.'
-
- battor_cmd = [self._battor_agent_binary]
- if self._serial_log_bucket:
- # Create and immediately close a temp file in order to get a filename
- # for the serial log.
- self._serial_log_file = tempfile.NamedTemporaryFile(delete=False)
- self._serial_log_file.close()
- battor_cmd.append('--battor-serial-log=%s' % self._serial_log_file.name)
- if self._battor_path:
- battor_cmd.append('--battor-path=%s' % self._battor_path)
- self._battor_shell = self._StartShellImpl(battor_cmd)
- assert self.GetShellReturnCode() is None, 'Shell failed to start.'
-
- def StopShell(self, timeout=None):
- """Stop BattOr binary shell."""
- assert self._battor_shell, 'Attempting to stop a non-running BattOr shell.'
- assert not self._tracing, 'Attempting to stop a BattOr shell while tracing.'
- timeout = timeout if timeout else DEFAULT_SHELL_CLOSE_TIMEOUT_S
-
- try:
- self._SendBattOrCommand(self._EXIT_CMD, check_return=False)
- py_utils.WaitFor(lambda: self.GetShellReturnCode() != None, timeout)
- except:
- # If graceful shutdown failed, resort to a simple kill command.
- self.KillBattOrShell()
- finally:
- self._battor_shell = None
-
- def StartTracing(self):
- """Start tracing on the BattOr."""
- assert self._battor_shell, 'Must start shell before tracing'
- assert not self._tracing, 'Tracing already started.'
- self._FlashBattOr()
- self._SendBattOrCommand(self._START_TRACING_CMD)
- self._tracing = True
- self._start_tracing_time = int(time.time())
-
- def StopTracing(self):
- """Stop tracing on the BattOr."""
- assert self._tracing, 'Must run StartTracing before StopTracing'
- # Create temp file to reserve location for saving results.
- temp_file = tempfile.NamedTemporaryFile(delete=False)
- self._trace_results_path = temp_file.name
- temp_file.close()
- self._SendBattOrCommand(
- '%s %s' % (self._STOP_TRACING_CMD, self._trace_results_path))
- self._tracing = False
- self._stop_tracing_time = int(time.time())
-
- def CollectTraceData(self, timeout=None):
- """Collect trace data from battor.
- Args:
- timeout: timeout for waiting on the BattOr process to terminate in
- seconds.
- Returns: Trace data in form of a list.
- """
- if not self._stop_tracing_time or not self._start_tracing_time:
- raise battor_error.BattOrError(
- 'No start or stop time detected when collecting BattOr trace.\n'
- 'Start: %s \n Stop: %s' % (self._start_tracing_time,
- self._stop_tracing_time))
-
- # The BattOr shell terminates after returning the results.
- if timeout is None:
- timeout = self._stop_tracing_time - self._start_tracing_time
- py_utils.WaitFor(lambda: self.GetShellReturnCode() != None, timeout)
-
- # TODO(charliea): Once we understand why BattOrs are crashing, only do
- # this on failure.
- # http://crbug.com/699581
- logging.info('CollectTraceData serial log:')
- self._UploadSerialLogToCloudStorage()
-
- with open(self._trace_results_path) as results:
- self._trace_results = results.read()
- self._battor_shell = None
- self._serial_log_file = None
- return self._trace_results
-
- def SupportsExplicitClockSync(self):
- """Returns if BattOr supports Clock Sync events."""
- return bool(int(self._SendBattOrCommand(self._SUPPORTS_CLOCKSYNC_CMD,
- check_return=False)))
-
- def RecordClockSyncMarker(self, sync_id):
- """Record clock sync event on BattOr."""
- if not isinstance(sync_id, basestring):
- raise TypeError('sync_id must be a string.')
- self._SendBattOrCommand('%s %s' % (self._RECORD_CLOCKSYNC_CMD, sync_id))
-
- def _GetBattOrPath(self, target_platform, android_device=None,
- battor_path=None, battor_map_file=None, battor_map=None):
- """Determines most likely path to the correct BattOr."""
- if target_platform not in self._SUPPORTED_PLATFORMS:
- raise battor_error.BattOrError(
- '%s is an unsupported platform.' % target_platform)
- if target_platform in ['win']:
- # Right now, the BattOr agent binary isn't able to automatically detect
- # the BattOr port on Windows. To get around this, we know that the BattOr
- # shows up with a name of 'USB Serial Port', so use the COM port that
- # corresponds to a device with that name.
- for (port, desc, _) in serial.tools.list_ports.comports():
- if 'USB Serial Port' in desc:
- return port
- raise battor_error.BattOrError(
- 'Could not find BattOr attached to machine.')
- if target_platform in ['mac']:
- for (port, desc, _) in serial.tools.list_ports.comports():
- if 'BattOr' in desc:
- return port
-
- if target_platform in ['android', 'linux']:
- if battor_path:
- if not isinstance(battor_path, basestring):
- raise battor_error.BattOrError(
- 'An invalid BattOr path was specified.')
- return battor_path
-
- if target_platform == 'android':
- if not android_device:
- raise battor_error.BattOrError(
- 'Must specify device for Android platform.')
- if not battor_map_file and not battor_map:
- # No map was passed, so must create one.
- battor_map = battor_device_mapping.GenerateSerialMap()
-
- return battor_device_mapping.GetBattOrPathFromPhoneSerial(
- str(android_device), serial_map_file=battor_map_file,
- serial_map=battor_map)
-
- # Not Android and no explicitly passed BattOr.
- device_tree = find_usb_devices.GetBusNumberToDeviceTreeMap(fast=True)
- battors = battor_device_mapping.GetBattOrList(device_tree)
- if len(battors) != 1:
- raise battor_error.BattOrError(
- 'For non-Android platforms, exactly one BattOr must be '
- 'attached unless address is explicitly given.')
- return '/dev/%s' % battors.pop()
-
- raise NotImplementedError(
- 'BattOr Wrapper not implemented for given platform')
-
- def _SendBattOrCommandImpl(self, cmd):
- """Sends command to the BattOr."""
- self._battor_shell.stdin.write('%s\n' % cmd)
- self._battor_shell.stdin.flush()
- return self._battor_shell.stdout.readline()
-
- def _SendBattOrCommand(self, cmd, check_return=True):
- status = self._SendBattOrCommandImpl(cmd)
-
- if check_return and not 'Done.' in status:
- self.KillBattOrShell()
- self._UploadSerialLogToCloudStorage()
- self._serial_log_file = None
- raise battor_error.BattOrError(
- 'BattOr did not complete command \'%s\' correctly.\n'
- 'Outputted: %s' % (cmd, status))
- return status
-
- def _StartShellImpl(self, battor_cmd):
- return subprocess.Popen(
- battor_cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT, shell=False)
-
- def _UploadSerialLogToCloudStorage(self):
- """Uploads the BattOr serial log to cloud storage."""
- if not self._serial_log_file or not cloud_storage.IsNetworkIOEnabled():
- return
-
- remote_path = ('battor-serial-log-%s-%d.txt' % (
- datetime.datetime.now().strftime('%Y-%m-%d_%H-%M.txt'),
- random.randint(1, 100000)))
-
- try:
- cloud_url = cloud_storage.Insert(
- self._serial_log_bucket, remote_path, self._serial_log_file.name)
- sys.stderr.write('View BattOr serial log at %s\n' % cloud_url)
- except cloud_storage.PermissionError as e:
- logging.error('Cannot upload BattOr serial log file to cloud storage due '
- 'to permission error: %s' % e.message)
-
- def GetFirmwareGitHash(self):
- """Gets the git hash for the BattOr firmware.
-
- Returns: Git hash for firmware currently on the BattOr.
- Also sets self._git_hash to this value.
-
- Raises: ValueException if the git hash is not in hex.
- """
- assert self._battor_shell, ('Must start shell before getting firmware git '
- 'hash')
- self._git_hash = self._SendBattOrCommand(self._GET_FIRMWARE_GIT_HASH_CMD,
- check_return=False).strip()
- # We expect the git hash to be a valid 6 character hexstring. This will
- # throw a ValueError exception otherwise.
- int(self._git_hash, 16)
- return self._git_hash
-
- def FlashFirmware(self, hex_path, avrdude_config_path):
- """Flashes the BattOr using an avrdude config at config_path with the new
- firmware at hex_path.
- """
- assert not self._battor_shell, 'Cannot flash BattOr with open shell'
-
- avrdude_binary = self._dm.FetchPath(
- 'avrdude_binary', '%s_%s' % (sys.platform, platform.machine()))
- # Sanitize hex file path for windows. It contains <drive>:/ which avrdude
- # is not capable of handling.
- _, hex_path = os.path.splitdrive(hex_path)
- avr_cmd = [
- avrdude_binary,
- '-e', # Specify to erase data on chip.
- '-p', self._BATTOR_PARTNO, # Specify AVR device.
- # Specify which microcontroller programmer to use.
- '-c', self._BATTOR_PROGRAMMER,
- '-b', self._BATTOR_BAUDRATE, # Specify the baud rate to communicate at.
- '-P', self._battor_path, # Serial path to the battor.
- # Command to execute with hex file and path to hex file.
- '-U', 'flash:w:%s' % hex_path,
- '-C', avrdude_config_path, # AVRdude config file path.
- '2>&1' # All output goes to stderr for some reason.
- ]
- try:
- subprocess.check_output(avr_cmd)
- except subprocess.CalledProcessError as e:
- raise BattOrFlashError('BattOr flash failed with return code %s.'
- % e.returncode)
-
- self._git_hash = None
- return True
-
-
-class BattOrFlashError(Exception):
- pass
diff --git a/systrace/catapult/common/battor/battor/battor_wrapper_devicetest.py b/systrace/catapult/common/battor/battor/battor_wrapper_devicetest.py
deleted file mode 100644
index 29c36e7..0000000
--- a/systrace/catapult/common/battor/battor/battor_wrapper_devicetest.py
+++ /dev/null
@@ -1,103 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import platform
-import os
-import sys
-import time
-import unittest
-
-if __name__ == '__main__':
- sys.path.append(
- os.path.join(os.path.dirname(__file__), '..'))
-
-from battor import battor_wrapper
-from devil.utils import battor_device_mapping
-from devil.utils import find_usb_devices
-import py_utils
-from py_utils import cloud_storage
-
-
-_SUPPORTED_CQ_PLATFORMS = ['win', 'linux', 'mac']
-
-class BattOrWrapperDeviceTest(unittest.TestCase):
- def setUp(self):
- self._platform = py_utils.GetHostOsName()
- self._battor_list = None
-
- if self._platform == 'linux':
- device_tree = find_usb_devices.GetBusNumberToDeviceTreeMap()
- self._battor_list = battor_device_mapping.GetBattOrList(device_tree)
-
- if not battor_wrapper.IsBattOrConnected(self._platform):
- self._battor_list = []
-
- def testFullRun(self):
- # If battor_list is an empty list, a BattOr was expected but not found.
- if self._battor_list is not None and not self._battor_list:
- logging.critical('No BattOrs attached. Cannot run tests.')
- return
-
- if self._platform not in _SUPPORTED_CQ_PLATFORMS:
- logging.critical('Platform %s is not supported on CQ.' % self._platform)
- return
-
-
- battor_path = (None if not self._battor_list
- else '/dev/%s' % self._battor_list[0])
- battor = battor_wrapper.BattOrWrapper(
- self._platform, battor_path=battor_path,
- serial_log_bucket=cloud_storage.TELEMETRY_OUTPUT)
- try:
- battor.StartShell()
- self.assertTrue(isinstance(battor.GetFirmwareGitHash(), basestring))
- # We expect the git hash to be a valid 6 character hexstring. This will
- # throw a ValueError exception otherwise.
- int(battor.GetFirmwareGitHash(), 16)
- self.assertTrue(len(battor.GetFirmwareGitHash()) == 7)
- battor.StopShell()
-
- battor.StartShell()
- battor.StartTracing()
- # TODO(rnephew): This sleep is required for now because crbug.com/602266
- # causes the BattOr to crash when the trace time is too short. Once that
- # bug is fixed, we should remove this delay.
- time.sleep(1)
- battor.RecordClockSyncMarker('abc')
- # Sleep here because clock sync marker will be flaky if not.
- time.sleep(1)
- battor.StopTracing()
-
- # Below is a work around for crbug.com/603309. On this short of a trace, 5
- # seconds is enough to ensure that the trace will finish flushing to the
- # file. The process is then killed so that BattOrWrapper knows that the
- # process has been closed after tracing stops.
- if self._platform == 'win':
- time.sleep(5)
- battor._battor_shell.kill()
- results = battor.CollectTraceData().splitlines()
- except:
- if battor._battor_shell is not None:
- battor._battor_shell.kill()
- battor._battor_shell = None
- raise
-
- self.assertTrue('# BattOr' in results[0])
- self.assertTrue('# voltage_range' in results[1])
- self.assertTrue('# current_range' in results[2])
- self.assertTrue('# sample_rate' in results[3])
- # First line with results. Should be 3 'words'.
- self.assertTrue(len(results[4].split()) == 3)
- clock_sync_found = False
- for entry in results:
- if '<abc>' in entry:
- clock_sync_found = True
- break
- self.assertTrue(clock_sync_found, 'BattOr Data:%s\n' % repr(results))
-
-
-if __name__ == '__main__':
- logging.getLogger().setLevel(logging.DEBUG)
- unittest.main(verbosity=2)
diff --git a/systrace/catapult/common/battor/battor/battor_wrapper_unittest.py b/systrace/catapult/common/battor/battor/battor_wrapper_unittest.py
deleted file mode 100644
index 7e14c34..0000000
--- a/systrace/catapult/common/battor/battor/battor_wrapper_unittest.py
+++ /dev/null
@@ -1,387 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import dependency_manager
-import logging
-import mock
-import subprocess
-import unittest
-
-from battor import battor_error
-from battor import battor_wrapper
-from devil.utils import battor_device_mapping
-from devil.utils import find_usb_devices
-
-import serial
-from serial.tools import list_ports
-
-
-class DependencyManagerMock(object):
- def __init__(self, _):
- self._fetch_return = 'path'
- self._version_return = 'cbaa843'
-
- def FetchPath(self, _, *unused):
- del unused
- return self._fetch_return
-
- def FetchPathWithVersion(self, _, *unused):
- del unused
- return self._fetch_return, self._version_return
-
-class PopenMock(object):
- def __init__(self, *unused):
- pass
-
- def poll(self):
- pass
-
- def kill(self):
- pass
-
-
-class IsBattOrConnectedTest(unittest.TestCase):
- def setUp(self):
- # Windows monkey patches.
- self._serial_tools_return = []
- self._comports = serial.tools.list_ports.comports
- serial.tools.list_ports.comports = lambda: self._serial_tools_return
-
- # Linux/Android monkey patches.
- self._generate_serial_map_return = {}
- self._generate_serial_map = battor_device_mapping.GenerateSerialMap
- battor_device_mapping.GenerateSerialMap = (
- lambda: self._generate_serial_map_return)
-
- self._read_serial_map_file_return = {}
- self._read_serial_map_file = battor_device_mapping.ReadSerialMapFile
- battor_device_mapping.ReadSerialMapFile = (
- lambda f: self._read_serial_map_file_return)
-
- self._get_bus_number_to_device_tree_map = (
- find_usb_devices.GetBusNumberToDeviceTreeMap)
- find_usb_devices.GetBusNumberToDeviceTreeMap = lambda fast=None: {}
-
- self._get_battor_list_return = []
- self._get_battor_list = battor_device_mapping.GetBattOrList
- battor_device_mapping.GetBattOrList = lambda x: self._get_battor_list_return
-
- def tearDown(self):
- serial.tools.list_ports.comports = self._comports
- battor_device_mapping.GenerateSerialMap = self._generate_serial_map
- battor_device_mapping.ReadSerialMapFile = self._read_serial_map_file
- find_usb_devices.GetBusNumberToDeviceTreeMap = (
- self._get_bus_number_to_device_tree_map)
- battor_device_mapping.GetBattOrList = self._get_battor_list
-
- def forceException(self):
- raise NotImplementedError
-
- def testAndroidWithBattOr(self):
- self._generate_serial_map_return = {'abc': '123'}
- self.assertTrue(battor_wrapper.IsBattOrConnected('android', 'abc'))
-
- def testAndroidWithoutMatchingBattOr(self):
- self._generate_serial_map_return = {'notabc': 'not123'}
- self.assertFalse(battor_wrapper.IsBattOrConnected('android', 'abc'))
-
- def testAndroidNoDevicePassed(self):
- with self.assertRaises(ValueError):
- battor_wrapper.IsBattOrConnected('android')
-
- def testAndroidWithMapAndFile(self):
- device_map = {'abc': '123'}
- battor_device_mapping.ReadSerialMapFile = self.forceException
- self.assertTrue(
- battor_wrapper.IsBattOrConnected('android', android_device='abc',
- android_device_map=device_map,
- android_device_file='file'))
-
- def testAndroidWithMap(self):
- self.assertTrue(
- battor_wrapper.IsBattOrConnected('android', android_device='abc',
- android_device_map={'abc', '123'}))
-
- def testAndroidWithFile(self):
- self._read_serial_map_file_return = {'abc': '123'}
- self.assertTrue(
- battor_wrapper.IsBattOrConnected('android', android_device='abc',
- android_device_file='file'))
-
- def testLinuxWithBattOr(self):
- self._get_battor_list_return = ['battor']
- self.assertTrue(battor_wrapper.IsBattOrConnected('linux'))
-
- def testLinuxWithoutBattOr(self):
- self._get_battor_list_return = []
- self.assertFalse(battor_wrapper.IsBattOrConnected('linux'))
-
- def testMacWithBattOr(self):
- self._serial_tools_return = [('/dev/tty.usbserial-MAA', 'BattOr v3.3', '')]
- self.assertTrue(battor_wrapper.IsBattOrConnected('mac'))
-
- def testMacWithoutBattOr(self):
- self._serial_tools_return = [('/dev/tty.usbserial-MAA', 'not_one', '')]
- self.assertFalse(battor_wrapper.IsBattOrConnected('mac'))
-
- def testWinWithBattOr(self):
- self._serial_tools_return = [('COM4', 'USB Serial Port', '')]
- self.assertTrue(battor_wrapper.IsBattOrConnected('win'))
-
- def testWinWithoutBattOr(self):
- self._get_battor_list_return = []
- self.assertFalse(battor_wrapper.IsBattOrConnected('win'))
-
-
-class BattOrWrapperTest(unittest.TestCase):
- def setUp(self):
- self._battor = None
- self._is_battor = True
- self._battor_list = ['battor1']
- self._should_pass = True
- self._fake_map = {'battor1': 'device1'}
- self._fake_return_code = None
- self._fake_battor_return = 'Done.\n'
-
- self._get_battor_path_from_phone_serial = (
- battor_device_mapping.GetBattOrPathFromPhoneSerial)
- self._get_bus_number_to_device_tree_map = (
- find_usb_devices.GetBusNumberToDeviceTreeMap)
- self._dependency_manager = dependency_manager.DependencyManager
- self._get_battor_list = battor_device_mapping.GetBattOrList
- self._is_battor = battor_device_mapping.IsBattOr
- self._generate_serial_map = battor_device_mapping.GenerateSerialMap
- self._serial_tools = serial.tools.list_ports.comports
-
- battor_device_mapping.GetBattOrPathFromPhoneSerial = (
- lambda x, serial_map_file=None, serial_map=None: x + '_battor')
- find_usb_devices.GetBusNumberToDeviceTreeMap = lambda fast=False: True
- dependency_manager.DependencyManager = DependencyManagerMock
- battor_device_mapping.GetBattOrList = lambda x: self._battor_list
- battor_device_mapping.IsBattOr = lambda x, y: self._is_battor
- battor_device_mapping.GenerateSerialMap = lambda: self._fake_map
- serial.tools.list_ports.comports = lambda: [('COM4', 'USB Serial Port', '')]
-
- self._subprocess_check_output_code = 0
- def subprocess_check_output_mock(*unused):
- if self._subprocess_check_output_code != 0:
- raise subprocess.CalledProcessError(None, None)
- return 0
- self._subprocess_check_output = subprocess.check_output
- subprocess.check_output = subprocess_check_output_mock
-
- def tearDown(self):
- battor_device_mapping.GetBattOrPathFromPhoneSerial = (
- self._get_battor_path_from_phone_serial)
- find_usb_devices.GetBusNumberToDeviceTreeMap = (
- self._get_bus_number_to_device_tree_map)
- dependency_manager.DependencyManager = self._dependency_manager
- battor_device_mapping.GetBattOrList = self._get_battor_list
- battor_device_mapping.IsBattOr = self._is_battor
- battor_device_mapping.GenerateSerialMap = self._generate_serial_map
- serial.tools.list_ports.comports = self._serial_tools
- subprocess.check_output = self._subprocess_check_output
-
- def _DefaultBattOrReplacements(self):
- battor_wrapper.DEFAULT_SHELL_CLOSE_TIMEOUT_S = .1
- self._battor._StartShellImpl = lambda *unused: PopenMock()
- self._battor.GetShellReturnCode = lambda *unused: self._fake_return_code
- self._battor._SendBattOrCommandImpl = lambda x: self._fake_battor_return
- self._battor._StopTracingImpl = lambda *unused: (self._fake_battor_return,
- None)
-
- def testBadPlatform(self):
- with self.assertRaises(battor_error.BattOrError):
- self._battor = battor_wrapper.BattOrWrapper('unknown')
-
- def testInitAndroidWithBattOr(self):
- self._battor = battor_wrapper.BattOrWrapper('android', android_device='abc')
- self.assertEquals(self._battor._battor_path, 'abc_battor')
-
- def testInitAndroidWithoutBattOr(self):
- self._battor_list = []
- self._fake_map = {}
- battor_device_mapping.GetBattOrPathFromPhoneSerial = (
- self._get_battor_path_from_phone_serial)
- with self.assertRaises(battor_error.BattOrError):
- self._battor = battor_wrapper.BattOrWrapper('android',
- android_device='abc')
-
- def testInitBattOrPathIsBattOr(self):
- battor_path = 'battor/path/here'
- self._battor = battor_wrapper.BattOrWrapper(
- 'android', android_device='abc', battor_path=battor_path)
- self.assertEquals(self._battor._battor_path, battor_path)
-
- def testInitNonAndroidWithBattOr(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self.assertEquals(self._battor._battor_path, 'COM4')
-
- def testInitNonAndroidWithMultipleBattOr(self):
- self._battor_list.append('battor2')
- with self.assertRaises(battor_error.BattOrError):
- self._battor = battor_wrapper.BattOrWrapper('linux')
-
- def testInitNonAndroidWithoutBattOr(self):
- self._battor_list = []
- serial.tools.list_ports.comports = lambda: [('COM4', 'None', '')]
- with self.assertRaises(battor_error.BattOrError):
- self._battor = battor_wrapper.BattOrWrapper('win')
-
- def testStartShellPass(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self._DefaultBattOrReplacements()
- self._battor.StartShell()
- self.assertIsNotNone(self._battor._battor_shell)
-
- def testStartShellDoubleStart(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self._DefaultBattOrReplacements()
- self._battor.StartShell()
- with self.assertRaises(AssertionError):
- self._battor.StartShell()
-
- def testStartShellFail(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self._DefaultBattOrReplacements()
- self._battor.GetShellReturnCode = lambda *unused: 1
- with self.assertRaises(AssertionError):
- self._battor.StartShell()
-
- def testStartTracingPass(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self._DefaultBattOrReplacements()
- self._battor.StartShell()
- self._battor.StartTracing()
- self.assertTrue(self._battor._tracing)
-
- def testStartTracingDoubleStart(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self._DefaultBattOrReplacements()
- self._battor.StartShell()
- self._battor.StartTracing()
- with self.assertRaises(AssertionError):
- self._battor.StartTracing()
-
- def testStartTracingCommandFails(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self._DefaultBattOrReplacements()
- self._battor._SendBattOrCommandImpl = lambda *unused: 'Fail.\n'
- self._battor.StartShell()
- with self.assertRaises(battor_error.BattOrError):
- self._battor.StartTracing()
-
- def testStopTracingPass(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self._DefaultBattOrReplacements()
- self._battor.StartShell()
- self._battor.StartTracing()
- self._battor.GetShellReturnCode = lambda *unused: 0
- self._battor.StopTracing()
- self.assertFalse(self._battor._tracing)
-
- def testStopTracingNotRunning(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self._DefaultBattOrReplacements()
- with self.assertRaises(AssertionError):
- self._battor.StopTracing()
-
- def testFlashFirmwarePass(self):
- self._battor = battor_wrapper.BattOrWrapper('linux')
- self._DefaultBattOrReplacements()
- self.assertTrue(self._battor.FlashFirmware('hex_path', 'config_path'))
-
- def testFlashFirmwareFail(self):
- self._battor = battor_wrapper.BattOrWrapper('linux')
- self._DefaultBattOrReplacements()
- self._subprocess_check_output_code = 1
- with self.assertRaises(battor_wrapper.BattOrFlashError):
- self._battor.FlashFirmware('hex_path', 'config_path')
-
- def testFlashFirmwareShellRunning(self):
- self._battor = battor_wrapper.BattOrWrapper('linux')
- self._DefaultBattOrReplacements()
- self._battor.StartShell()
- with self.assertRaises(AssertionError):
- self._battor.FlashFirmware('hex_path', 'config_path')
-
- def testGetFirmwareGitHashNotRunning(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self._DefaultBattOrReplacements()
- with self.assertRaises(AssertionError):
- self._battor.GetFirmwareGitHash()
-
- def testGetFirmwareGitHashPass(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self._DefaultBattOrReplacements()
- self._battor.StartShell()
- self._battor.GetFirmwareGitHash = lambda: 'cbaa843'
- self.assertTrue(isinstance(self._battor.GetFirmwareGitHash(), basestring))
-
- def testStopShellPass(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self._DefaultBattOrReplacements()
- self._battor.StartShell()
- self._fake_return_code = 0
- self._battor.StopShell()
- self.assertIsNone(self._battor._battor_shell)
-
- @mock.patch('time.sleep', mock.Mock)
- def testStopShellTimeOutAndKill(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self._DefaultBattOrReplacements()
- self._battor.StartShell()
- self._battor.StopShell()
- self.assertIsNone(self._battor._battor_shell)
-
- def testStopShellNotStarted(self):
- self._battor = battor_wrapper.BattOrWrapper('win')
- self._DefaultBattOrReplacements()
- with self.assertRaises(AssertionError):
- self._battor.StopShell()
-
- @mock.patch('time.sleep', mock.Mock)
- def testFlashBattOrSameGitHash(self):
- self._battor = battor_wrapper.BattOrWrapper('linux')
- self._DefaultBattOrReplacements()
- self._battor.StartShell()
- self._battor.GetFirmwareGitHash = lambda: 'cbaa843'
- dependency_manager.DependencyManager._version_return = 'cbaa843'
- self.assertFalse(self._battor._FlashBattOr())
-
- @mock.patch('time.sleep', mock.Mock)
- def testFlashBattOrDifferentGitHash(self):
- self._battor = battor_wrapper.BattOrWrapper('linux')
- self._DefaultBattOrReplacements()
- self._battor.StartShell()
- self._battor.GetFirmwareGitHash = lambda: 'bazz732'
- dependency_manager.DependencyManager._version_return = 'cbaa843'
- self.assertTrue(self._battor._FlashBattOr())
-
- def testCollectTraceDataNoStartTime(self):
- self._battor = battor_wrapper.BattOrWrapper('linux')
- self._DefaultBattOrReplacements()
- self._battor.StartShell()
- self._battor.StartTracing()
- self._battor.GetShellReturnCode = lambda *unused: 0
- self._battor.StopTracing()
- self._battor._start_tracing_time = None
- with self.assertRaises(battor_error.BattOrError):
- self._battor.CollectTraceData()
-
- def testCollectTraceDataNoStopTime(self):
- self._battor = battor_wrapper.BattOrWrapper('linux')
- self._DefaultBattOrReplacements()
- self._battor.StartShell()
- self._battor.StartTracing()
- self._battor.GetShellReturnCode = lambda *unused: 0
- self._battor.StopTracing()
- self._battor._stop_tracing_time = None
- with self.assertRaises(battor_error.BattOrError):
- self._battor.CollectTraceData()
-
-
-if __name__ == '__main__':
- logging.getLogger().setLevel(logging.DEBUG)
- unittest.main(verbosity=2)
diff --git a/systrace/catapult/common/battor/bin/run_py_tests b/systrace/catapult/common/battor/bin/run_py_tests
deleted file mode 100755
index 61103bd..0000000
--- a/systrace/catapult/common/battor/bin/run_py_tests
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-_CATAPULT_PATH = os.path.abspath(os.path.join(
- os.path.dirname(__file__), '..', '..', '..'))
-_BATTOR_PATH = os.path.abspath(os.path.join(
- os.path.dirname(__file__), '..'))
-
-sys.path.append(_CATAPULT_PATH)
-from catapult_build import run_with_typ
-
-
-def main():
- return run_with_typ.Run(top_level_dir=_BATTOR_PATH)
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/systrace/catapult/common/battor/bin/upload_battor_binaries.py b/systrace/catapult/common/battor/bin/upload_battor_binaries.py
deleted file mode 100755
index 8901cfc..0000000
--- a/systrace/catapult/common/battor/bin/upload_battor_binaries.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import os
-import sys
-
-sys.path.append(
- os.path.abspath(os.path.join(os.path.dirname(__file__),
- '..', '..', '..', 'dependency_manager')))
-from dependency_manager import base_config # pylint: disable=import-error
-
-
-_SUPPORTED_ARCHS = [
- 'linux2_x86_64', 'darwin_x86_64', 'win_AMD64', 'win32_AMD64', 'win32_x86',
- 'default'
-]
-_DEFAULT_DEP = 'battor_agent_binary'
-_DEFAULT_CONFIG = os.path.join(os.path.dirname(__file__), '..', 'battor',
- 'battor_binary_dependencies.json')
-
-
-def UploadBinary(arch, path, config, dep):
- print 'Uploading binary:'
- print ' arch: %s' % arch
- print ' path: %s' % path
- print ' config: %s' % config
- print ' dep: %s' % dep
- c = base_config.BaseConfig(config, writable=True)
- c.AddCloudStorageDependencyUpdateJob(
- dep, arch, path, version=None, execute_job=True)
- print 'Upload complete.'
-
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('--arch', '--architecture', required=True,
- help='Architecture binary is built for.')
- parser.add_argument('--path', required=True, help='Path to binary.')
- parser.add_argument('--config', default=_DEFAULT_CONFIG,
- help='Path to dependency manager config')
- parser.add_argument('--dep', default=_DEFAULT_DEP,
- help='Name of dependency to update.')
- args = parser.parse_args()
- if args.arch not in _SUPPORTED_ARCHS:
- print 'Arch must be one of: %s' % _SUPPORTED_ARCHS
- return 1
- UploadBinary(args.arch, args.path, args.config, args.dep)
- return 0
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/systrace/catapult/common/bin/run_tests b/systrace/catapult/common/bin/run_tests
index 3021755..632cdbf 100755
--- a/systrace/catapult/common/bin/run_tests
+++ b/systrace/catapult/common/bin/run_tests
@@ -6,33 +6,23 @@
import os
import sys
+
_CATAPULT_PATH = os.path.abspath(
os.path.join(os.path.dirname(__file__), '..', '..'))
-
-_PY_UTILS_PATH = os.path.abspath(
- os.path.join(_CATAPULT_PATH, 'common', 'py_utils'))
-
-
-def _RunTestsOrDie(top_level_dir):
- exit_code = run_with_typ.Run(top_level_dir, path=[_PY_UTILS_PATH])
- if exit_code:
- sys.exit(exit_code)
-
-
-def _AddToPathIfNeeded(path):
- if path not in sys.path:
- sys.path.insert(0, path)
+_TESTS = [
+ {'path': os.path.join(
+ _CATAPULT_PATH, 'common', 'eslint', 'bin', 'run_tests')},
+ {'path': os.path.join(
+ _CATAPULT_PATH, 'common', 'py_trace_event', 'bin', 'run_tests')},
+ {'path': os.path.join(
+ _CATAPULT_PATH, 'common', 'py_utils', 'bin', 'run_tests')},
+ {'path': os.path.join(
+ _CATAPULT_PATH, 'common', 'py_vulcanize', 'bin', 'run_py_tests')},
+]
if __name__ == '__main__':
- _AddToPathIfNeeded(_CATAPULT_PATH)
-
- from hooks import install
- if '--no-install-hooks' in sys.argv:
- sys.argv.remove('--no-install-hooks')
- else:
- install.InstallHooks()
+ sys.path.append(_CATAPULT_PATH)
+ from catapult_build import test_runner
+ sys.exit(test_runner.Main('project', _TESTS, sys.argv))
- from catapult_build import run_with_typ
- _RunTestsOrDie(_PY_UTILS_PATH)
- sys.exit(0)
diff --git a/systrace/catapult/common/bin/update_chrome_reference_binaries b/systrace/catapult/common/bin/update_chrome_reference_binaries
index 641fdc4..e148c74 100755
--- a/systrace/catapult/common/bin/update_chrome_reference_binaries
+++ b/systrace/catapult/common/bin/update_chrome_reference_binaries
@@ -18,6 +18,7 @@ import os
import shutil
import subprocess
import sys
+import tempfile
import urllib2
import zipfile
@@ -42,11 +43,12 @@ CHROME_GS_BUCKET = 'chrome-unsigned'
# Add one to enable updating it. (Must also update _PLATFORM_MAP.)
_PLATFORMS_TO_UPDATE = ['mac_x86_64', 'win_x86', 'win_AMD64', 'linux_x86_64',
'android_k_armeabi-v7a', 'android_l_arm64-v8a',
- 'android_l_armeabi-v7a']
+ 'android_l_armeabi-v7a', 'android_n_armeabi-v7a',
+ 'android_n_arm64-v8a']
-# Remove a channal name from this list to disable updating it.
+# Remove a channel name from this list to disable updating it.
# Add one to enable updating it.
-_CHANNELS_TO_UPDATE = ['stable'] # 'canary', 'dev'
+_CHANNELS_TO_UPDATE = ['stable', 'canary', 'dev']
# Omaha is Chrome's autoupdate server. It reports the current versions used
@@ -56,40 +58,49 @@ _OMAHA_PLATFORMS = { 'stable': ['mac', 'linux', 'win', 'android'],
# All of the information we need to update each platform.
-# omaha: name omaha uses for the plaftorms.
+# omaha: name omaha uses for the platforms.
# zip_name: name of the zip file to be retrieved from cloud storage.
# gs_build: name of the Chrome build platform used in cloud storage.
# destination: Name of the folder to download the reference build to.
UpdateInfo = collections.namedtuple('UpdateInfo',
'omaha, gs_folder, gs_build, zip_name')
-_PLATFORM_MAP = { 'mac_x86_64': UpdateInfo(omaha='mac',
- gs_folder='desktop-*',
- gs_build='mac64',
- zip_name='chrome-mac.zip'),
- 'win_x86': UpdateInfo(omaha='win',
- gs_folder='desktop-*',
- gs_build='win',
- zip_name='chrome-win.zip'),
- 'win_AMD64': UpdateInfo(omaha='win',
+_PLATFORM_MAP = {'mac_x86_64': UpdateInfo(omaha='mac',
gs_folder='desktop-*',
- gs_build='win64',
- zip_name='chrome-win64.zip'),
- 'linux_x86_64': UpdateInfo(omaha='linux',
- gs_folder='desktop-*',
- gs_build='linux64',
- zip_name='chrome-linux64.zip'),
- 'android_k_armeabi-v7a': UpdateInfo(omaha='android',
- gs_folder='android-*',
- gs_build='arm',
- zip_name='Chrome.apk'),
- 'android_l_arm64-v8a': UpdateInfo(omaha='android',
- gs_folder='android-*',
- gs_build='arm_64',
- zip_name='ChromeModern.apk'),
- 'android_l_armeabi-v7a': UpdateInfo(omaha='android',
- gs_folder='android-*',
- gs_build='arm',
- zip_name='Chrome.apk'),
+ gs_build='mac64',
+ zip_name='chrome-mac.zip'),
+ 'win_x86': UpdateInfo(omaha='win',
+ gs_folder='desktop-*',
+ gs_build='win-clang',
+ zip_name='chrome-win-clang.zip'),
+ 'win_AMD64': UpdateInfo(omaha='win',
+ gs_folder='desktop-*',
+ gs_build='win64-clang',
+ zip_name='chrome-win64-clang.zip'),
+ 'linux_x86_64': UpdateInfo(omaha='linux',
+ gs_folder='desktop-*',
+ gs_build='linux64',
+ zip_name='chrome-linux64.zip'),
+ 'android_k_armeabi-v7a': UpdateInfo(omaha='android',
+ gs_folder='android-*',
+ gs_build='arm',
+ zip_name='Chrome.apk'),
+ 'android_l_arm64-v8a': UpdateInfo(omaha='android',
+ gs_folder='android-*',
+ gs_build='arm_64',
+ zip_name='ChromeModern.apk'),
+ 'android_l_armeabi-v7a': UpdateInfo(omaha='android',
+ gs_folder='android-*',
+ gs_build='arm',
+ zip_name='Chrome.apk'),
+ 'android_n_armeabi-v7a': UpdateInfo(omaha='android',
+ gs_folder='android-*',
+ gs_build='arm',
+ zip_name='Monochrome.apk'),
+ 'android_n_arm64-v8a': UpdateInfo(omaha='android',
+ gs_folder='android-*',
+ gs_build='arm_64',
+ zip_name='Monochrome.apk'),
+
}
@@ -139,8 +150,10 @@ def _QueuePlatformUpdate(platform, version, config, channel):
remote_path = '%s/%s/%s/%s' % (
platform_info.gs_folder, version, platform_info.gs_build, filename)
if not cloud_storage.Exists(CHROME_GS_BUCKET, remote_path):
+ cloud_storage_path = 'gs://%s/%s' % (CHROME_GS_BUCKET, remote_path)
raise BuildNotFoundError(
- 'Failed to find %s build for version %s at path %s.' % (platform, version, remote_path))
+ 'Failed to find %s build for version %s at path %s.' % (
+ platform, version, cloud_storage_path))
reference_builds_folder = os.path.join(
os.path.dirname(os.path.abspath(__file__)), 'chrome_telemetry_build',
'reference_builds', channel)
@@ -148,11 +161,49 @@ def _QueuePlatformUpdate(platform, version, config, channel):
os.makedirs(reference_builds_folder)
local_dest_path = os.path.join(reference_builds_folder, filename)
cloud_storage.Get(CHROME_GS_BUCKET, remote_path, local_dest_path)
+ _ModifyBuildIfNeeded(local_dest_path, platform)
config.AddCloudStorageDependencyUpdateJob(
'chrome_%s' % channel, platform, local_dest_path, version=version,
execute_job=False)
+def _ModifyBuildIfNeeded(location, platform):
+ """Hook to modify the build before saving it for Telemetry to use.
+
+ This can be used to remove various utilities that cause noise in a
+ test environment. Right now, it is just used to remove Keystone,
+ which is a tool used to autoupdate Chrome.
+ """
+ if platform == 'mac_x86_64':
+ _RemoveKeystoneFromBuild(location)
+ return
+
+ if 'mac' in platform:
+ raise NotImplementedError(
+ 'Platform <%s> sounds like it is an OSX version. If so, we may need to '
+ 'remove Keystone from it per crbug.com/932615. Please edit this script'
+ ' and teach it what needs to be done :).')
+
+
+def _RemoveKeystoneFromBuild(location):
+ """Removes the Keystone autoupdate binary from the chrome mac zipfile."""
+ logging.info('Removing keystone from mac build at %s' % location)
+ temp_folder = tempfile.mkdtemp(prefix='RemoveKeystoneFromBuild')
+ try:
+ subprocess.check_call(['unzip', '-q', location, '-d', temp_folder])
+ keystone_folder = os.path.join(
+ temp_folder, 'chrome-mac', 'Google Chrome.app', 'Contents',
+ 'Frameworks', 'Google Chrome Framework.framework', 'Frameworks',
+ 'KeystoneRegistration.framework')
+ shutil.rmtree(keystone_folder)
+ os.remove(location)
+ subprocess.check_call(['zip', '--quiet', '--recurse-paths', '--symlinks',
+ location, 'chrome-mac'],
+ cwd=temp_folder)
+ finally:
+ shutil.rmtree(temp_folder)
+
+
def UpdateBuilds():
config = base_config.BaseConfig(_CHROME_BINARIES_CONFIG, writable=True)
for channel in _CHANNELS_TO_UPDATE:
@@ -165,7 +216,6 @@ def UpdateBuilds():
if current_version and current_version == channel_version:
continue
_QueuePlatformUpdate(platform, channel_version, config, channel)
- # TODO: move execute update jobs here, and add committing/uploading the cl.
print 'Updating chrome builds with downloaded binaries'
config.ExecuteUpdateJobs(force=True)
@@ -173,10 +223,7 @@ def UpdateBuilds():
def main():
logging.getLogger().setLevel(logging.DEBUG)
- #TODO(aiolos): alert sheriffs via email when an error is seen.
- #This should be added when alerts are added when updating the build.
UpdateBuilds()
- # TODO(aiolos): Add --commit flag. crbug.com/547229
if __name__ == '__main__':
main()
diff --git a/systrace/catapult/common/lab/commits.py b/systrace/catapult/common/lab/commits.py
index ce02ee3..6d47b91 100755
--- a/systrace/catapult/common/lab/commits.py
+++ b/systrace/catapult/common/lab/commits.py
@@ -15,7 +15,7 @@ import urllib2
_BASE_URL = 'https://chromium.googlesource.com'
# Can be up to 10,000.
-_REVISION_COUNT = 1000
+_REVISION_COUNT = 10000
_REPOSITORIES = [
'chromium/src',
@@ -67,33 +67,37 @@ def CommitTimes(repository, revision_count):
commit_time_string = revision['committer']['time']
commit_time = datetime.datetime.strptime(
commit_time_string, '%a %b %d %H:%M:%S %Y')
- commit_times.append(commit_time)
+ commit_times.append(commit_time - datetime.timedelta(hours=7))
return commit_times
+def IsWeekday(time):
+ return time.weekday() >= 0 and time.weekday() < 5
+
+
def main():
for repository in _REPOSITORIES:
commit_times = CommitTimes(repository, _REVISION_COUNT)
commit_durations = []
for time1, time2 in Pairwise(commit_times):
- commit_durations.append((time1 - time2).total_seconds())
+ #if not (IsWeekday(time1) and IsWeekday(time2)):
+ # continue
+ commit_durations.append((time1 - time2).total_seconds() / 60.)
commit_durations.sort()
print 'REPOSITORY:', repository
- print 'Start Date:', min(commit_times)
- print ' End Date:', max(commit_times)
+ print 'Start Date:', min(commit_times), 'PDT'
+ print ' End Date:', max(commit_times), 'PDT'
print ' Duration:', max(commit_times) - min(commit_times)
print ' n:', len(commit_times)
- for p in (0.00, 0.05, 0.25, 0.50, 0.75, 0.95, 1.00):
+ for p in (0.25, 0.50, 0.90):
percentile = Percentile(commit_durations, p)
- print '%3d%% commit duration:' % (p * 100), '%6ds' % percentile
+ print '%3d%% commit duration:' % (p * 100), '%6.1fm' % percentile
mean = math.fsum(commit_durations) / len(commit_durations)
- print ' Min commit duration:', '%6ds' % min(commit_durations)
- print 'Mean commit duration:', '%6ds' % mean
- print ' Max commit duration:', '%6ds' % max(commit_durations)
+ print 'Mean commit duration:', '%6.1fm' % mean
print
diff --git a/systrace/catapult/common/node_runner/node_runner/README.md b/systrace/catapult/common/node_runner/node_runner/README.md
new file mode 100644
index 0000000..47c85ba
--- /dev/null
+++ b/systrace/catapult/common/node_runner/node_runner/README.md
@@ -0,0 +1,11 @@
+Update binaries:
+
+1. Download archives pre-compiled binaries.
+2. Unzip archives.
+3. Re-zip just the binary:
+ `zip new.zip node-v10.14.1-linux-x64/bin/node`
+4. Use the update script:
+ `./dependency_manager/bin/update --config
+ common/node_runner/node_runner/node_binaries.json --dependency node --path
+ new.zip --platform linux_x86_64`
+5. Mail out the automated change to `node_binaries.json` for review and CQ.
diff --git a/systrace/catapult/common/node_runner/node_runner/minify b/systrace/catapult/common/node_runner/node_runner/minify
new file mode 100755
index 0000000..a5a24cf
--- /dev/null
+++ b/systrace/catapult/common/node_runner/node_runner/minify
@@ -0,0 +1,53 @@
+#!/usr/bin/env node
+'use strict';
+/*
+Copyright 2018 The Chromium Authors. All rights reserved.
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+
+This script wraps common HTML transformations including stripping whitespace and
+comments from HTML, CSS, and Javascript.
+*/
+const dom5 = require('dom5');
+const escodegen = require('escodegen');
+const espree = require('espree');
+const fs = require('fs');
+const nopt = require('nopt');
+
+const args = nopt();
+const filename = args.argv.remain[0];
+
+let html = fs.readFileSync(filename).toString('utf8');
+let parsedHtml = dom5.parse(html);
+// First, collapse text nodes around comments (by removing comment nodes,
+// re-serializing, and re-parsing) in order to prevent multiple extraneous
+// newlines.
+for (const node of dom5.nodeWalkAll(parsedHtml, () => true)) {
+ if (dom5.isCommentNode(node)) {
+ dom5.remove(node);
+ }
+}
+html = dom5.serialize(parsedHtml);
+parsedHtml = dom5.parse(html);
+// Some of these transformations are based on polyclean:
+// https://github.com/googlearchive/polyclean
+for (const node of dom5.nodeWalkAll(parsedHtml, () => true)) {
+ if (dom5.isTextNode(node)) {
+ dom5.setTextContent(node, dom5.getTextContent(node)
+ .replace(/ *\n+ */g, '\n')
+ .replace(/\n+/g, '\n'));
+ } else if (dom5.predicates.hasTagName('script')(node) &&
+ !dom5.predicates.hasAttr('src')(node)) {
+ let text = dom5.getTextContent(node);
+ const ast = espree.parse(text, {ecmaVersion: 2018});
+ text = escodegen.generate(ast, {format: {indent: {style: ''}}});
+ dom5.setTextContent(node, text);
+ } else if (dom5.predicates.hasTagName('style')(node)) {
+ dom5.setTextContent(node, dom5.getTextContent(node)
+ .replace(/[\r\n]/g, '')
+ .replace(/ {2,}/g, ' ')
+ .replace(/(^|[;,\:\{\}]) /g, '$1')
+ .replace(/ ($|[;,\{\}])/g, '$1'));
+ }
+}
+fs.writeFileSync(filename, dom5.serialize(parsedHtml));
diff --git a/systrace/catapult/common/node_runner/node_runner/minifyjs b/systrace/catapult/common/node_runner/node_runner/minifyjs
new file mode 100755
index 0000000..e594169
--- /dev/null
+++ b/systrace/catapult/common/node_runner/node_runner/minifyjs
@@ -0,0 +1,21 @@
+#!/usr/bin/env node
+'use strict';
+/*
+Copyright 2019 The Chromium Authors. All rights reserved.
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+
+This script strips whitespace and comments from Javascript.
+*/
+const escodegen = require('escodegen');
+const espree = require('espree');
+const fs = require('fs');
+const nopt = require('nopt');
+
+const args = nopt();
+const filename = args.argv.remain[0];
+
+let text = fs.readFileSync(filename).toString('utf8');
+const ast = espree.parse(text, {ecmaVersion: 2018});
+text = escodegen.generate(ast, {format: {indent: {style: ''}}});
+fs.writeFileSync(filename, text);
diff --git a/systrace/catapult/common/node_runner/node_runner/node_binaries.json b/systrace/catapult/common/node_runner/node_runner/node_binaries.json
index 4245249..3a17db0 100644
--- a/systrace/catapult/common/node_runner/node_runner/node_binaries.json
+++ b/systrace/catapult/common/node_runner/node_runner/node_binaries.json
@@ -6,9 +6,9 @@
"cloud_storage_bucket": "chromium-telemetry",
"file_info": {
"linux_x86_64": {
- "cloud_storage_hash": "5750e968975e7f5ab8cb694f5e92a34a890e129d",
+ "cloud_storage_hash": "27ad092b0ce59d2da32090a00f717f0c31e65240",
"download_path": "bin/node/node-linux64.zip",
- "path_within_archive": "node-v6.7.0-linux-x64/bin/node",
+ "path_within_archive": "node-v10.14.1-linux-x64/bin/node",
"version_in_cs": "6.7.0"
},
"mac_x86_64": {
diff --git a/systrace/catapult/common/node_runner/node_runner/package-lock.json b/systrace/catapult/common/node_runner/node_runner/package-lock.json
new file mode 100644
index 0000000..683cae9
--- /dev/null
+++ b/systrace/catapult/common/node_runner/node_runner/package-lock.json
@@ -0,0 +1,7189 @@
+{
+ "name": "catapult_base",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@chopsui/batch-iterator": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@chopsui/batch-iterator/-/batch-iterator-0.1.0.tgz",
+ "integrity": "sha512-rKXkaIe3H6sQ5bQ798Qdim3v5Lb1WD881daiiMgTsnWvHmFftiytsC0yPespE20vxlllDea2CZpzfOxTY6/Wsg=="
+ },
+ "@chopsui/chops-button": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/@chopsui/chops-button/-/chops-button-0.1.11.tgz",
+ "integrity": "sha512-Mf2t8W629ABg+CKmI6friQGAE7C9bed/Q2GF4Bb8QLKKHcYM73XtWDNcivr4h7ej6YeuGf1KzGMWsApk3m/zww==",
+ "requires": {
+ "lit-element": "^2.0.0"
+ }
+ },
+ "@chopsui/chops-checkbox": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/@chopsui/chops-checkbox/-/chops-checkbox-0.1.11.tgz",
+ "integrity": "sha512-nJOXWP04kIw9eZio1yye0wJEwWR5ZWZUBk2XP+//Fuu+RHMafZdkGfG4DNdrHh9VYprdRcZNM4R+LS5Zh9l6JQ==",
+ "requires": {
+ "lit-element": "^2.0.0"
+ }
+ },
+ "@chopsui/chops-header": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@chopsui/chops-header/-/chops-header-0.1.5.tgz",
+ "integrity": "sha512-AVbOU1IjOsKxO7j3B0TWXLSzWcaznmxAJFCh9Hq0GZUeBF/d+UBzlwoVZ6fXwzZXZ4A54QVbFbeD+bNQJ55piQ==",
+ "requires": {
+ "lit-element": "^2.0.0"
+ }
+ },
+ "@chopsui/chops-input": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/@chopsui/chops-input/-/chops-input-0.1.11.tgz",
+ "integrity": "sha512-B4dE2IoyilBpQAt1ERH3Q4PmpgRNogo2xlFNhag9FedBKXZmYa+o2ygl25IuAMaUa30mWBz1kOKYN8Lsovxv+w==",
+ "requires": {
+ "lit-element": "^2.0.0"
+ }
+ },
+ "@chopsui/chops-loading": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/@chopsui/chops-loading/-/chops-loading-0.1.11.tgz",
+ "integrity": "sha512-IkLWkiQXsJHd76MPN4pfoeAcX+4Ap9g6WSh1j7oFMJd2rzHQZpPfkLlMcAI99nUymmZrLbRjZ3qO48FbViK+kg==",
+ "requires": {
+ "lit-element": "^2.0.0"
+ }
+ },
+ "@chopsui/chops-radio": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/@chopsui/chops-radio/-/chops-radio-0.1.11.tgz",
+ "integrity": "sha512-ZFtS+CtyGg34ezzTod20zLOYPgsHSmpyZ4zmkDdY1fatBdskG3ojSp4u0p/fd9kTKSykG94h0Gtj02GijCCRRg==",
+ "requires": {
+ "lit-element": "^2.0.0"
+ }
+ },
+ "@chopsui/chops-radio-group": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/@chopsui/chops-radio-group/-/chops-radio-group-0.1.11.tgz",
+ "integrity": "sha512-Fq5/RaTI1kpdxOenFKp9P/0fDQXzQYhU7+v1/W+7NgB6SlOtJ6EmsVsotEI/woPuRcOdt7dcrzATj4IQwapKxA==",
+ "requires": {
+ "lit-element": "^2.0.0"
+ }
+ },
+ "@chopsui/chops-signin": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@chopsui/chops-signin/-/chops-signin-0.1.5.tgz",
+ "integrity": "sha512-4dLoxnc+W6CmErR8iUfFh01da8AUndnbTSjCRnklYMCMhq3oCCgHKF709ISzEjuChsbwKLe6Y0EjEScLeMiVeg==",
+ "requires": {
+ "lit-element": "^2.0.0"
+ }
+ },
+ "@chopsui/chops-switch": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/@chopsui/chops-switch/-/chops-switch-0.1.11.tgz",
+ "integrity": "sha512-ie+7x3xoZA8ADnr6+2HJox6xycCEvZb1Qhhu3lWuXi7TINFFTry0C7vU9W8EoBu31JVM+g47Y+9+HI6jQfaUbA==",
+ "requires": {
+ "@chopsui/chops-checkbox": "^0.1.6",
+ "lit-element": "^2.0.0"
+ }
+ },
+ "@chopsui/chops-tab": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/@chopsui/chops-tab/-/chops-tab-0.1.11.tgz",
+ "integrity": "sha512-9YUcBNUSaW7Cyk5MNQSZpR4fDhwJul8na7/MwEpgdRVdndbVl7a4juTI4oTftEeoqjirPn/ZEo7+VwlJp0kR7A==",
+ "requires": {
+ "lit-element": "^2.0.0"
+ }
+ },
+ "@chopsui/chops-tab-bar": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/@chopsui/chops-tab-bar/-/chops-tab-bar-0.1.11.tgz",
+ "integrity": "sha512-BeClVVCpYN/h7nKGaAIT9hJS3tLhzam4coIK0t/egImJNPGHj3+Mu07MzjUYZb2dA/rcKjpAdA9cIQFfEzXthA==",
+ "requires": {
+ "lit-element": "^2.0.0"
+ }
+ },
+ "@chopsui/chops-textarea": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/@chopsui/chops-textarea/-/chops-textarea-0.1.11.tgz",
+ "integrity": "sha512-lJDC6OeTpKQV5JYED6Ev5Rkm3oMw/UcOWXyLh6n1/BnlCweg8n1CGqqUQvxtxTG7hc4fhIkiok84zcSnwBcwIg==",
+ "requires": {
+ "lit-element": "^2.0.0"
+ }
+ },
+ "@chopsui/result-channel": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@chopsui/result-channel/-/result-channel-0.1.0.tgz",
+ "integrity": "sha512-9gocIAIwaX74Yj+wnkzlebfgTsvnZed8h+Yc71KDGO/A9rmgMNvl1kC1DoXgMMCUvELM0LybGHfZvzfkM8HKlw=="
+ },
+ "@chopsui/tsmon-client": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@chopsui/tsmon-client/-/tsmon-client-0.0.1.tgz",
+ "integrity": "sha1-QoowBjL2RNLWDxU9WBj2fWTugF0="
+ },
+ "@polymer/app-route": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@polymer/app-route/-/app-route-3.0.2.tgz",
+ "integrity": "sha1-dJCW+2EPsV0nx7aERkBvMHhs+T0=",
+ "requires": {
+ "@polymer/iron-location": "^3.0.0-pre.26",
+ "@polymer/polymer": "^3.0.0"
+ }
+ },
+ "@polymer/iron-collapse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@polymer/iron-collapse/-/iron-collapse-3.0.1.tgz",
+ "integrity": "sha1-ZBfIT1QF7ZCRh3ZdkkLjuHukYm8=",
+ "requires": {
+ "@polymer/iron-resizable-behavior": "^3.0.0-pre.26",
+ "@polymer/polymer": "^3.0.0"
+ }
+ },
+ "@polymer/iron-flex-layout": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@polymer/iron-flex-layout/-/iron-flex-layout-3.0.1.tgz",
+ "integrity": "sha1-NvnhqOt5LSebK8ddNiYochrTfww=",
+ "requires": {
+ "@polymer/polymer": "^3.0.0"
+ }
+ },
+ "@polymer/iron-icon": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@polymer/iron-icon/-/iron-icon-3.0.1.tgz",
+ "integrity": "sha1-kyEcOdiCX+SWWmhBlWYDbB3ykes=",
+ "requires": {
+ "@polymer/iron-flex-layout": "^3.0.0-pre.26",
+ "@polymer/iron-meta": "^3.0.0-pre.26",
+ "@polymer/polymer": "^3.0.0"
+ }
+ },
+ "@polymer/iron-iconset-svg": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@polymer/iron-iconset-svg/-/iron-iconset-svg-3.0.1.tgz",
+ "integrity": "sha1-Vo1ufbwSApna5jvjYArroNMN2+o=",
+ "requires": {
+ "@polymer/iron-meta": "^3.0.0-pre.26",
+ "@polymer/polymer": "^3.0.0"
+ }
+ },
+ "@polymer/iron-location": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@polymer/iron-location/-/iron-location-3.0.1.tgz",
+ "integrity": "sha1-Q6WfztJI6nHbWDMRb83voYa3lSc=",
+ "requires": {
+ "@polymer/polymer": "^3.0.0"
+ }
+ },
+ "@polymer/iron-meta": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@polymer/iron-meta/-/iron-meta-3.0.1.tgz",
+ "integrity": "sha1-fxQGKNEnsKKE+ILxuzI6JhvBJfU=",
+ "requires": {
+ "@polymer/polymer": "^3.0.0"
+ }
+ },
+ "@polymer/iron-resizable-behavior": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@polymer/iron-resizable-behavior/-/iron-resizable-behavior-3.0.1.tgz",
+ "integrity": "sha1-4oQ0jtfBx+Jj9wOSl1MvqVQCXqI=",
+ "requires": {
+ "@polymer/polymer": "^3.0.0"
+ }
+ },
+ "@polymer/polymer": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/polymer/-/polymer-3.2.0.tgz",
+ "integrity": "sha1-tB/d7E7KxjsSk2uTcmZ40jrdev0=",
+ "requires": {
+ "@webcomponents/shadycss": "^1.8.0"
+ }
+ },
+ "@sinonjs/commons": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.4.0.tgz",
+ "integrity": "sha1-ez7C2Wr0gdegMhJS57HJRyTsWng=",
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "@sinonjs/formatio": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.1.tgz",
+ "integrity": "sha1-UjEPL5vLxnvawYyUrUkBuV/eJn4=",
+ "requires": {
+ "@sinonjs/commons": "^1",
+ "@sinonjs/samsam": "^3.1.0"
+ }
+ },
+ "@sinonjs/samsam": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.1.tgz",
+ "integrity": "sha1-6IxT+9nZGtnw8rAUDBbHwQf+DQc=",
+ "requires": {
+ "@sinonjs/commons": "^1.0.2",
+ "array-from": "^2.1.1",
+ "lodash": "^4.17.11"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+ }
+ }
+ },
+ "@sinonjs/text-encoding": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
+ "integrity": "sha1-jaXGUwkVZT86Hzj9XxAdjD+AecU="
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ="
+ },
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha1-kkHwDWTrkQhPaDZ3Ru8Q1fsvL8Q="
+ },
+ "@types/parse5": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-0.0.31.tgz",
+ "integrity": "sha1-6Cekk6RDsVbhtYKi5MO9wAQPLuc=",
+ "requires": {
+ "@types/node": "6.0.*"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.116",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.116.tgz",
+ "integrity": "sha1-L5zWK07MSSfjlC4mVcGC7s9bRfE="
+ }
+ }
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.10.tgz",
+ "integrity": "sha1-DPxh1hKGJAty/FIst1VhNpnupAo=",
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.7.10",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.10",
+ "@webassemblyjs/wast-parser": "1.7.10"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.10.tgz",
+ "integrity": "sha1-7mPXKcYxGoWGPjaaRz+Zg/mE5Nk="
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.10.tgz",
+ "integrity": "sha1-v8s7vll3U1dHV5CirXsonwmy8Zg="
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.10.tgz",
+ "integrity": "sha1-CoxiTGetCyFNLgA4WZIaGYjLFRs="
+ },
+ "@webassemblyjs/helper-code-frame": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.10.tgz",
+ "integrity": "sha1-CrfiL60CQaFzF4xzl2/A7fUIMs4=",
+ "requires": {
+ "@webassemblyjs/wast-printer": "1.7.10"
+ }
+ },
+ "@webassemblyjs/helper-fsm": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.10.tgz",
+ "integrity": "sha1-CRXncT+7tzViCp0+T6PXlR+XrGQ="
+ },
+ "@webassemblyjs/helper-module-context": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.10.tgz",
+ "integrity": "sha1-m+uD9ydA9ayAdTE7XKxeeWUQ91U="
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.10.tgz",
+ "integrity": "sha1-eXsec0u8/eqDmWac3FgwjvHH/8A="
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.10.tgz",
+ "integrity": "sha1-wOo3A8YV17w+NQfDt5kch2ey8g4=",
+ "requires": {
+ "@webassemblyjs/ast": "1.7.10",
+ "@webassemblyjs/helper-buffer": "1.7.10",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.10",
+ "@webassemblyjs/wasm-gen": "1.7.10"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.10.tgz",
+ "integrity": "sha1-YsFyi37w9m74Ih4pZqCv1120MN8=",
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.10.tgz",
+ "integrity": "sha1-Fn4LtLBtdwFYV3KnP7qfTfhUOfY=",
+ "requires": {
+ "@xtuc/long": "4.2.1"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.10.tgz",
+ "integrity": "sha1-tnKPW29QNkq8FVvgKflnDmaFYFo="
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.10.tgz",
+ "integrity": "sha1-g/4xQPWlj1owuRRwK+nw5Zo5kJI=",
+ "requires": {
+ "@webassemblyjs/ast": "1.7.10",
+ "@webassemblyjs/helper-buffer": "1.7.10",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.10",
+ "@webassemblyjs/helper-wasm-section": "1.7.10",
+ "@webassemblyjs/wasm-gen": "1.7.10",
+ "@webassemblyjs/wasm-opt": "1.7.10",
+ "@webassemblyjs/wasm-parser": "1.7.10",
+ "@webassemblyjs/wast-printer": "1.7.10"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.10.tgz",
+ "integrity": "sha1-TeADgGrinJerNwd4JGm1MplXAXQ=",
+ "requires": {
+ "@webassemblyjs/ast": "1.7.10",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.10",
+ "@webassemblyjs/ieee754": "1.7.10",
+ "@webassemblyjs/leb128": "1.7.10",
+ "@webassemblyjs/utf8": "1.7.10"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.10.tgz",
+ "integrity": "sha1-0VHjFhGTSlVsgnif3uxBqBSZPCo=",
+ "requires": {
+ "@webassemblyjs/ast": "1.7.10",
+ "@webassemblyjs/helper-buffer": "1.7.10",
+ "@webassemblyjs/wasm-gen": "1.7.10",
+ "@webassemblyjs/wasm-parser": "1.7.10"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.10.tgz",
+ "integrity": "sha1-A2e+e/jwnj5qvJX45IO5IGSH7GU=",
+ "requires": {
+ "@webassemblyjs/ast": "1.7.10",
+ "@webassemblyjs/helper-api-error": "1.7.10",
+ "@webassemblyjs/helper-wasm-bytecode": "1.7.10",
+ "@webassemblyjs/ieee754": "1.7.10",
+ "@webassemblyjs/leb128": "1.7.10",
+ "@webassemblyjs/utf8": "1.7.10"
+ }
+ },
+ "@webassemblyjs/wast-parser": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.10.tgz",
+ "integrity": "sha1-BY9Zi1L3MLI/yHTUd1tihrYkcmQ=",
+ "requires": {
+ "@webassemblyjs/ast": "1.7.10",
+ "@webassemblyjs/floating-point-hex-parser": "1.7.10",
+ "@webassemblyjs/helper-api-error": "1.7.10",
+ "@webassemblyjs/helper-code-frame": "1.7.10",
+ "@webassemblyjs/helper-fsm": "1.7.10",
+ "@xtuc/long": "4.2.1"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.7.10",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.10.tgz",
+ "integrity": "sha1-2BeQnSRQrpbGa3YHYk2YozuEIjs=",
+ "requires": {
+ "@webassemblyjs/ast": "1.7.10",
+ "@webassemblyjs/wast-parser": "1.7.10",
+ "@xtuc/long": "4.2.1"
+ }
+ },
+ "@webcomponents/shadycss": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.9.1.tgz",
+ "integrity": "sha1-12n7rfpQTxG4TK7vJnAfiQcOxJo="
+ },
+ "@webpack-contrib/config-loader": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@webpack-contrib/config-loader/-/config-loader-1.2.1.tgz",
+ "integrity": "sha1-Wz3UdOIHQ3k50pTSAMaLewAAjgQ=",
+ "requires": {
+ "@webpack-contrib/schema-utils": "^1.0.0-beta.0",
+ "chalk": "^2.1.0",
+ "cosmiconfig": "^5.0.2",
+ "is-plain-obj": "^1.1.0",
+ "loud-rejection": "^1.6.0",
+ "merge-options": "^1.0.1",
+ "minimist": "^1.2.0",
+ "resolve": "^1.6.0",
+ "webpack-log": "^1.1.2"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "@webpack-contrib/schema-utils": {
+ "version": "1.0.0-beta.0",
+ "resolved": "https://registry.npmjs.org/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz",
+ "integrity": "sha1-v5Y4yUZNF3tIIJ6EIJ4jvuLrT2U=",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-keywords": "^3.1.0",
+ "chalk": "^2.3.2",
+ "strip-ansi": "^4.0.0",
+ "text-table": "^0.2.0",
+ "webpack-log": "^1.1.2"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz",
+ "integrity": "sha1-JH1SdBENtlNwa1UPzCt5fKKM/Fk=",
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-keywords": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+ "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo="
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA="
+ }
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A="
+ },
+ "@xtuc/long": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
+ "integrity": "sha1-XIXWYvdvodNFdXZsXc1mFavNMNg="
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg="
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=",
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+ "integrity": "sha1-8JWCkpdwanyXdpWMCvyJMKm52dg="
+ },
+ "acorn-dynamic-import": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
+ "integrity": "sha1-kBzu5Mf6rvfgetKkfokGddpQong=",
+ "requires": {
+ "acorn": "^5.0.0"
+ }
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "requires": {
+ "acorn": "^3.0.4"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo="
+ }
+ }
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
+ },
+ "agent-base": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
+ "integrity": "sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk=",
+ "requires": {
+ "es6-promisify": "^5.0.0"
+ }
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I="
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "optional": true
+ },
+ "ansi-align": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
+ "requires": {
+ "string-width": "^2.0.0"
+ }
+ },
+ "ansi-colors": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+ "integrity": "sha1-46PaS/uubIapwoViXeEkojQCb78="
+ },
+ "ansi-escapes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+ "integrity": "sha1-9zIHu4EgfXX9bIPxJa8m7qN4yjA="
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
+ },
+ "array-from": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
+ "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU="
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha1-O7xCdd1YTMGxCAm4nU6LY6aednU="
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=",
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "requires": {
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs="
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+ },
+ "async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
+ "integrity": "sha1-GDMOp+bjE4h/XS8qkEusb+TdU4E=",
+ "requires": {
+ "lodash": "^4.17.11"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+ }
+ }
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg="
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k="
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=",
+ "requires": {
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "detect-indent": "^4.0.0",
+ "jsesc": "^1.3.0",
+ "lodash": "^4.17.4",
+ "source-map": "^0.5.7",
+ "trim-right": "^1.0.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "regenerator-runtime": "^0.10.5"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
+ }
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo="
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM="
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
+ },
+ "base64-js": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM="
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY="
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4="
+ },
+ "binary-extensions": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
+ "integrity": "sha1-wteA9T1Fu6gxeokC1M7q86Y4WxQ="
+ },
+ "blob": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
+ "integrity": "sha1-1oDu7yX4zZGtUz9bAe7UjmTK9oM="
+ },
+ "bluebird": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz",
+ "integrity": "sha1-G+CQjgVKdRdUVJwnBInBUF1KsVo="
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8="
+ },
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=",
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM="
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ }
+ }
+ },
+ "boxen": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
+ "integrity": "sha1-VcbDmouljZxhrSLNh3Uy3rZlogs=",
+ "requires": {
+ "ansi-align": "^2.0.0",
+ "camelcase": "^4.0.0",
+ "chalk": "^2.0.1",
+ "cli-boxes": "^1.0.0",
+ "string-width": "^2.0.0",
+ "term-size": "^1.2.0",
+ "widest-line": "^2.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA="
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=",
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=",
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=",
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-alloc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+ "integrity": "sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=",
+ "requires": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
+ }
+ },
+ "buffer-alloc-unsafe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+ "integrity": "sha1-vX3CauKXLQ7aJTvgYdupkjScGfA="
+ },
+ "buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8="
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
+ },
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY="
+ },
+ "cacache": {
+ "version": "10.0.4",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
+ "integrity": "sha1-ZFI2eZnv+dQYiu/ZoU6dfGomNGA=",
+ "requires": {
+ "bluebird": "^3.5.1",
+ "chownr": "^1.0.1",
+ "glob": "^7.1.2",
+ "graceful-fs": "^4.1.11",
+ "lru-cache": "^4.1.1",
+ "mississippi": "^2.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.2",
+ "ssri": "^5.2.4",
+ "unique-filename": "^1.1.0",
+ "y18n": "^4.0.0"
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "requires": {
+ "callsites": "^0.2.0"
+ }
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo="
+ },
+ "camelcase": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
+ "integrity": "sha1-AylVJ9WL081Kp1Nj81sujZe+L0I="
+ },
+ "camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "requires": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+ }
+ }
+ },
+ "capture-stack-trace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
+ "integrity": "sha1-psC74fOPOqC5Ijjstv9Cw0TUE10="
+ },
+ "chai": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
+ "integrity": "sha1-dgqnLPION5XoSxKHfODoNzeqKeU=",
+ "requires": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^3.0.1",
+ "get-func-name": "^2.0.0",
+ "pathval": "^1.1.0",
+ "type-detect": "^4.0.5"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I="
+ },
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII="
+ },
+ "chokidar": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
+ "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=",
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.0",
+ "braces": "^2.3.0",
+ "fsevents": "^1.2.2",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "lodash.debounce": "^4.0.8",
+ "normalize-path": "^2.1.1",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0",
+ "upath": "^1.0.5"
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
+ "integrity": "sha1-VHJri4//TfBTxCGH6AH7RBLfFJQ="
+ },
+ "chrome-trace-event": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
+ "integrity": "sha1-Rakb0sIMlBHwljtarrmhuV4JzEg=",
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc="
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY="
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM="
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-spinners": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
+ "integrity": "sha1-ACwZkJEtDVlYDJO9NsBW3pnkJZo="
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
+ },
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
+ "integrity": "sha1-SYgbj7pn3xKpa98/VsCqueeRMUc=",
+ "requires": {
+ "color-name": "1.1.1"
+ }
+ },
+ "color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok="
+ },
+ "colors": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
+ "integrity": "sha1-OeAF1Uav4B4B+cTKj6UPaGoBIF0="
+ },
+ "commander": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
+ "integrity": "sha1-aWS8pnaF33wfFDDFhPB9dZeIW5w="
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "configstore": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
+ "integrity": "sha1-xvJd767vJt8S3TNBSwAf6BpUP48=",
+ "requires": {
+ "dot-prop": "^4.1.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^1.0.0",
+ "unique-string": "^1.0.0",
+ "write-file-atomic": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ }
+ },
+ "connect": {
+ "version": "3.6.6",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
+ "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
+ "requires": {
+ "debug": "2.6.9",
+ "finalhandler": "1.1.0",
+ "parseurl": "~1.3.2",
+ "utils-merge": "1.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js="
+ },
+ "convert-source-map": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha1-UbU3qMQ+DwTewZk7/83VBOdYrCA=",
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=",
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "core-js": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha1-+XJgj/DOrWi4QaFqky0LGDeRgU4="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "cosmiconfig": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz",
+ "integrity": "sha1-3KbPaAoL0DWJr/aEcAhYyBq+6zk=",
+ "requires": {
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.9.0",
+ "parse-json": "^4.0.0"
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-error-class": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+ "requires": {
+ "capture-stack-trace": "^1.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=",
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=",
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4="
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "custom-event": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
+ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU="
+ },
+ "cyclist": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA="
+ },
+ "d": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
+ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "requires": {
+ "es5-ext": "^0.10.9"
+ }
+ },
+ "date-format": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.0.0.tgz",
+ "integrity": "sha1-fPexcvHsVk8AA7OeowLFSY+5jI8="
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
+ },
+ "dateformat": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+ "requires": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.3.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
+ }
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz",
+ "integrity": "sha1-ZW17vICUxMeI6lPFhAkIycfQY8c=",
+ "requires": {
+ "xregexp": "4.0.0"
+ }
+ },
+ "decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+ "requires": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
+ }
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=",
+ "requires": {
+ "type-detect": "^4.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw="
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=",
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "requires": {
+ "globby": "^5.0.0",
+ "is-path-cwd": "^1.0.0",
+ "is-path-in-cwd": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "di": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
+ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw="
+ },
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI="
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha1-XNAfwQFiG0LEzX9dGmYkNxbT850=",
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-serialize": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
+ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
+ "requires": {
+ "custom-event": "~1.0.0",
+ "ent": "~2.2.0",
+ "extend": "^3.0.0",
+ "void-elements": "^2.0.0"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "requires": {
+ "domelementtype": "~1.1.1",
+ "entities": "~1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
+ }
+ }
+ },
+ "dom5": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-1.3.6.tgz",
+ "integrity": "sha1-pwiKn8XzsI3J9u2kx6uuskGUXg0=",
+ "requires": {
+ "@types/clone": "^0.1.29",
+ "@types/node": "^4.0.30",
+ "@types/parse5": "^0.0.31",
+ "clone": "^1.0.2",
+ "parse5": "^1.4.1"
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto="
+ },
+ "domelementtype": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI="
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=",
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=",
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "dot-prop": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+ "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=",
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "dot-prop-immutable": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/dot-prop-immutable/-/dot-prop-immutable-1.5.0.tgz",
+ "integrity": "sha512-YcnAEqxtJSect/W3taJeMkKhDrL7NzzvgKlJ515m5aGxJBJpzetXf0wZbGapdrBNwAItWvb4sOn+jX0RBYYM1g=="
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
+ },
+ "duplexify": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz",
+ "integrity": "sha1-saeinEq/1jlYXvrszoDWZrHjQSU=",
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "elliptic": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
+ "integrity": "sha1-wtC3d2kRuGcixjLDwGxg8vgZk5o=",
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=",
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "engine.io": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
+ "integrity": "sha1-tgKBw1SEpw7gNR6g6/+D7IyVIqI=",
+ "requires": {
+ "accepts": "~1.3.4",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "~3.1.0",
+ "engine.io-parser": "~2.1.0",
+ "ws": "~3.3.1"
+ },
+ "dependencies": {
+ "ws": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha1-8c+E/i1ekB686U767OeF8YeiKPI=",
+ "requires": {
+ "async-limiter": "~1.0.0",
+ "safe-buffer": "~5.1.0",
+ "ultron": "~1.1.0"
+ }
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
+ "integrity": "sha1-b1TAR13khxWKGnx30QF4cItq3TY=",
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "~3.1.0",
+ "engine.io-parser": "~2.1.1",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "~3.3.1",
+ "xmlhttprequest-ssl": "~1.5.4",
+ "yeast": "0.1.2"
+ },
+ "dependencies": {
+ "ws": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha1-8c+E/i1ekB686U767OeF8YeiKPI=",
+ "requires": {
+ "async-limiter": "~1.0.0",
+ "safe-buffer": "~5.1.0",
+ "ultron": "~1.1.0"
+ }
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
+ "integrity": "sha1-dXq5cPvy37Mse3SwMyFtVznveaY=",
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "~0.0.7",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.5",
+ "has-binary2": "~1.0.2"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+ "integrity": "sha1-Qcfgv9/nSsH/4eV61qXGyfN0Kn8=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.4.0",
+ "tapable": "^1.0.0"
+ }
+ },
+ "ent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
+ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0="
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA="
+ },
+ "errno": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=",
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
+ "integrity": "sha1-nbvdJ8aFbwABQhyhh4LXhr+KYWU=",
+ "requires": {
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.1",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha1-7fckeAM0VujdqO8J4ArZZQcH83c=",
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.46",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz",
+ "integrity": "sha1-79mfZ8Wn7Hibqj2qf3mHA4j39XI=",
+ "requires": {
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.1",
+ "next-tick": "1"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-promise": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz",
+ "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw="
+ },
+ "es6-promisify": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+ "requires": {
+ "es6-promise": "^4.0.3"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz",
+ "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q=="
+ }
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "escodegen": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
+ "integrity": "sha1-snqTiUgdW/1b7Hb3ux6z+PRVZYk=",
+ "requires": {
+ "esprima": "^3.1.3",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ }
+ },
+ "eslint": {
+ "version": "4.19.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
+ "integrity": "sha1-MtHWU+HZBAiFS/spbwdux+GGowA=",
+ "requires": {
+ "ajv": "^5.3.0",
+ "babel-code-frame": "^6.22.0",
+ "chalk": "^2.1.0",
+ "concat-stream": "^1.6.0",
+ "cross-spawn": "^5.1.0",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^3.7.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^3.5.4",
+ "esquery": "^1.0.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.0.1",
+ "ignore": "^3.3.3",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^3.0.6",
+ "is-resolvable": "^1.0.0",
+ "js-yaml": "^3.9.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.2",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "regexpp": "^1.0.1",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.3.0",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "~2.0.1",
+ "table": "4.0.2",
+ "text-table": "~0.2.0"
+ }
+ },
+ "eslint-config-google": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.6.0.tgz",
+ "integrity": "sha1-xULsGPsyR5g6wWu6MWYtAWJbdj8=",
+ "requires": {
+ "eslint-config-xo": "^0.13.0"
+ }
+ },
+ "eslint-config-xo": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.13.0.tgz",
+ "integrity": "sha1-+RZ2VDK6Z9L8enF3uLz+8/brBWQ="
+ },
+ "eslint-plugin-html": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-4.0.5.tgz",
+ "integrity": "sha1-6Ox+FkhRJEYPO/8xIBb+sKVNllk=",
+ "requires": {
+ "htmlparser2": "^3.8.2"
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
+ "integrity": "sha1-u1ByANPRf2AkdjYWC0gmKEsQhTU=",
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha1-PzGA+y4pEBdxastMnW1bXDSmqB0="
+ },
+ "espree": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+ "integrity": "sha1-sPRHGHyKi+2US4FaZgvd9d610ac=",
+ "requires": {
+ "acorn": "^5.5.0",
+ "acorn-jsx": "^3.0.0"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha1-QGxRZYsfWZGl+bYrHcJbAOPlxwg=",
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=",
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "eventemitter3": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz",
+ "integrity": "sha1-LT1I+cNGaY/Og6hdfWZOmFNd9uc="
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha1-BFURz9jRM/OEZnPRBHwVTiFK09U=",
+ "requires": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "extract-zip": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
+ "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
+ "requires": {
+ "concat-stream": "1.6.2",
+ "debug": "2.6.9",
+ "mkdirp": "0.5.1",
+ "yauzl": "2.4.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ },
+ "fd-slicer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
+ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+ "requires": {
+ "pend": "~1.2.0"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "requires": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+ "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.1",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.2",
+ "statuses": "~1.3.1",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "find-cache-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^1.0.0",
+ "pkg-dir": "^2.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "requires": {
+ "circular-json": "^0.3.1",
+ "del": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "write": "^0.2.1"
+ }
+ },
+ "flatted": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz",
+ "integrity": "sha1-VRIrZTbqSWtLRIk+4mCBQdENmRY="
+ },
+ "flush-write-stream": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
+ "integrity": "sha1-xdWG7zivYJdlC0m8QbVfq7GfNb0=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.4"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz",
+ "integrity": "sha1-SJ68GY3A5/ZBZ70jsDxMGbV4THY=",
+ "requires": {
+ "debug": "^3.2.6"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo="
+ }
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "fs-access": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
+ "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
+ "requires": {
+ "null-check": "^1.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+ "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
+ "optional": true,
+ "requires": {
+ "nan": "^2.12.1",
+ "node-pre-gyp": "^0.12.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "optional": true
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.2.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.3.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.12.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.6",
+ "bundled": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.4.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.7.0",
+ "bundled": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
+ },
+ "get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE="
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "global-dirs": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+ "requires": {
+ "ini": "^1.3.4"
+ }
+ },
+ "globals": {
+ "version": "11.7.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz",
+ "integrity": "sha1-pYP6pDBVsayncZFL9oJY4vwSVnM="
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "requires": {
+ "array-union": "^1.0.1",
+ "arrify": "^1.0.0",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "got": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "requires": {
+ "create-error-class": "^3.0.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "is-redirect": "^1.0.0",
+ "is-retry-allowed": "^1.0.0",
+ "is-stream": "^1.0.0",
+ "lowercase-keys": "^1.0.0",
+ "safe-buffer": "^5.0.1",
+ "timed-out": "^4.0.0",
+ "unzip-response": "^2.0.1",
+ "url-parse-lax": "^1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ },
+ "growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4="
+ },
+ "handlebars": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz",
+ "integrity": "sha1-trN8HO0DBrIh4JT8eso+wjsTG2c=",
+ "requires": {
+ "neo-async": "^2.6.0",
+ "optimist": "^0.6.1",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+ "optional": true
+ },
+ "uglify-js": {
+ "version": "3.5.9",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.9.tgz",
+ "integrity": "sha512-WpT0RqsDtAWPNJK955DEnb6xjymR8Fn0OlK4TT4pS0ASYsVPqr5ELhgwOwLCP5J5vHeJ4xmMmz3DEgdqC10JeQ==",
+ "optional": true,
+ "requires": {
+ "commander": "~2.20.0",
+ "source-map": "~0.6.1"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-binary2": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
+ "integrity": "sha1-d3asYn8+p3JQz8My2rfd9eT10R0=",
+ "requires": {
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
+ }
+ }
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz",
+ "integrity": "sha1-44q0uF37HgxA/pJlwOm1SFTCOBI=",
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha1-l/I2l3vW4SVAiTD/bePuxigewEc="
+ },
+ "htmlparser2": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+ "requires": {
+ "domelementtype": "^1.3.0",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "http-proxy": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
+ "integrity": "sha1-etOElGWPhGBeL220Q230EPTlvpo=",
+ "requires": {
+ "eventemitter3": "^3.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
+ },
+ "https-proxy-agent": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
+ "integrity": "sha1-UVUpcPoE1yPgTFbQQXjD+SWSu8A=",
+ "requires": {
+ "agent-base": "^4.1.0",
+ "debug": "^3.1.0"
+ }
+ },
+ "hydrolysis": {
+ "version": "1.25.0",
+ "resolved": "https://registry.npmjs.org/hydrolysis/-/hydrolysis-1.25.0.tgz",
+ "integrity": "sha1-pPsUo3oeA7DbUtiqpXxoInKhTYQ=",
+ "requires": {
+ "acorn": "^3.2.0",
+ "babel-polyfill": "^6.2.0",
+ "doctrine": "^0.7.0",
+ "dom5": "1.1.0",
+ "escodegen": "^1.7.0",
+ "espree": "^3.1.3",
+ "estraverse": "^3.1.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo="
+ },
+ "doctrine": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz",
+ "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=",
+ "requires": {
+ "esutils": "^1.1.6",
+ "isarray": "0.0.1"
+ }
+ },
+ "dom5": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-1.1.0.tgz",
+ "integrity": "sha1-Ogx3AMCDq0xNJpOKeLDwxtzDd5Q=",
+ "requires": {
+ "parse5": "^1.4.1"
+ }
+ },
+ "estraverse": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-3.1.0.tgz",
+ "integrity": "sha1-FeKKRGuLgrxwDMyLlseK9NoNbLo="
+ },
+ "esutils": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz",
+ "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U="
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ }
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha1-KXhx9jvlB63Pv8pxXQzQ7thOmmM=",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ieee754": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+ "integrity": "sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs="
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
+ },
+ "ignore": {
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+ "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM="
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM="
+ },
+ "import-local": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
+ "integrity": "sha1-Xk/9wD9P5sAJxnKb6yljHC+CJ7w=",
+ "requires": {
+ "pkg-dir": "^2.0.0",
+ "resolve-cwd": "^2.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok="
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc="
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha1-ndLyrXZdyrH/BEO0kUQqILoifck=",
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.0.4",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rx-lite": "^4.0.8",
+ "rx-lite-aggregates": "^4.0.8",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ }
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=",
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "irregular-plurals": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz",
+ "integrity": "sha1-OdQPBbAPZW0Lf6RxIw3TtxSvKHI="
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4="
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU="
+ },
+ "is-ci": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+ "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=",
+ "requires": {
+ "ci-info": "^1.5.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0="
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE="
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
+ "requires": {
+ "global-dirs": "^0.1.0",
+ "is-path-inside": "^1.0.0"
+ }
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
+ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ="
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0="
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
+ "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=",
+ "requires": {
+ "is-path-inside": "^1.0.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "requires": {
+ "path-is-inside": "^1.0.1"
+ }
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ="
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg="
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
+ "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ="
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha1-oFX2rlcZLK7jKeeoYBGLSXqVDzg=",
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0="
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isbinaryfile": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
+ "integrity": "sha1-XW3vPt6/boyoyunDAYOoBLX4voA=",
+ "requires": {
+ "buffer-alloc": "^1.2.0"
+ }
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "istanbul": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
+ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
+ "requires": {
+ "abbrev": "1.0.x",
+ "async": "1.x",
+ "escodegen": "1.8.x",
+ "esprima": "2.7.x",
+ "glob": "^5.0.15",
+ "handlebars": "^4.0.1",
+ "js-yaml": "3.x",
+ "mkdirp": "0.5.x",
+ "nopt": "3.x",
+ "once": "1.x",
+ "resolve": "1.1.x",
+ "supports-color": "^3.1.0",
+ "which": "^1.1.1",
+ "wordwrap": "^1.0.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
+ "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU="
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+ },
+ "escodegen": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
+ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
+ "requires": {
+ "esprima": "^2.7.1",
+ "estraverse": "^1.9.1",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.2.0"
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE="
+ },
+ "estraverse": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
+ "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q="
+ },
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs="
+ },
+ "source-map": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+ "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
+ "optional": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-instrumenter-loader": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz",
+ "integrity": "sha1-mVe9WSUrNz+uXFK3tRiOb94qCUk=",
+ "requires": {
+ "convert-source-map": "^1.5.0",
+ "istanbul-lib-instrument": "^1.7.3",
+ "loader-utils": "^1.1.0",
+ "schema-utils": "^0.3.0"
+ },
+ "dependencies": {
+ "schema-utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "requires": {
+ "ajv": "^5.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-coverage": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz",
+ "integrity": "sha1-zPftzQoLubj3Kf7rCTBHD5r2ZPA="
+ },
+ "istanbul-lib-instrument": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz",
+ "integrity": "sha1-H1XtEKw8R/K93dUweTUSZ1TQqco=",
+ "requires": {
+ "babel-generator": "^6.18.0",
+ "babel-template": "^6.16.0",
+ "babel-traverse": "^6.18.0",
+ "babel-types": "^6.18.0",
+ "babylon": "^6.18.0",
+ "istanbul-lib-coverage": "^1.2.1",
+ "semver": "^5.3.0"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE="
+ }
+ }
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk="
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "just-extend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz",
+ "integrity": "sha1-8/R/ffyg+YnFVBCn68iFSwcQivw="
+ },
+ "karma": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-4.1.0.tgz",
+ "integrity": "sha1-0HOHyXQ6V1tA+vc+ij61Qhwhk+E=",
+ "requires": {
+ "bluebird": "^3.3.0",
+ "body-parser": "^1.16.1",
+ "braces": "^2.3.2",
+ "chokidar": "^2.0.3",
+ "colors": "^1.1.0",
+ "connect": "^3.6.0",
+ "core-js": "^2.2.0",
+ "di": "^0.0.1",
+ "dom-serialize": "^2.2.0",
+ "flatted": "^2.0.0",
+ "glob": "^7.1.1",
+ "graceful-fs": "^4.1.2",
+ "http-proxy": "^1.13.0",
+ "isbinaryfile": "^3.0.0",
+ "lodash": "^4.17.11",
+ "log4js": "^4.0.0",
+ "mime": "^2.3.1",
+ "minimatch": "^3.0.2",
+ "optimist": "^0.6.1",
+ "qjobs": "^1.1.4",
+ "range-parser": "^1.2.0",
+ "rimraf": "^2.6.0",
+ "safe-buffer": "^5.0.1",
+ "socket.io": "2.1.1",
+ "source-map": "^0.6.1",
+ "tmp": "0.0.33",
+ "useragent": "2.3.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+ }
+ }
+ },
+ "karma-chrome-launcher": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz",
+ "integrity": "sha1-zxudBxNswY/iOTJ9JGVMPbw2is8=",
+ "requires": {
+ "fs-access": "^1.0.0",
+ "which": "^1.2.1"
+ }
+ },
+ "karma-coverage": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.2.tgz",
+ "integrity": "sha1-zAnc61iagxAayl/nDCh2Re84dok=",
+ "requires": {
+ "dateformat": "^1.0.6",
+ "istanbul": "^0.4.0",
+ "lodash": "^4.17.0",
+ "minimatch": "^3.0.0",
+ "source-map": "^0.5.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "karma-mocha": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz",
+ "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=",
+ "requires": {
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "karma-sinon": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz",
+ "integrity": "sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo="
+ },
+ "karma-sourcemap-loader": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz",
+ "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=",
+ "requires": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "karma-webpack": {
+ "version": "4.0.0-rc.6",
+ "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-4.0.0-rc.6.tgz",
+ "integrity": "sha1-AqxqR8f8FmyLIIRGBppCRpgIJAU=",
+ "requires": {
+ "async": "^2.0.0",
+ "loader-utils": "^1.1.0",
+ "source-map": "^0.5.6",
+ "webpack-dev-middleware": "^3.2.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE="
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
+ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
+ "requires": {
+ "package-json": "^4.0.0"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lit-element": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.1.0.tgz",
+ "integrity": "sha1-hbw/HaAif0sT3oob6Xgim5+jJ+k=",
+ "requires": {
+ "lit-html": "^1.0.0"
+ }
+ },
+ "lit-html": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.0.0.tgz",
+ "integrity": "sha1-PcN4GoymiptcL/KmHiY2YrmyJns="
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ }
+ }
+ },
+ "loader-runner": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz",
+ "integrity": "sha1-Am8S/nwxFZkolqwCugIrqSlxuXk="
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "requires": {
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha1-s56mIp72B+zYniyN8SU2iRysm40="
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=",
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "log4js": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.1.0.tgz",
+ "integrity": "sha1-V5g8akQ1RqjIYH6csEXSoRfCdkQ=",
+ "requires": {
+ "date-format": "^2.0.0",
+ "debug": "^4.1.1",
+ "flatted": "^2.0.0",
+ "rfdc": "^1.1.2",
+ "streamroller": "^1.0.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo="
+ }
+ }
+ },
+ "loglevelnext": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.5.tgz",
+ "integrity": "sha1-NvxPWZbWZA9Tn/IDuoGWQWgNdaI=",
+ "requires": {
+ "es6-symbol": "^3.1.1",
+ "object.assign": "^4.1.0"
+ }
+ },
+ "lolex": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.0.1.tgz",
+ "integrity": "sha1-SpnCJRV51pPGoINEba4OXDhE0/o="
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8="
+ },
+ "lru-cache": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
+ "integrity": "sha1-oRdc80lt/IQ2wVbDNLSVWZK85pw=",
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=",
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ }
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
+ "map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk="
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "meant": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.1.tgz",
+ "integrity": "sha1-ZgRP6i8jIw7IBvtRXv6inETSEV0="
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "meow": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz",
+ "integrity": "sha1-38c9Y6mvxxSl43F2DrXIi5EHiqQ=",
+ "requires": {
+ "camelcase-keys": "^4.0.0",
+ "decamelize-keys": "^1.0.0",
+ "loud-rejection": "^1.0.0",
+ "minimist-options": "^3.0.1",
+ "normalize-package-data": "^2.3.4",
+ "read-pkg-up": "^3.0.0",
+ "redent": "^2.0.0",
+ "trim-newlines": "^2.0.0",
+ "yargs-parser": "^10.0.0"
+ }
+ },
+ "merge-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz",
+ "integrity": "sha1-KmSyRFe+zU5NxggoMkfpTOWJqjI=",
+ "requires": {
+ "is-plain-obj": "^1.1"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "mime": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz",
+ "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg=="
+ },
+ "mime-db": {
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha1-plBX6ZjbCQ9zKmj2wnbTh9QSbDI="
+ },
+ "mime-types": {
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha1-tvjQs+lR77d97eyhlM/20W9nb4E=",
+ "requires": {
+ "mime-db": "1.40.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI="
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc="
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "minimist-options": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
+ "integrity": "sha1-+6TIGRM54T7PTWG+sD8HAQPz2VQ=",
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0"
+ }
+ },
+ "mississippi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
+ "integrity": "sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8=",
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^2.0.1",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=",
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "mocha": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
+ "integrity": "sha1-bYrlCPWRZ/lA8rWzxKYSrlDJCuY=",
+ "requires": {
+ "browser-stdout": "1.3.1",
+ "commander": "2.15.1",
+ "debug": "3.1.0",
+ "diff": "3.5.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.2",
+ "growl": "1.10.5",
+ "he": "1.1.1",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "supports-color": "5.4.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha1-30boZ9D8Kuxmo0ZitAapzK//Ww8="
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0="
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha1-HGszdALCE3YF7+GfEP7DkPb6q1Q=",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
+ },
+ "nan": {
+ "version": "2.13.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz",
+ "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==",
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs="
+ },
+ "neo-async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz",
+ "integrity": "sha1-udFeTXHGdikIZUtRg+04t1M0CDU="
+ },
+ "next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
+ },
+ "nise": {
+ "version": "1.4.10",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.10.tgz",
+ "integrity": "sha1-rkagmiZDb66Ro4pgkZNWrm2xQ7Y=",
+ "requires": {
+ "@sinonjs/formatio": "^3.1.0",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "lolex": "^2.3.2",
+ "path-to-regexp": "^1.7.0"
+ },
+ "dependencies": {
+ "lolex": {
+ "version": "2.7.5",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz",
+ "integrity": "sha1-ETAB1Wv8fgLVbjYpHMXEE9GqBzM="
+ }
+ }
+ },
+ "node-libs-browser": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
+ "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=",
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^1.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.0",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.10.3",
+ "vm-browserify": "0.0.4"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=",
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "null-check": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz",
+ "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0="
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha1-CcU4VTd1dTEMymL1W7M0q/97PtI="
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "object.values": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz",
+ "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.6.1",
+ "function-bind": "^1.1.0",
+ "has": "^1.0.1"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "opn": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
+ "integrity": "sha1-y1Reeqt4VivrEao7+rxwQuF2EDU=",
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+ }
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ }
+ },
+ "ora": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz",
+ "integrity": "sha1-bK8oMOuSSUGGHsU6FzeZ4Ai1Hls=",
+ "requires": {
+ "chalk": "^2.3.1",
+ "cli-cursor": "^2.1.0",
+ "cli-spinners": "^1.1.0",
+ "log-symbols": "^2.2.0",
+ "strip-ansi": "^4.0.0",
+ "wcwidth": "^1.0.1"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
+ },
+ "package-json": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
+ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+ "requires": {
+ "got": "^6.7.1",
+ "registry-auth-token": "^3.0.1",
+ "registry-url": "^3.0.3",
+ "semver": "^5.1.0"
+ }
+ },
+ "pako": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
+ "integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg="
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+ "requires": {
+ "cyclist": "~0.2.2",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
+ "integrity": "sha1-9r8pOBgzK9DatU77Fgh3JHRebKg=",
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "parse5": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
+ "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ="
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "requires": {
+ "better-assert": "~1.0.0"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path": {
+ "version": "0.12.7",
+ "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
+ "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
+ "requires": {
+ "process": "^0.11.1",
+ "util": "^0.10.3"
+ }
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo="
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw="
+ },
+ "path-posix": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz",
+ "integrity": "sha1-BrJhE/Vr6rBCVFojv6iAA8ysJg8="
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ }
+ }
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=",
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ }
+ }
+ },
+ "pathval": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
+ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA="
+ },
+ "pbkdf2": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=",
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ },
+ "plur": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/plur/-/plur-3.0.1.tgz",
+ "integrity": "sha1-JoZS1gX4FmmbQrhiSN5zyazQanw=",
+ "requires": {
+ "irregular-plurals": "^2.0.0"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha1-KYuJ34uTsCIdv0Ia0rGx6iP8Z3c="
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
+ },
+ "pretty-bytes": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.1.0.tgz",
+ "integrity": "sha1-Yjfs+9xlJb6u9N5yLMYKWK4ObG0="
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o="
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8="
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
+ },
+ "proxy-from-env": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
+ "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4="
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=",
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
+ },
+ "puppeteer": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.15.0.tgz",
+ "integrity": "sha512-D2y5kwA9SsYkNUmcBzu9WZ4V1SGHiQTmgvDZSx6sRYFsgV25IebL4V6FaHjF6MbwLK9C6f3G3pmck9qmwM8H3w==",
+ "requires": {
+ "debug": "^4.1.0",
+ "extract-zip": "^1.6.6",
+ "https-proxy-agent": "^2.2.1",
+ "mime": "^2.0.3",
+ "progress": "^2.0.1",
+ "proxy-from-env": "^1.0.0",
+ "rimraf": "^2.6.1",
+ "ws": "^6.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo="
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
+ }
+ }
+ },
+ "qjobs": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz",
+ "integrity": "sha1-xF6cYYAL0IfviNfiVkI73Unl0HE="
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw="
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+ },
+ "quick-lru": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g="
+ },
+ "randombytes": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=",
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=",
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=",
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM="
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ }
+ }
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=",
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "requires": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
+ "redux": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz",
+ "integrity": "sha1-Q2yubMQPvkcnaJ18j65EgI8b/vU=",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "symbol-observable": "^1.2.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=",
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexpp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
+ "integrity": "sha1-DjUW3Qt5BPQT0tQZPc5GGMOmias="
+ },
+ "registry-auth-token": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
+ "integrity": "sha1-hR/UkDjuy1hpERFa+EUmDuyYPyA=",
+ "requires": {
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "requires": {
+ "rc": "^1.0.1"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "requires": {
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
+ }
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
+ },
+ "resolve": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+ "integrity": "sha1-gvHsGaQjrB+9CAsLqwa6NuhKeiY=",
+ "requires": {
+ "path-parse": "^1.0.5"
+ }
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "requires": {
+ "resolve-from": "^3.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
+ }
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY="
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w="
+ },
+ "rfdc": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz",
+ "integrity": "sha1-5uctdPXcOd6PU49l4Aw2wYAY40k="
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=",
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "requires": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ="
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "requires": {
+ "rx-lite": "*"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
+ },
+ "schema-utils": {
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
+ "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-keywords": "^3.1.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz",
+ "integrity": "sha1-JH1SdBENtlNwa1UPzCt5fKKM/Fk=",
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-keywords": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+ "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo="
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA="
+ }
+ }
+ },
+ "semver": {
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
+ "integrity": "sha1-ff3YgUvbfKvHvg+x1zTPtmyUBHc="
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+ "requires": {
+ "semver": "^5.0.3"
+ }
+ },
+ "serialize-javascript": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
+ "integrity": "sha1-GqM2FiyIqJDdrVOEuuvJOmVRYf4="
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "sinon": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.3.2.tgz",
+ "integrity": "sha1-gtujpthfbSGB4eyiwQ2GV8IWHyg=",
+ "requires": {
+ "@sinonjs/commons": "^1.4.0",
+ "@sinonjs/formatio": "^3.2.1",
+ "@sinonjs/samsam": "^3.3.1",
+ "diff": "^3.5.0",
+ "lolex": "^4.0.1",
+ "nise": "^1.4.10",
+ "supports-color": "^5.5.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha1-BE8aSdiEL/MHqta1Be0Xi9lQE00=",
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=",
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=",
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "socket.io": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz",
+ "integrity": "sha1-oGnF/qvuPmshSnW0DOBlLhz7mYA=",
+ "requires": {
+ "debug": "~3.1.0",
+ "engine.io": "~3.2.0",
+ "has-binary2": "~1.0.2",
+ "socket.io-adapter": "~1.1.0",
+ "socket.io-client": "2.1.1",
+ "socket.io-parser": "~3.2.0"
+ }
+ },
+ "socket.io-adapter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
+ "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs="
+ },
+ "socket.io-client": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz",
+ "integrity": "sha1-3LOBA0NqtFeN2wJmOK4vIbYjZx8=",
+ "requires": {
+ "backo2": "1.0.2",
+ "base64-arraybuffer": "0.1.5",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "~3.1.0",
+ "engine.io-client": "~3.2.0",
+ "has-binary2": "~1.0.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "~3.2.0",
+ "to-array": "0.1.4"
+ }
+ },
+ "socket.io-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
+ "integrity": "sha1-58Yii2qh+BTmFIrqMltRqpSZ4Hc=",
+ "requires": {
+ "component-emitter": "1.2.1",
+ "debug": "~3.1.0",
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
+ }
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ="
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=",
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+ },
+ "spdx-correct": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz",
+ "integrity": "sha1-GbtAnpG0exrVQVkkP3MSqFjbPC4=",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz",
+ "integrity": "sha1-4qMDI2ysVLBAMfp6WnnH5wHfhS8="
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=",
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "ssri": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
+ "integrity": "sha1-ujhyycbTOgcEp9cf8EXl7EiZnQY=",
+ "requires": {
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+ "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=",
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
+ },
+ "streamroller": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.4.tgz",
+ "integrity": "sha1-1IXHYkeW1eLrNBkMea/L8AavteY=",
+ "requires": {
+ "async": "^2.6.1",
+ "date-format": "^2.0.0",
+ "debug": "^3.1.0",
+ "fs-extra": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ }
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g="
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ },
+ "symbol-observable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+ "integrity": "sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ="
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha1-ozRHN1OR52atNNNIbm4q7chNLjY=",
+ "requires": {
+ "ajv": "^5.2.3",
+ "ajv-keywords": "^2.1.0",
+ "chalk": "^2.1.0",
+ "lodash": "^4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "^2.1.1"
+ }
+ },
+ "tapable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.0.tgz",
+ "integrity": "sha1-DQdqFy49m6CI/SJysmaPuNGUt4w="
+ },
+ "term-size": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
+ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+ "requires": {
+ "execa": "^0.7.0"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8="
+ },
+ "timers-browserify": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
+ "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=",
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "titleize": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/titleize/-/titleize-1.0.1.tgz",
+ "integrity": "sha1-Ibwk/Mpljq3G0708OPK9FzdptMU="
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=",
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=",
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM="
+ },
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA="
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+ },
+ "tslib": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
+ "integrity": "sha1-1+TdeSRdhUKMTX5IIqeZF5VMooY="
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw="
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "uglify-es": {
+ "version": "3.3.9",
+ "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
+ "integrity": "sha1-DBxPBwC+2NvBJM2zBNJZLKID5nc=",
+ "requires": {
+ "commander": "~2.13.0",
+ "source-map": "~0.6.1"
+ }
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz",
+ "integrity": "sha1-dfVIFghYFjoIZD4IbV/v4YpdZ94=",
+ "requires": {
+ "cacache": "^10.0.4",
+ "find-cache-dir": "^1.0.0",
+ "schema-utils": "^0.4.5",
+ "serialize-javascript": "^1.4.0",
+ "source-map": "^0.6.1",
+ "uglify-es": "^3.3.4",
+ "webpack-sources": "^1.1.0",
+ "worker-farm": "^1.5.2"
+ }
+ },
+ "ultron": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha1-n+FTahCmZKZSZqHjzPhf02MCvJw="
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=",
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz",
+ "integrity": "sha1-Xp7cbRzo+yZNsYpQfvm9hURFHKY=",
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
+ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+ "requires": {
+ "crypto-random-string": "^1.0.0"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY="
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ }
+ }
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c="
+ },
+ "upath": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+ "integrity": "sha1-NSVll+RqWB20eT0M5H+prr/J+r0="
+ },
+ "update-notifier": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
+ "integrity": "sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y=",
+ "requires": {
+ "boxen": "^1.2.1",
+ "chalk": "^2.0.1",
+ "configstore": "^3.0.0",
+ "import-lazy": "^2.1.0",
+ "is-ci": "^1.0.10",
+ "is-installed-globally": "^0.1.0",
+ "is-npm": "^1.0.0",
+ "latest-version": "^3.0.0",
+ "semver-diff": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ }
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ }
+ }
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "requires": {
+ "prepend-http": "^1.0.1"
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8="
+ },
+ "useragent": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz",
+ "integrity": "sha1-IX+UOtVAyyEoZYqyP8lg9qiMmXI=",
+ "requires": {
+ "lru-cache": "4.1.x",
+ "tmp": "0.0.x"
+ }
+ },
+ "util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha1-OqASW/5mikZy3liFfTrOJ+y3aQE=",
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE="
+ },
+ "v8-compile-cache": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz",
+ "integrity": "sha1-pCiyi7JnkHNMT8i8n6EG/M6/amw="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
+ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
+ },
+ "vulcanize": {
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/vulcanize/-/vulcanize-1.16.0.tgz",
+ "integrity": "sha1-sM47AETRlK1JCK5PGmxhEKbk1eY=",
+ "requires": {
+ "dom5": "^1.3.1",
+ "es6-promise": "^2.1.0",
+ "hydrolysis": "^1.19.1",
+ "nopt": "^3.0.1",
+ "path-posix": "^1.0.0"
+ }
+ },
+ "watchpack": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
+ "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=",
+ "requires": {
+ "chokidar": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0"
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "webpack": {
+ "version": "4.23.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.23.1.tgz",
+ "integrity": "sha1-23RnsRZ3GuAgxYvf4qCCJ4W7gjk=",
+ "requires": {
+ "@webassemblyjs/ast": "1.7.10",
+ "@webassemblyjs/helper-module-context": "1.7.10",
+ "@webassemblyjs/wasm-edit": "1.7.10",
+ "@webassemblyjs/wasm-parser": "1.7.10",
+ "acorn": "^5.6.2",
+ "acorn-dynamic-import": "^3.0.0",
+ "ajv": "^6.1.0",
+ "ajv-keywords": "^3.1.0",
+ "chrome-trace-event": "^1.0.0",
+ "enhanced-resolve": "^4.1.0",
+ "eslint-scope": "^4.0.0",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^2.3.0",
+ "loader-utils": "^1.1.0",
+ "memory-fs": "~0.4.1",
+ "micromatch": "^3.1.8",
+ "mkdirp": "~0.5.0",
+ "neo-async": "^2.5.0",
+ "node-libs-browser": "^2.0.0",
+ "schema-utils": "^0.4.4",
+ "tapable": "^1.1.0",
+ "uglifyjs-webpack-plugin": "^1.2.4",
+ "watchpack": "^1.5.0",
+ "webpack-sources": "^1.3.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz",
+ "integrity": "sha1-JH1SdBENtlNwa1UPzCt5fKKM/Fk=",
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-keywords": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+ "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo="
+ },
+ "eslint-scope": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
+ "integrity": "sha1-UL8wcekzi83EMzF5Sgy1M/ATYXI=",
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA="
+ }
+ }
+ },
+ "webpack-command": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/webpack-command/-/webpack-command-0.4.1.tgz",
+ "integrity": "sha1-P4iq6HwoKS7QqXKTYVouliocZvQ=",
+ "requires": {
+ "@webpack-contrib/config-loader": "^1.2.0",
+ "@webpack-contrib/schema-utils": "^1.0.0-beta.0",
+ "camelcase": "^5.0.0",
+ "chalk": "^2.3.2",
+ "debug": "^3.1.0",
+ "decamelize": "^2.0.0",
+ "enhanced-resolve": "^4.0.0",
+ "import-local": "^1.0.0",
+ "isobject": "^3.0.1",
+ "loader-utils": "^1.1.0",
+ "log-symbols": "^2.2.0",
+ "loud-rejection": "^1.6.0",
+ "meant": "^1.0.1",
+ "meow": "^5.0.0",
+ "merge-options": "^1.0.0",
+ "object.values": "^1.0.4",
+ "opn": "^5.3.0",
+ "ora": "^2.1.0",
+ "plur": "^3.0.0",
+ "pretty-bytes": "^5.0.0",
+ "strip-ansi": "^4.0.0",
+ "text-table": "^0.2.0",
+ "titleize": "^1.0.1",
+ "update-notifier": "^2.3.0",
+ "v8-compile-cache": "^2.0.0",
+ "webpack-log": "^1.1.2",
+ "wordwrap": "^1.0.0"
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.6.2.tgz",
+ "integrity": "sha1-83onrXwJzX3GfNl2VUE6uqH1WUI=",
+ "requires": {
+ "memory-fs": "^0.4.1",
+ "mime": "^2.3.1",
+ "range-parser": "^1.0.3",
+ "webpack-log": "^2.0.0"
+ },
+ "dependencies": {
+ "webpack-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+ "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=",
+ "requires": {
+ "ansi-colors": "^3.0.0",
+ "uuid": "^3.3.2"
+ }
+ }
+ }
+ },
+ "webpack-log": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.2.0.tgz",
+ "integrity": "sha1-pLNM2msitRjbsKsy5WeWLVxypD0=",
+ "requires": {
+ "chalk": "^2.1.0",
+ "log-symbols": "^2.1.0",
+ "loglevelnext": "^1.0.1",
+ "uuid": "^3.1.0"
+ }
+ },
+ "webpack-sources": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
+ "integrity": "sha1-KijcufH0X+lg2PFJMlK17mUw+oU=",
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "widest-line": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
+ "integrity": "sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w=",
+ "requires": {
+ "string-width": "^2.1.1"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
+ },
+ "worker-farm": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
+ "integrity": "sha1-rsxAWXb6talVJhgIRvDboojzpKA=",
+ "requires": {
+ "errno": "~0.1.7"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
+ "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ws": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ="
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4="
+ },
+ "xregexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz",
+ "integrity": "sha1-5pgYneSd0qGMxWh7BeF8jkOUMCA="
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms="
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
+ "yargs-parser": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
+ "integrity": "sha1-cgImW4n36eny5XZeD+c1qQXtuqg=",
+ "requires": {
+ "camelcase": "^4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+ }
+ }
+ },
+ "yauzl": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
+ "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
+ "requires": {
+ "fd-slicer": "~1.0.1"
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
+ }
+ }
+}
diff --git a/systrace/catapult/common/node_runner/node_runner/package.json b/systrace/catapult/common/node_runner/node_runner/package.json
index 27d0325..526650d 100644
--- a/systrace/catapult/common/node_runner/node_runner/package.json
+++ b/systrace/catapult/common/node_runner/node_runner/package.json
@@ -8,15 +8,57 @@
},
"main": "index.js",
"scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
+ "test": "cd ../../../dashboard/dashboard/spa && karma start --coverage --no-colors"
},
"author": "The Chromium Authors",
"license": "BSD-2-Clause",
"gypfile": false,
"private": true,
"dependencies": {
- "eslint": "^3.14.1",
+ "dot-prop-immutable": "1.5.0",
+ "@chopsui/result-channel": "0.1.0",
+ "@chopsui/batch-iterator": "0.1.0",
+ "@chopsui/chops-button": "0.1.11",
+ "@chopsui/chops-checkbox": "0.1.11",
+ "@chopsui/chops-input": "0.1.11",
+ "@chopsui/chops-loading": "0.1.11",
+ "@chopsui/chops-radio": "0.1.11",
+ "@chopsui/chops-radio-group": "0.1.11",
+ "@chopsui/chops-switch": "0.1.11",
+ "@chopsui/chops-tab": "0.1.11",
+ "@chopsui/chops-tab-bar": "0.1.11",
+ "@chopsui/chops-textarea": "0.1.11",
+ "@chopsui/tsmon-client": "0.0.1",
+ "@chopsui/chops-header": "0.1.5",
+ "@chopsui/chops-signin": "0.1.5",
+ "@polymer/app-route": "^3.0.0",
+ "@polymer/iron-collapse": "^3.0.0",
+ "@polymer/iron-icon": "^3.0.0",
+ "@polymer/iron-iconset-svg": "^3.0.0",
+ "@polymer/polymer": "^3.0.0",
+ "chai": "^4.0.2",
+ "dom5": "^1.0.0",
+ "escodegen": "^1.11.0",
+ "eslint": "^4.0.0",
"eslint-config-google": "^0.6.0",
- "eslint-plugin-html": "^2.0.0"
+ "eslint-plugin-html": "^4.0.0",
+ "espree": "^3.0.0",
+ "istanbul-instrumenter-loader": "^3.0.1",
+ "lit-element": "^2.0.0",
+ "karma": "^4.0.0",
+ "karma-chrome-launcher": "^2.2.0",
+ "karma-coverage": "^1.1.2",
+ "karma-mocha": "^1.3.0",
+ "karma-sinon": "^1.0.5",
+ "karma-sourcemap-loader": "^0.3.7",
+ "karma-webpack": "4.0.0-rc.6",
+ "mocha": "^5.2.0",
+ "path": "^0.12.7",
+ "puppeteer": "^1.10.0",
+ "redux": "^4.0.0",
+ "sinon": "^7.2.3",
+ "vulcanize": "^1.16.0",
+ "webpack": "^4.16.1",
+ "webpack-command": "^0.4.1"
}
}
diff --git a/systrace/catapult/common/py_trace_event/bin/run_tests b/systrace/catapult/common/py_trace_event/bin/run_tests
new file mode 100755
index 0000000..b9e1cbe
--- /dev/null
+++ b/systrace/catapult/common/py_trace_event/bin/run_tests
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+# Copyright (c) 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import sys
+
+_CATAPULT_PATH = os.path.abspath(
+ os.path.join(os.path.dirname(__file__), '..', '..', '..'))
+
+_PY_TRACE_EVENT_PATH = os.path.abspath(
+ os.path.join(os.path.dirname(__file__), '..'))
+
+
+def _RunTestsOrDie(top_level_dir):
+ # Need everything in one process for tracing to work.
+ exit_code = run_with_typ.Run(
+ top_level_dir, path=[_PY_TRACE_EVENT_PATH], jobs=1)
+ if exit_code:
+ sys.exit(exit_code)
+
+
+def _AddToPathIfNeeded(path):
+ if path not in sys.path:
+ sys.path.insert(0, path)
+
+
+if __name__ == '__main__':
+ _AddToPathIfNeeded(_CATAPULT_PATH)
+
+ from catapult_build import run_with_typ
+
+ _RunTestsOrDie(_PY_TRACE_EVENT_PATH)
+
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/__init__.py b/systrace/catapult/common/py_trace_event/py_trace_event/__init__.py
index b8b6630..2cd8dd1 100644
--- a/systrace/catapult/common/py_trace_event/py_trace_event/__init__.py
+++ b/systrace/catapult/common/py_trace_event/py_trace_event/__init__.py
@@ -6,4 +6,7 @@ import sys
SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__))
PY_UTILS = os.path.abspath(os.path.join(SCRIPT_DIR, '..', '..', 'py_utils'))
+PROTOBUF = os.path.abspath(os.path.join(
+ SCRIPT_DIR, '..', 'third_party', 'protobuf'))
sys.path.append(PY_UTILS)
+sys.path.append(PROTOBUF)
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/run_tests b/systrace/catapult/common/py_trace_event/py_trace_event/run_tests
deleted file mode 100755
index 7f9673d..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/run_tests
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import logging
-import optparse
-import os
-import platform
-import re
-import sys
-import types
-import traceback
-import unittest
-
-
-def discover(dir, filters):
- if hasattr(unittest.TestLoader, 'discover'):
- return unittest.TestLoader().discover(dir, '*')
-
- # poor mans unittest.discover
- loader = unittest.TestLoader()
- subsuites = []
-
- for (dirpath, dirnames, filenames) in os.walk(dir):
- for filename in [x for x in filenames if re.match('.*_test\.py$', x)]:
- if filename.startswith('.') or filename.startswith('_'):
- continue
- fqn = dirpath.replace(
- '/', '.') + '.' + re.match('(.+)\.py$', filename).group(1)
-
- # load the test
- try:
- module = __import__(fqn,fromlist=[True])
- except:
- print "While importing [%s]\n" % fqn
- traceback.print_exc()
- continue
-
- def test_is_selected(name):
- for f in filters:
- if re.search(f,name):
- return True
- return False
-
- if hasattr(module, 'suite'):
- base_suite = module.suite()
- else:
- base_suite = loader.loadTestsFromModule(module)
- new_suite = unittest.TestSuite()
- for t in base_suite:
- if isinstance(t, unittest.TestSuite):
- for i in t:
- if test_is_selected(i.id()):
- new_suite.addTest(i)
- elif isinstance(t, unittest.TestCase):
- if test_is_selected(t.id()):
- new_suite.addTest(t)
- else:
- raise Exception("Wtf, expected TestSuite or TestCase, got %s" % t)
-
- if new_suite.countTestCases():
- subsuites.append(new_suite)
-
- return unittest.TestSuite(subsuites)
-
-
-def main():
- parser = optparse.OptionParser()
- parser.add_option(
- '-v', '--verbose', action='count', default=0,
- help='Increase verbosity level (repeat as needed)')
- parser.add_option('--debug', dest='debug', action='store_true', default=False,
- help='Break into pdb when an assertion fails')
- parser.add_option('--incremental', dest='incremental', action='store_true',
- default=False, help='Run tests one at a time.')
- parser.add_option('--stop', dest='stop_on_error', action='store_true',
- default=False, help='Stop running tests on error.')
- (options, args) = parser.parse_args()
-
- if options.verbose >= 2:
- logging.basicConfig(level=logging.DEBUG)
- elif options.verbose:
- logging.basicConfig(level=logging.INFO)
- else:
- logging.basicConfig(level=logging.WARNING)
-
- # install hook on set_trace if --debug
- if options.debug:
- import exceptions
- class DebuggingAssertionError(exceptions.AssertionError):
- def __init__(self, *args):
- exceptions.AssertionError.__init__(self, *args)
- print "Assertion failed, entering PDB..."
- import pdb
- if hasattr(sys, '_getframe'):
- pdb.Pdb().set_trace(sys._getframe().f_back.f_back)
- else:
- pdb.set_trace()
- unittest.TestCase.failureException = DebuggingAssertionError
-
- def hook(*args):
- import traceback, pdb
- traceback.print_exception(*args)
- pdb.pm()
- sys.excepthook = hook
-
- import browser
- browser.debug_mode = True
-
- else:
- def hook(exc, value, tb):
- import traceback
- if not str(value).startswith("_noprint"):
- traceback.print_exception(exc, value, tb)
- import src.message_loop
- if src.message_loop.is_main_loop_running():
- if not str(value).startswith("_noprint"):
- print "Untrapped exception! Exiting message loop with exception."
- src.message_loop.quit_main_loop(quit_with_exception=True)
-
- sys.excepthook = hook
-
- # make sure cwd is the base directory!
- os.chdir(os.path.dirname(__file__))
-
- if len(args) > 0:
- suites = discover('trace_event_impl', args)
- else:
- suites = discover('trace_event_impl', ['.*'])
-
- r = unittest.TextTestRunner()
- if not options.incremental:
- res = r.run(suites)
- if res.wasSuccessful():
- return 0
- return 255
- else:
- ok = True
- for s in suites:
- if isinstance(s, unittest.TestSuite):
- for t in s:
- print '--------------------------------------------------------------'
- print 'Running %s' % str(t)
- res = r.run(t)
- if not res.wasSuccessful():
- ok = False
- if options.stop_on_error:
- break
- if ok == False and options.stop_on_error:
- break
- else:
- res = r.run(s)
- if not res.wasSuccessful():
- ok = False
- if options.stop_on_error:
- break
- if ok:
- return 0
- return 255
-
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event.py
index 7745963..f87c278 100644
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event.py
+++ b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event.py
@@ -66,15 +66,20 @@ def trace_can_enable():
# used in class definition scope.
TracedMetaClass = type
+
if trace_event_impl:
import time
+ # Trace file formats
+ JSON = trace_event_impl.JSON
+ JSON_WITH_METADATA = trace_event_impl.JSON_WITH_METADATA
+ PROTOBUF = trace_event_impl.PROTOBUF
def trace_is_enabled():
return trace_event_impl.trace_is_enabled()
- def trace_enable(logfile):
- return trace_event_impl.trace_enable(logfile)
+ def trace_enable(logfile, format=None):
+ return trace_event_impl.trace_enable(logfile, format)
def trace_disable():
return trace_event_impl.trace_disable()
@@ -94,6 +99,9 @@ if trace_event_impl:
trace_event_impl.add_trace_event("M", trace_time.Now(), "__metadata",
"thread_name", {"name": thread_name})
+ def trace_add_benchmark_metadata(*args, **kwargs):
+ trace_event_impl.trace_add_benchmark_metadata(*args, **kwargs)
+
def trace(name, **kwargs):
return trace_event_impl.trace(name, **kwargs)
@@ -124,6 +132,11 @@ if trace_event_impl:
else:
import contextlib
+ # Trace file formats
+ JSON = None
+ JSON_WITH_METADATA = None
+ PROTOBUF = None
+
def trace_enable():
raise TraceException(
"Cannot enable trace_event. No trace_event_impl module found.")
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/decorators_test.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/decorators_test.py
index 5bb13ad..434a351 100644
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/decorators_test.py
+++ b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/decorators_test.py
@@ -47,7 +47,8 @@ class DecoratorTests(TraceTest):
def test_func_names_work(self):
- self.assertEquals('__main__.traced_func',
+ expected_method_name = __name__ + '.traced_func'
+ self.assertEquals(expected_method_name,
self._get_decorated_method_name(traced_func))
def test_method_names_work(self):
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log.py
index 2d69f08..7af86da 100644
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log.py
+++ b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log.py
@@ -7,24 +7,47 @@ import os
import sys
import time
import threading
+import multiprocessing
+import multiprocessing_shim
+from py_trace_event.trace_event_impl import perfetto_trace_writer
from py_trace_event import trace_time
from py_utils import lock
+# Trace file formats:
+
+# Legacy format: json list of events.
+# Events can be written from multiple processes, but since no process
+# can be sure that it is the last one, nobody writes the closing ']'.
+# So the resulting file is not technically correct json.
+JSON = "json"
+
+# Full json with events and metadata.
+# This format produces correct json ready to feed into TraceDataBuilder.
+# Note that it is the responsibility of the user of py_trace_event to make sure
+# that trace_disable() is called after all child processes have finished.
+JSON_WITH_METADATA = "json_with_metadata"
+
+# Perfetto protobuf trace format.
+PROTOBUF = "protobuf"
+
+
_lock = threading.Lock()
_enabled = False
_log_file = None
_cur_events = [] # events that have yet to be buffered
+_benchmark_metadata = {}
_tls = threading.local() # tls used to detect forking/etc
_atexit_regsitered_for_pid = None
_control_allowed = True
+_original_multiprocessing_process = multiprocessing.Process
class TraceException(Exception):
pass
@@ -48,11 +71,64 @@ def _disallow_tracing_control():
global _control_allowed
_control_allowed = False
-def trace_enable(log_file=None):
- _trace_enable(log_file)
+def trace_enable(log_file=None, format=None):
+ """ Enable tracing.
+
+ Args:
+ log_file: file to write trace into. Can be a file-like object,
+ a name of file, or None. If None, file name is constructed
+ from executable name.
+ format: trace file format. See trace_event.py for available options.
+ """
+ if format is None:
+ format = JSON
+ _trace_enable(log_file, format)
+
+def _write_header():
+ tid = threading.current_thread().ident
+ if not tid:
+ tid = os.getpid()
+
+ if _format == PROTOBUF:
+ tid = threading.current_thread().ident
+ perfetto_trace_writer.write_thread_descriptor_event(
+ output=_log_file,
+ pid=os.getpid(),
+ tid=tid,
+ ts=trace_time.Now(),
+ )
+ perfetto_trace_writer.write_event(
+ output=_log_file,
+ ph="M",
+ category="process_argv",
+ name="process_argv",
+ ts=trace_time.Now(),
+ args=sys.argv,
+ tid=tid,
+ )
+ else:
+ if _format == JSON:
+ _log_file.write('[')
+ elif _format == JSON_WITH_METADATA:
+ _log_file.write('{"traceEvents": [\n')
+ else:
+ raise TraceException("Unknown format: %s" % _format)
+ json.dump({
+ "ph": "M",
+ "category": "process_argv",
+ "pid": os.getpid(),
+ "tid": threading.current_thread().ident,
+ "ts": trace_time.Now(),
+ "name": "process_argv",
+ "args": {"argv": sys.argv},
+ }, _log_file)
+ _log_file.write('\n')
+
@_locked
-def _trace_enable(log_file=None):
+def _trace_enable(log_file=None, format=None):
+ global _format
+ _format = format
global _enabled
if _enabled:
raise TraceException("Already enabled")
@@ -65,15 +141,18 @@ def _trace_enable(log_file=None):
n = 'trace_event'
else:
n = sys.argv[0]
- log_file = open("%s.json" % n, "ab", False)
- _note("trace_event: tracelog name is %s.json" % n)
+ if _format == PROTOBUF:
+ log_file = open("%s.pb" % n, "ab", False)
+ else:
+ log_file = open("%s.json" % n, "ab", False)
elif isinstance(log_file, basestring):
- _note("trace_event: tracelog name is %s" % log_file)
log_file = open("%s" % log_file, "ab", False)
elif not hasattr(log_file, 'fileno'):
raise TraceException(
"Log file must be None, a string, or file-like object with a fileno()")
+ _note("trace_event: tracelog name is %s" % log_file)
+
_log_file = log_file
with lock.FileLock(_log_file, lock.LOCK_EX):
_log_file.seek(0, os.SEEK_END)
@@ -82,19 +161,13 @@ def _trace_enable(log_file=None):
creator = lastpos == 0
if creator:
_note("trace_event: Opened new tracelog, lastpos=%i", lastpos)
- _log_file.write('[')
-
- tid = threading.current_thread().ident
- if not tid:
- tid = os.getpid()
- x = {"ph": "M", "category": "process_argv",
- "pid": os.getpid(), "tid": threading.current_thread().ident,
- "ts": trace_time.Now(),
- "name": "process_argv", "args": {"argv": sys.argv}}
- _log_file.write("%s\n" % json.dumps(x))
+ _write_header()
else:
_note("trace_event: Opened existing tracelog")
_log_file.flush()
+ # Monkeypatch in our process replacement for the multiprocessing.Process class
+ if multiprocessing.Process != multiprocessing_shim.ProcessShim:
+ multiprocessing.Process = multiprocessing_shim.ProcessShim
@_locked
def trace_flush():
@@ -110,22 +183,52 @@ def trace_disable():
return
_enabled = False
_flush(close=True)
+ multiprocessing.Process = _original_multiprocessing_process
+
+def _write_cur_events():
+ if _format == PROTOBUF:
+ for e in _cur_events:
+ perfetto_trace_writer.write_event(
+ output=_log_file,
+ ph=e["ph"],
+ category=e["category"],
+ name=e["name"],
+ ts=e["ts"],
+ args=e["args"],
+ tid=threading.current_thread().ident,
+ )
+ elif _format in (JSON, JSON_WITH_METADATA):
+ for e in _cur_events:
+ _log_file.write(",\n")
+ json.dump(e, _log_file)
+ else:
+ raise TraceException("Unknown format: %s" % _format)
+ del _cur_events[:]
+
+def _write_footer():
+ if _format in [JSON, PROTOBUF]:
+ # In JSON format we might not be the only process writing to this logfile.
+ # So, we will simply close the file rather than writing the trailing ] that
+ # it technically requires. The trace viewer understands this and
+ # will insert a trailing ] during loading.
+ # In PROTOBUF format there's no need for a footer. The metadata has already
+ # been written in a special proto message.
+ pass
+ elif _format == JSON_WITH_METADATA:
+ _log_file.write('],\n"metadata": ')
+ json.dump(_benchmark_metadata, _log_file)
+ _log_file.write('}')
+ else:
+ raise TraceException("Unknown format: %s" % _format)
def _flush(close=False):
global _log_file
with lock.FileLock(_log_file, lock.LOCK_EX):
_log_file.seek(0, os.SEEK_END)
if len(_cur_events):
- _log_file.write(",\n")
- _log_file.write(",\n".join([json.dumps(e) for e in _cur_events]))
- del _cur_events[:]
-
+ _write_cur_events()
if close:
- # We might not be the only process writing to this logfile. So,
- # we will simply close the file rather than writign the trailing ] that
- # it technically requires. The trace viewer understands that this may
- # happen and will insert a trailing ] during loading.
- pass
+ _write_footer()
_log_file.flush()
if close:
@@ -157,13 +260,15 @@ def add_trace_event(ph, ts, category, name, args=None):
tid = os.getpid()
_tls.tid = tid
- _cur_events.append({"ph": ph,
- "category": category,
- "pid": _tls.pid,
- "tid": _tls.tid,
- "ts": ts,
- "name": name,
- "args": args or {}});
+ _cur_events.append({
+ "ph": ph,
+ "category": category,
+ "pid": _tls.pid,
+ "tid": _tls.tid,
+ "ts": ts,
+ "name": name,
+ "args": args or {},
+ });
def trace_begin(name, args=None):
add_trace_event("B", trace_time.Now(), "python", name, args)
@@ -175,6 +280,82 @@ def trace_set_thread_name(thread_name):
add_trace_event("M", trace_time.Now(), "__metadata", "thread_name",
{"name": thread_name})
+def trace_add_benchmark_metadata(
+ benchmark_start_time_us,
+ story_run_time_us,
+ benchmark_name,
+ benchmark_description,
+ story_name,
+ story_tags,
+ story_run_index,
+ label=None,
+ had_failures=None,
+):
+ """ Add benchmark metadata to be written to trace file.
+
+ Args:
+ benchmark_start_time_us: Benchmark start time in microseconds.
+ story_run_time_us: Story start time in microseconds.
+ benchmark_name: Name of the benchmark.
+ benchmark_description: Description of the benchmark.
+ story_name: Name of the story.
+ story_tags: List of story tags.
+ story_run_index: Index of the story run.
+ label: Optional label.
+ had_failures: Whether this story run failed.
+ """
+ global _benchmark_metadata
+ if _format == PROTOBUF:
+ # Write metadata immediately.
+ perfetto_trace_writer.write_metadata(
+ output=_log_file,
+ benchmark_start_time_us=benchmark_start_time_us,
+ story_run_time_us=story_run_time_us,
+ benchmark_name=benchmark_name,
+ benchmark_description=benchmark_description,
+ story_name=story_name,
+ story_tags=story_tags,
+ story_run_index=story_run_index,
+ label=label,
+ had_failures=had_failures,
+ )
+ elif _format == JSON_WITH_METADATA:
+ # Store metadata to write it in the footer.
+ telemetry_metadata_for_json = {
+ "benchmarkStart": benchmark_start_time_us / 1000.0,
+ "traceStart": story_run_time_us / 1000.0,
+ "benchmarks": [benchmark_name],
+ "benchmarkDescriptions": [benchmark_description],
+ "stories": [story_name],
+ "storyTags": story_tags,
+ "storysetRepeats": [story_run_index],
+ }
+ if label:
+ telemetry_metadata_for_json["labels"] = [label]
+ if had_failures:
+ telemetry_metadata_for_json["hadFailures"] = [had_failures]
+
+ _benchmark_metadata = {
+ # TODO(crbug.com/948633): For right now, we use "TELEMETRY" as the
+ # clock domain to guarantee that Telemetry is given its own clock
+ # domain. Telemetry isn't really a clock domain, though: it's a
+ # system that USES a clock domain like LINUX_CLOCK_MONOTONIC or
+ # WIN_QPC. However, there's a chance that a Telemetry controller
+ # running on Linux (using LINUX_CLOCK_MONOTONIC) is interacting
+ # with an Android phone (also using LINUX_CLOCK_MONOTONIC, but
+ # on a different machine). The current logic collapses clock
+ # domains based solely on the clock domain string, but we really
+ # should to collapse based on some (device ID, clock domain ID)
+ # tuple. Giving Telemetry its own clock domain is a work-around
+ # for this.
+ "clock-domain": "TELEMETRY",
+ "telemetry": telemetry_metadata_for_json,
+ }
+ elif _format == JSON:
+ raise TraceException("Can't write metadata in JSON format")
+ else:
+ raise TraceException("Unknown format: %s" % _format)
+
def _trace_disable_atexit():
trace_disable()
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log_io_test.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log_io_test.py
index 99a0621..6c03ea8 100644
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log_io_test.py
+++ b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log_io_test.py
@@ -5,38 +5,34 @@
import logging
import os
import sys
-import tempfile
import unittest
from log import *
from parsed_trace_events import *
+from py_utils import tempfile_ext
class LogIOTest(unittest.TestCase):
def test_enable_with_file(self):
- file = tempfile.NamedTemporaryFile()
- trace_enable(open(file.name, 'w+'))
- trace_disable()
- e = ParsedTraceEvents(trace_filename = file.name)
- file.close()
- self.assertTrue(len(e) > 0)
+ with tempfile_ext.TemporaryFileName() as filename:
+ trace_enable(open(filename, 'w+'))
+ trace_disable()
+ e = ParsedTraceEvents(trace_filename=filename)
+ self.assertTrue(len(e) > 0)
def test_enable_with_filename(self):
- file = tempfile.NamedTemporaryFile()
- trace_enable(file.name)
- trace_disable()
- e = ParsedTraceEvents(trace_filename = file.name)
- file.close()
- self.assertTrue(len(e) > 0)
+ with tempfile_ext.TemporaryFileName() as filename:
+ trace_enable(filename)
+ trace_disable()
+ e = ParsedTraceEvents(trace_filename=filename)
+ self.assertTrue(len(e) > 0)
def test_enable_with_implicit_filename(self):
expected_filename = "%s.json" % sys.argv[0]
def do_work():
- file = tempfile.NamedTemporaryFile()
trace_enable()
trace_disable()
- e = ParsedTraceEvents(trace_filename = expected_filename)
- file.close()
+ e = ParsedTraceEvents(trace_filename=expected_filename)
self.assertTrue(len(e) > 0)
try:
do_work()
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/meta_class.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/meta_class.py
index 4ede79b..7aaa3fa 100644
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/meta_class.py
+++ b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/meta_class.py
@@ -10,7 +10,8 @@ from py_trace_event.trace_event_impl import decorators
class TracedMetaClass(type):
def __new__(cls, name, bases, attrs):
for attr_name, attr_value in attrs.iteritems():
- if isinstance(attr_value, types.FunctionType):
+ if (not attr_name.startswith('_') and
+ isinstance(attr_value, types.FunctionType)):
attrs[attr_name] = decorators.traced(attr_value)
return super(TracedMetaClass, cls).__new__(cls, name, bases, attrs)
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/multiprocessing_shim.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/multiprocessing_shim.py
index 9796bdf..c2295ed 100644
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/multiprocessing_shim.py
+++ b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/multiprocessing_shim.py
@@ -86,7 +86,3 @@ class ProcessShim():
def __repr__(self):
return self._proc.__repr__()
-
-# Monkeypatch in our process replacement.
-if multiprocessing.Process != ProcessShim:
- multiprocessing.Process = ProcessShim
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_proto_classes.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_proto_classes.py
new file mode 100644
index 0000000..2da179b
--- /dev/null
+++ b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_proto_classes.py
@@ -0,0 +1,222 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+""" Classes representing perfetto trace protobuf messages.
+
+This module makes use of neither python-protobuf library nor python classes
+compiled from .proto definitions, because currently there's no way to
+deploy those to all the places where telemetry is run.
+
+TODO(crbug.com/944078): Remove this module after the python-protobuf library
+is deployed to all the bots.
+
+Definitions of perfetto messages can be found here:
+https://android.googlesource.com/platform/external/perfetto/+/refs/heads/master/protos/perfetto/trace/
+"""
+
+import encoder
+import wire_format
+
+
+class TracePacket(object):
+ def __init__(self):
+ self.interned_data = None
+ self.thread_descriptor = None
+ self.incremental_state_cleared = None
+ self.track_event = None
+ self.trusted_packet_sequence_id = None
+ self.chrome_benchmark_metadata = None
+
+ def encode(self):
+ parts = []
+ if self.trusted_packet_sequence_id is not None:
+ writer = encoder.UInt32Encoder(10, False, False)
+ writer(parts.append, self.trusted_packet_sequence_id)
+ if self.track_event is not None:
+ tag = encoder.TagBytes(11, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ data = self.track_event.encode()
+ length = encoder._VarintBytes(len(data))
+ parts += [tag, length, data]
+ if self.interned_data is not None:
+ tag = encoder.TagBytes(12, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ data = self.interned_data.encode()
+ length = encoder._VarintBytes(len(data))
+ parts += [tag, length, data]
+ if self.incremental_state_cleared is not None:
+ writer = encoder.BoolEncoder(41, False, False)
+ writer(parts.append, self.incremental_state_cleared)
+ if self.thread_descriptor is not None:
+ tag = encoder.TagBytes(44, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ data = self.thread_descriptor.encode()
+ length = encoder._VarintBytes(len(data))
+ parts += [tag, length, data]
+ if self.chrome_benchmark_metadata is not None:
+ tag = encoder.TagBytes(48, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ data = self.chrome_benchmark_metadata.encode()
+ length = encoder._VarintBytes(len(data))
+ parts += [tag, length, data]
+
+ return b"".join(parts)
+
+
+class InternedData(object):
+ def __init__(self):
+ self.event_category = None
+ self.legacy_event_name = None
+
+ def encode(self):
+ parts = []
+ if self.event_category is not None:
+ tag = encoder.TagBytes(1, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ data = self.event_category.encode()
+ length = encoder._VarintBytes(len(data))
+ parts += [tag, length, data]
+ if self.legacy_event_name is not None:
+ tag = encoder.TagBytes(2, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ data = self.legacy_event_name.encode()
+ length = encoder._VarintBytes(len(data))
+ parts += [tag, length, data]
+
+ return b"".join(parts)
+
+
+class EventCategory(object):
+ def __init__(self):
+ self.iid = None
+ self.name = None
+
+ def encode(self):
+ if (self.iid is None or self.name is None):
+ raise RuntimeError("Missing mandatory fields.")
+
+ parts = []
+ writer = encoder.UInt32Encoder(1, False, False)
+ writer(parts.append, self.iid)
+ writer = encoder.StringEncoder(2, False, False)
+ writer(parts.append, self.name)
+
+ return b"".join(parts)
+
+
+LegacyEventName = EventCategory
+
+
+class ThreadDescriptor(object):
+ def __init__(self):
+ self.pid = None
+ self.tid = None
+ self.reference_timestamp_us = None
+
+ def encode(self):
+ if (self.pid is None or self.tid is None or
+ self.reference_timestamp_us is None):
+ raise RuntimeError("Missing mandatory fields.")
+
+ parts = []
+ writer = encoder.UInt32Encoder(1, False, False)
+ writer(parts.append, self.pid)
+ writer = encoder.UInt32Encoder(2, False, False)
+ writer(parts.append, self.tid)
+ writer = encoder.Int64Encoder(6, False, False)
+ writer(parts.append, self.reference_timestamp_us)
+
+ return b"".join(parts)
+
+
+class TrackEvent(object):
+ def __init__(self):
+ self.timestamp_absolute_us = None
+ self.timestamp_delta_us = None
+ self.legacy_event = None
+ self.category_iids = None
+
+ def encode(self):
+ parts = []
+ if self.timestamp_delta_us is not None:
+ writer = encoder.Int64Encoder(1, False, False)
+ writer(parts.append, self.timestamp_delta_us)
+ if self.category_iids is not None:
+ writer = encoder.UInt32Encoder(3, is_repeated=True, is_packed=False)
+ writer(parts.append, self.category_iids)
+ if self.legacy_event is not None:
+ tag = encoder.TagBytes(6, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ data = self.legacy_event.encode()
+ length = encoder._VarintBytes(len(data))
+ parts += [tag, length, data]
+ if self.timestamp_absolute_us is not None:
+ writer = encoder.Int64Encoder(16, False, False)
+ writer(parts.append, self.timestamp_absolute_us)
+
+ return b"".join(parts)
+
+
+class LegacyEvent(object):
+ def __init__(self):
+ self.phase = None
+ self.name_iid = None
+
+ def encode(self):
+ parts = []
+ if self.name_iid is not None:
+ writer = encoder.UInt32Encoder(1, False, False)
+ writer(parts.append, self.name_iid)
+ if self.phase is not None:
+ writer = encoder.Int32Encoder(2, False, False)
+ writer(parts.append, self.phase)
+
+ return b"".join(parts)
+
+
+class ChromeBenchmarkMetadata(object):
+ def __init__(self):
+ self.benchmark_start_time_us = None
+ self.story_run_time_us = None
+ self.benchmark_name = None
+ self.benchmark_description = None
+ self.story_name = None
+ self.story_tags = None
+ self.story_run_index = None
+ self.label = None
+ self.had_failures = None
+
+ def encode(self):
+ parts = []
+ if self.benchmark_start_time_us is not None:
+ writer = encoder.Int64Encoder(1, False, False)
+ writer(parts.append, self.benchmark_start_time_us)
+ if self.story_run_time_us is not None:
+ writer = encoder.Int64Encoder(2, False, False)
+ writer(parts.append, self.story_run_time_us)
+ if self.benchmark_name is not None:
+ writer = encoder.StringEncoder(3, False, False)
+ writer(parts.append, self.benchmark_name)
+ if self.benchmark_description is not None:
+ writer = encoder.StringEncoder(4, False, False)
+ writer(parts.append, self.benchmark_description)
+ if self.label is not None:
+ writer = encoder.StringEncoder(5, False, False)
+ writer(parts.append, self.label)
+ if self.story_name is not None:
+ writer = encoder.StringEncoder(6, False, False)
+ writer(parts.append, self.story_name)
+ if self.story_tags is not None:
+ writer = encoder.StringEncoder(7, is_repeated=True, is_packed=False)
+ writer(parts.append, self.story_tags)
+ if self.story_run_index is not None:
+ writer = encoder.Int32Encoder(8, False, False)
+ writer(parts.append, self.story_run_index)
+ if self.had_failures is not None:
+ writer = encoder.BoolEncoder(9, False, False)
+ writer(parts.append, self.had_failures)
+
+ return b"".join(parts)
+
+
+def write_trace_packet(output, trace_packet):
+ tag = encoder.TagBytes(1, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ output.write(tag)
+ binary_data = trace_packet.encode()
+ encoder._EncodeVarint(output.write, len(binary_data))
+ output.write(binary_data)
+
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_trace_writer.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_trace_writer.py
new file mode 100644
index 0000000..3780953
--- /dev/null
+++ b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_trace_writer.py
@@ -0,0 +1,166 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+""" Functions to write trace data in perfetto protobuf format.
+"""
+
+import collections
+
+import perfetto_proto_classes as proto
+
+
+
+# Dicts of strings for interning.
+# Note that each thread has its own interning index.
+_interned_categories_by_tid = collections.defaultdict(dict)
+_interned_event_names_by_tid = collections.defaultdict(dict)
+
+# Trusted sequence ids from telemetry should not overlap with
+# trusted sequence ids from other trace producers. Chrome assigns
+# sequence ids incrementally starting from 1 and we expect all its ids
+# to be well below 10000. Starting from 2^20 will give us enough
+# confidence that it will not overlap.
+_next_sequence_id = 1<<20
+_sequence_ids = {}
+
+# Timestamp of the last event from each thread. Used for delta-encoding
+# of timestamps.
+_last_timestamps = {}
+
+
+def _get_sequence_id(tid):
+ global _sequence_ids
+ global _next_sequence_id
+ if tid not in _sequence_ids:
+ _sequence_ids[tid] = _next_sequence_id
+ _next_sequence_id += 1
+ return _sequence_ids[tid]
+
+
+def _intern_category(category, trace_packet, tid):
+ global _interned_categories_by_tid
+ categories = _interned_categories_by_tid[tid]
+ if category not in categories:
+ # note that interning indices start from 1
+ categories[category] = len(categories) + 1
+ if trace_packet.interned_data is None:
+ trace_packet.interned_data = proto.InternedData()
+ trace_packet.interned_data.event_category = proto.EventCategory()
+ trace_packet.interned_data.event_category.iid = categories[category]
+ trace_packet.interned_data.event_category.name = category
+ return categories[category]
+
+
+def _intern_event_name(event_name, trace_packet, tid):
+ global _interned_event_names_by_tid
+ event_names = _interned_event_names_by_tid[tid]
+ if event_name not in event_names:
+ # note that interning indices start from 1
+ event_names[event_name] = len(event_names) + 1
+ if trace_packet.interned_data is None:
+ trace_packet.interned_data = proto.InternedData()
+ trace_packet.interned_data.legacy_event_name = proto.LegacyEventName()
+ trace_packet.interned_data.legacy_event_name.iid = event_names[event_name]
+ trace_packet.interned_data.legacy_event_name.name = event_name
+ return event_names[event_name]
+
+
+def write_thread_descriptor_event(output, pid, tid, ts):
+ """ Write the first event in a sequence.
+
+ Call this function before writing any other events.
+ Note that this function is NOT thread-safe.
+
+ Args:
+ output: a file-like object to write events into.
+ pid: process ID.
+ tid: thread ID.
+ ts: timestamp in microseconds.
+ """
+ global _last_timestamps
+ ts_us = int(ts)
+ _last_timestamps[tid] = ts_us
+
+ thread_descriptor_packet = proto.TracePacket()
+ thread_descriptor_packet.trusted_packet_sequence_id = _get_sequence_id(tid)
+ thread_descriptor_packet.thread_descriptor = proto.ThreadDescriptor()
+ thread_descriptor_packet.thread_descriptor.pid = pid
+ # Thread ID from threading module doesn't fit into int32.
+ # But we don't need the exact thread ID, just some number to
+ # distinguish one thread from another. We assume that the last 31 bits
+ # will do for that purpose.
+ thread_descriptor_packet.thread_descriptor.tid = tid & 0x7FFFFFFF
+ thread_descriptor_packet.thread_descriptor.reference_timestamp_us = ts_us
+ thread_descriptor_packet.incremental_state_cleared = True;
+
+ proto.write_trace_packet(output, thread_descriptor_packet)
+
+
+def write_event(output, ph, category, name, ts, args, tid):
+ """ Write a trace event.
+
+ Note that this function is NOT thread-safe.
+
+ Args:
+ output: a file-like object to write events into.
+ ph: phase of event.
+ category: category of event.
+ name: event name.
+ ts: timestamp in microseconds.
+ args: this argument is currently ignored.
+ tid: thread ID.
+ """
+ del args # TODO(khokhlov): Encode args as DebugAnnotations.
+
+ global _last_timestamps
+ ts_us = int(ts)
+ delta_ts = ts_us - _last_timestamps[tid]
+
+ packet = proto.TracePacket()
+ packet.trusted_packet_sequence_id = _get_sequence_id(tid)
+ packet.track_event = proto.TrackEvent()
+
+ if delta_ts >= 0:
+ packet.track_event.timestamp_delta_us = delta_ts
+ _last_timestamps[tid] = ts_us
+ else:
+ packet.track_event.timestamp_absolute_us = ts_us
+
+ packet.track_event.category_iids = [_intern_category(category, packet, tid)]
+ legacy_event = proto.LegacyEvent()
+ legacy_event.phase = ord(ph)
+ legacy_event.name_iid = _intern_event_name(name, packet, tid)
+ packet.track_event.legacy_event = legacy_event
+ proto.write_trace_packet(output, packet)
+
+
+def write_metadata(
+ output,
+ benchmark_start_time_us,
+ story_run_time_us,
+ benchmark_name,
+ benchmark_description,
+ story_name,
+ story_tags,
+ story_run_index,
+ label=None,
+ had_failures=None,
+):
+ metadata = proto.ChromeBenchmarkMetadata()
+ metadata.benchmark_start_time_us = int(benchmark_start_time_us)
+ metadata.story_run_time_us = int(story_run_time_us)
+ metadata.benchmark_name = benchmark_name
+ metadata.benchmark_description = benchmark_description
+ metadata.story_name = story_name
+ metadata.story_tags = list(story_tags)
+ metadata.story_run_index = int(story_run_index)
+ if label is not None:
+ metadata.label = label
+ if had_failures is not None:
+ metadata.had_failures = had_failures
+
+ packet = proto.TracePacket()
+ packet.chrome_benchmark_metadata = metadata
+ proto.write_trace_packet(output, packet)
+
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_trace_writer_unittest.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_trace_writer_unittest.py
new file mode 100644
index 0000000..e49a0a4
--- /dev/null
+++ b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_trace_writer_unittest.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import unittest
+import StringIO
+
+from py_trace_event.trace_event_impl import perfetto_trace_writer
+
+
+class PerfettoTraceWriterTest(unittest.TestCase):
+ """ Tests functions that write perfetto protobufs.
+
+ TODO(crbug.com/944078): Switch to using python-protobuf library
+ and implement proper protobuf parsing then.
+ """
+
+
+ def testWriteThreadDescriptorEvent(self):
+ result = StringIO.StringIO()
+ perfetto_trace_writer.write_thread_descriptor_event(
+ output=result,
+ pid=1,
+ tid=2,
+ ts=1556716807306000,
+ )
+ expected_output = (
+ '\n\x17P\x80\x80@\xc8\x02\x01\xe2\x02\r\x08\x01\x10'
+ '\x020\x90\xf6\xc2\x82\xb6\xfa\xe1\x02'
+ )
+ self.assertEqual(expected_output, result.getvalue())
+
+ def testWriteTwoEvents(self):
+ result = StringIO.StringIO()
+ perfetto_trace_writer.write_thread_descriptor_event(
+ output=result,
+ pid=1,
+ tid=2,
+ ts=1556716807306000,
+ )
+ perfetto_trace_writer.write_event(
+ output=result,
+ ph="M",
+ category="category",
+ name="event_name",
+ ts=1556716807406000,
+ args={},
+ tid=2,
+ )
+ expected_output = (
+ '\n\x17P\x80\x80@\xc8\x02\x01\xe2\x02\r\x08\x01\x10'
+ '\x020\x90\xf6\xc2\x82\xb6\xfa\xe1\x02\n2P\x80\x80@Z\x0c\x08'
+ '\xa0\x8d\x06\x18\x012\x04\x08\x01\x10Mb\x1e\n\x0c\x08\x01'
+ '\x12\x08category\x12\x0e\x08\x01\x12\nevent_name'
+ )
+ self.assertEqual(expected_output, result.getvalue())
+
+ def testWriteMetadata(self):
+ result = StringIO.StringIO()
+ perfetto_trace_writer.write_metadata(
+ output=result,
+ benchmark_start_time_us=1556716807306000,
+ story_run_time_us=1556716807406000,
+ benchmark_name="benchmark",
+ benchmark_description="description",
+ story_name="story",
+ story_tags=["foo", "bar"],
+ story_run_index=0,
+ label="label",
+ had_failures=False,
+ )
+ expected_output = (
+ '\nI\x82\x03F\x08\x90\xf6\xc2\x82\xb6\xfa\xe1'
+ '\x02\x10\xb0\x83\xc9\x82\xb6\xfa\xe1\x02\x1a\tbenchmark"'
+ '\x0bdescription*\x05label2\x05story:\x03foo:\x03bar@\x00H\x00'
+ )
+ self.assertEqual(expected_output, result.getvalue())
+
+
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/trace_test.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/trace_test.py
index 7047e0e..1216037 100644
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/trace_test.py
+++ b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/trace_test.py
@@ -1,7 +1,6 @@
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import tempfile
import unittest
#from .log import *
@@ -9,6 +8,7 @@ import unittest
from log import *
from parsed_trace_events import *
+from py_utils import tempfile_ext
class TraceTest(unittest.TestCase):
def __init__(self, *args):
@@ -25,16 +25,16 @@ class TraceTest(unittest.TestCase):
Enables tracing, runs the provided callback, and if successful, returns a
TraceEvents object with the results.
"""
- self._file = tempfile.NamedTemporaryFile()
- trace_enable(open(self._file.name, 'a+'))
-
- try:
- cb()
- finally:
- trace_disable()
- e = ParsedTraceEvents(trace_filename = self._file.name)
- self._file.close()
- self._file = None
+ with tempfile_ext.TemporaryFileName() as filename:
+ self._file = open(filename, 'a+')
+ trace_enable(self._file)
+ try:
+ cb()
+ finally:
+ trace_disable()
+ e = ParsedTraceEvents(trace_filename=self._file.name)
+ self._file.close()
+ self._file = None
return e
@property
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_unittest.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_unittest.py
index f88ef95..9916c71 100644
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_unittest.py
+++ b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_unittest.py
@@ -8,34 +8,29 @@ import logging
import math
import multiprocessing
import os
-import tempfile
import time
import unittest
+import sys
from py_trace_event import trace_event
from py_trace_event import trace_time
from py_trace_event.trace_event_impl import log
+from py_trace_event.trace_event_impl import multiprocessing_shim
+from py_utils import tempfile_ext
class TraceEventTests(unittest.TestCase):
- def setUp(self):
- tf = tempfile.NamedTemporaryFile(delete=False)
- self._log_path = tf.name
- tf.close()
-
- def tearDown(self):
- if os.path.exists(self._log_path):
- os.remove(self._log_path)
-
@contextlib.contextmanager
- def _test_trace(self, disable=True):
- try:
- trace_event.trace_enable(self._log_path)
- yield
- finally:
- if disable:
- trace_event.trace_disable()
+ def _test_trace(self, disable=True, format=None):
+ with tempfile_ext.TemporaryFileName() as filename:
+ self._log_path = filename
+ try:
+ trace_event.trace_enable(self._log_path, format=format)
+ yield
+ finally:
+ if disable:
+ trace_event.trace_disable()
def testNoImpl(self):
orig_impl = trace_event.trace_event_impl
@@ -77,10 +72,15 @@ class TraceEventTests(unittest.TestCase):
assert False
def testDisable(self):
+ _old_multiprocessing_process = multiprocessing.Process
with self._test_trace(disable=False):
with open(self._log_path, 'r') as f:
self.assertTrue(trace_event.trace_is_enabled())
+ self.assertEqual(
+ multiprocessing.Process, multiprocessing_shim.ProcessShim)
trace_event.trace_disable()
+ self.assertEqual(
+ multiprocessing.Process, _old_multiprocessing_process)
self.assertEquals(len(json.loads(f.read() + ']')), 1)
self.assertFalse(trace_event.trace_is_enabled())
@@ -187,6 +187,7 @@ class TraceEventTests(unittest.TestCase):
with open(self._log_path, 'r') as f:
log_output = json.loads(f.read() + ']')
self.assertEquals(len(log_output), 3)
+ expected_name = __name__ + '.test_decorator'
current_entry = log_output.pop(0)
self.assertEquals(current_entry['category'], 'process_argv')
self.assertEquals(current_entry['name'], 'process_argv')
@@ -194,12 +195,12 @@ class TraceEventTests(unittest.TestCase):
self.assertEquals(current_entry['ph'], 'M')
current_entry = log_output.pop(0)
self.assertEquals(current_entry['category'], 'python')
- self.assertEquals(current_entry['name'], '__main__.test_decorator')
+ self.assertEquals(current_entry['name'], expected_name)
self.assertEquals(current_entry['args']['this'], '\'that\'')
self.assertEquals(current_entry['ph'], 'B')
current_entry = log_output.pop(0)
self.assertEquals(current_entry['category'], 'python')
- self.assertEquals(current_entry['name'], '__main__.test_decorator')
+ self.assertEquals(current_entry['name'], expected_name)
self.assertEquals(current_entry['args'], {})
self.assertEquals(current_entry['ph'], 'E')
@@ -349,7 +350,8 @@ class TraceEventTests(unittest.TestCase):
self.assertLessEqual(one_open['ts'], two_open['ts'])
self.assertLessEqual(one_close['ts'], two_close['ts'])
- def testMultiprocess(self):
+ # TODO(khokhlov): Fix this test on Windows. See crbug.com/945819 for details.
+ def disabled_testMultiprocess(self):
def child_function():
with trace_event.trace('child_event'):
pass
@@ -392,6 +394,21 @@ class TraceEventTests(unittest.TestCase):
self.assertEquals(parent_close['name'], 'parent_event')
self.assertEquals(parent_close['ph'], 'E')
+ @unittest.skipIf(sys.platform == 'win32', 'crbug.com/945819')
+ def testTracingControlDisabledInChildButNotInParent(self):
+ def child(resp):
+ # test tracing is not controllable in the child
+ resp.put(trace_event.is_tracing_controllable())
+
+ with self._test_trace():
+ q = multiprocessing.Queue()
+ p = multiprocessing.Process(target=child, args=[q])
+ p.start()
+ # test tracing is controllable in the parent
+ self.assertTrue(trace_event.is_tracing_controllable())
+ self.assertFalse(q.get())
+ p.join()
+
def testMultiprocessExceptionInChild(self):
def bad_child():
trace_event.trace_disable()
@@ -418,6 +435,84 @@ class TraceEventTests(unittest.TestCase):
self.assertEquals(parent_close['name'], 'parent')
self.assertEquals(parent_close['ph'], 'E')
+ def testFormatJson(self):
+ with self._test_trace(format=trace_event.JSON):
+ trace_event.trace_flush()
+ with open(self._log_path, 'r') as f:
+ log_output = json.loads(f.read() + ']')
+ self.assertEquals(len(log_output), 1)
+ self.assertEquals(log_output[0]['ph'], 'M')
+
+ def testFormatJsonWithMetadata(self):
+ with self._test_trace(format=trace_event.JSON_WITH_METADATA):
+ trace_event.trace_disable()
+ with open(self._log_path, 'r') as f:
+ log_output = json.load(f)
+ self.assertEquals(len(log_output), 2)
+ events = log_output['traceEvents']
+ self.assertEquals(len(events), 1)
+ self.assertEquals(events[0]['ph'], 'M')
+
+ def testFormatProtobuf(self):
+ with self._test_trace(format=trace_event.PROTOBUF):
+ trace_event.trace_flush()
+ with open(self._log_path, 'r') as f:
+ self.assertGreater(len(f.read()), 0)
+
+ def testAddMetadata(self):
+ with self._test_trace(format=trace_event.JSON_WITH_METADATA):
+ trace_event.trace_add_benchmark_metadata(
+ benchmark_start_time_us=1000,
+ story_run_time_us=2000,
+ benchmark_name='benchmark',
+ benchmark_description='desc',
+ story_name='story',
+ story_tags=['tag1', 'tag2'],
+ story_run_index=0,
+ )
+ trace_event.trace_disable()
+ with open(self._log_path, 'r') as f:
+ log_output = json.load(f)
+ self.assertEquals(len(log_output), 2)
+ telemetry_metadata = log_output['metadata']['telemetry']
+ self.assertEquals(len(telemetry_metadata), 7)
+ self.assertEquals(telemetry_metadata['benchmarkStart'], 1)
+ self.assertEquals(telemetry_metadata['traceStart'], 2)
+ self.assertEquals(telemetry_metadata['benchmarks'], ['benchmark'])
+ self.assertEquals(telemetry_metadata['benchmarkDescriptions'], ['desc'])
+ self.assertEquals(telemetry_metadata['stories'], ['story'])
+ self.assertEquals(telemetry_metadata['storyTags'], ['tag1', 'tag2'])
+ self.assertEquals(telemetry_metadata['storysetRepeats'], [0])
+
+ def testAddMetadataProtobuf(self):
+ with self._test_trace(format=trace_event.PROTOBUF):
+ trace_event.trace_add_benchmark_metadata(
+ benchmark_start_time_us=1000,
+ story_run_time_us=2000,
+ benchmark_name='benchmark',
+ benchmark_description='desc',
+ story_name='story',
+ story_tags=['tag1', 'tag2'],
+ story_run_index=0,
+ )
+ trace_event.trace_disable()
+ with open(self._log_path, 'r') as f:
+ self.assertGreater(len(f.read()), 0)
+
+ def testAddMetadataInJsonFormatRaises(self):
+ with self._test_trace(format=trace_event.JSON):
+ with self.assertRaises(log.TraceException):
+ trace_event.trace_add_benchmark_metadata(
+ benchmark_start_time_us=1000,
+ story_run_time_us=2000,
+ benchmark_name='benchmark',
+ benchmark_description='description',
+ story_name='story',
+ story_tags=['tag1', 'tag2'],
+ story_run_index=0,
+ )
+
+
if __name__ == '__main__':
logging.getLogger().setLevel(logging.DEBUG)
unittest.main(verbosity=2)
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_time_unittest.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_time_unittest.py
index ab54bd6..bae7ea8 100644
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_time_unittest.py
+++ b/systrace/catapult/common/py_trace_event/py_trace_event/trace_time_unittest.py
@@ -86,7 +86,7 @@ class TimerTest(unittest.TestCase):
# Test requires QPC to be available on platform.
if not trace_time.IsQPCUsable():
return True
- self.assertGreater(trace_time.monotonic(), 0)
+ self.assertGreater(trace_time.Now(), 0)
# Works even if QPC would work.
def testGetWinNowFunction_GetTickCount(self):
@@ -94,7 +94,7 @@ class TimerTest(unittest.TestCase):
or sys.platform.startswith(trace_time._PLATFORMS['cygwin'])):
return True
with self.ReplaceQPCCheck(lambda: False):
- self.assertGreater(trace_time.monotonic(), 0)
+ self.assertGreater(trace_time.Now(), 0)
# Linux tests.
def testGetClockGetTimeClockNumber_linux(self):
diff --git a/systrace/catapult/common/py_trace_event/third_party/protobuf/README.chromium b/systrace/catapult/common/py_trace_event/third_party/protobuf/README.chromium
new file mode 100644
index 0000000..f22d684
--- /dev/null
+++ b/systrace/catapult/common/py_trace_event/third_party/protobuf/README.chromium
@@ -0,0 +1,12 @@
+Name: Protobuf
+URL: https://developers.google.com/protocol-buffers/
+Version: 3.0.0
+License: BSD
+
+Description:
+Protocol buffers are Google's language-neutral, platform-neutral,
+extensible mechanism for serializing structured data.
+
+Local Modifications:
+Removed pretty much everything except functions necessary to write
+bools, ints, and strings.
diff --git a/systrace/catapult/common/py_trace_event/third_party/protobuf/encoder.py b/systrace/catapult/common/py_trace_event/third_party/protobuf/encoder.py
new file mode 100644
index 0000000..18aaccd
--- /dev/null
+++ b/systrace/catapult/common/py_trace_event/third_party/protobuf/encoder.py
@@ -0,0 +1,224 @@
+# Protocol Buffers - Google's data interchange format
+# Copyright 2008 Google Inc. All rights reserved.
+# https://developers.google.com/protocol-buffers/
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import six
+
+import wire_format
+
+
+def _VarintSize(value):
+ """Compute the size of a varint value."""
+ if value <= 0x7f: return 1
+ if value <= 0x3fff: return 2
+ if value <= 0x1fffff: return 3
+ if value <= 0xfffffff: return 4
+ if value <= 0x7ffffffff: return 5
+ if value <= 0x3ffffffffff: return 6
+ if value <= 0x1ffffffffffff: return 7
+ if value <= 0xffffffffffffff: return 8
+ if value <= 0x7fffffffffffffff: return 9
+ return 10
+
+
+def _SignedVarintSize(value):
+ """Compute the size of a signed varint value."""
+ if value < 0: return 10
+ if value <= 0x7f: return 1
+ if value <= 0x3fff: return 2
+ if value <= 0x1fffff: return 3
+ if value <= 0xfffffff: return 4
+ if value <= 0x7ffffffff: return 5
+ if value <= 0x3ffffffffff: return 6
+ if value <= 0x1ffffffffffff: return 7
+ if value <= 0xffffffffffffff: return 8
+ if value <= 0x7fffffffffffffff: return 9
+ return 10
+
+
+def _VarintEncoder():
+ """Return an encoder for a basic varint value (does not include tag)."""
+
+ def EncodeVarint(write, value):
+ bits = value & 0x7f
+ value >>= 7
+ while value:
+ write(six.int2byte(0x80|bits))
+ bits = value & 0x7f
+ value >>= 7
+ return write(six.int2byte(bits))
+
+ return EncodeVarint
+
+
+def _SignedVarintEncoder():
+ """Return an encoder for a basic signed varint value (does not include
+ tag)."""
+
+ def EncodeSignedVarint(write, value):
+ if value < 0:
+ value += (1 << 64)
+ bits = value & 0x7f
+ value >>= 7
+ while value:
+ write(six.int2byte(0x80|bits))
+ bits = value & 0x7f
+ value >>= 7
+ return write(six.int2byte(bits))
+
+ return EncodeSignedVarint
+
+
+_EncodeVarint = _VarintEncoder()
+_EncodeSignedVarint = _SignedVarintEncoder()
+
+
+def _VarintBytes(value):
+ """Encode the given integer as a varint and return the bytes. This is only
+ called at startup time so it doesn't need to be fast."""
+
+ pieces = []
+ _EncodeVarint(pieces.append, value)
+ return b"".join(pieces)
+
+
+def TagBytes(field_number, wire_type):
+ """Encode the given tag and return the bytes. Only called at startup."""
+
+ return _VarintBytes(wire_format.PackTag(field_number, wire_type))
+
+
+def _SimpleEncoder(wire_type, encode_value, compute_value_size):
+ """Return a constructor for an encoder for fields of a particular type.
+
+ Args:
+ wire_type: The field's wire type, for encoding tags.
+ encode_value: A function which encodes an individual value, e.g.
+ _EncodeVarint().
+ compute_value_size: A function which computes the size of an individual
+ value, e.g. _VarintSize().
+ """
+
+ def SpecificEncoder(field_number, is_repeated, is_packed):
+ if is_packed:
+ tag_bytes = TagBytes(field_number, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ local_EncodeVarint = _EncodeVarint
+ def EncodePackedField(write, value):
+ write(tag_bytes)
+ size = 0
+ for element in value:
+ size += compute_value_size(element)
+ local_EncodeVarint(write, size)
+ for element in value:
+ encode_value(write, element)
+ return EncodePackedField
+ elif is_repeated:
+ tag_bytes = TagBytes(field_number, wire_type)
+ def EncodeRepeatedField(write, value):
+ for element in value:
+ write(tag_bytes)
+ encode_value(write, element)
+ return EncodeRepeatedField
+ else:
+ tag_bytes = TagBytes(field_number, wire_type)
+ def EncodeField(write, value):
+ write(tag_bytes)
+ return encode_value(write, value)
+ return EncodeField
+
+ return SpecificEncoder
+
+
+Int32Encoder = Int64Encoder = EnumEncoder = _SimpleEncoder(
+ wire_format.WIRETYPE_VARINT, _EncodeSignedVarint, _SignedVarintSize)
+
+UInt32Encoder = UInt64Encoder = _SimpleEncoder(
+ wire_format.WIRETYPE_VARINT, _EncodeVarint, _VarintSize)
+
+
+def BoolEncoder(field_number, is_repeated, is_packed):
+ """Returns an encoder for a boolean field."""
+
+ false_byte = b'\x00'
+ true_byte = b'\x01'
+ if is_packed:
+ tag_bytes = TagBytes(field_number, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ local_EncodeVarint = _EncodeVarint
+ def EncodePackedField(write, value):
+ write(tag_bytes)
+ local_EncodeVarint(write, len(value))
+ for element in value:
+ if element:
+ write(true_byte)
+ else:
+ write(false_byte)
+ return EncodePackedField
+ elif is_repeated:
+ tag_bytes = TagBytes(field_number, wire_format.WIRETYPE_VARINT)
+ def EncodeRepeatedField(write, value):
+ for element in value:
+ write(tag_bytes)
+ if element:
+ write(true_byte)
+ else:
+ write(false_byte)
+ return EncodeRepeatedField
+ else:
+ tag_bytes = TagBytes(field_number, wire_format.WIRETYPE_VARINT)
+ def EncodeField(write, value):
+ write(tag_bytes)
+ if value:
+ return write(true_byte)
+ return write(false_byte)
+ return EncodeField
+
+
+def StringEncoder(field_number, is_repeated, is_packed):
+ """Returns an encoder for a string field."""
+
+ tag = TagBytes(field_number, wire_format.WIRETYPE_LENGTH_DELIMITED)
+ local_EncodeVarint = _EncodeVarint
+ local_len = len
+ assert not is_packed
+ if is_repeated:
+ def EncodeRepeatedField(write, value):
+ for element in value:
+ encoded = element.encode('utf-8')
+ write(tag)
+ local_EncodeVarint(write, local_len(encoded))
+ write(encoded)
+ return EncodeRepeatedField
+ else:
+ def EncodeField(write, value):
+ encoded = value.encode('utf-8')
+ write(tag)
+ local_EncodeVarint(write, local_len(encoded))
+ return write(encoded)
+ return EncodeField
+
diff --git a/systrace/catapult/common/py_trace_event/third_party/protobuf/wire_format.py b/systrace/catapult/common/py_trace_event/third_party/protobuf/wire_format.py
new file mode 100644
index 0000000..9341e6f
--- /dev/null
+++ b/systrace/catapult/common/py_trace_event/third_party/protobuf/wire_format.py
@@ -0,0 +1,52 @@
+# Protocol Buffers - Google's data interchange format
+# Copyright 2008 Google Inc. All rights reserved.
+# https://developers.google.com/protocol-buffers/
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+TAG_TYPE_BITS = 3 # Number of bits used to hold type info in a proto tag.
+
+WIRETYPE_VARINT = 0
+WIRETYPE_FIXED64 = 1
+WIRETYPE_LENGTH_DELIMITED = 2
+WIRETYPE_START_GROUP = 3
+WIRETYPE_END_GROUP = 4
+WIRETYPE_FIXED32 = 5
+_WIRETYPE_MAX = 5
+
+def PackTag(field_number, wire_type):
+ """Returns an unsigned 32-bit integer that encodes the field number and
+ wire type information in standard protocol message wire format.
+
+ Args:
+ field_number: Expected to be an integer in the range [1, 1 << 29)
+ wire_type: One of the WIRETYPE_* constants.
+ """
+ if not 0 <= wire_type <= _WIRETYPE_MAX:
+ raise RuntimeError('Unknown wire type: %d' % wire_type)
+ return (field_number << TAG_TYPE_BITS) | wire_type
+
diff --git a/systrace/catapult/common/py_utils/bin/run_tests b/systrace/catapult/common/py_utils/bin/run_tests
new file mode 100755
index 0000000..66a4b59
--- /dev/null
+++ b/systrace/catapult/common/py_utils/bin/run_tests
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+# Copyright (c) 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import sys
+
+_CATAPULT_PATH = os.path.abspath(
+ os.path.join(os.path.dirname(__file__), '..', '..', '..'))
+
+_PY_UTILS_PATH = os.path.abspath(
+ os.path.join(_CATAPULT_PATH, 'common', 'py_utils'))
+
+
+def _RunTestsOrDie(top_level_dir):
+ exit_code = run_with_typ.Run(top_level_dir, path=[_PY_UTILS_PATH])
+ if exit_code:
+ sys.exit(exit_code)
+
+
+def _AddToPathIfNeeded(path):
+ if path not in sys.path:
+ sys.path.insert(0, path)
+
+
+if __name__ == '__main__':
+ _AddToPathIfNeeded(_CATAPULT_PATH)
+
+ from hooks import install
+ if '--no-install-hooks' in sys.argv:
+ sys.argv.remove('--no-install-hooks')
+ else:
+ install.InstallHooks()
+
+ from catapult_build import run_with_typ
+ _RunTestsOrDie(_PY_UTILS_PATH)
+ sys.exit(0)
diff --git a/systrace/catapult/common/py_utils/py_utils/__init__.py b/systrace/catapult/common/py_utils/py_utils/__init__.py
index fba0897..0d7b052 100644
--- a/systrace/catapult/common/py_utils/py_utils/__init__.py
+++ b/systrace/catapult/common/py_utils/py_utils/__init__.py
@@ -4,6 +4,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import print_function
+
import functools
import inspect
import os
@@ -74,8 +76,8 @@ _AddDirToPythonPath(os.path.join(GetCatapultDir(), 'third_party', 'mox3'))
_AddDirToPythonPath(
os.path.join(GetCatapultDir(), 'third_party', 'pyfakefs'))
-from devil.utils import timeout_retry
-from devil.utils import reraiser_thread
+from devil.utils import timeout_retry # pylint: disable=wrong-import-position
+from devil.utils import reraiser_thread # pylint: disable=wrong-import-position
# Decorator that adds timeout functionality to a function.
@@ -100,7 +102,7 @@ def TimeoutDeco(func, default_timeout):
try:
return timeout_retry.Run(func, timeout, 0, args=args)
except reraiser_thread.TimeoutError:
- print '%s timed out.' % func.__name__
+ print('%s timed out.' % func.__name__)
return False
return RunWithTimeout
diff --git a/systrace/catapult/common/py_utils/py_utils/binary_manager.py b/systrace/catapult/common/py_utils/py_utils/binary_manager.py
index 8af08cf..2d3ac8a 100644
--- a/systrace/catapult/common/py_utils/py_utils/binary_manager.py
+++ b/systrace/catapult/common/py_utils/py_utils/binary_manager.py
@@ -13,7 +13,7 @@ class BinaryManager(object):
"""
def __init__(self, config_files):
- if not config_files or type(config_files) != list:
+ if not config_files or not isinstance(config_files, list):
raise ValueError(
'Must supply a list of config files to the BinaryManager')
configs = [dependency_manager.BaseConfig(config) for config in config_files]
diff --git a/systrace/catapult/common/py_utils/py_utils/camel_case.py b/systrace/catapult/common/py_utils/py_utils/camel_case.py
index 9a76890..dbebb22 100644
--- a/systrace/catapult/common/py_utils/py_utils/camel_case.py
+++ b/systrace/catapult/common/py_utils/py_utils/camel_case.py
@@ -2,7 +2,11 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
import re
+import six
def ToUnderscore(obj):
@@ -11,7 +15,7 @@ def ToUnderscore(obj):
Descends recursively into lists and dicts, converting all dict keys.
Returns a newly allocated object of the same structure as the input.
"""
- if isinstance(obj, basestring):
+ if isinstance(obj, six.string_types):
return re.sub('(?!^)([A-Z]+)', r'_\1', obj).lower()
elif isinstance(obj, list):
@@ -19,7 +23,7 @@ def ToUnderscore(obj):
elif isinstance(obj, dict):
output = {}
- for k, v in obj.iteritems():
+ for k, v in six.iteritems(obj):
if isinstance(v, list) or isinstance(v, dict):
output[ToUnderscore(k)] = ToUnderscore(v)
else:
diff --git a/systrace/catapult/common/py_utils/py_utils/chrome_binaries.json b/systrace/catapult/common/py_utils/py_utils/chrome_binaries.json
index ce357c7..437cbb3 100644
--- a/systrace/catapult/common/py_utils/py_utils/chrome_binaries.json
+++ b/systrace/catapult/common/py_utils/py_utils/chrome_binaries.json
@@ -6,22 +6,22 @@
"cloud_storage_bucket": "chrome-telemetry",
"file_info": {
"mac_x86_64": {
- "cloud_storage_hash": "b321a01b2c98fe62b1876655b10436c2226b1b76",
+ "cloud_storage_hash": "381a491e14ab523b8db4cdf3c993713678237af8",
"download_path": "bin/reference_builds/chrome-mac64.zip",
"path_within_archive": "chrome-mac/Google Chrome.app/Contents/MacOS/Google Chrome",
- "version_in_cs": "62.0.3194.0"
+ "version_in_cs": "77.0.3822.0"
},
"win_AMD64": {
- "cloud_storage_hash": "2da1c7861745ab0e8f666f119eeb58c1410710cc",
- "download_path": "bin\\reference_build\\chrome-win64-pgo.zip",
- "path_within_archive": "chrome-win64-pgo\\chrome.exe",
- "version_in_cs": "62.0.3194.0"
+ "cloud_storage_hash": "600ee522c410efe1de2f593c0efc32ae113a7d99",
+ "download_path": "bin\\reference_build\\chrome-win64-clang.zip",
+ "path_within_archive": "chrome-win64-clang\\chrome.exe",
+ "version_in_cs": "77.0.3822.0"
},
"win_x86": {
- "cloud_storage_hash": "270abd11621386be612af02b707844cba06c0dbd",
- "download_path": "bin\\reference_build\\chrome-win32-pgo.zip",
- "path_within_archive": "chrome-win32-pgo\\chrome.exe",
- "version_in_cs": "62.0.3194.0"
+ "cloud_storage_hash": "5b79a181bfbd94d8288529b0da1defa3ef097197",
+ "download_path": "bin\\reference_build\\chrome-win32-clang.zip",
+ "path_within_archive": "chrome-win32-clang\\chrome.exe",
+ "version_in_cs": "77.0.3822.0"
}
}
},
@@ -30,10 +30,10 @@
"cloud_storage_bucket": "chrome-telemetry",
"file_info": {
"linux_x86_64": {
- "cloud_storage_hash": "2592ec6f8dd56227c3c281e3cccecd6c9ba72cad",
+ "cloud_storage_hash": "61d68a6b00f25c964f5162f5251962468c886f3a",
"download_path": "bin/reference_build/chrome-linux64.zip",
"path_within_archive": "chrome-linux64/chrome",
- "version_in_cs": "62.0.3192.0"
+ "version_in_cs": "76.0.3809.21"
}
}
},
@@ -42,45 +42,85 @@
"cloud_storage_bucket": "chrome-telemetry",
"file_info": {
"android_k_armeabi-v7a": {
- "cloud_storage_hash": "948c776335d3a38d6e8de0dba576e109c6b5724c",
+ "cloud_storage_hash": "28b913c720d56a30c092625c7862f00175a316c7",
"download_path": "bin/reference_build/android_k_armeabi-v7a/ChromeStable.apk",
- "version_in_cs": "63.0.3239.111"
+ "version_in_cs": "75.0.3770.67"
},
"android_l_arm64-v8a": {
- "cloud_storage_hash": "a25663aad7397002f6dfe44fb97087fdd77df119",
+ "cloud_storage_hash": "4b953c33c61f94c2198e8001d0d8142c6504a875",
"download_path": "bin/reference_build/android_l_arm64-v8a/ChromeStable.apk",
- "version_in_cs": "63.0.3239.111"
+ "version_in_cs": "75.0.3770.67"
},
"android_l_armeabi-v7a": {
- "cloud_storage_hash": "948c776335d3a38d6e8de0dba576e109c6b5724c",
+ "cloud_storage_hash": "28b913c720d56a30c092625c7862f00175a316c7",
"download_path": "bin/reference_build/android_l_armeabi-v7a/ChromeStable.apk",
- "version_in_cs": "63.0.3239.111"
+ "version_in_cs": "75.0.3770.67"
},
+ "android_n_arm64-v8a": {
+ "cloud_storage_hash": "84152ba8f7a25cacc79d588ed827ea75f0e4ab94",
+ "download_path": "bin/reference_build/android_n_arm64-v8a/Monochrome.apk",
+ "version_in_cs": "75.0.3770.67"
+ },
+ "android_n_armeabi-v7a": {
+ "cloud_storage_hash": "656bb9e3982d0d35decd5347ced2c320a7267f33",
+ "download_path": "bin/reference_build/android_n_armeabi-v7a/Monochrome.apk",
+ "version_in_cs": "75.0.3770.67"
+ },
+ "linux_x86_64": {
+ "cloud_storage_hash": "dee8469e8dcd8453efd33f3a00d7ea302a126a4b",
+ "download_path": "bin/reference_build/chrome-linux64.zip",
+ "path_within_archive": "chrome-linux64/chrome",
+ "version_in_cs": "75.0.3770.80"
+ },
+ "mac_x86_64": {
+ "cloud_storage_hash": "16a43a1e794bb99ec1ebcd40569084985b3c6626",
+ "download_path": "bin/reference_builds/chrome-mac64.zip",
+ "path_within_archive": "chrome-mac/Google Chrome.app/Contents/MacOS/Google Chrome",
+ "version_in_cs": "75.0.3770.80"
+ },
+ "win_AMD64": {
+ "cloud_storage_hash": "1ec52bd4164f2d93c53113a093dae9e041eb2d73",
+ "download_path": "bin\\reference_build\\chrome-win64-clang.zip",
+ "path_within_archive": "chrome-win64-clang\\chrome.exe",
+ "version_in_cs": "75.0.3770.80"
+ },
+ "win_x86": {
+ "cloud_storage_hash": "0f9eb991ba618dc61f2063ea252f44be94c2252e",
+ "download_path": "bin\\reference_build\\chrome-win-clang.zip",
+ "path_within_archive": "chrome-win-clang\\chrome.exe",
+ "version_in_cs": "75.0.3770.80"
+ }
+ }
+ },
+ "chrome_m72": {
+ "cloud_storage_base_folder": "binary_dependencies",
+ "cloud_storage_bucket": "chrome-telemetry",
+ "file_info": {
"linux_x86_64": {
- "cloud_storage_hash": "b0506e43d268eadb887ccc847695674f9d2e51a5",
+ "cloud_storage_hash": "537c19346b20340cc6807242e1eb6d82dfcfa2e8",
"download_path": "bin/reference_build/chrome-linux64.zip",
"path_within_archive": "chrome-linux64/chrome",
- "version_in_cs": "63.0.3239.108"
+ "version_in_cs": "72.0.3626.119"
},
"mac_x86_64": {
- "cloud_storage_hash": "56a3de45b37b7eb563006c30a548a48928cffb39",
+ "cloud_storage_hash": "7f6a931f696f57561703538c6f799781d6e22e7e",
"download_path": "bin/reference_builds/chrome-mac64.zip",
"path_within_archive": "chrome-mac/Google Chrome.app/Contents/MacOS/Google Chrome",
- "version_in_cs": "63.0.3239.108"
+ "version_in_cs": "72.0.3626.119"
},
"win_AMD64": {
- "cloud_storage_hash": "d1511334055c88fd9fa5e6e63fee666d9be8c433",
- "download_path": "bin\\reference_build\\chrome-win64.zip",
- "path_within_archive": "chrome-win64\\chrome.exe",
- "version_in_cs": "63.0.3239.108"
+ "cloud_storage_hash": "563d7985c85bfe77e92b8253d0389ff8551018c7",
+ "download_path": "bin\\reference_build\\chrome-win64-clang.zip",
+ "path_within_archive": "chrome-win64-clang\\chrome.exe",
+ "version_in_cs": "72.0.3626.119"
},
"win_x86": {
- "cloud_storage_hash": "9e869b3b25ee7b682712cde6eaddc2d7fa84cc90",
- "download_path": "bin\\reference_build\\chrome-win32.zip",
- "path_within_archive": "chrome-win32\\chrome.exe",
- "version_in_cs": "63.0.3239.108"
+ "cloud_storage_hash": "1802179da16e44b83bd3f0b296f9e5b0b053d59c",
+ "download_path": "bin\\reference_build\\chrome-win-clang.zip",
+ "path_within_archive": "chrome-win-clang\\chrome.exe",
+ "version_in_cs": "72.0.3626.119"
}
}
}
}
-}
+} \ No newline at end of file
diff --git a/systrace/catapult/common/py_utils/py_utils/cloud_storage.py b/systrace/catapult/common/py_utils/py_utils/cloud_storage.py
index f601380..b4988c5 100644
--- a/systrace/catapult/common/py_utils/py_utils/cloud_storage.py
+++ b/systrace/catapult/common/py_utils/py_utils/cloud_storage.py
@@ -9,21 +9,21 @@ import contextlib
import hashlib
import logging
import os
+import re
import shutil
import stat
import subprocess
-import re
import sys
import tempfile
import time
import py_utils
+from py_utils import cloud_storage_global_lock # pylint: disable=unused-import
from py_utils import lock
# Do a no-op import here so that cloud_storage_global_lock dep is picked up
# by https://cs.chromium.org/chromium/src/build/android/test_runner.pydeps.
# TODO(nedn, jbudorick): figure out a way to get rid of this ugly hack.
-from py_utils import cloud_storage_global_lock # pylint: disable=unused-import
logger = logging.getLogger(__name__) # pylint: disable=invalid-name
@@ -42,7 +42,7 @@ BUCKET_ALIASES = collections.OrderedDict((
('output', TELEMETRY_OUTPUT),
))
-BUCKET_ALIAS_NAMES = BUCKET_ALIASES.keys()
+BUCKET_ALIAS_NAMES = list(BUCKET_ALIASES.keys())
_GSUTIL_PATH = os.path.join(py_utils.GetCatapultDir(), 'third_party', 'gsutil',
@@ -120,6 +120,9 @@ def _EnsureExecutable(gsutil):
os.chmod(gsutil, st.st_mode | stat.S_IEXEC)
+def _IsRunningOnSwarming():
+ return os.environ.get('SWARMING_HEADLESS') is not None
+
def _RunCommand(args):
# On cros device, as telemetry is running as root, home will be set to /root/,
# which is not writable. gsutil will attempt to create a download tracker dir
@@ -132,6 +135,8 @@ def _RunCommand(args):
if py_utils.IsRunningOnCrosDevice():
gsutil_env = os.environ.copy()
gsutil_env['HOME'] = _CROS_GSUTIL_HOME_WAR
+ elif _IsRunningOnSwarming():
+ gsutil_env = os.environ.copy()
if os.name == 'nt':
# If Windows, prepend python. Python scripts aren't directly executable.
diff --git a/systrace/catapult/common/py_utils/py_utils/cloud_storage_unittest.py b/systrace/catapult/common/py_utils/py_utils/cloud_storage_unittest.py
index ae2f748..7648db6 100644
--- a/systrace/catapult/common/py_utils/py_utils/cloud_storage_unittest.py
+++ b/systrace/catapult/common/py_utils/py_utils/cloud_storage_unittest.py
@@ -154,6 +154,19 @@ class CloudStorageFakeFsUnitTest(BaseFakeFsUnitTest):
finally:
cloud_storage._RunCommand = orig_run_command
+ @mock.patch('py_utils.cloud_storage.subprocess.Popen')
+ def testSwarmingUsesExistingEnv(self, mock_popen):
+ os.environ['SWARMING_HEADLESS'] = '1'
+
+ mock_gsutil = mock_popen()
+ mock_gsutil.communicate = mock.MagicMock(return_value=('a', 'b'))
+ mock_gsutil.returncode = None
+
+ cloud_storage.Copy('bucket1', 'bucket2', 'remote_path1', 'remote_path2')
+
+ mock_popen.assert_called_with(
+ mock.ANY, stderr=-1, env=os.environ, stdout=-1)
+
@mock.patch('py_utils.cloud_storage._FileLock')
def testDisableCloudStorageIo(self, unused_lock_mock):
os.environ['DISABLE_CLOUD_STORAGE_IO'] = '1'
diff --git a/systrace/catapult/common/py_utils/py_utils/discover.py b/systrace/catapult/common/py_utils/py_utils/discover.py
index 09d5c5e..ae8ba87 100644
--- a/systrace/catapult/common/py_utils/py_utils/discover.py
+++ b/systrace/catapult/common/py_utils/py_utils/discover.py
@@ -107,7 +107,7 @@ def DiscoverClasses(start_dir,
# crbug.com/548652
if index_by_class_name:
AssertNoKeyConflicts(classes, new_classes)
- classes = dict(classes.items() + new_classes.items())
+ classes = dict(list(classes.items()) + list(new_classes.items()))
return classes
diff --git a/systrace/catapult/common/py_utils/py_utils/discover_unittest.py b/systrace/catapult/common/py_utils/py_utils/discover_unittest.py
index 137d85f..2d4fd27 100644
--- a/systrace/catapult/common/py_utils/py_utils/discover_unittest.py
+++ b/systrace/catapult/common/py_utils/py_utils/discover_unittest.py
@@ -1,10 +1,15 @@
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
import os
import unittest
from py_utils import discover
+import six
class DiscoverTest(unittest.TestCase):
@@ -20,8 +25,8 @@ class DiscoverTest(unittest.TestCase):
self._base_class,
index_by_class_name=False)
- actual_classes = dict((name, cls.__name__)
- for name, cls in classes.iteritems())
+ actual_classes = dict(
+ (name, cls.__name__) for name, cls in six.iteritems(classes))
expected_classes = {
'another_discover_dummyclass': 'DummyExceptionWithParameterImpl1',
'discover_dummyclass': 'DummyException',
@@ -35,8 +40,8 @@ class DiscoverTest(unittest.TestCase):
self._base_class,
directly_constructable=True)
- actual_classes = dict((name, cls.__name__)
- for name, cls in classes.iteritems())
+ actual_classes = dict(
+ (name, cls.__name__) for name, cls in six.iteritems(classes))
expected_classes = {
'dummy_exception': 'DummyException',
'dummy_exception_impl1': 'DummyExceptionImpl1',
@@ -48,8 +53,8 @@ class DiscoverTest(unittest.TestCase):
classes = discover.DiscoverClasses(self._start_dir, self._base_dir,
self._base_class)
- actual_classes = dict((name, cls.__name__)
- for name, cls in classes.iteritems())
+ actual_classes = dict(
+ (name, cls.__name__) for name, cls in six.iteritems(classes))
expected_classes = {
'dummy_exception': 'DummyException',
'dummy_exception_impl1': 'DummyExceptionImpl1',
@@ -68,8 +73,8 @@ class DiscoverTest(unittest.TestCase):
pattern='another*',
index_by_class_name=False)
- actual_classes = dict((name, cls.__name__)
- for name, cls in classes.iteritems())
+ actual_classes = dict(
+ (name, cls.__name__) for name, cls in six.iteritems(classes))
expected_classes = {
'another_discover_dummyclass': 'DummyExceptionWithParameterImpl1'
}
@@ -83,8 +88,8 @@ class DiscoverTest(unittest.TestCase):
pattern='another*',
directly_constructable=True)
- actual_classes = dict((name, cls.__name__)
- for name, cls in classes.iteritems())
+ actual_classes = dict(
+ (name, cls.__name__) for name, cls in six.iteritems(classes))
expected_classes = {
'dummy_exception_impl1': 'DummyExceptionImpl1',
'dummy_exception_impl2': 'DummyExceptionImpl2',
@@ -97,8 +102,8 @@ class DiscoverTest(unittest.TestCase):
self._base_class,
pattern='another*')
- actual_classes = dict((name, cls.__name__)
- for name, cls in classes.iteritems())
+ actual_classes = dict(
+ (name, cls.__name__) for name, cls in six.iteritems(classes))
expected_classes = {
'dummy_exception_impl1': 'DummyExceptionImpl1',
'dummy_exception_impl2': 'DummyExceptionImpl2',
diff --git a/systrace/catapult/common/py_utils/py_utils/exc_util.py b/systrace/catapult/common/py_utils/py_utils/exc_util.py
new file mode 100644
index 0000000..538ced2
--- /dev/null
+++ b/systrace/catapult/common/py_utils/py_utils/exc_util.py
@@ -0,0 +1,84 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import functools
+import logging
+import sys
+
+
+def BestEffort(func):
+ """Decorator to log and dismiss exceptions if one if already being handled.
+
+ Note: This is largely a workaround for the lack of support of exception
+ chaining in Python 2.7, this decorator will no longer be needed in Python 3.
+
+ Typical usage would be in |Close| or |Disconnect| methods, to dismiss but log
+ any further exceptions raised if the current execution context is already
+ handling an exception. For example:
+
+ class Client(object):
+ def Connect(self):
+ # code to connect ...
+
+ @exc_util.BestEffort
+ def Disconnect(self):
+ # code to disconnect ...
+
+ client = Client()
+ try:
+ client.Connect()
+ except:
+ client.Disconnect()
+ raise
+
+ If an exception is raised by client.Connect(), and then a second exception
+ is raised by client.Disconnect(), the decorator will log the second exception
+ and let the original one be re-raised.
+
+ Otherwise, in Python 2.7 and without the decorator, the second exception is
+ the one propagated to the caller; while information about the original one,
+ usually more important, is completely lost.
+
+ Note that if client.Disconnect() is called in a context where an exception
+ is *not* being handled, then any exceptions raised within the method will
+ get through and be passed on to callers for them to handle in the usual way.
+
+ The decorator can also be used on cleanup functions meant to be called on
+ a finally block, however you must also include an except-raise clause to
+ properly signal (in Python 2.7) whether an exception is being handled; e.g.:
+
+ @exc_util.BestEffort
+ def cleanup():
+ # do cleanup things ...
+
+ try:
+ process(thing)
+ except:
+ raise # Needed to let cleanup know if an exception is being handled.
+ finally:
+ cleanup()
+
+ Failing to include the except-raise block has the same effect as not
+ including the decorator at all. Namely: exceptions during |cleanup| are
+ raised and swallow any prior exceptions that occurred during |process|.
+ """
+ @functools.wraps(func)
+ def Wrapper(*args, **kwargs):
+ exc_type = sys.exc_info()[0]
+ if exc_type is None:
+ # Not currently handling an exception; let any errors raise exceptions
+ # as usual.
+ func(*args, **kwargs)
+ else:
+ # Otherwise, we are currently handling an exception, dismiss and log
+ # any further cascading errors. Callers are responsible to handle the
+ # original exception.
+ try:
+ func(*args, **kwargs)
+ except Exception: # pylint: disable=broad-except
+ logging.exception(
+ 'While handling a %s, the following exception was also raised:',
+ exc_type.__name__)
+
+ return Wrapper
diff --git a/systrace/catapult/common/py_utils/py_utils/exc_util_unittest.py b/systrace/catapult/common/py_utils/py_utils/exc_util_unittest.py
new file mode 100644
index 0000000..31e3b57
--- /dev/null
+++ b/systrace/catapult/common/py_utils/py_utils/exc_util_unittest.py
@@ -0,0 +1,183 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import re
+import sys
+import unittest
+
+from py_utils import exc_util
+
+
+class FakeConnectionError(Exception):
+ pass
+
+
+class FakeDisconnectionError(Exception):
+ pass
+
+
+class FakeProcessingError(Exception):
+ pass
+
+
+class FakeCleanupError(Exception):
+ pass
+
+
+class FaultyClient(object):
+ def __init__(self, *args):
+ self.failures = set(args)
+ self.called = set()
+
+ def Connect(self):
+ self.called.add('Connect')
+ if FakeConnectionError in self.failures:
+ raise FakeConnectionError('Oops!')
+
+ def Process(self):
+ self.called.add('Process')
+ if FakeProcessingError in self.failures:
+ raise FakeProcessingError('Oops!')
+
+ @exc_util.BestEffort
+ def Disconnect(self):
+ self.called.add('Disconnect')
+ if FakeDisconnectionError in self.failures:
+ raise FakeDisconnectionError('Oops!')
+
+ @exc_util.BestEffort
+ def Cleanup(self):
+ self.called.add('Cleanup')
+ if FakeCleanupError in self.failures:
+ raise FakeCleanupError('Oops!')
+
+
+class ReraiseTests(unittest.TestCase):
+ def assertLogMatches(self, pattern):
+ self.assertRegexpMatches(
+ sys.stderr.getvalue(), pattern) # pylint: disable=no-member
+
+ def assertLogNotMatches(self, pattern):
+ self.assertNotRegexpMatches(
+ sys.stderr.getvalue(), pattern) # pylint: disable=no-member
+
+ def testTryRaisesExceptRaises(self):
+ client = FaultyClient(FakeConnectionError, FakeDisconnectionError)
+
+ # The connection error reaches the top level, while the disconnection
+ # error is logged.
+ with self.assertRaises(FakeConnectionError):
+ try:
+ client.Connect()
+ except:
+ client.Disconnect()
+ raise
+
+ self.assertLogMatches(re.compile(
+ r'While handling a FakeConnectionError, .* was also raised:\n'
+ r'Traceback \(most recent call last\):\n'
+ r'.*\n'
+ r'FakeDisconnectionError: Oops!\n', re.DOTALL))
+ self.assertItemsEqual(client.called, ['Connect', 'Disconnect'])
+
+ def testTryRaisesExceptDoesnt(self):
+ client = FaultyClient(FakeConnectionError)
+
+ # The connection error reaches the top level, disconnecting did not raise
+ # an exception (so nothing is logged).
+ with self.assertRaises(FakeConnectionError):
+ try:
+ client.Connect()
+ except:
+ client.Disconnect()
+ raise
+
+ self.assertLogNotMatches('FakeDisconnectionError')
+ self.assertItemsEqual(client.called, ['Connect', 'Disconnect'])
+
+ def testTryPassesNoException(self):
+ client = FaultyClient(FakeDisconnectionError)
+
+ # If there is no connection error, the except clause is not called (even if
+ # it would have raised an exception).
+ try:
+ client.Connect()
+ except:
+ client.Disconnect()
+ raise
+
+ self.assertLogNotMatches('FakeConnectionError')
+ self.assertLogNotMatches('FakeDisconnectionError')
+ self.assertItemsEqual(client.called, ['Connect'])
+
+ def testTryRaisesFinallyRaises(self):
+ worker = FaultyClient(FakeProcessingError, FakeCleanupError)
+
+ # The processing error reaches the top level, the cleanup error is logged.
+ with self.assertRaises(FakeProcessingError):
+ try:
+ worker.Process()
+ except:
+ raise # Needed for Cleanup to know if an exception is handled.
+ finally:
+ worker.Cleanup()
+
+ self.assertLogMatches(re.compile(
+ r'While handling a FakeProcessingError, .* was also raised:\n'
+ r'Traceback \(most recent call last\):\n'
+ r'.*\n'
+ r'FakeCleanupError: Oops!\n', re.DOTALL))
+ self.assertItemsEqual(worker.called, ['Process', 'Cleanup'])
+
+ def testTryRaisesFinallyDoesnt(self):
+ worker = FaultyClient(FakeProcessingError)
+
+ # The processing error reaches the top level, the cleanup code runs fine.
+ with self.assertRaises(FakeProcessingError):
+ try:
+ worker.Process()
+ except:
+ raise # Needed for Cleanup to know if an exception is handled.
+ finally:
+ worker.Cleanup()
+
+ self.assertLogNotMatches('FakeProcessingError')
+ self.assertLogNotMatches('FakeCleanupError')
+ self.assertItemsEqual(worker.called, ['Process', 'Cleanup'])
+
+ def testTryPassesFinallyRaises(self):
+ worker = FaultyClient(FakeCleanupError)
+
+ # The processing code runs fine, the cleanup code raises an exception
+ # which reaches the top level.
+ with self.assertRaises(FakeCleanupError):
+ try:
+ worker.Process()
+ except:
+ raise # Needed for Cleanup to know if an exception is handled.
+ finally:
+ worker.Cleanup()
+
+ self.assertLogNotMatches('FakeProcessingError')
+ self.assertLogNotMatches('FakeCleanupError')
+ self.assertItemsEqual(worker.called, ['Process', 'Cleanup'])
+
+ def testTryRaisesExceptRaisesFinallyRaises(self):
+ worker = FaultyClient(
+ FakeProcessingError, FakeDisconnectionError, FakeCleanupError)
+
+ # Chaining try-except-finally works fine. Only the processing error reaches
+ # the top level; the other two are logged.
+ with self.assertRaises(FakeProcessingError):
+ try:
+ worker.Process()
+ except:
+ worker.Disconnect()
+ raise
+ finally:
+ worker.Cleanup()
+
+ self.assertLogMatches('FakeDisconnectionError')
+ self.assertLogMatches('FakeCleanupError')
+ self.assertItemsEqual(worker.called, ['Process', 'Disconnect', 'Cleanup'])
diff --git a/systrace/catapult/common/py_utils/py_utils/expectations_parser.py b/systrace/catapult/common/py_utils/py_utils/expectations_parser.py
index 6fa9407..534b352 100644
--- a/systrace/catapult/common/py_utils/py_utils/expectations_parser.py
+++ b/systrace/catapult/common/py_utils/py_utils/expectations_parser.py
@@ -2,7 +2,11 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
import re
+import six
class ParseError(Exception):
@@ -20,9 +24,9 @@ class Expectation(object):
Conditions are combined using logical and. Example: ['Mac', 'Debug']
results: List of outcomes for test. Example: ['Skip', 'Pass']
"""
- assert isinstance(reason, basestring) or reason is None
+ assert isinstance(reason, six.string_types) or reason is None
self._reason = reason
- assert isinstance(test, basestring)
+ assert isinstance(test, six.string_types)
self._test = test
assert isinstance(conditions, list)
self._conditions = conditions
diff --git a/systrace/catapult/common/py_utils/py_utils/expectations_parser_unittest.py b/systrace/catapult/common/py_utils/py_utils/expectations_parser_unittest.py
index a842c4c..523e871 100644
--- a/systrace/catapult/common/py_utils/py_utils/expectations_parser_unittest.py
+++ b/systrace/catapult/common/py_utils/py_utils/expectations_parser_unittest.py
@@ -3,9 +3,14 @@
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
import unittest
from py_utils import expectations_parser
+from six.moves import range # pylint: disable=redefined-builtin
class TestExpectationParserTest(unittest.TestCase):
diff --git a/systrace/catapult/common/py_utils/py_utils/file_util.py b/systrace/catapult/common/py_utils/py_utils/file_util.py
new file mode 100644
index 0000000..b1602c9
--- /dev/null
+++ b/systrace/catapult/common/py_utils/py_utils/file_util.py
@@ -0,0 +1,23 @@
+# Copyright 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import errno
+import os
+import shutil
+
+
+def CopyFileWithIntermediateDirectories(source_path, dest_path):
+ """Copies a file and creates intermediate directories as needed.
+
+ Args:
+ source_path: Path to the source file.
+ dest_path: Path to the destination where the source file should be copied.
+ """
+ assert os.path.exists(source_path)
+ try:
+ os.makedirs(os.path.dirname(dest_path))
+ except OSError as e:
+ if e.errno != errno.EEXIST:
+ raise
+ shutil.copy(source_path, dest_path)
diff --git a/systrace/catapult/common/py_utils/py_utils/file_util_unittest.py b/systrace/catapult/common/py_utils/py_utils/file_util_unittest.py
new file mode 100644
index 0000000..4bb19a1
--- /dev/null
+++ b/systrace/catapult/common/py_utils/py_utils/file_util_unittest.py
@@ -0,0 +1,66 @@
+# Copyright 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import errno
+import os
+import shutil
+import tempfile
+import unittest
+
+from py_utils import file_util
+
+
+class FileUtilTest(unittest.TestCase):
+
+ def setUp(self):
+ self._tempdir = tempfile.mkdtemp()
+
+ def tearDown(self):
+ shutil.rmtree(self._tempdir)
+
+ def testCopySimple(self):
+ source_path = os.path.join(self._tempdir, 'source')
+ with open(source_path, 'w') as f:
+ f.write('data')
+
+ dest_path = os.path.join(self._tempdir, 'dest')
+
+ self.assertFalse(os.path.exists(dest_path))
+ file_util.CopyFileWithIntermediateDirectories(source_path, dest_path)
+ self.assertTrue(os.path.exists(dest_path))
+ self.assertEqual('data', open(dest_path, 'r').read())
+
+ def testCopyMakeDirectories(self):
+ source_path = os.path.join(self._tempdir, 'source')
+ with open(source_path, 'w') as f:
+ f.write('data')
+
+ dest_path = os.path.join(self._tempdir, 'path', 'to', 'dest')
+
+ self.assertFalse(os.path.exists(dest_path))
+ file_util.CopyFileWithIntermediateDirectories(source_path, dest_path)
+ self.assertTrue(os.path.exists(dest_path))
+ self.assertEqual('data', open(dest_path, 'r').read())
+
+ def testCopyOverwrites(self):
+ source_path = os.path.join(self._tempdir, 'source')
+ with open(source_path, 'w') as f:
+ f.write('source_data')
+
+ dest_path = os.path.join(self._tempdir, 'dest')
+ with open(dest_path, 'w') as f:
+ f.write('existing_data')
+
+ file_util.CopyFileWithIntermediateDirectories(source_path, dest_path)
+ self.assertEqual('source_data', open(dest_path, 'r').read())
+
+ def testRaisesError(self):
+ source_path = os.path.join(self._tempdir, 'source')
+ with open(source_path, 'w') as f:
+ f.write('data')
+
+ dest_path = ""
+ with self.assertRaises(OSError) as cm:
+ file_util.CopyFileWithIntermediateDirectories(source_path, dest_path)
+ self.assertEqual(errno.ENOENT, cm.exception.error_code)
diff --git a/systrace/catapult/common/py_utils/py_utils/lock.py b/systrace/catapult/common/py_utils/py_utils/lock.py
index aa9a095..ade4d1f 100644
--- a/systrace/catapult/common/py_utils/py_utils/lock.py
+++ b/systrace/catapult/common/py_utils/py_utils/lock.py
@@ -14,19 +14,23 @@ class LockException(Exception):
pass
+# pylint: disable=import-error
+# pylint: disable=wrong-import-position
if os.name == 'nt':
- import win32con # pylint: disable=import-error
- import win32file # pylint: disable=import-error
- import pywintypes # pylint: disable=import-error
+ import win32con
+ import win32file
+ import pywintypes
LOCK_EX = win32con.LOCKFILE_EXCLUSIVE_LOCK
LOCK_SH = 0 # the default
LOCK_NB = win32con.LOCKFILE_FAIL_IMMEDIATELY
_OVERLAPPED = pywintypes.OVERLAPPED()
elif os.name == 'posix':
- import fcntl # pylint: disable=import-error
+ import fcntl
LOCK_EX = fcntl.LOCK_EX
LOCK_SH = fcntl.LOCK_SH
LOCK_NB = fcntl.LOCK_NB
+# pylint: enable=import-error
+# pylint: enable=wrong-import-position
@contextlib.contextmanager
@@ -80,7 +84,7 @@ def _LockImplWin(target_file, flags):
hfile = win32file._get_osfhandle(target_file.fileno())
try:
win32file.LockFileEx(hfile, flags, 0, -0x10000, _OVERLAPPED)
- except pywintypes.error, exc_value:
+ except pywintypes.error as exc_value:
if exc_value[0] == 33:
raise LockException('Error trying acquiring lock of %s: %s' %
(target_file.name, exc_value[2]))
@@ -92,7 +96,7 @@ def _UnlockImplWin(target_file):
hfile = win32file._get_osfhandle(target_file.fileno())
try:
win32file.UnlockFileEx(hfile, 0, -0x10000, _OVERLAPPED)
- except pywintypes.error, exc_value:
+ except pywintypes.error as exc_value:
if exc_value[0] == 158:
# error: (158, 'UnlockFileEx', 'The segment is already unlocked.')
# To match the 'posix' implementation, silently ignore this error
@@ -105,7 +109,7 @@ def _UnlockImplWin(target_file):
def _LockImplPosix(target_file, flags):
try:
fcntl.flock(target_file.fileno(), flags)
- except IOError, exc_value:
+ except IOError as exc_value:
if exc_value[0] == 11 or exc_value[0] == 35:
raise LockException('Error trying acquiring lock of %s: %s' %
(target_file.name, exc_value[1]))
diff --git a/systrace/catapult/common/py_utils/py_utils/lock_unittest.py b/systrace/catapult/common/py_utils/py_utils/lock_unittest.py
index a260621..7e17e55 100644
--- a/systrace/catapult/common/py_utils/py_utils/lock_unittest.py
+++ b/systrace/catapult/common/py_utils/py_utils/lock_unittest.py
@@ -2,14 +2,18 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
import multiprocessing
import os
+import tempfile
import time
import unittest
-import tempfile
-
from py_utils import lock
+from six.moves import range # pylint: disable=redefined-builtin
def _AppendTextToFile(file_name):
diff --git a/systrace/catapult/common/py_utils/py_utils/logging_util_unittest.py b/systrace/catapult/common/py_utils/py_utils/logging_util_unittest.py
index a957705..eb26098 100644
--- a/systrace/catapult/common/py_utils/py_utils/logging_util_unittest.py
+++ b/systrace/catapult/common/py_utils/py_utils/logging_util_unittest.py
@@ -2,15 +2,19 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging
-import StringIO
import unittest
+try:
+ from six import StringIO
+except ImportError:
+ from io import StringIO
+
from py_utils import logging_util
class LoggingUtilTest(unittest.TestCase):
def testCapture(self):
- s = StringIO.StringIO()
+ s = StringIO()
with logging_util.CaptureLogs(s):
logging.fatal('test')
diff --git a/systrace/catapult/common/py_utils/py_utils/memory_debug.py b/systrace/catapult/common/py_utils/py_utils/memory_debug.py
index 864725d..26f10ae 100755
--- a/systrace/catapult/common/py_utils/py_utils/memory_debug.py
+++ b/systrace/catapult/common/py_utils/py_utils/memory_debug.py
@@ -6,8 +6,11 @@
import heapq
import logging
import os
-import psutil
import sys
+try:
+ import psutil
+except ImportError:
+ psutil = None
BYTE_UNITS = ['B', 'KiB', 'MiB', 'GiB']
@@ -39,6 +42,9 @@ def _LogProcessInfo(pinfo, level):
def LogHostMemoryUsage(top_n=10, level=logging.INFO):
+ if not psutil:
+ logging.warning('psutil module is not found, skipping logging memory info')
+ return
if psutil.version_info < (2, 0):
logging.warning('psutil %s too old, upgrade to version 2.0 or higher'
' for memory usage information.', psutil.__version__)
@@ -55,7 +61,11 @@ def LogHostMemoryUsage(top_n=10, level=logging.INFO):
logging.log(level, 'Memory usage of top %i processes groups', top_n)
pinfos_by_names = {}
for p in psutil.process_iter():
- pinfo = _GetProcessInfo(p)
+ try:
+ pinfo = _GetProcessInfo(p)
+ except psutil.NoSuchProcess:
+ logging.exception('process %s no longer exists', p)
+ continue
pname = pinfo['name']
if pname not in pinfos_by_names:
pinfos_by_names[pname] = {'name': pname, 'total_mem_rss': 0, 'pids': []}
@@ -63,7 +73,9 @@ def LogHostMemoryUsage(top_n=10, level=logging.INFO):
pinfos_by_names[pname]['pids'].append(str(pinfo['pid']))
sorted_pinfo_groups = heapq.nlargest(
- top_n, pinfos_by_names.values(), key=lambda item: item['total_mem_rss'])
+ top_n,
+ list(pinfos_by_names.values()),
+ key=lambda item: item['total_mem_rss'])
for group in sorted_pinfo_groups:
group['total_mem_rss_fmt'] = FormatBytes(group['total_mem_rss'])
group['pids_fmt'] = ', '.join(group['pids'])
diff --git a/systrace/catapult/common/py_utils/py_utils/modules_util.py b/systrace/catapult/common/py_utils/py_utils/modules_util.py
new file mode 100644
index 0000000..6c1106d
--- /dev/null
+++ b/systrace/catapult/common/py_utils/py_utils/modules_util.py
@@ -0,0 +1,35 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+from distutils import version # pylint: disable=no-name-in-module
+
+
+def RequireVersion(module, min_version, max_version=None):
+ """Ensure that an imported module's version is within a required range.
+
+ Version strings are parsed with LooseVersion, so versions like "1.8.0rc1"
+ (default numpy on macOS Sierra) and "2.4.13.2" (a version of OpenCV 2.x)
+ are allowed.
+
+ Args:
+ module: An already imported python module.
+ min_version: The module must have this or a higher version.
+ max_version: Optional, the module should not have this or a higher version.
+
+ Raises:
+ ImportError if the module's __version__ is not within the allowed range.
+ """
+ module_version = version.LooseVersion(module.__version__)
+ min_version = version.LooseVersion(str(min_version))
+ valid_version = min_version <= module_version
+
+ if max_version is not None:
+ max_version = version.LooseVersion(str(max_version))
+ valid_version = valid_version and (module_version < max_version)
+ wants_version = 'at or above %s and below %s' % (min_version, max_version)
+ else:
+ wants_version = '%s or higher' % min_version
+
+ if not valid_version:
+ raise ImportError('%s has version %s, but version %s is required' % (
+ module.__name__, module_version, wants_version))
diff --git a/systrace/catapult/common/py_utils/py_utils/modules_util_unittest.py b/systrace/catapult/common/py_utils/py_utils/modules_util_unittest.py
new file mode 100644
index 0000000..aa05674
--- /dev/null
+++ b/systrace/catapult/common/py_utils/py_utils/modules_util_unittest.py
@@ -0,0 +1,41 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+import unittest
+
+from py_utils import modules_util
+
+
+class FakeModule(object):
+ def __init__(self, name, version):
+ self.__name__ = name
+ self.__version__ = version
+
+
+class ModulesUitlTest(unittest.TestCase):
+ def testRequireVersion_valid(self):
+ numpy = FakeModule('numpy', '2.3')
+ try:
+ modules_util.RequireVersion(numpy, '1.0')
+ except ImportError:
+ self.fail('ImportError raised unexpectedly')
+
+ def testRequireVersion_versionTooLow(self):
+ numpy = FakeModule('numpy', '2.3')
+ with self.assertRaises(ImportError) as error:
+ modules_util.RequireVersion(numpy, '2.5')
+ self.assertEqual(
+ str(error.exception),
+ 'numpy has version 2.3, but version 2.5 or higher is required')
+
+ def testRequireVersion_versionTooHigh(self):
+ numpy = FakeModule('numpy', '2.3')
+ with self.assertRaises(ImportError) as error:
+ modules_util.RequireVersion(numpy, '1.0', '2.0')
+ self.assertEqual(
+ str(error.exception), 'numpy has version 2.3, but version'
+ ' at or above 1.0 and below 2.0 is required')
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/__init__.py b/systrace/catapult/common/py_utils/py_utils/refactor/__init__.py
index e3fbb5f..938ff68 100644
--- a/systrace/catapult/common/py_utils/py_utils/refactor/__init__.py
+++ b/systrace/catapult/common/py_utils/py_utils/refactor/__init__.py
@@ -12,7 +12,7 @@ import functools
import multiprocessing
# pylint: disable=wildcard-import
-from py_utils.refactor.annotated_symbol import *
+from py_utils.refactor.annotated_symbol import * # pylint: disable=redefined-builtin
from py_utils.refactor.module import Module
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/__init__.py b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/__init__.py
index 610bc15..1bed84b 100644
--- a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/__init__.py
+++ b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/__init__.py
@@ -6,7 +6,7 @@
from py_utils.refactor.annotated_symbol.class_definition import *
from py_utils.refactor.annotated_symbol.function_definition import *
from py_utils.refactor.annotated_symbol.import_statement import *
-from py_utils.refactor.annotated_symbol.reference import *
+from py_utils.refactor.annotated_symbol.reference import * # pylint: disable=redefined-builtin
from py_utils.refactor import snippet
@@ -55,7 +55,7 @@ def _AnnotateNode(node):
if not isinstance(node, snippet.Symbol):
return node
- children = map(_AnnotateNode, node.children)
+ children = [_AnnotateNode(c) for c in node.children]
for symbol_type in ANNOTATED_GROUPINGS:
annotated_grouping = symbol_type.Annotate(children)
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/base_symbol.py b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/base_symbol.py
index 2e28e89..5e473bc 100644
--- a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/base_symbol.py
+++ b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/base_symbol.py
@@ -2,7 +2,11 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
from py_utils.refactor import snippet
+from six.moves import range # pylint: disable=redefined-builtin
class AnnotatedSymbol(snippet.Symbol):
@@ -23,7 +27,7 @@ class AnnotatedSymbol(snippet.Symbol):
return super(AnnotatedSymbol, self).__setattr__(name, value)
def Cut(self, child):
- for i in xrange(len(self._children)):
+ for i in range(len(self._children)):
if self._children[i] == child:
self._modified = True
del self._children[i]
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/class_definition.py b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/class_definition.py
index 814958f..a83ac96 100644
--- a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/class_definition.py
+++ b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/class_definition.py
@@ -13,8 +13,6 @@ __all__ = [
class Class(base_symbol.AnnotatedSymbol):
- # pylint: disable=abstract-class-not-used
-
@classmethod
def Annotate(cls, symbol_type, children):
if symbol_type != symbol.stmt:
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/function_definition.py b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/function_definition.py
index 50a1672..384d3cf 100644
--- a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/function_definition.py
+++ b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/function_definition.py
@@ -13,8 +13,6 @@ __all__ = [
class Function(base_symbol.AnnotatedSymbol):
- # pylint: disable=abstract-class-not-used
-
@classmethod
def Annotate(cls, symbol_type, children):
if symbol_type != symbol.stmt:
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/import_statement.py b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/import_statement.py
index 5c38c10..6318eff 100644
--- a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/import_statement.py
+++ b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/import_statement.py
@@ -2,13 +2,17 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import itertools
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
import keyword
import symbol
import token
-from py_utils.refactor.annotated_symbol import base_symbol
from py_utils.refactor import snippet
+from py_utils.refactor.annotated_symbol import base_symbol
+from six.moves import zip_longest # pylint: disable=redefined-builtin
__all__ = [
@@ -39,11 +43,11 @@ class DottedName(base_symbol.AnnotatedSymbol):
raise ValueError('%s is a reserved keyword.' % value_part)
# If we have too many children, cut the list down to size.
+ # pylint: disable=attribute-defined-outside-init
self._children = self._children[:len(value_parts)*2-1]
# Update child nodes.
- for child, value_part in itertools.izip_longest(
- self._children[::2], value_parts):
+ for child, value_part in zip_longest(self._children[::2], value_parts):
if child:
# Modify existing children. This helps preserve comments and spaces.
child.value = value_part
@@ -82,18 +86,22 @@ class AsName(base_symbol.AnnotatedSymbol):
raise ValueError('%s is a reserved keyword.' % value)
if value:
+ # pylint: disable=access-member-before-definition
if len(self.children) < 3:
# If we currently have no alias, add one.
+ # pylint: disable=access-member-before-definition
self.children.append(
snippet.TokenSnippet.Create(token.NAME, 'as', (0, 1)))
+ # pylint: disable=access-member-before-definition
self.children.append(
snippet.TokenSnippet.Create(token.NAME, value, (0, 1)))
else:
# We already have an alias. Just update the value.
+ # pylint: disable=access-member-before-definition
self.children[2].value = value
else:
# Removing the alias. Strip the "as foo".
- self.children = [self.children[0]]
+ self.children = [self.children[0]] # pylint: disable=line-too-long, attribute-defined-outside-init
class Import(base_symbol.AnnotatedSymbol):
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/reference.py b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/reference.py
index 757c57f..9a273d8 100644
--- a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/reference.py
+++ b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/reference.py
@@ -2,12 +2,17 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import itertools
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
import symbol
import token
-from py_utils.refactor.annotated_symbol import base_symbol
from py_utils.refactor import snippet
+from py_utils.refactor.annotated_symbol import base_symbol
+from six.moves import range # pylint: disable=redefined-builtin
+from six.moves import zip_longest # pylint: disable=redefined-builtin
__all__ = [
@@ -25,7 +30,7 @@ class Reference(base_symbol.AnnotatedSymbol):
if not nodes[0].children or nodes[0].children[0].type != token.NAME:
return None
- for i in xrange(1, len(nodes)):
+ for i in range(1, len(nodes)):
if not nodes:
break
if nodes[i].type != symbol.trailer:
@@ -58,11 +63,11 @@ class Reference(base_symbol.AnnotatedSymbol):
value_parts = value.split('.')
# If we have too many children, cut the list down to size.
+ # pylint: disable=attribute-defined-outside-init
self._children = self._children[:len(value_parts)]
# Update child nodes.
- for child, value_part in itertools.izip_longest(
- self._children, value_parts):
+ for child, value_part in zip_longest(self._children, value_parts):
if child:
# Modify existing children. This helps preserve comments and spaces.
child.children[-1].value = value_part
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/offset_token.py b/systrace/catapult/common/py_utils/py_utils/refactor/offset_token.py
index 5fa953e..deca085 100644
--- a/systrace/catapult/common/py_utils/py_utils/refactor/offset_token.py
+++ b/systrace/catapult/common/py_utils/py_utils/refactor/offset_token.py
@@ -1,18 +1,23 @@
+# Lint as: python2, python3
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
import collections
import itertools
import token
import tokenize
+from six.moves import zip # pylint: disable=redefined-builtin
def _Pairwise(iterable):
"""s -> (None, s0), (s0, s1), (s1, s2), (s2, s3), ..."""
a, b = itertools.tee(iterable)
a = itertools.chain((None,), a)
- return itertools.izip(a, b)
+ return zip(a, b)
class OffsetToken(object):
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/snippet.py b/systrace/catapult/common/py_utils/py_utils/refactor/snippet.py
index b98561a..7056abf 100644
--- a/systrace/catapult/common/py_utils/py_utils/refactor/snippet.py
+++ b/systrace/catapult/common/py_utils/py_utils/refactor/snippet.py
@@ -2,6 +2,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import print_function
+
import parser
import symbol
import sys
@@ -140,13 +142,13 @@ class TokenSnippet(Snippet):
def PrintTree(self, indent=0, stream=sys.stdout):
stream.write(' ' * indent)
if not self.tokens:
- print >> stream, self.type_name
+ print(self.type_name, file=stream)
return
- print >> stream, '%-4s' % self.type_name, repr(self.tokens[0].string)
+ print('%-4s' % self.type_name, repr(self.tokens[0].string), file=stream)
for tok in self.tokens[1:]:
stream.write(' ' * indent)
- print >> stream, ' ' * max(len(self.type_name), 4), repr(tok.string)
+ print(' ' * max(len(self.type_name), 4), repr(tok.string), file=stream)
class Symbol(Snippet):
@@ -191,10 +193,10 @@ class Symbol(Snippet):
# If there's only one child, collapse it onto the same line.
node = self
while len(node.children) == 1 and len(node.children[0].children) == 1:
- print >> stream, node.type_name,
+ print(node.type_name, end=' ', file=stream)
node = node.children[0]
- print >> stream, node.type_name
+ print(node.type_name, file=stream)
for child in node.children:
child.PrintTree(indent + 2, stream)
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor_util/move.py b/systrace/catapult/common/py_utils/py_utils/refactor_util/move.py
index d68f93b..6d0a7cb 100644
--- a/systrace/catapult/common/py_utils/py_utils/refactor_util/move.py
+++ b/systrace/catapult/common/py_utils/py_utils/refactor_util/move.py
@@ -2,6 +2,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import print_function
+
import functools
import os
import sys
@@ -35,7 +37,7 @@ def _Update(moves, module):
if move.UpdateImportAndReferences(module, import_statement):
break
except NotImplementedError as e:
- print >> sys.stderr, 'Error updating %s: %s' % (module.file_path, e)
+ print('Error updating %s: %s' % (module.file_path, e), file=sys.stderr)
class _Move(object):
diff --git a/systrace/catapult/common/py_utils/py_utils/retry_util.py b/systrace/catapult/common/py_utils/py_utils/retry_util.py
index e5826ca..a11bd80 100644
--- a/systrace/catapult/common/py_utils/py_utils/retry_util.py
+++ b/systrace/catapult/common/py_utils/py_utils/retry_util.py
@@ -1,9 +1,13 @@
# Copyright 2018 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
import functools
import logging
import time
+from six.moves import range # pylint: disable=redefined-builtin
def RetryOnException(exc_type, retries):
@@ -42,7 +46,7 @@ def RetryOnException(exc_type, retries):
def Wrapper(*args, **kwargs):
wait = 1
kwargs.setdefault('retries', retries)
- for _ in xrange(kwargs['retries']):
+ for _ in range(kwargs['retries']):
try:
return f(*args, **kwargs)
except exc_type as exc:
diff --git a/systrace/catapult/common/py_utils/py_utils/retry_util_unittest.py b/systrace/catapult/common/py_utils/py_utils/retry_util_unittest.py
index 151f88e..f24577f 100644
--- a/systrace/catapult/common/py_utils/py_utils/retry_util_unittest.py
+++ b/systrace/catapult/common/py_utils/py_utils/retry_util_unittest.py
@@ -1,9 +1,10 @@
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import mock
import unittest
+import mock
+
from py_utils import retry_util
diff --git a/systrace/catapult/common/py_utils/py_utils/shell_util.py b/systrace/catapult/common/py_utils/py_utils/shell_util.py
index 2a529c8..6af7f8e 100644
--- a/systrace/catapult/common/py_utils/py_utils/shell_util.py
+++ b/systrace/catapult/common/py_utils/py_utils/shell_util.py
@@ -4,6 +4,8 @@
#
# Shell scripting helpers (created for Telemetry dependency roll scripts).
+from __future__ import print_function
+
import os as _os
import shutil as _shutil
import subprocess as _subprocess
@@ -14,12 +16,12 @@ from contextlib import contextmanager as _contextmanager
def ScopedChangeDir(new_path):
old_path = _os.getcwd()
_os.chdir(new_path)
- print '> cd', _os.getcwd()
+ print('> cd', _os.getcwd())
try:
yield
finally:
_os.chdir(old_path)
- print '> cd', old_path
+ print('> cd', old_path)
@_contextmanager
def ScopedTempDir():
@@ -36,5 +38,5 @@ def CallProgram(path_parts, *args, **kwargs):
args = [_os.path.join(*path_parts)] + list(args)
env = dict(_os.environ)
env.update(kwargs)
- print '>', ' '.join(args)
+ print('>', ' '.join(args))
_subprocess.check_call(args, env=env)
diff --git a/systrace/catapult/common/py_utils/py_utils/slots_metaclass_unittest.py b/systrace/catapult/common/py_utils/py_utils/slots_metaclass_unittest.py
index 79bb343..fe21b27 100644
--- a/systrace/catapult/common/py_utils/py_utils/slots_metaclass_unittest.py
+++ b/systrace/catapult/common/py_utils/py_utils/slots_metaclass_unittest.py
@@ -2,15 +2,21 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
import unittest
from py_utils import slots_metaclass
+import six
+
class SlotsMetaclassUnittest(unittest.TestCase):
def testSlotsMetaclass(self):
- class NiceClass(object):
- __metaclass__ = slots_metaclass.SlotsMetaclass
+
+ class NiceClass(six.with_metaclass(slots_metaclass.SlotsMetaclass, object)):
__slots__ = '_nice',
def __init__(self, nice):
diff --git a/systrace/catapult/common/py_utils/py_utils/tempfile_ext.py b/systrace/catapult/common/py_utils/py_utils/tempfile_ext.py
index 394ad5b..ba68c52 100644
--- a/systrace/catapult/common/py_utils/py_utils/tempfile_ext.py
+++ b/systrace/catapult/common/py_utils/py_utils/tempfile_ext.py
@@ -2,8 +2,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-
import contextlib
+import os
import shutil
import tempfile
@@ -28,3 +28,32 @@ def NamedTemporaryDirectory(suffix='', prefix='tmp', dir=None):
yield d
finally:
shutil.rmtree(d)
+
+
+@contextlib.contextmanager
+def NamedTemporaryFile(mode='w+b', suffix='', prefix='tmp'):
+ """A conext manager to hold a named temporary file.
+
+ It's similar to Python's tempfile.NamedTemporaryFile except:
+ - The file is _not_ deleted when you close the temporary file handle, so you
+ can close it and then use the name of the file to re-open it later.
+ - The file *is* always deleted when exiting the context managed code.
+ """
+ with NamedTemporaryDirectory() as temp_dir:
+ yield tempfile.NamedTemporaryFile(
+ mode=mode, suffix=suffix, prefix=prefix, dir=temp_dir, delete=False)
+
+
+@contextlib.contextmanager
+def TemporaryFileName(prefix='tmp', suffix=''):
+ """A context manager to just get the path to a file that does not exist.
+
+ The parent directory of the file is a newly clreated temporary directory,
+ and the name of the file is just `prefix + suffix`. The file istelf is not
+ created, you are in fact guaranteed that it does not exit.
+
+ The entire parent directory, possibly including the named temporary file and
+ any sibling files, is entirely deleted when exiting the context managed code.
+ """
+ with NamedTemporaryDirectory() as temp_dir:
+ yield os.path.join(temp_dir, prefix + suffix)
diff --git a/systrace/catapult/common/py_utils/py_utils/tempfile_ext_unittest.py b/systrace/catapult/common/py_utils/py_utils/tempfile_ext_unittest.py
index 6844623..76a0efd 100644
--- a/systrace/catapult/common/py_utils/py_utils/tempfile_ext_unittest.py
+++ b/systrace/catapult/common/py_utils/py_utils/tempfile_ext_unittest.py
@@ -2,14 +2,15 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import filecmp
import os
+import shutil
from py_utils import tempfile_ext
from pyfakefs import fake_filesystem_unittest
class NamedTemporaryDirectoryTest(fake_filesystem_unittest.TestCase):
-
def setUp(self):
self.setUpPyfakefs()
@@ -37,3 +38,37 @@ class NamedTemporaryDirectoryTest(fake_filesystem_unittest.TestCase):
self.fs.CreateDirectory(test_dir)
with tempfile_ext.NamedTemporaryDirectory(dir=test_dir) as d:
self.assertEquals(test_dir, os.path.dirname(d))
+
+
+class TemporaryFilesTest(fake_filesystem_unittest.TestCase):
+ def setUp(self):
+ self.setUpPyfakefs()
+
+ def tearDown(self):
+ self.tearDownPyfakefs()
+
+ def testNamedTemporaryFile(self):
+ with tempfile_ext.NamedTemporaryFile() as f:
+ self.assertTrue(os.path.isfile(f.name))
+ f.write('<data>')
+ f.close()
+ self.assertTrue(os.path.exists(f.name))
+ with open(f.name) as f2:
+ self.assertEqual(f2.read(), '<data>')
+
+ self.assertFalse(os.path.exists(f.name))
+
+ def testTemporaryFileName(self):
+ with tempfile_ext.TemporaryFileName('foo') as filepath:
+ self.assertTrue(os.path.basename(filepath), 'foo')
+ self.assertFalse(os.path.exists(filepath))
+
+ with open(filepath, 'w') as f:
+ f.write('<data>')
+ self.assertTrue(os.path.exists(filepath))
+
+ shutil.copyfile(filepath, filepath + '.bak')
+ self.assertTrue(filecmp.cmp(filepath, filepath + '.bak'))
+
+ self.assertFalse(os.path.exists(filepath))
+ self.assertFalse(os.path.exists(os.path.dirname(filepath)))
diff --git a/systrace/catapult/common/py_utils/py_utils/xvfb.py b/systrace/catapult/common/py_utils/py_utils/xvfb.py
index c09f3e3..06ce7dd 100644
--- a/systrace/catapult/common/py_utils/py_utils/xvfb.py
+++ b/systrace/catapult/common/py_utils/py_utils/xvfb.py
@@ -10,6 +10,8 @@ import time
def ShouldStartXvfb():
+ # TODO(crbug.com/973847): Note that you can locally change this to return
+ # False to diagnose timeouts for dev server tests.
return platform.system() == 'Linux'
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs.py
index dfcb5e6..40b01bb 100644
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs.py
+++ b/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs.py
@@ -2,14 +2,19 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
import codecs
+import collections
import os
import sys
-import collections
-import StringIO
+
+import six
-class WithableStringIO(StringIO.StringIO):
+class WithableStringIO(six.StringIO):
def __enter__(self, *args):
return self
@@ -23,7 +28,7 @@ class FakeFS(object):
def __init__(self, initial_filenames_and_contents=None):
self._file_contents = {}
if initial_filenames_and_contents:
- for k, v in initial_filenames_and_contents.iteritems():
+ for k, v in six.iteritems(initial_filenames_and_contents):
self._file_contents[k] = v
self._bound = False
@@ -106,7 +111,7 @@ class FakeFS(object):
def _FakeWalk(self, top):
assert os.path.isabs(top)
- all_filenames = self._file_contents.keys()
+ all_filenames = list(self._file_contents.keys())
pending_prefixes = collections.deque()
pending_prefixes.append(top)
visited_prefixes = set()
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs_unittest.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs_unittest.py
index 0825013..7e225f5 100644
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs_unittest.py
+++ b/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs_unittest.py
@@ -34,19 +34,19 @@ class FakeFSUnittest(unittest.TestCase):
fs.AddFile('/a.txt', 'foobar')
with fs:
gen = os.walk(os.path.normpath('/'))
- r = gen.next()
+ r = next(gen)
self.assertEquals((os.path.normpath('/'), ['x'], ['a.txt']), r)
- r = gen.next()
+ r = next(gen)
self.assertEquals((os.path.normpath('/x'), ['w', 'w2'], ['y.txt']), r)
- r = gen.next()
+ r = next(gen)
self.assertEquals((os.path.normpath('/x/w'), [], ['z.txt']), r)
- r = gen.next()
+ r = next(gen)
self.assertEquals((os.path.normpath('/x/w2'), ['w3'], []), r)
- r = gen.next()
+ r = next(gen)
self.assertEquals((os.path.normpath('/x/w2/w3'), [], ['z3.txt']), r)
self.assertRaises(StopIteration, gen.next)
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/generate.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/generate.py
index 6368380..484c705 100644
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/generate.py
+++ b/systrace/catapult/common/py_vulcanize/py_vulcanize/generate.py
@@ -2,14 +2,23 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
import os
-import sys
import subprocess
+import sys
import tempfile
-import StringIO
from py_vulcanize import html_generation_controller
+try:
+ from six import StringIO
+except ImportError:
+ from io import StringIO
+
+
html_warning_message = """
@@ -45,7 +54,7 @@ css_warning_message = """
def _AssertIsUTF8(f):
- if isinstance(f, StringIO.StringIO):
+ if isinstance(f, StringIO):
return
assert f.encoding == 'utf-8'
@@ -79,7 +88,7 @@ def GenerateJS(load_sequence,
dir_for_include_tag_root=None,
minify=False,
report_sizes=False):
- f = StringIO.StringIO()
+ f = StringIO()
GenerateJSToFile(f,
load_sequence,
use_include_tags_for_scripts,
@@ -106,7 +115,7 @@ def GenerateJSToFile(f,
if not minify:
flatten_to_file = f
else:
- flatten_to_file = StringIO.StringIO()
+ flatten_to_file = StringIO()
for module in load_sequence:
module.AppendJSContentsToFile(flatten_to_file,
@@ -120,7 +129,7 @@ def GenerateJSToFile(f,
if report_sizes:
for module in load_sequence:
- s = StringIO.StringIO()
+ s = StringIO()
module.AppendJSContentsToFile(s,
use_include_tags_for_scripts,
dir_for_include_tag_root)
@@ -140,7 +149,8 @@ def GenerateJSToFile(f,
sln = '.'.join(parts[:2])
# Output
- print '%i\t%s\t%s\t%s\t%s' % (len(js), min_js_size, module.name, tln, sln)
+ print(('%i\t%s\t%s\t%s\t%s' %
+ (len(js), min_js_size, module.name, tln, sln)))
sys.stdout.flush()
@@ -192,7 +202,7 @@ def _MinifyCSS(css_text):
def GenerateStandaloneHTMLAsString(*args, **kwargs):
- f = StringIO.StringIO()
+ f = StringIO()
GenerateStandaloneHTMLToFile(f, *args, **kwargs)
return f.getvalue()
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/html_module_unittest.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/html_module_unittest.py
index fb4af16..e8438f4 100644
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/html_module_unittest.py
+++ b/systrace/catapult/common/py_vulcanize/py_vulcanize/html_module_unittest.py
@@ -2,9 +2,12 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
import os
import unittest
-import StringIO
from py_vulcanize import fake_fs
from py_vulcanize import generate
@@ -14,6 +17,7 @@ from py_vulcanize import parse_html_deps
from py_vulcanize import project as project_module
from py_vulcanize import resource
from py_vulcanize import resource_loader as resource_loader
+import six
class ResourceWithFakeContents(resource.Resource):
@@ -40,7 +44,7 @@ class FakeLoader(object):
self._source_paths = source_paths
self._file_contents = {}
if initial_filenames_and_contents:
- for k, v in initial_filenames_and_contents.iteritems():
+ for k, v in six.iteritems(initial_filenames_and_contents):
self._file_contents[k] = v
def FindResourceGivenAbsolutePath(self, absolute_path):
@@ -272,7 +276,7 @@ console.log('/raw/raw_script.js was written');
loader = resource_loader.ResourceLoader(project)
my_component = loader.LoadModule(module_name='a.b.my_component')
- f = StringIO.StringIO()
+ f = six.StringIO()
my_component.AppendJSContentsToFile(
f,
use_include_tags_for_scripts=False,
@@ -309,7 +313,7 @@ console.log('/raw/raw_script.js was written');
set([os.path.normpath('/tmp/a/b/my_component.html'),
os.path.normpath('/tmp/a/something.jpg')]))
- f = StringIO.StringIO()
+ f = six.StringIO()
ctl = html_generation_controller.HTMLGenerationController()
my_component.AppendHTMLContentsToFile(f, ctl)
html = f.getvalue().rstrip()
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/module.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/module.py
index bd6a68f..d27f350 100644
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/module.py
+++ b/systrace/catapult/common/py_vulcanize/py_vulcanize/module.py
@@ -11,11 +11,16 @@ template objects, raw JavaScript, or other modules.
Other resources include HTML templates, raw JavaScript files, and stylesheets.
"""
-import os
-import inspect
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
import codecs
+import inspect
+import os
from py_vulcanize import js_utils
+import six
class DepsException(Exception):
@@ -92,7 +97,7 @@ class Module(object):
"""
def __init__(self, loader, name, resource, load_resource=True):
- assert isinstance(name, basestring), 'Got %s instead' % repr(name)
+ assert isinstance(name, six.string_types), 'Got %s instead' % repr(name)
global _next_module_id
self._id = _next_module_id
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py
index 4a0888c..88ce218 100644
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py
+++ b/systrace/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py
@@ -2,13 +2,18 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
import os
import sys
+from py_vulcanize import html_generation_controller
from py_vulcanize import js_utils
from py_vulcanize import module
from py_vulcanize import strip_js_comments
-from py_vulcanize import html_generation_controller
+import six
def _AddToPathIfNeeded(path):
@@ -53,7 +58,7 @@ class InlineScript(Script):
@property
def contents(self):
- return unicode(self._soup.string)
+ return six.text_type(self._soup.string)
@property
def stripped_contents(self):
@@ -187,13 +192,13 @@ class HTMLModuleParserResults(object):
@property
def inline_stylesheets(self):
tags = self._soup.findAll('style')
- return [unicode(t.string) for t in tags]
+ return [six.text_type(t.string) for t in tags]
def YieldHTMLInPieces(self, controller, minify=False):
yield self.GenerateHTML(controller, minify)
def GenerateHTML(self, controller, minify=False, prettify=False):
- soup = _CreateSoupWithoutHeadOrBody(unicode(self._soup))
+ soup = _CreateSoupWithoutHeadOrBody(six.text_type(self._soup))
# Remove declaration.
for x in soup.contents:
@@ -223,7 +228,7 @@ class HTMLModuleParserResults(object):
# Process all in-line styles.
inline_styles = soup.findAll('style')
for style in inline_styles:
- html = controller.GetHTMLForInlineStylesheet(unicode(style.string))
+ html = controller.GetHTMLForInlineStylesheet(six.text_type(style.string))
if html:
ns = soup.new_tag('style')
ns.append(bs4.NavigableString(html))
@@ -252,7 +257,7 @@ class HTMLModuleParserResults(object):
return soup.prettify('utf-8').strip()
# We are done.
- return unicode(soup).strip()
+ return six.text_type(soup).strip()
@property
def html_contents_without_links_and_script(self):
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/project.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/project.py
index d8f9ca4..7a16988 100644
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/project.py
+++ b/systrace/catapult/common/py_vulcanize/py_vulcanize/project.py
@@ -2,11 +2,19 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
import collections
import os
-import cStringIO
+
+try:
+ from six import StringIO
+except ImportError:
+ from io import StringIO
from py_vulcanize import resource_loader
+import six
def _FindAllFilesRecursive(source_paths):
@@ -209,7 +217,7 @@ class _Graph(object):
self.edges = []
def AddModule(self, m):
- f = cStringIO.StringIO()
+ f = StringIO()
m.AppendJSContentsToFile(f, False, None)
attrs = {
@@ -218,7 +226,7 @@ class _Graph(object):
f.close()
- attr_items = ['%s="%s"' % (x, y) for x, y in attrs.iteritems()]
+ attr_items = ['%s="%s"' % (x, y) for x, y in six.iteritems(attrs)]
node = 'M%i [%s];' % (m.id, ','.join(attr_items))
self.nodes.append(node)
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/strip_js_comments.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/strip_js_comments.py
index d63c667..73c3a88 100644
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/strip_js_comments.py
+++ b/systrace/catapult/common/py_vulcanize/py_vulcanize/strip_js_comments.py
@@ -51,14 +51,14 @@ def StripJSComments(text):
token_stream = _TokenizeJS(text).__iter__()
while True:
try:
- t = token_stream.next()
+ t = next(token_stream)
except StopIteration:
break
if t == '//':
while True:
try:
- t2 = token_stream.next()
+ t2 = next(token_stream)
if t2 == '\n':
break
except StopIteration:
@@ -67,7 +67,7 @@ def StripJSComments(text):
nesting = 1
while True:
try:
- t2 = token_stream.next()
+ t2 = next(token_stream)
if t2 == '/*':
nesting += 1
elif t2 == '*/':
diff --git a/systrace/catapult/dependency_manager/PRESUBMIT.py b/systrace/catapult/dependency_manager/PRESUBMIT.py
index a34480c..04039d5 100644
--- a/systrace/catapult/dependency_manager/PRESUBMIT.py
+++ b/systrace/catapult/dependency_manager/PRESUBMIT.py
@@ -29,4 +29,5 @@ def _GetPathsToPrepend(input_api):
input_api.os_path.join(catapult_dir, 'third_party', 'mock'),
input_api.os_path.join(catapult_dir, 'third_party', 'pyfakefs'),
+ input_api.os_path.join(catapult_dir, 'third_party', 'zipfile'),
]
diff --git a/systrace/catapult/dependency_manager/dependency_manager/__init__.py b/systrace/catapult/dependency_manager/dependency_manager/__init__.py
index 68efbdb..84cca5a 100644
--- a/systrace/catapult/dependency_manager/dependency_manager/__init__.py
+++ b/systrace/catapult/dependency_manager/dependency_manager/__init__.py
@@ -25,7 +25,7 @@ _AddDirToPythonPath(CATAPULT_THIRD_PARTY_PATH, 'zipfile')
_AddDirToPythonPath(DEPENDENCY_MANAGER_PATH)
-# pylint: disable=unused-import
+# pylint: disable=unused-import,wrong-import-position
from .archive_info import ArchiveInfo
from .base_config import BaseConfig
from .cloud_storage_info import CloudStorageInfo
diff --git a/systrace/catapult/dependency_manager/dependency_manager/archive_info.py b/systrace/catapult/dependency_manager/dependency_manager/archive_info.py
index ff13f90..f28028c 100644
--- a/systrace/catapult/dependency_manager/dependency_manager/archive_info.py
+++ b/systrace/catapult/dependency_manager/dependency_manager/archive_info.py
@@ -48,7 +48,7 @@ class ArchiveInfo(object):
# Remove stale unzip results
if self._stale_unzip_path_glob:
for path in glob.glob(self._stale_unzip_path_glob):
- shutil.rmtree(path)
+ shutil.rmtree(path, ignore_errors=True)
# TODO(aiolos): Replace UnzipFile with zipfile.extractall once python
# version 2.7.4 or later can safely be assumed.
dependency_manager_util.UnzipArchive(
@@ -62,8 +62,7 @@ class ArchiveInfo(object):
def ShouldUnzipArchive(self):
if not self._has_minimum_data:
raise exceptions.ArchiveError(
- 'Missing needed info to unzip archive. Known data: %s',
- self.data_string)
+ 'Missing needed info to unzip archive. Know data: %s' % self)
return not os.path.exists(self._dependency_path)
@property
diff --git a/systrace/catapult/dependency_manager/dependency_manager/base_config.py b/systrace/catapult/dependency_manager/dependency_manager/base_config.py
index c735688..a23d00a 100644
--- a/systrace/catapult/dependency_manager/dependency_manager/base_config.py
+++ b/systrace/catapult/dependency_manager/dependency_manager/base_config.py
@@ -190,6 +190,26 @@ class BaseConfig(object):
def config_path(self):
return self._config_path
+ def AddNewDependency(
+ self, dependency, cloud_storage_base_folder, cloud_storage_bucket):
+ self._ValidateIsConfigWritable()
+ if dependency in self:
+ raise ValueError('Config already contains dependency %s' % dependency)
+ self._config_data[dependency] = {
+ 'cloud_storage_base_folder': cloud_storage_base_folder,
+ 'cloud_storage_bucket': cloud_storage_bucket,
+ 'file_info': {},
+ }
+
+ def SetDownloadPath(self, dependency, platform, download_path):
+ self._ValidateIsConfigWritable()
+ if not dependency in self:
+ raise ValueError('Config does not contain dependency %s' % dependency)
+ platform_dicts = self._config_data[dependency]['file_info']
+ if platform not in platform_dicts:
+ platform_dicts[platform] = {}
+ platform_dicts[platform]['download_path'] = download_path
+
def AddCloudStorageDependencyUpdateJob(
self, dependency, platform, dependency_path, version=None,
execute_job=True):
@@ -293,6 +313,14 @@ class BaseConfig(object):
return self._GetPlatformData(
dependency, platform, data_type='version_in_cs')
+ def __contains__(self, dependency):
+ """ Returns whether this config contains |dependency|
+
+ Args:
+ dependency: the string name of dependency
+ """
+ return dependency in self._config_data
+
def _IsDirty(self):
with open(self._config_path, 'r') as fstream:
curr_config_data = json.load(fstream)
diff --git a/systrace/catapult/dependency_manager/dependency_manager/base_config_unittest.py b/systrace/catapult/dependency_manager/dependency_manager/base_config_unittest.py
index 0dc775b..c10d2a7 100755
--- a/systrace/catapult/dependency_manager/dependency_manager/base_config_unittest.py
+++ b/systrace/catapult/dependency_manager/dependency_manager/base_config_unittest.py
@@ -1119,6 +1119,48 @@ class BaseConfigDataManipulationUnittests(fake_filesystem_unittest.TestCase):
self.fs.CreateFile(self.file_path,
contents='\n'.join(self.expected_file_lines))
+ def testContaining(self):
+ config = dependency_manager.BaseConfig(self.file_path)
+ self.assertTrue('dep1' in config)
+ self.assertTrue('dep2' in config)
+ self.assertFalse('dep3' in config)
+
+ def testAddNewDependencyNotWriteable(self):
+ config = dependency_manager.BaseConfig(self.file_path)
+ with self.assertRaises(dependency_manager.ReadWriteError):
+ config.AddNewDependency('dep4', 'foo', 'bar')
+
+ def testAddNewDependencyWriteableButDependencyAlreadyExists(self):
+ config = dependency_manager.BaseConfig(self.file_path, writable=True)
+ with self.assertRaises(ValueError):
+ config.AddNewDependency('dep2', 'foo', 'bar')
+
+ def testAddNewDependencySuccessfully(self):
+ config = dependency_manager.BaseConfig(self.file_path, writable=True)
+ config.AddNewDependency('dep3', 'foo', 'bar')
+ self.assertTrue('dep3' in config)
+
+ def testSetDownloadPathNotWritable(self):
+ config = dependency_manager.BaseConfig(self.file_path)
+ with self.assertRaises(dependency_manager.ReadWriteError):
+ config.SetDownloadPath('dep2', 'plat1', '../../relative/dep1/path1')
+
+ def testSetDownloadPathOnExistingPlatformSuccesfully(self):
+ config = dependency_manager.BaseConfig(self.file_path, writable=True)
+ download_path = '../../relative/dep1/foo.bar'
+ config.SetDownloadPath('dep2', 'plat1', download_path)
+ self.assertEqual(
+ download_path,
+ config._GetPlatformData('dep2', 'plat1', 'download_path'))
+
+ def testSetDownloadPathOnNewPlatformSuccesfully(self):
+ config = dependency_manager.BaseConfig(self.file_path, writable=True)
+ download_path = '../../relative/dep1/foo.bar'
+ config.SetDownloadPath('dep2', 'newplat', download_path)
+ self.assertEqual(
+ download_path,
+ config._GetPlatformData('dep2', 'newplat', 'download_path'))
+
def testSetPlatformDataFailureNotWritable(self):
config = dependency_manager.BaseConfig(self.file_path)
@@ -1410,7 +1452,6 @@ class BaseConfigTest(unittest.TestCase):
self.assertEqual(self.GetConfigDataFromDict(self.empty_dict),
config._config_data)
-
@mock.patch('dependency_manager.dependency_info.DependencyInfo')
@mock.patch('os.path')
@mock.patch('__builtin__.open')
diff --git a/systrace/catapult/dependency_manager/dependency_manager/cloud_storage_info_unittest.py b/systrace/catapult/dependency_manager/dependency_manager/cloud_storage_info_unittest.py
index 699cd50..844465d 100644
--- a/systrace/catapult/dependency_manager/dependency_manager/cloud_storage_info_unittest.py
+++ b/systrace/catapult/dependency_manager/dependency_manager/cloud_storage_info_unittest.py
@@ -144,7 +144,7 @@ class TestGetRemotePath(fake_filesystem_unittest.TestCase):
# All of the needed information is given, but the downloaded path doesn't
# exists after calling cloud storage.
self.fs.RemoveObject(self.download_path)
- cs_get_mock.side_effect = [True]
+ cs_get_mock.side_effect = [True] # pylint: disable=redefined-variable-type
self.assertRaises(
exceptions.FileNotFoundError, self.cs_info.GetRemotePath)
diff --git a/systrace/catapult/dependency_manager/dependency_manager/dependency_info.py b/systrace/catapult/dependency_manager/dependency_manager/dependency_info.py
index 942d57e..899657e 100644
--- a/systrace/catapult/dependency_manager/dependency_manager/dependency_info.py
+++ b/systrace/catapult/dependency_manager/dependency_manager/dependency_info.py
@@ -16,7 +16,7 @@ class DependencyInfo(object):
for error messages to improve debugging.
Optional:
- local_paths: A list of paths to search in order for a local file.
+ local_path_info: A LocalPathInfo instance.
cloud_storage_info: An instance of CloudStorageInfo.
"""
# TODO(aiolos): update the above doc string for A) the usage of zip files
diff --git a/systrace/catapult/dependency_manager/dependency_manager/local_path_info.py b/systrace/catapult/dependency_manager/dependency_manager/local_path_info.py
index 0103e8f..8ac0152 100644
--- a/systrace/catapult/dependency_manager/dependency_manager/local_path_info.py
+++ b/systrace/catapult/dependency_manager/dependency_manager/local_path_info.py
@@ -8,21 +8,50 @@ import os
class LocalPathInfo(object):
def __init__(self, path_priority_groups):
+ """Container for a set of local file paths where a given dependency
+ can be stored.
+
+ Organized as a list of groups, where each group is itself a file path list.
+ See GetLocalPath() to understand how they are used.
+
+ Args:
+ path_priority_groups: Can be either None, or a list of file path
+ strings (corresponding to a list of groups, where each group has
+ a single file path), or a list of a list of file path strings
+ (i.e. a list of groups).
+ """
self._path_priority_groups = self._ParseLocalPaths(path_priority_groups)
def GetLocalPath(self):
+ """Look for a local file, and return its path.
+
+ Looks for the first group which has at least one existing file path. Then
+ returns the most-recent of these files.
+
+ Returns:
+ Local file path, if found, or None otherwise.
+ """
for priority_group in self._path_priority_groups:
- priority_group = filter(os.path.exists, priority_group)
+ priority_group = [g for g in priority_group if os.path.exists(g)]
if not priority_group:
continue
return max(priority_group, key=lambda path: os.stat(path).st_mtime)
return None
def IsPathInLocalPaths(self, path):
+ """Returns true if |path| is in one of this instance's file path lists."""
return any(
path in priority_group for priority_group in self._path_priority_groups)
def Update(self, local_path_info):
+ """Update this object from the content of another LocalPathInfo instance.
+
+ Any file path from |local_path_info| that is not already contained in the
+ current instance will be added into new groups to it.
+
+ Args:
+ local_path_info: Another LocalPathInfo instance, or None.
+ """
if not local_path_info:
return
for priority_group in local_path_info._path_priority_groups:
diff --git a/systrace/catapult/dependency_manager/dependency_manager/local_path_info_unittest.py b/systrace/catapult/dependency_manager/dependency_manager/local_path_info_unittest.py
new file mode 100644
index 0000000..83921fa
--- /dev/null
+++ b/systrace/catapult/dependency_manager/dependency_manager/local_path_info_unittest.py
@@ -0,0 +1,136 @@
+# Copyright 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+
+from pyfakefs import fake_filesystem_unittest
+
+import dependency_manager
+
+def _CreateFile(path):
+ """Create file at specific |path|, with specific |content|."""
+ with open(path, 'wb') as f:
+ f.write('x')
+
+
+def _ChangeFileTime(path, time0, days):
+ new_time = time0 + (days * 24 * 60 * 60)
+ os.utime(path, (new_time, new_time))
+
+
+class LocalPathInfoTest(fake_filesystem_unittest.TestCase):
+
+ def setUp(self):
+ self.setUpPyfakefs()
+
+ def tearDown(self):
+ self.tearDownPyfakefs()
+
+ def testEmptyInstance(self):
+ path_info = dependency_manager.LocalPathInfo(None)
+ self.assertIsNone(path_info.GetLocalPath())
+ self.assertFalse(path_info.IsPathInLocalPaths('file.txt'))
+
+ def testSimpleGroupWithOnePath(self):
+ path_info = dependency_manager.LocalPathInfo(['file.txt'])
+ self.assertTrue(path_info.IsPathInLocalPaths('file.txt'))
+ self.assertFalse(path_info.IsPathInLocalPaths('other.txt'))
+
+ # GetLocalPath returns None if the file doesn't exist.
+ # Otherwise it will return the file path.
+ self.assertIsNone(path_info.GetLocalPath())
+ _CreateFile('file.txt')
+ self.assertEqual('file.txt', path_info.GetLocalPath())
+
+ def testSimpleGroupsWithMultiplePaths(self):
+ path_info = dependency_manager.LocalPathInfo(
+ [['file1', 'file2', 'file3']])
+ self.assertTrue(path_info.IsPathInLocalPaths('file1'))
+ self.assertTrue(path_info.IsPathInLocalPaths('file2'))
+ self.assertTrue(path_info.IsPathInLocalPaths('file3'))
+
+ _CreateFile('file1')
+ _CreateFile('file2')
+ _CreateFile('file3')
+ s = os.stat('file1')
+ time0 = s.st_mtime
+
+ _ChangeFileTime('file1', time0, 4)
+ _ChangeFileTime('file2', time0, 2)
+ _ChangeFileTime('file3', time0, 0)
+ self.assertEqual('file1', path_info.GetLocalPath())
+
+ _ChangeFileTime('file1', time0, 0)
+ _ChangeFileTime('file2', time0, 4)
+ _ChangeFileTime('file3', time0, 2)
+ self.assertEqual('file2', path_info.GetLocalPath())
+
+ _ChangeFileTime('file1', time0, 2)
+ _ChangeFileTime('file2', time0, 0)
+ _ChangeFileTime('file3', time0, 4)
+ self.assertEqual('file3', path_info.GetLocalPath())
+
+ def testMultipleGroupsWithSinglePaths(self):
+ path_info = dependency_manager.LocalPathInfo(
+ ['file1', 'file2', 'file3'])
+ self.assertTrue(path_info.IsPathInLocalPaths('file1'))
+ self.assertTrue(path_info.IsPathInLocalPaths('file2'))
+ self.assertTrue(path_info.IsPathInLocalPaths('file3'))
+
+ self.assertIsNone(path_info.GetLocalPath())
+ _CreateFile('file3')
+ self.assertEqual('file3', path_info.GetLocalPath())
+ _CreateFile('file2')
+ self.assertEqual('file2', path_info.GetLocalPath())
+ _CreateFile('file1')
+ self.assertEqual('file1', path_info.GetLocalPath())
+
+ def testMultipleGroupsWithMultiplePaths(self):
+ path_info = dependency_manager.LocalPathInfo([
+ ['file1', 'file2'],
+ ['file3', 'file4']])
+ self.assertTrue(path_info.IsPathInLocalPaths('file1'))
+ self.assertTrue(path_info.IsPathInLocalPaths('file2'))
+ self.assertTrue(path_info.IsPathInLocalPaths('file3'))
+ self.assertTrue(path_info.IsPathInLocalPaths('file4'))
+
+ _CreateFile('file1')
+ _CreateFile('file3')
+ s = os.stat('file1')
+ time0 = s.st_mtime
+
+ # Check that file1 is always returned, even if it is not the most recent
+ # file, because it is part of the first group and exists.
+ _ChangeFileTime('file1', time0, 2)
+ _ChangeFileTime('file3', time0, 0)
+ self.assertEqual('file1', path_info.GetLocalPath())
+
+ _ChangeFileTime('file1', time0, 0)
+ _ChangeFileTime('file3', time0, 2)
+ self.assertEqual('file1', path_info.GetLocalPath())
+
+ def testUpdate(self):
+ path_info1 = dependency_manager.LocalPathInfo(
+ [['file1', 'file2']]) # One group with two files.
+ path_info2 = dependency_manager.LocalPathInfo(
+ ['file1', 'file2', 'file3']) # Three groups
+ self.assertTrue(path_info1.IsPathInLocalPaths('file1'))
+ self.assertTrue(path_info1.IsPathInLocalPaths('file2'))
+ self.assertFalse(path_info1.IsPathInLocalPaths('file3'))
+
+ _CreateFile('file3')
+ self.assertIsNone(path_info1.GetLocalPath())
+
+ path_info1.Update(path_info2)
+ self.assertTrue(path_info1.IsPathInLocalPaths('file1'))
+ self.assertTrue(path_info1.IsPathInLocalPaths('file2'))
+ self.assertTrue(path_info1.IsPathInLocalPaths('file3'))
+ self.assertEqual('file3', path_info1.GetLocalPath())
+
+ _CreateFile('file1')
+ time0 = os.stat('file1').st_mtime
+ _ChangeFileTime('file3', time0, 2) # Make file3 more recent.
+
+ # Check that file3 is in a later group.
+ self.assertEqual('file1', path_info1.GetLocalPath())
diff --git a/systrace/catapult/dependency_manager/dependency_manager/manager.py b/systrace/catapult/dependency_manager/dependency_manager/manager.py
index 7ebb46d..28fc532 100644
--- a/systrace/catapult/dependency_manager/dependency_manager/manager.py
+++ b/systrace/catapult/dependency_manager/dependency_manager/manager.py
@@ -33,7 +33,7 @@ class DependencyManager(object):
local files for the same platform will first look in those from
config1, then those from config2, and finally those from config3.
"""
- if configs is None or type(configs) != list:
+ if configs is None or not isinstance(configs, list):
raise ValueError(
'Must supply a list of config files to DependencyManager')
# self._lookup_dict is a dictionary with the following format:
diff --git a/systrace/catapult/dependency_manager/dependency_manager/uploader.py b/systrace/catapult/dependency_manager/dependency_manager/uploader.py
index e88b7c0..d00d20c 100644
--- a/systrace/catapult/dependency_manager/dependency_manager/uploader.py
+++ b/systrace/catapult/dependency_manager/dependency_manager/uploader.py
@@ -100,7 +100,7 @@ class CloudStorageUploader(object):
return cloud_storage_changed
def __eq__(self, other, msg=None):
- if type(self) != type(other):
+ if not isinstance(self, type(other)):
return False
return (self._local_path == other._local_path and
self._cs_remote_path == other._cs_remote_path and
diff --git a/systrace/catapult/devil/BUILD.gn b/systrace/catapult/devil/BUILD.gn
new file mode 100644
index 0000000..cf1255d
--- /dev/null
+++ b/systrace/catapult/devil/BUILD.gn
@@ -0,0 +1,32 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+group("devil") {
+ testonly = true
+ deps = []
+ data_deps = [
+ "../third_party/gsutil",
+ ]
+ data = [
+ "devil/",
+ ]
+
+ if (is_android) {
+ deps += [
+ ":empty_system_webview_apk",
+ "//buildtools/third_party/libc++($host_toolchain)",
+ "//tools/android/forwarder2",
+ "//tools/android/md5sum",
+ ]
+ }
+}
+
+if (is_android) {
+ import("//testing/android/empty_apk/empty_apk.gni")
+
+ empty_apk("empty_system_webview_apk") {
+ package_name = "com.android.webview"
+ apk_name = "EmptySystemWebView"
+ }
+}
diff --git a/systrace/catapult/devil/README.md b/systrace/catapult/devil/README.md
index 852ac37..9953e6a 100644
--- a/systrace/catapult/devil/README.md
+++ b/systrace/catapult/devil/README.md
@@ -6,8 +6,8 @@
😈
-devil is a library used by the Chromium developers to interact with Android
-devices. It currently supports SDK level 16 and above.
+devil (device interaction layer) is a library used by the Chromium developers to
+interact with Android devices. It currently supports SDK level 16 and above.
## Interfaces
diff --git a/systrace/catapult/devil/bin/run_py_tests b/systrace/catapult/devil/bin/run_py_tests
index 44ec61e..a74fa83 100755
--- a/systrace/catapult/devil/bin/run_py_tests
+++ b/systrace/catapult/devil/bin/run_py_tests
@@ -16,6 +16,12 @@ from catapult_build import run_with_typ
def main():
+ # Tests mock out internal details of methods, and the ANDROID_SERIAL can
+ # change which internal methods are called. Since tests don't actually use
+ # devices, it should be fine to delete the variable.
+ if 'ANDROID_SERIAL' in os.environ:
+ del os.environ['ANDROID_SERIAL']
+
return run_with_typ.Run(top_level_dir=_DEVIL_PATH)
if __name__ == '__main__':
diff --git a/systrace/catapult/devil/devil/android/apk_helper.py b/systrace/catapult/devil/devil/android/apk_helper.py
index 8acb41e..abdf907 100644
--- a/systrace/catapult/devil/devil/android/apk_helper.py
+++ b/systrace/catapult/devil/devil/android/apk_helper.py
@@ -5,9 +5,13 @@
"""Module containing utilities for apk packages."""
import re
+import xml.etree.ElementTree
+import zipfile
from devil import base_error
+from devil.android.ndk import abis
from devil.android.sdk import aapt
+from devil.utils import cmd_helper
_MANIFEST_ATTRIBUTE_RE = re.compile(
@@ -44,9 +48,8 @@ def ToHelper(path_or_helper):
# matches the height of the stack). Each line parsed (either an attribute or an
# element) is added to the node at the top of the stack (after the stack has
# been popped/pushed due to indentation).
-def _ParseManifestFromApk(apk_path):
- aapt_output = aapt.Dump('xmltree', apk_path, 'AndroidManifest.xml')
-
+def _ParseManifestFromApk(apk):
+ aapt_output = aapt.Dump('xmltree', apk.path, 'AndroidManifest.xml')
parsed_manifest = {}
node_stack = [parsed_manifest]
indent = ' '
@@ -95,7 +98,8 @@ def _ParseManifestFromApk(apk_path):
manifest_key = m.group(1)
if manifest_key in node:
raise base_error.BaseError(
- "A single attribute should have one key and one value")
+ "A single attribute should have one key and one value: {}"
+ .format(line))
else:
node[manifest_key] = m.group(2) or m.group(3)
continue
@@ -103,6 +107,47 @@ def _ParseManifestFromApk(apk_path):
return parsed_manifest
+def _ParseManifestFromBundle(bundle):
+ cmd = [bundle.path, 'dump-manifest']
+ status, stdout, stderr = cmd_helper.GetCmdStatusOutputAndError(cmd)
+ if status != 0:
+ raise Exception('Failed running {} with output\n{}\n{}'.format(
+ ' '.join(cmd), stdout, stderr))
+ return ParseManifestFromXml(stdout)
+
+
+def ParseManifestFromXml(xml_str):
+ """Parse an android bundle manifest.
+
+ As ParseManifestFromAapt, but uses the xml output from bundletool. Each
+ element is a dict, mapping attribute or children by name. Attributes map to
+ a dict (as they are unique), children map to a list of dicts (as there may
+ be multiple children with the same name).
+
+ Args:
+ xml_str (str) An xml string that is an android manifest.
+
+ Returns:
+ A dict holding the parsed manifest, as with ParseManifestFromAapt.
+ """
+ root = xml.etree.ElementTree.fromstring(xml_str)
+ return {root.tag: [_ParseManifestXMLNode(root)]}
+
+
+def _ParseManifestXMLNode(node):
+ out = {}
+ for name, value in node.attrib.items():
+ cleaned_name = name.replace(
+ '{http://schemas.android.com/apk/res/android}',
+ 'android:').replace(
+ '{http://schemas.android.com/tools}',
+ 'tools:')
+ out[cleaned_name] = value
+ for child in node:
+ out.setdefault(child.tag, []).append(_ParseManifestXMLNode(child))
+ return out
+
+
def _ParseNumericKey(obj, key, default=0):
val = obj.get(key)
if val is None:
@@ -151,6 +196,10 @@ class ApkHelper(object):
def path(self):
return self._apk_path
+ @property
+ def is_bundle(self):
+ return self._apk_path.endswith('_bundle')
+
def GetActivityName(self):
"""Returns the name of the first launcher Activity in the apk."""
manifest_info = self._GetManifest()
@@ -232,9 +281,73 @@ class ApkHelper(object):
except KeyError:
return []
+ def GetVersionCode(self):
+ """Returns the versionCode as an integer, or None if not available."""
+ manifest_info = self._GetManifest()
+ try:
+ version_code = manifest_info['manifest'][0]['android:versionCode']
+ return int(version_code, 16)
+ except KeyError:
+ return None
+
+ def GetVersionName(self):
+ """Returns the versionName as a string."""
+ manifest_info = self._GetManifest()
+ try:
+ version_name = manifest_info['manifest'][0]['android:versionName']
+ return version_name
+ except KeyError:
+ return ''
+
+ def GetMinSdkVersion(self):
+ """Returns the minSdkVersion as a string, or None if not available.
+
+ Note: this cannot always be cast to an integer."""
+ manifest_info = self._GetManifest()
+ try:
+ uses_sdk = manifest_info['manifest'][0]['uses-sdk'][0]
+ min_sdk_version = uses_sdk['android:minSdkVersion']
+ try:
+ # The common case is for this to be an integer. Convert to decimal
+ # notation (rather than hexadecimal) for readability, but convert back
+ # to a string for type consistency with the general case.
+ return str(int(min_sdk_version, 16))
+ except ValueError:
+ # In general (ex. apps with minSdkVersion set to pre-release Android
+ # versions), minSdkVersion can be a string (usually, the OS codename
+ # letter). For simplicity, don't do any validation on the value.
+ return min_sdk_version
+ except KeyError:
+ return None
+
+ def GetTargetSdkVersion(self):
+ """Returns the targetSdkVersion as a string, or None if not available.
+
+ Note: this cannot always be cast to an integer."""
+ manifest_info = self._GetManifest()
+ try:
+ uses_sdk = manifest_info['manifest'][0]['uses-sdk'][0]
+ target_sdk_version = uses_sdk['android:targetSdkVersion']
+ try:
+ # The common case is for this to be an integer. Convert to decimal
+ # notation (rather than hexadecimal) for readability, but convert back
+ # to a string for type consistency with the general case.
+ return str(int(target_sdk_version, 16))
+ except ValueError:
+ # In general (ex. apps targeting pre-release Android versions),
+ # targetSdkVersion can be a string (usually, the OS codename letter).
+ # For simplicity, don't do any validation on the value.
+ return target_sdk_version
+ except KeyError:
+ return None
+
def _GetManifest(self):
if not self._manifest:
- self._manifest = _ParseManifestFromApk(self._apk_path)
+ app = ToHelper(self._apk_path)
+ if app.is_bundle:
+ self._manifest = _ParseManifestFromBundle(app)
+ else:
+ self._manifest = _ParseManifestFromApk(app)
return self._manifest
def _ResolveName(self, name):
@@ -242,3 +355,30 @@ class ApkHelper(object):
if '.' not in name:
return '%s.%s' % (self.GetPackageName(), name)
return name
+
+ def _ListApkPaths(self):
+ with zipfile.ZipFile(self._apk_path) as z:
+ return z.namelist()
+
+ def GetAbis(self):
+ """Returns a list of ABIs in the apk (empty list if no native code)."""
+ # Use lib/* to determine the compatible ABIs.
+ libs = set()
+ for path in self._ListApkPaths():
+ path_tokens = path.split('/')
+ if len(path_tokens) >= 2 and path_tokens[0] == 'lib':
+ libs.add(path_tokens[1])
+ lib_to_abi = {
+ abis.ARM: [abis.ARM, abis.ARM_64],
+ abis.ARM_64: [abis.ARM_64],
+ abis.X86: [abis.X86, abis.X86_64],
+ abis.X86_64: [abis.X86_64]
+ }
+ try:
+ output = set()
+ for lib in libs:
+ for abi in lib_to_abi[lib]:
+ output.add(abi)
+ return sorted(output)
+ except KeyError:
+ raise base_error.BaseError('Unexpected ABI in lib/* folder.')
diff --git a/systrace/catapult/devil/devil/android/apk_helper_test.py b/systrace/catapult/devil/devil/android/apk_helper_test.py
index 12137db..3258bb0 100755
--- a/systrace/catapult/devil/devil/android/apk_helper_test.py
+++ b/systrace/catapult/devil/devil/android/apk_helper_test.py
@@ -3,21 +3,30 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import collections
+import os
import unittest
from devil import base_error
from devil import devil_env
from devil.android import apk_helper
+from devil.android.ndk import abis
from devil.utils import mock_calls
with devil_env.SysPath(devil_env.PYMOCK_PATH):
import mock # pylint: disable=import-error
+# pylint: disable=line-too-long
_MANIFEST_DUMP = """N: android=http://schemas.android.com/apk/res/android
E: manifest (line=1)
+ A: android:versionCode(0x0101021b)=(type 0x10)0x166de1ea
+ A: android:versionName(0x0101021c)="75.0.3763.0" (Raw: "75.0.3763.0")
A: package="org.chromium.abc" (Raw: "org.chromium.abc")
A: split="random_split" (Raw: "random_split")
+ E: uses-sdk (line=2)
+ A: android:minSdkVersion(0x0101020c)=(type 0x10)0x15
+ A: android:targetSdkVersion(0x01010270)=(type 0x10)0x1c
E: uses-permission (line=2)
A: android:name(0x01010003)="android.permission.INTERNET" (Raw: "android.permission.INTERNET")
E: uses-permission (line=3)
@@ -111,6 +120,14 @@ _SINGLE_J4_INSTRUMENTATION_MANIFEST_DUMP = """N: android=http://schemas.android.
A: junit4=(type 0x12)0xffffffff (Raw: "true")
"""
+_TARGETING_PRE_RELEASE_Q_MANIFEST_DUMP = """N: android=http://schemas.android.com/apk/res/android
+ E: manifest (line=1)
+ A: package="org.chromium.xyz" (Raw: "org.chromium.xyz")
+ E: uses-sdk (line=2)
+ A: android:minSdkVersion(0x0101020c)="Q" (Raw: "Q")
+ A: android:targetSdkVersion(0x01010270)="Q" (Raw: "Q")
+"""
+
_NO_NAMESPACE_MANIFEST_DUMP = """E: manifest (line=1)
A: package="org.chromium.xyz" (Raw: "org.chromium.xyz")
E: instrumentation (line=8)
@@ -118,6 +135,7 @@ _NO_NAMESPACE_MANIFEST_DUMP = """E: manifest (line=1)
A: http://schemas.android.com/apk/res/android:name(0x01010003)="org.chromium.RandomTestRunner" (Raw: "org.chromium.RandomTestRunner")
A: http://schemas.android.com/apk/res/android:targetPackage(0x01010021)="org.chromium.random_package" (Raw:"org.chromium.random_pacakge")
"""
+# pylint: enable=line-too-long
def _MockAaptDump(manifest_dump):
@@ -125,6 +143,11 @@ def _MockAaptDump(manifest_dump):
'devil.android.sdk.aapt.Dump',
mock.Mock(side_effect=None, return_value=manifest_dump.split('\n')))
+def _MockListApkPaths(files):
+ return mock.patch(
+ 'devil.android.apk_helper.ApkHelper._ListApkPaths',
+ mock.Mock(side_effect=None, return_value=files))
+
class ApkHelperTest(mock_calls.TestCase):
def testGetInstrumentationName(self):
@@ -214,12 +237,146 @@ class ApkHelperTest(mock_calls.TestCase):
self.assertEquals([('name1', 'value1'), ('name2', 'value2')],
helper.GetAllMetadata())
+ def testGetVersionCode(self):
+ with _MockAaptDump(_MANIFEST_DUMP):
+ helper = apk_helper.ApkHelper('')
+ self.assertEquals(376300010, helper.GetVersionCode())
+
+ def testGetVersionName(self):
+ with _MockAaptDump(_MANIFEST_DUMP):
+ helper = apk_helper.ApkHelper('')
+ self.assertEquals('75.0.3763.0', helper.GetVersionName())
+
+ def testGetMinSdkVersion_integerValue(self):
+ with _MockAaptDump(_MANIFEST_DUMP):
+ helper = apk_helper.ApkHelper('')
+ self.assertEquals('21', helper.GetMinSdkVersion())
+
+ def testGetMinSdkVersion_stringValue(self):
+ with _MockAaptDump(_TARGETING_PRE_RELEASE_Q_MANIFEST_DUMP):
+ helper = apk_helper.ApkHelper('')
+ self.assertEquals('Q', helper.GetMinSdkVersion())
+
+ def testGetTargetSdkVersion_integerValue(self):
+ with _MockAaptDump(_MANIFEST_DUMP):
+ helper = apk_helper.ApkHelper('')
+ self.assertEquals('28', helper.GetTargetSdkVersion())
+
+ def testGetTargetSdkVersion_stringValue(self):
+ with _MockAaptDump(_TARGETING_PRE_RELEASE_Q_MANIFEST_DUMP):
+ helper = apk_helper.ApkHelper('')
+ self.assertEquals('Q', helper.GetTargetSdkVersion())
+
def testGetSingleInstrumentationName_strippedNamespaces(self):
with _MockAaptDump(_NO_NAMESPACE_MANIFEST_DUMP):
helper = apk_helper.ApkHelper('')
self.assertEquals('org.chromium.RandomTestRunner',
helper.GetInstrumentationName())
+ def testGetArchitectures(self):
+ AbiPair = collections.namedtuple('AbiPair', ['abi32bit', 'abi64bit'])
+ for abi_pair in [AbiPair('lib/' + abis.ARM, 'lib/' + abis.ARM_64),
+ AbiPair('lib/' + abis.X86, 'lib/' + abis.X86_64)]:
+ with _MockListApkPaths([abi_pair.abi32bit]):
+ helper = apk_helper.ApkHelper('')
+ self.assertEquals(set([os.path.basename(abi_pair.abi32bit),
+ os.path.basename(abi_pair.abi64bit)]),
+ set(helper.GetAbis()))
+ with _MockListApkPaths([abi_pair.abi32bit, abi_pair.abi64bit]):
+ helper = apk_helper.ApkHelper('')
+ self.assertEquals(set([os.path.basename(abi_pair.abi32bit),
+ os.path.basename(abi_pair.abi64bit)]),
+ set(helper.GetAbis()))
+ with _MockListApkPaths([abi_pair.abi64bit]):
+ helper = apk_helper.ApkHelper('')
+ self.assertEquals(set([os.path.basename(abi_pair.abi64bit)]),
+ set(helper.GetAbis()))
+
+ def testParseXmlManifest(self):
+ self.assertEquals({
+ 'manifest': [
+ {'android:compileSdkVersion': '28',
+ 'android:versionCode': '2',
+ 'uses-sdk': [
+ {'android:minSdkVersion': '24',
+ 'android:targetSdkVersion': '28'}],
+ 'uses-permission': [
+ {'android:name':
+ 'android.permission.ACCESS_COARSE_LOCATION'},
+ {'android:name':
+ 'android.permission.ACCESS_NETWORK_STATE'}],
+ 'application': [
+ {'android:allowBackup': 'true',
+ 'android:extractNativeLibs': 'false',
+ 'android:fullBackupOnly': 'false',
+ 'meta-data': [
+ {'android:name': 'android.allow_multiple',
+ 'android:value': 'true'},
+ {'android:name': 'multiwindow',
+ 'android:value': 'true'}],
+ 'activity': [
+ {'android:configChanges': '0x00001fb3',
+ 'android:excludeFromRecents': 'true',
+ 'android:name': 'ChromeLauncherActivity',
+ 'intent-filter': [
+ {'action': [
+ {'android:name': 'dummy.action'}],
+ 'category': [
+ {'android:name': 'DAYDREAM'},
+ {'android:name': 'CARDBOARD'}]}]},
+ {'android:enabled': 'false',
+ 'android:name': 'MediaLauncherActivity',
+ 'intent-filter': [
+ {'tools:ignore': 'AppLinkUrlError',
+ 'action': [{'android:name': 'VIEW'}],
+ 'category': [{'android:name': 'DEFAULT'}],
+ 'data': [
+ {'android:mimeType': 'audio/*'},
+ {'android:mimeType': 'image/*'},
+ {'android:mimeType': 'video/*'},
+ {'android:scheme': 'file'},
+ {'android:scheme': 'content'}]}]}]}]}]},
+ apk_helper.ParseManifestFromXml("""
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:compileSdkVersion="28" android:versionCode="2">
+ <uses-sdk android:minSdkVersion="24" android:targetSdkVersion="28"/>
+ <uses-permission
+ android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+ <application android:allowBackup="true"
+ android:extractNativeLibs="false"
+ android:fullBackupOnly="false">
+ <meta-data android:name="android.allow_multiple"
+ android:value="true"/>
+ <meta-data android:name="multiwindow"
+ android:value="true"/>
+ <activity android:configChanges="0x00001fb3"
+ android:excludeFromRecents="true"
+ android:name="ChromeLauncherActivity">
+ <intent-filter>
+ <action android:name="dummy.action"/>
+ <category android:name="DAYDREAM"/>
+ <category android:name="CARDBOARD"/>
+ </intent-filter>
+ </activity>
+ <activity android:enabled="false"
+ android:name="MediaLauncherActivity">
+ <intent-filter tools:ignore="AppLinkUrlError">
+ <action android:name="VIEW"/>
+
+ <category android:name="DEFAULT"/>
+
+ <data android:mimeType="audio/*"/>
+ <data android:mimeType="image/*"/>
+ <data android:mimeType="video/*"/>
+ <data android:scheme="file"/>
+ <data android:scheme="content"/>
+ </intent-filter>
+ </activity>
+ </application>
+ </manifest>"""))
+
if __name__ == '__main__':
unittest.main(verbosity=2)
diff --git a/systrace/catapult/devil/devil/android/battery_utils.py b/systrace/catapult/devil/devil/android/battery_utils.py
index a8a08a9..c41c19a 100644
--- a/systrace/catapult/devil/devil/android/battery_utils.py
+++ b/systrace/catapult/devil/devil/android/battery_utils.py
@@ -11,6 +11,7 @@ import contextlib
import csv
import logging
+from devil.android import crash_handler
from devil.android import decorators
from devil.android import device_errors
from devil.android import device_utils
@@ -240,44 +241,6 @@ class BatteryUtils(object):
'Unable to find fuel gauge.')
@decorators.WithTimeoutAndRetriesFromInstance()
- def GetNetworkData(self, package, timeout=None, retries=None):
- """Get network data for specific package.
-
- Args:
- package: package name you want network data for.
- timeout: timeout in seconds
- retries: number of retries
-
- Returns:
- Tuple of (sent_data, recieved_data)
- None if no network data found
- """
- # If device_utils clears cache, cache['uids'] doesn't exist
- if 'uids' not in self._cache:
- self._cache['uids'] = {}
- if package not in self._cache['uids']:
- self.GetPowerData()
- if package not in self._cache['uids']:
- logger.warning('No UID found for %s. Can\'t get network data.',
- package)
- return None
-
- network_data_path = '/proc/uid_stat/%s/' % self._cache['uids'][package]
- try:
- send_data = int(self._device.ReadFile(network_data_path + 'tcp_snd'))
- # If ReadFile throws exception, it means no network data usage file for
- # package has been recorded. Return 0 sent and 0 received.
- except device_errors.AdbShellCommandFailedError:
- logger.warning('No sent data found for package %s', package)
- send_data = 0
- try:
- recv_data = int(self._device.ReadFile(network_data_path + 'tcp_rcv'))
- except device_errors.AdbShellCommandFailedError:
- logger.warning('No received data found for package %s', package)
- recv_data = 0
- return (send_data, recv_data)
-
- @decorators.WithTimeoutAndRetriesFromInstance()
def GetPowerData(self, timeout=None, retries=None):
"""Get power data for device.
@@ -374,7 +337,12 @@ class BatteryUtils(object):
Returns:
True if the device is charging, false otherwise.
"""
- battery_info = self.GetBatteryInfo()
+ # Wrapper function so that we can use `RetryOnSystemCrash`.
+ def GetBatteryInfoHelper(device):
+ return self.GetBatteryInfo()
+
+ battery_info = crash_handler.RetryOnSystemCrash(
+ GetBatteryInfoHelper, self._device)
for k in ('AC powered', 'USB powered', 'Wireless powered'):
if (k in battery_info and
battery_info[k].lower() in ('true', '1', 'yes')):
diff --git a/systrace/catapult/devil/devil/android/battery_utils_test.py b/systrace/catapult/devil/devil/android/battery_utils_test.py
index feccf79..07c7496 100755
--- a/systrace/catapult/devil/devil/android/battery_utils_test.py
+++ b/systrace/catapult/devil/devil/android/battery_utils_test.py
@@ -401,57 +401,6 @@ class BatteryUtilsGetChargingTest(BatteryUtilsTest):
self.assertFalse(self.battery.GetCharging())
-class BatteryUtilsGetNetworkDataTest(BatteryUtilsTest):
-
- def testGetNetworkData_noDataUsage(self):
- with self.assertCalls(
- (self.call.device.RunShellCommand(
- ['dumpsys', 'batterystats', '-c'],
- check_return=True, large_output=True),
- _DUMPSYS_OUTPUT),
- (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_snd'),
- self.ShellError()),
- (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_rcv'),
- self.ShellError())):
- self.assertEquals(self.battery.GetNetworkData('test_package1'), (0, 0))
-
- def testGetNetworkData_badPackage(self):
- with self.assertCall(
- self.call.device.RunShellCommand(
- ['dumpsys', 'batterystats', '-c'],
- check_return=True, large_output=True),
- _DUMPSYS_OUTPUT):
- self.assertEqual(self.battery.GetNetworkData('asdf'), None)
-
- def testGetNetworkData_packageNotCached(self):
- with self.assertCalls(
- (self.call.device.RunShellCommand(
- ['dumpsys', 'batterystats', '-c'],
- check_return=True, large_output=True),
- _DUMPSYS_OUTPUT),
- (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_snd'), 1),
- (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_rcv'), 2)):
- self.assertEqual(self.battery.GetNetworkData('test_package1'), (1, 2))
-
- def testGetNetworkData_packageCached(self):
- self.battery._cache['uids'] = {'test_package1': '1000'}
- with self.assertCalls(
- (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_snd'), 1),
- (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_rcv'), 2)):
- self.assertEqual(self.battery.GetNetworkData('test_package1'), (1, 2))
-
- def testGetNetworkData_clearedCache(self):
- with self.assertCalls(
- (self.call.device.RunShellCommand(
- ['dumpsys', 'batterystats', '-c'],
- check_return=True, large_output=True),
- _DUMPSYS_OUTPUT),
- (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_snd'), 1),
- (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_rcv'), 2)):
- self.battery._cache.clear()
- self.assertEqual(self.battery.GetNetworkData('test_package1'), (1, 2))
-
-
class BatteryUtilsLetBatteryCoolToTemperatureTest(BatteryUtilsTest):
@mock.patch('time.sleep', mock.Mock())
diff --git a/systrace/catapult/devil/devil/android/cpu_temperature.py b/systrace/catapult/devil/devil/android/cpu_temperature.py
new file mode 100644
index 0000000..58ce87a
--- /dev/null
+++ b/systrace/catapult/devil/devil/android/cpu_temperature.py
@@ -0,0 +1,154 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Provides device interactions for CPU temperature monitoring."""
+# pylint: disable=unused-argument
+
+import logging
+
+from devil.android import device_utils
+from devil.android.perf import perf_control
+from devil.utils import timeout_retry
+
+logger = logging.getLogger(__name__)
+
+# NB: when adding devices to this structure, be aware of the impact it may
+# have on the chromium.perf waterfall, as it may increase testing time.
+# Please contact a person responsible for the waterfall to see if the
+# device you're adding is currently being tested.
+_DEVICE_THERMAL_INFORMATION = {
+ # Pixel 3
+ 'blueline': {
+ 'cpu_temps': {
+ # See /sys/class/thermal/thermal_zone<number>/type for description
+ # Types:
+ # cpu0: cpu0-silver-step
+ # cpu1: cpu1-silver-step
+ # cpu2: cpu2-silver-step
+ # cpu3: cpu3-silver-step
+ # cpu4: cpu0-gold-step
+ # cpu5: cpu1-gold-step
+ # cpu6: cpu2-gold-step
+ # cpu7: cpu3-gold-step
+ 'cpu0': '/sys/class/thermal/thermal_zone11/temp',
+ 'cpu1': '/sys/class/thermal/thermal_zone12/temp',
+ 'cpu2': '/sys/class/thermal/thermal_zone13/temp',
+ 'cpu3': '/sys/class/thermal/thermal_zone14/temp',
+ 'cpu4': '/sys/class/thermal/thermal_zone15/temp',
+ 'cpu5': '/sys/class/thermal/thermal_zone16/temp',
+ 'cpu6': '/sys/class/thermal/thermal_zone17/temp',
+ 'cpu7': '/sys/class/thermal/thermal_zone18/temp'
+ },
+ # Different device sensors use different multipliers
+ # e.g. Pixel 3 35 degrees c is 35000
+ 'temp_multiplier': 1000
+ },
+ # Pixel
+ 'sailfish': {
+ 'cpu_temps': {
+ # The following thermal zones tend to produce the most accurate
+ # readings
+ # Types:
+ # cpu0: tsens_tz_sensor0
+ # cpu1: tsens_tz_sensor1
+ # cpu2: tsens_tz_sensor2
+ # cpu3: tsens_tz_sensor3
+ 'cpu0': '/sys/class/thermal/thermal_zone1/temp',
+ 'cpu1': '/sys/class/thermal/thermal_zone2/temp',
+ 'cpu2': '/sys/class/thermal/thermal_zone3/temp',
+ 'cpu3': '/sys/class/thermal/thermal_zone4/temp'
+ },
+ 'temp_multiplier': 10
+ }
+}
+
+
+class CpuTemperature(object):
+
+ def __init__(self, device):
+ """CpuTemperature constructor.
+
+ Args:
+ device: A DeviceUtils instance.
+ Raises:
+ TypeError: If it is not passed a DeviceUtils instance.
+ """
+ if not isinstance(device, device_utils.DeviceUtils):
+ raise TypeError('Must be initialized with DeviceUtils object.')
+ self._device = device
+ self._perf_control = perf_control.PerfControl(self._device)
+ self._device_info = None
+
+ def InitThermalDeviceInformation(self):
+ """Init the current devices thermal information.
+ """
+ self._device_info = _DEVICE_THERMAL_INFORMATION.get(
+ self._device.build_product)
+
+ def IsSupported(self):
+ """Check if the current device is supported.
+
+ Returns:
+ True if the device is in _DEVICE_THERMAL_INFORMATION and the temp
+ files exist. False otherwise.
+ """
+ # Init device info if it hasnt been manually initialised already
+ if self._device_info is None:
+ self.InitThermalDeviceInformation()
+
+ if self._device_info is not None:
+ return all(
+ self._device.FileExists(f)
+ for f in self._device_info['cpu_temps'].values())
+ return False
+
+ def LetCpuCoolToTemperature(self, target_temp, wait_period=30):
+ """Lets device sit to give CPU time to cool down.
+
+ Implements a similar mechanism to
+ battery_utils.LetBatteryCoolToTemperature
+
+ Args:
+ temp: A float containing the maximum temperature to allow
+ in degrees c.
+ wait_period: An integer indicating time in seconds to wait
+ between checking.
+ """
+ target_temp = int(target_temp * self._device_info['temp_multiplier'])
+
+ def cool_cpu():
+ # Get the temperatures
+ cpu_temp_paths = self._device_info['cpu_temps']
+ temps = []
+ for temp_path in cpu_temp_paths.values():
+ temp_return = self._device.ReadFile(temp_path)
+ # Output is an array of strings, only need the first line.
+ temps.append(int(temp_return))
+
+ if not temps:
+ logger.warning('Unable to read temperature files provided.')
+ return True
+
+ logger.info('Current CPU temperatures: %s', str(temps)[1:-1])
+
+ return all(t <= target_temp for t in temps)
+
+ logger.info('Waiting for the CPU to cool down to %s',
+ target_temp / self._device_info['temp_multiplier'])
+
+ # Set the governor to powersave to aid the cooling down of the CPU
+ self._perf_control.SetScalingGovernor('powersave')
+
+ # Retry 3 times, each time waiting 30 seconds.
+ # This negates most (if not all) of the noise in recorded results without
+ # taking too long
+ timeout_retry.WaitFor(cool_cpu, wait_period=wait_period, max_tries=3)
+
+ # Set the performance mode
+ self._perf_control.SetHighPerfMode()
+
+ def GetDeviceForTesting(self):
+ return self._device
+
+ def GetDeviceInfoForTesting(self):
+ return self._device_info
diff --git a/systrace/catapult/devil/devil/android/cpu_temperature_test.py b/systrace/catapult/devil/devil/android/cpu_temperature_test.py
new file mode 100644
index 0000000..f0f99de
--- /dev/null
+++ b/systrace/catapult/devil/devil/android/cpu_temperature_test.py
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""
+Unit tests for the contents of cpu_temperature.py
+"""
+
+# pylint: disable=unused-argument
+
+import logging
+import unittest
+
+from devil import devil_env
+from devil.android import cpu_temperature
+from devil.android import device_utils
+from devil.utils import mock_calls
+from devil.android.sdk import adb_wrapper
+
+with devil_env.SysPath(devil_env.PYMOCK_PATH):
+ import mock # pylint: disable=import-error
+
+
+class CpuTemperatureTest(mock_calls.TestCase):
+
+ @mock.patch('devil.android.perf.perf_control.PerfControl', mock.Mock())
+ def setUp(self):
+ # Mock the device
+ self.mock_device = mock.Mock(spec=device_utils.DeviceUtils)
+ self.mock_device.build_product = 'blueline'
+ self.mock_device.adb = mock.Mock(spec=adb_wrapper.AdbWrapper)
+ self.mock_device.FileExists.return_value = True
+
+ self.cpu_temp = cpu_temperature.CpuTemperature(self.mock_device)
+ self.cpu_temp.InitThermalDeviceInformation()
+
+
+class CpuTemperatureInitTest(unittest.TestCase):
+
+ @mock.patch('devil.android.perf.perf_control.PerfControl', mock.Mock())
+ def testInitWithDeviceUtil(self):
+ d = mock.Mock(spec=device_utils.DeviceUtils)
+ d.build_product = 'blueline'
+ c = cpu_temperature.CpuTemperature(d)
+ self.assertEqual(d, c.GetDeviceForTesting())
+
+ def testInitWithMissing_fails(self):
+ with self.assertRaises(TypeError):
+ cpu_temperature.CpuTemperature(None)
+ with self.assertRaises(TypeError):
+ cpu_temperature.CpuTemperature('')
+
+
+class CpuTemperatureGetThermalDeviceInformationTest(CpuTemperatureTest):
+
+ @mock.patch('devil.android.perf.perf_control.PerfControl', mock.Mock())
+ def testGetThermalDeviceInformation_noneWhenIncorrectLabel(self):
+ invalid_device = mock.Mock(spec=device_utils.DeviceUtils)
+ invalid_device.build_product = 'invalid_name'
+ c = cpu_temperature.CpuTemperature(invalid_device)
+ c.InitThermalDeviceInformation()
+ self.assertEqual(c.GetDeviceInfoForTesting(), None)
+
+ def testGetThermalDeviceInformation_getsCorrectInformation(self):
+ correct_information = {
+ 'cpu0': '/sys/class/thermal/thermal_zone11/temp',
+ 'cpu1': '/sys/class/thermal/thermal_zone12/temp',
+ 'cpu2': '/sys/class/thermal/thermal_zone13/temp',
+ 'cpu3': '/sys/class/thermal/thermal_zone14/temp',
+ 'cpu4': '/sys/class/thermal/thermal_zone15/temp',
+ 'cpu5': '/sys/class/thermal/thermal_zone16/temp',
+ 'cpu6': '/sys/class/thermal/thermal_zone17/temp',
+ 'cpu7': '/sys/class/thermal/thermal_zone18/temp'
+ }
+ self.assertEqual(
+ cmp(correct_information,
+ self.cpu_temp.GetDeviceInfoForTesting().get('cpu_temps')), 0)
+
+
+class CpuTemperatureIsSupportedTest(CpuTemperatureTest):
+
+ @mock.patch('devil.android.perf.perf_control.PerfControl', mock.Mock())
+ def testIsSupported_returnsTrue(self):
+ d = mock.Mock(spec=device_utils.DeviceUtils)
+ d.build_product = 'blueline'
+ d.FileExists.return_value = True
+ c = cpu_temperature.CpuTemperature(d)
+ self.assertTrue(c.IsSupported())
+
+ @mock.patch('devil.android.perf.perf_control.PerfControl', mock.Mock())
+ def testIsSupported_returnsFalse(self):
+ d = mock.Mock(spec=device_utils.DeviceUtils)
+ d.build_product = 'blueline'
+ d.FileExists.return_value = False
+ c = cpu_temperature.CpuTemperature(d)
+ self.assertFalse(c.IsSupported())
+
+
+class CpuTemperatureLetCpuCoolToTemperatureTest(CpuTemperatureTest):
+ # Return values for the mock side effect
+ cooling_down0 = ([45000 for _ in range(8)] + [43000 for _ in range(8)] +
+ [41000 for _ in range(8)])
+
+ @mock.patch('time.sleep', mock.Mock())
+ def testLetBatteryCoolToTemperature_coolWithin24Calls(self):
+ self.mock_device.ReadFile = mock.Mock(side_effect=self.cooling_down0)
+ self.cpu_temp.LetCpuCoolToTemperature(42)
+ self.mock_device.ReadFile.assert_called()
+ self.assertEquals(self.mock_device.ReadFile.call_count, 24)
+
+ cooling_down1 = [45000 for _ in range(8)] + [41000 for _ in range(16)]
+
+ @mock.patch('time.sleep', mock.Mock())
+ def testLetBatteryCoolToTemperature_coolWithin16Calls(self):
+ self.mock_device.ReadFile = mock.Mock(side_effect=self.cooling_down1)
+ self.cpu_temp.LetCpuCoolToTemperature(42)
+ self.mock_device.ReadFile.assert_called()
+ self.assertEquals(self.mock_device.ReadFile.call_count, 16)
+
+ constant_temp = [45000 for _ in range(40)]
+
+ @mock.patch('time.sleep', mock.Mock())
+ def testLetBatteryCoolToTemperature_timeoutAfterThree(self):
+ self.mock_device.ReadFile = mock.Mock(side_effect=self.constant_temp)
+ self.cpu_temp.LetCpuCoolToTemperature(42)
+ self.mock_device.ReadFile.assert_called()
+ self.assertEquals(self.mock_device.ReadFile.call_count, 24)
+
+
+if __name__ == '__main__':
+ logging.getLogger().setLevel(logging.DEBUG)
+ unittest.main(verbosity=2)
diff --git a/systrace/catapult/devil/devil/android/crash_handler.py b/systrace/catapult/devil/devil/android/crash_handler.py
index 7cfabcf..028e787 100644
--- a/systrace/catapult/devil/devil/android/crash_handler.py
+++ b/systrace/catapult/devil/devil/android/crash_handler.py
@@ -37,6 +37,9 @@ def RetryOnSystemCrash(f, device, retries=3):
raise
try:
logger.warning('Device is unreachable. Waiting for recovery...')
+ # Treat the device being unreachable as an unexpected reboot and clear
+ # any cached state.
+ device.ClearCache()
device.WaitUntilFullyBooted()
except base_error.BaseError:
logger.exception('Device never recovered. X(')
diff --git a/systrace/catapult/devil/devil/android/decorators.py b/systrace/catapult/devil/devil/android/decorators.py
index 3844b49..93e1054 100644
--- a/systrace/catapult/devil/devil/android/decorators.py
+++ b/systrace/catapult/devil/devil/android/decorators.py
@@ -59,7 +59,7 @@ def _TimeoutRetryWrapper(
raise device_errors.CommandTimeoutError(str(e)), None, (
sys.exc_info()[2])
except cmd_helper.TimeoutError as e:
- raise device_errors.CommandTimeoutError(str(e)), None, (
+ raise device_errors.CommandTimeoutError(str(e), output=e.output), None, (
sys.exc_info()[2])
return timeout_retry_wrapper
diff --git a/systrace/catapult/devil/devil/android/device_errors.py b/systrace/catapult/devil/devil/android/device_errors.py
index 57f3615..e6893a4 100644
--- a/systrace/catapult/devil/devil/android/device_errors.py
+++ b/systrace/catapult/devil/devil/android/device_errors.py
@@ -55,15 +55,15 @@ class _BaseCommandFailedError(CommandFailedError):
self.status = status
if not message:
adb_cmd = ' '.join(cmd_helper.SingleQuote(arg) for arg in self.args)
- message = ['adb %s: failed ' % adb_cmd]
+ segments = ['adb %s: failed ' % adb_cmd]
if status:
- message.append('with exit status %s ' % self.status)
+ segments.append('with exit status %s ' % self.status)
if output:
- message.append('and output:\n')
- message.extend('- %s\n' % line for line in output.splitlines())
+ segments.append('and output:\n')
+ segments.extend('- %s\n' % line for line in output.splitlines())
else:
- message.append('and no output.')
- message = ''.join(message)
+ segments.append('and no output.')
+ message = ''.join(segments)
super(_BaseCommandFailedError, self).__init__(message, device_serial)
def __eq__(self, other):
@@ -79,8 +79,7 @@ class _BaseCommandFailedError(CommandFailedError):
"""Support pickling."""
result = [None, None, None, None, None]
super_result = super(_BaseCommandFailedError, self).__reduce__()
- for i in range(len(super_result)):
- result[i] = super_result[i]
+ result[:len(super_result)] = super_result
# Update the args used to reconstruct this exception.
result[1] = (
@@ -120,19 +119,19 @@ class AdbShellCommandFailedError(AdbCommandFailedError):
def __init__(self, command, output, status, device_serial=None):
self.command = command
- message = ['shell command run via adb failed on the device:\n',
+ segments = ['shell command run via adb failed on the device:\n',
' command: %s\n' % command]
- message.append(' exit status: %s\n' % status)
+ segments.append(' exit status: %s\n' % status)
if output:
- message.append(' output:\n')
+ segments.append(' output:\n')
if isinstance(output, basestring):
output_lines = output.splitlines()
else:
output_lines = output
- message.extend(' - %s\n' % line for line in output_lines)
+ segments.extend(' - %s\n' % line for line in output_lines)
else:
- message.append(" output: ''\n")
- message = ''.join(message)
+ segments.append(" output: ''\n")
+ message = ''.join(segments)
super(AdbShellCommandFailedError, self).__init__(
['shell', command], output, status, device_serial, message)
@@ -140,8 +139,7 @@ class AdbShellCommandFailedError(AdbCommandFailedError):
"""Support pickling."""
result = [None, None, None, None, None]
super_result = super(AdbShellCommandFailedError, self).__reduce__()
- for i in range(len(super_result)):
- result[i] = super_result[i]
+ result[:len(super_result)] = super_result
# Update the args used to reconstruct this exception.
result[1] = (self.command, self.output, self.status, self.device_serial)
@@ -150,7 +148,9 @@ class AdbShellCommandFailedError(AdbCommandFailedError):
class CommandTimeoutError(base_error.BaseError):
"""Exception for command timeouts."""
- pass
+ def __init__(self, message, is_infra_error=False, output=None):
+ super(CommandTimeoutError, self).__init__(message, is_infra_error)
+ self.output = output
class DeviceUnreachableError(base_error.BaseError):
diff --git a/systrace/catapult/devil/devil/android/device_utils.py b/systrace/catapult/devil/devil/android/device_utils.py
index 5a3db41..6182a52 100644
--- a/systrace/catapult/devil/devil/android/device_utils.py
+++ b/systrace/catapult/devil/devil/android/device_utils.py
@@ -10,9 +10,11 @@ Eventually, this will be based on adb_wrapper.
import calendar
import collections
+import contextlib
import fnmatch
import json
import logging
+import math
import os
import posixpath
import pprint
@@ -20,6 +22,7 @@ import random
import re
import shutil
import stat
+import sys
import tempfile
import time
import threading
@@ -49,6 +52,12 @@ from devil.utils import zip_utils
from py_utils import tempfile_ext
+try:
+ from devil.utils import reset_usb
+except ImportError:
+ # Fail silently if we can't import reset_usb. We're likely on windows.
+ reset_usb = None
+
logger = logging.getLogger(__name__)
_DEFAULT_TIMEOUT = 30
@@ -59,6 +68,29 @@ _DEFAULT_RETRIES = 3
# the timeout_retry decorators.
DEFAULT = object()
+# A sentinel object to require that calls to RunShellCommand force running the
+# command with su even if the device has been rooted. To use, pass into the
+# as_root param.
+_FORCE_SU = object()
+
+_RECURSIVE_DIRECTORY_LIST_SCRIPT = """
+ function list_subdirs() {
+ for f in "$1"/* ;
+ do
+ if [ -d "$f" ] ;
+ then
+ if [ "$f" == "." ] || [ "$f" == ".." ] ;
+ then
+ continue ;
+ fi ;
+ echo "$f" ;
+ list_subdirs "$f" ;
+ fi ;
+ done ;
+ } ;
+ list_subdirs %s
+"""
+
_RESTART_ADBD_SCRIPT = """
trap '' HUP
trap '' TERM
@@ -88,6 +120,7 @@ _PERMISSIONS_BLACKLIST_RE = re.compile('|'.join(fnmatch.translate(p) for p in [
'android.permission.DISABLE_KEYGUARD',
'android.permission.DOWNLOAD_WITHOUT_NOTIFICATION',
'android.permission.EXPAND_STATUS_BAR',
+ 'android.permission.FOREGROUND_SERVICE',
'android.permission.GET_PACKAGE_SIZE',
'android.permission.INSTALL_SHORTCUT',
'android.permission.INJECT_EVENTS',
@@ -185,8 +218,14 @@ _SPECIAL_ROOT_DEVICE_LIST = [
'marlin', # Pixel XL
'sailfish', # Pixel
'taimen', # Pixel 2 XL
+ 'vega', # Lenovo Mirage Solo
'walleye', # Pixel 2
+ 'crosshatch', # Pixel 3 XL
+ 'blueline', # Pixel 3
]
+_SPECIAL_ROOT_DEVICE_LIST += ['aosp_%s' % _d for _d in
+ _SPECIAL_ROOT_DEVICE_LIST]
+
_IMEI_RE = re.compile(r' Device ID = (.+)$')
# The following regex is used to match result parcels like:
"""
@@ -200,6 +239,25 @@ _PARCEL_RESULT_RE = re.compile(
_EBUSY_RE = re.compile(
r'mkdir failed for ([^,]*), Device or resource busy')
+# http://bit.ly/2WLZhUF added a timeout to adb wait-for-device. We sometimes
+# want to wait longer than the implicit call within adb root allows.
+_WAIT_FOR_DEVICE_TIMEOUT_STR = 'timeout expired while waiting for device'
+
+_WEBVIEW_SYSUPDATE_CURRENT_PKG_RE = re.compile(
+ r'Current WebView package.*:.*\(([a-z.]*),')
+_WEBVIEW_SYSUPDATE_NULL_PKG_RE = re.compile(
+ r'Current WebView package is null')
+_WEBVIEW_SYSUPDATE_FALLBACK_LOGIC_RE = re.compile(
+ r'Fallback logic enabled: (true|false)')
+_WEBVIEW_SYSUPDATE_PACKAGE_INSTALLED_RE = re.compile(
+ r'(?:Valid|Invalid) package\s+(\S+)\s+\(.*\),?\s+(.*)$')
+_WEBVIEW_SYSUPDATE_PACKAGE_NOT_INSTALLED_RE = re.compile(
+ r'(\S+)\s+(is NOT installed\.)')
+_WEBVIEW_SYSUPDATE_MIN_VERSION_CODE = re.compile(
+ r'Minimum WebView version code: (\d+)')
+
+_GOOGLE_FEATURES_RE = re.compile(r'^\s*com\.google\.')
+
PS_COLUMNS = ('name', 'pid', 'ppid')
ProcessInfo = collections.namedtuple('ProcessInfo', PS_COLUMNS)
@@ -343,7 +401,7 @@ class DeviceUtils(object):
assert hasattr(self, decorators.DEFAULT_TIMEOUT_ATTR)
assert hasattr(self, decorators.DEFAULT_RETRIES_ATTR)
- self._ClearCache()
+ self.ClearCache()
@property
def serial(self):
@@ -401,6 +459,20 @@ class DeviceUtils(object):
def HasRoot(self, timeout=None, retries=None):
"""Checks whether or not adbd has root privileges.
+ A device is considered to have root if all commands are implicitly run
+ with elevated privileges, i.e. without having to use "su" to run them.
+
+ Note that some devices do not allow this implicit privilige elevation,
+ but _can_ run commands as root just fine when done explicitly with "su".
+ To check if your device can run commands with elevated privileges at all
+ use:
+
+ device.HasRoot() or device.NeedsSU()
+
+ Luckily, for the most part you don't need to worry about this and using
+ RunShellCommand(cmd, as_root=True) will figure out for you the right
+ command incantation to run with elevated privileges.
+
Args:
timeout: timeout in seconds
retries: number of retries
@@ -413,6 +485,10 @@ class DeviceUtils(object):
DeviceUnreachableError on missing device.
"""
try:
+ if self.build_type == 'eng':
+ # 'eng' builds have root enabled by default and the adb session cannot
+ # be unrooted.
+ return True
if self.product_name in _SPECIAL_ROOT_DEVICE_LIST:
return self.GetProp('service.adb.root') == '1'
self.RunShellCommand(['ls', '/root'], check_return=True)
@@ -476,17 +552,22 @@ class DeviceUtils(object):
try:
self.adb.Root()
- except device_errors.AdbCommandFailedError:
+ except device_errors.AdbCommandFailedError as e:
if self.IsUserBuild():
raise device_errors.CommandFailedError(
'Unable to root device with user build.', str(self))
+ elif e.output and _WAIT_FOR_DEVICE_TIMEOUT_STR in e.output:
+ # adb 1.0.41 added a call to wait-for-device *inside* root
+ # with a timeout that can be too short in some cases.
+ # If we hit that timeout, ignore it & do our own wait below.
+ pass
else:
raise # Failed probably due to some other reason.
def device_online_with_root():
try:
self.adb.WaitForDevice()
- return self.GetProp('service.adb.root', cache=False) == '1'
+ return self.HasRoot()
except (device_errors.AdbCommandFailedError,
device_errors.DeviceUnreachableError):
return False
@@ -649,6 +730,22 @@ class DeviceUtils(object):
'Version name for %s not found on dumpsys output' % package, str(self))
@decorators.WithTimeoutAndRetriesFromInstance()
+ def GetPackageArchitecture(self, package, timeout=None, retries=None):
+ """Get the architecture of a package installed on the device.
+
+ Args:
+ package: Name of the package.
+
+ Returns:
+ A string with the architecture, or None if the package is missing.
+ """
+ lines = self._GetDumpsysOutput(['package', package], 'primaryCpuAbi')
+ if lines:
+ _, _, package_arch = lines[-1].partition('=')
+ return package_arch.strip()
+ return None
+
+ @decorators.WithTimeoutAndRetriesFromInstance()
def GetApplicationDataDirectory(self, package, timeout=None, retries=None):
"""Get the data directory on the device for the given package.
@@ -670,6 +767,31 @@ class DeviceUtils(object):
raise device_errors.CommandFailedError(
'Could not find data directory for %s', package)
+ @decorators.WithTimeoutAndRetriesFromInstance()
+ def GetSecurityContextForPackage(self, package, encrypted=False, timeout=None,
+ retries=None):
+ """Gets the SELinux security context for the given package.
+
+ Args:
+ package: Name of the package.
+ encrypted: Whether to check in the encrypted data directory
+ (/data/user_de/0/) or the unencrypted data directory (/data/data/).
+
+ Returns:
+ The package's security context as a string, or None if not found.
+ """
+ directory = '/data/user_de/0/' if encrypted else '/data/data/'
+ for line in self.RunShellCommand(['ls', '-Z', directory],
+ as_root=True, check_return=True):
+ split_line = line.split()
+ # ls -Z output differs between Android versions, but the package is
+ # always last and the context always starts with "u:object"
+ if split_line[-1] == package:
+ for column in split_line:
+ if column.startswith('u:object'):
+ return column
+ return None
+
def TakeBugReport(self, path, timeout=60*5, retries=None):
"""Takes a bug report and dumps it to the specified path.
@@ -760,29 +882,35 @@ class DeviceUtils(object):
return not self.IsOnline()
self.adb.Reboot()
- self._ClearCache()
+ self.ClearCache()
timeout_retry.WaitFor(device_offline, wait_period=1)
if block:
self.WaitUntilFullyBooted(wifi=wifi)
- INSTALL_DEFAULT_TIMEOUT = 4 * _DEFAULT_TIMEOUT
+ INSTALL_DEFAULT_TIMEOUT = 8 * _DEFAULT_TIMEOUT
@decorators.WithTimeoutAndRetriesFromInstance(
min_default_timeout=INSTALL_DEFAULT_TIMEOUT)
def Install(self, apk, allow_downgrade=False, reinstall=False,
- permissions=None, timeout=None, retries=None):
- """Install an APK.
+ permissions=None, timeout=None, retries=None, modules=None):
+ """Install an APK or app bundle.
- Noop if an identical APK is already installed.
+ Noop if an identical APK is already installed. If installing a bundle, the
+ bundletools helper script (bin/*_bundle) should be used rather than the .aab
+ file.
Args:
- apk: An ApkHelper instance or string containing the path to the APK.
+ apk: An ApkHelper instance or string containing the path to the APK or
+ bundle.
allow_downgrade: A boolean indicating if we should allow downgrades.
reinstall: A boolean indicating if we should keep any existing app data.
+ Ignored if |apk| is a bundle.
permissions: Set of permissions to set. If not set, finds permissions with
apk helper. To set no permissions, pass [].
timeout: timeout in seconds
retries: number of retries
+ modules: An iterable containing specific bundle modules to install.
+ Error if set and |apk| points to an APK instead of a bundle.
Raises:
CommandFailedError if the installation fails.
@@ -790,7 +918,8 @@ class DeviceUtils(object):
DeviceUnreachableError on missing device.
"""
self._InstallInternal(apk, None, allow_downgrade=allow_downgrade,
- reinstall=reinstall, permissions=permissions)
+ reinstall=reinstall, permissions=permissions,
+ modules=modules)
@decorators.WithTimeoutAndRetriesFromInstance(
min_default_timeout=INSTALL_DEFAULT_TIMEOUT)
@@ -826,12 +955,29 @@ class DeviceUtils(object):
def _InstallInternal(self, base_apk, split_apks, allow_downgrade=False,
reinstall=False, allow_cached_props=False,
- permissions=None):
+ permissions=None, modules=None):
+ base_apk = apk_helper.ToHelper(base_apk)
+ if base_apk.is_bundle:
+ if split_apks:
+ raise device_errors.CommandFailedError(
+ 'Attempted to install a bundle {} while specifying split apks'
+ .format(base_apk))
+ if allow_downgrade:
+ logging.warning('Installation of a bundle requested with '
+ 'allow_downgrade=False. This is not possible with '
+ 'bundletools, no downgrading is possible. This '
+ 'flag will be ignored and installation will proceed.')
+ # |allow_cached_props| is unused and ignored for bundles.
+ self._InstallBundleInternal(base_apk, permissions, modules)
+ return
+
+ if modules:
+ raise device_errors.CommandFailedError(
+ 'Attempted to specify modules to install when providing an APK')
+
if split_apks:
self._CheckSdkLevel(version_codes.LOLLIPOP)
- base_apk = apk_helper.ToHelper(base_apk)
-
all_apks = [base_apk.path]
if split_apks:
all_apks += split_select.SelectSplits(
@@ -868,9 +1014,11 @@ class DeviceUtils(object):
logger.warning('Error calculating md5: %s', e)
apks_to_install, host_checksums = all_apks, None
if apks_to_install and not reinstall:
- self.Uninstall(package_name)
apks_to_install = all_apks
+ if device_apk_paths and apks_to_install and not reinstall:
+ self.Uninstall(package_name)
+
if apks_to_install:
# Assume that we won't know the resulting device state.
self._cache['package_apk_paths'].pop(package_name, 0)
@@ -896,6 +1044,20 @@ class DeviceUtils(object):
if host_checksums is not None:
self._cache['package_apk_checksums'][package_name] = host_checksums
+ def _InstallBundleInternal(self, bundle, permissions, modules):
+ cmd = [bundle.path, 'install', '--device', self.serial]
+ if modules:
+ for m in modules:
+ cmd.extend(['-m', m])
+ status = cmd_helper.RunCmd(cmd)
+ if status != 0:
+ raise device_errors.CommandFailedError('Cound not install {}'.format(
+ bundle.path))
+ if (permissions is None
+ and self.build_version_sdk >= version_codes.MARSHMALLOW):
+ permissions = bundle.GetPermissions()
+ self.GrantPermissions(bundle.GetPackageName(), permissions)
+
@decorators.WithTimeoutAndRetriesFromInstance()
def Uninstall(self, package_name, keep_data=False, timeout=None,
retries=None):
@@ -917,15 +1079,11 @@ class DeviceUtils(object):
installed = self._GetApplicationPathsInternal(package_name)
if not installed:
return
- try:
- self.adb.Uninstall(package_name, keep_data)
- self._cache['package_apk_paths'][package_name] = []
- self._cache['package_apk_checksums'][package_name] = set()
- except:
- # Clear cache since we can't be sure of the state.
- self._cache['package_apk_paths'].pop(package_name, 0)
- self._cache['package_apk_checksums'].pop(package_name, 0)
- raise
+ # cached package paths are indeterminate due to system apps taking over
+ # user apps after uninstall, so clear it
+ self._cache['package_apk_paths'].pop(package_name, 0)
+ self._cache['package_apk_checksums'].pop(package_name, 0)
+ self.adb.Uninstall(package_name, keep_data)
def _CheckSdkLevel(self, required_sdk_level):
"""Raises an exception if the device does not have the required SDK level.
@@ -1030,11 +1188,16 @@ class DeviceUtils(object):
def handle_large_output(cmd, large_output_mode):
if large_output_mode:
with device_temp_file.DeviceTempFile(self.adb) as large_output_file:
- cmd = '( %s )>%s 2>&1' % (cmd, large_output_file.name)
+ large_output_cmd = '( %s )>%s 2>&1' % (cmd, large_output_file.name)
logger.debug('Large output mode enabled. Will write output to '
'device and read results from file.')
- handle_large_command(cmd)
- return self.ReadFile(large_output_file.name, force_pull=True)
+ try:
+ handle_large_command(large_output_cmd)
+ return self.ReadFile(large_output_file.name, force_pull=True)
+ except device_errors.AdbShellCommandFailedError as exc:
+ output = self.ReadFile(large_output_file.name, force_pull=True)
+ raise device_errors.AdbShellCommandFailedError(
+ cmd, output, exc.status, exc.device_serial)
else:
try:
return handle_large_command(cmd)
@@ -1064,7 +1227,7 @@ class DeviceUtils(object):
if run_as:
cmd = 'run-as %s sh -c %s' % (cmd_helper.SingleQuote(run_as),
cmd_helper.SingleQuote(cmd))
- if as_root and self.NeedsSU():
+ if (as_root is _FORCE_SU) or (as_root and self.NeedsSU()):
# "su -c sh -c" allows using shell features in |cmd|
cmd = self._Su('sh -c %s' % cmd_helper.SingleQuote(cmd))
@@ -1202,6 +1365,33 @@ class DeviceUtils(object):
raise device_errors.CommandFailedError(line, str(self))
@decorators.WithTimeoutAndRetriesFromInstance()
+ def StartService(self, intent_obj, user_id=None, timeout=None, retries=None):
+ """Start a service on the device.
+
+ Args:
+ intent_obj: An Intent object to send describing the service to start.
+ user_id: A specific user to start the service as, defaults to current.
+ timeout: Timeout in seconds.
+ retries: Number of retries
+
+ Raises:
+ CommandFailedError if the service could not be started.
+ CommandTimeoutError on timeout.
+ DeviceUnreachableError on missing device.
+ """
+ # For whatever reason, startservice was changed to start-service on O and
+ # above.
+ cmd = ['am', 'startservice']
+ if self.build_version_sdk >= version_codes.OREO:
+ cmd[1] = 'start-service'
+ if user_id:
+ cmd.extend(['--user', str(user_id)])
+ cmd.extend(intent_obj.am_args)
+ for line in self.RunShellCommand(cmd, check_return=True):
+ if line.startswith('Error:'):
+ raise device_errors.CommandFailedError(line, str(self))
+
+ @decorators.WithTimeoutAndRetriesFromInstance()
def StartInstrumentation(self, component, finish=True, raw=False,
extras=None, timeout=None, retries=None):
if extras is None:
@@ -1383,7 +1573,7 @@ class DeviceUtils(object):
missing_dirs.add(posixpath.dirname(d))
if delete_device_stale and all_stale_files:
- self.RunShellCommand(['rm', '-f'] + all_stale_files, check_return=True)
+ self.RemovePath(all_stale_files, force=True, recursive=True)
if all_changed_files:
if missing_dirs:
@@ -1483,15 +1673,66 @@ class DeviceUtils(object):
else:
to_push.append((host_abs_path, device_abs_path))
to_delete = device_checksums.keys()
+ # We can't rely solely on the checksum approach since it does not catch
+ # stale directories, which can result in empty directories that cause issues
+ # during copying in efficient_android_directory_copy.sh. So, find any stale
+ # directories here so they can be removed in addition to stale files.
+ if track_stale:
+ to_delete.extend(self._GetStaleDirectories(host_path, device_path))
def cache_commit_func():
- new_sums = {posixpath.join(device_path, path[len(host_path) + 1:]): val
- for path, val in host_checksums.iteritems()}
+ # When host_path is a not a directory, the path.join() call below would
+ # have an '' as the second argument, causing an unwanted / to be appended.
+ if os.path.isfile(host_path):
+ assert len(host_checksums) == 1
+ new_sums = {device_path: host_checksums[host_path]}
+ else:
+ new_sums = {posixpath.join(device_path, path[len(host_path) + 1:]): val
+ for path, val in host_checksums.iteritems()}
cache_entry = [ignore_other_files, new_sums]
self._cache['device_path_checksums'][device_path] = cache_entry
return (to_push, up_to_date, to_delete, cache_commit_func)
+ def _GetStaleDirectories(self, host_path, device_path):
+ """Gets a list of stale directories on the device.
+
+ Args:
+ host_path: an absolute path of a directory on the host
+ device_path: an absolute path of a directory on the device
+
+ Returns:
+ A list containing absolute paths to directories on the device that are
+ considered stale.
+ """
+ def get_device_dirs(path):
+ directories = set()
+ command = _RECURSIVE_DIRECTORY_LIST_SCRIPT % cmd_helper.SingleQuote(path)
+ # We use shell=True to evaluate the command as a script through the shell,
+ # otherwise RunShellCommand tries to interpret it as the name of a (non
+ # existent) command to run.
+ for line in self.RunShellCommand(
+ command, shell=True, check_return=True):
+ directories.add(posixpath.relpath(posixpath.normpath(line), path))
+ return directories
+
+ def get_host_dirs(path):
+ directories = set()
+ if not os.path.isdir(path):
+ return directories
+ for root, _, _ in os.walk(path):
+ if root != path:
+ # Strip off the top level directory so we can compare the device and
+ # host.
+ directories.add(
+ os.path.relpath(root, path).replace(os.sep, posixpath.sep))
+ return directories
+
+ host_dirs = get_host_dirs(host_path)
+ device_dirs = get_device_dirs(device_path)
+ stale_dirs = device_dirs - host_dirs
+ return [posixpath.join(device_path, d) for d in stale_dirs]
+
def _ComputeDeviceChecksumsForApks(self, package_name):
ret = self._cache['package_apk_checksums'].get(package_name)
if ret is None:
@@ -1608,6 +1849,8 @@ class DeviceUtils(object):
except zip_utils.ZipFailedError:
return False
+ logger.info('Pushing %d files via .zip of size %d', len(files),
+ os.path.getsize(zip_path))
self.NeedsSU()
with device_temp_file.DeviceTempFile(
self.adb, suffix='.zip') as device_temp:
@@ -1704,8 +1947,29 @@ class DeviceUtils(object):
device_path if not rename else [_RenamePath(p) for p in device_path])
self.RunShellCommand(args, as_root=as_root, check_return=True)
+ @contextlib.contextmanager
+ def _CopyToReadableLocation(self, device_path):
+ """Context manager to copy a file to a globally readable temp file.
+
+ This uses root permission to copy a file to a globally readable named
+ temporary file. The temp file is removed when this contextmanager is closed.
+
+ Args:
+ device_path: A string containing the absolute path of the file (on the
+ device) to copy.
+ Yields:
+ The globally readable file object.
+ """
+ with device_temp_file.DeviceTempFile(self.adb) as device_temp:
+ cmd = 'SRC=%s DEST=%s;cp "$SRC" "$DEST" && chmod 666 "$DEST"' % (
+ cmd_helper.SingleQuote(device_path),
+ cmd_helper.SingleQuote(device_temp.name))
+ self.RunShellCommand(cmd, shell=True, as_root=True, check_return=True)
+ yield device_temp
+
@decorators.WithTimeoutAndRetriesFromInstance()
- def PullFile(self, device_path, host_path, timeout=None, retries=None):
+ def PullFile(self, device_path, host_path, as_root=False, timeout=None,
+ retries=None):
"""Pull a file from the device.
Args:
@@ -1713,6 +1977,7 @@ class DeviceUtils(object):
from the device.
host_path: A string containing the absolute path of the destination on
the host.
+ as_root: Whether root permissions should be used to pull the file.
timeout: timeout in seconds
retries: number of retries
@@ -1724,7 +1989,14 @@ class DeviceUtils(object):
dirname = os.path.dirname(host_path)
if dirname and not os.path.exists(dirname):
os.makedirs(dirname)
- self.adb.Pull(device_path, host_path)
+ if as_root and self.NeedsSU():
+ if not self.PathExists(device_path, as_root=True):
+ raise device_errors.CommandFailedError(
+ '%r: No such file or directory' % device_path, str(self))
+ with self._CopyToReadableLocation(device_path) as readable_temp_file:
+ self.adb.Pull(readable_temp_file.name, host_path)
+ else:
+ self.adb.Pull(device_path, host_path)
def _ReadFileWithPull(self, device_path):
try:
@@ -1771,12 +2043,8 @@ class DeviceUtils(object):
return _JoinLines(self.RunShellCommand(
['cat', device_path], as_root=as_root, check_return=True))
elif as_root and self.NeedsSU():
- with device_temp_file.DeviceTempFile(self.adb) as device_temp:
- cmd = 'SRC=%s DEST=%s;cp "$SRC" "$DEST" && chmod 666 "$DEST"' % (
- cmd_helper.SingleQuote(device_path),
- cmd_helper.SingleQuote(device_temp.name))
- self.RunShellCommand(cmd, shell=True, as_root=True, check_return=True)
- return self._ReadFileWithPull(device_temp.name)
+ with self._CopyToReadableLocation(device_path) as readable_temp_file:
+ return self._ReadFileWithPull(readable_temp_file.name)
else:
return self._ReadFileWithPull(device_path)
@@ -2051,20 +2319,42 @@ class DeviceUtils(object):
else:
return False
+ def GetLocale(self, cache=False):
+ """Returns the locale setting on the device.
+
+ Args:
+ cache: Whether to use cached properties when available.
+ Returns:
+ A pair (language, country).
+ """
+ locale = self.GetProp('persist.sys.locale', cache=cache)
+ if locale:
+ if '-' not in locale:
+ logging.error('Unparsable locale: %s', locale)
+ return ('', '') # Behave as if persist.sys.locale is undefined.
+ return tuple(locale.split('-', 1))
+ return (self.GetProp('persist.sys.language', cache=cache),
+ self.GetProp('persist.sys.country', cache=cache))
+
def GetLanguage(self, cache=False):
"""Returns the language setting on the device.
+
+ DEPRECATED: Prefer GetLocale() instead.
+
Args:
cache: Whether to use cached properties when available.
"""
- return self.GetProp('persist.sys.language', cache=cache)
+ return self.GetLocale(cache=cache)[0]
def GetCountry(self, cache=False):
"""Returns the country setting on the device.
+ DEPRECATED: Prefer GetLocale() instead.
+
Args:
cache: Whether to use cached properties when available.
"""
- return self.GetProp('persist.sys.country', cache=cache)
+ return self.GetLocale(cache=cache)[1]
@property
def screen_density(self):
@@ -2137,7 +2427,11 @@ class DeviceUtils(object):
@property
def product_cpu_abi(self):
- """Returns the product cpu abi of the device (e.g. 'armeabi-v7a')."""
+ """Returns the product cpu abi of the device (e.g. 'armeabi-v7a').
+
+ For supported ABIs, the return value will be one of the values defined in
+ devil.android.ndk.abis.
+ """
return self.GetProp('ro.product.cpu.abi', cache=True)
@property
@@ -2263,7 +2557,8 @@ class DeviceUtils(object):
retries: number of retries
Returns:
- The device's main ABI name.
+ The device's main ABI name. For supported ABIs, the return value will be
+ one of the values defined in devil.android.ndk.abis.
Raises:
CommandTimeoutError on timeout.
@@ -2279,9 +2574,8 @@ class DeviceUtils(object):
"""
try:
ps_cmd = 'ps'
- # ps behavior was changed in Android above N, http://crbug.com/686716
- if (self.build_version_sdk >= version_codes.NOUGAT_MR1
- and self.build_id[0] > 'N'):
+ # ps behavior was changed in Android O and above, http://crbug.com/686716
+ if self.build_version_sdk >= version_codes.OREO:
ps_cmd = 'ps -e'
if pattern:
return self._RunPipedShellCommand(
@@ -2331,6 +2625,29 @@ class DeviceUtils(object):
processes.append(ProcessInfo(**row))
return processes
+ def _GetDumpsysOutput(self, extra_args, pattern=None):
+ """Runs |dumpsys| command on the device and returns its output.
+
+ This private method implements support for filtering the output by a given
+ |pattern|, but does not do any output parsing.
+ """
+ try:
+ cmd = ['dumpsys'] + extra_args
+ if pattern:
+ cmd = ' '.join(cmd_helper.SingleQuote(s) for s in cmd)
+ return self._RunPipedShellCommand(
+ '%s | grep -F %s' % (cmd, cmd_helper.SingleQuote(pattern)))
+ else:
+ cmd = ['dumpsys'] + extra_args
+ return self.RunShellCommand(cmd, check_return=True, large_output=True)
+ except device_errors.AdbShellCommandFailedError as e:
+ if e.status and isinstance(e.status, list) and not e.status[0]:
+ # If dumpsys succeeded but grep failed, there were no lines matching
+ # the given pattern.
+ return []
+ else:
+ raise
+
# TODO(#4103): Remove after migrating clients to ListProcesses.
@decorators.WithTimeoutAndRetriesFromInstance()
def GetPids(self, process_name=None, timeout=None, retries=None):
@@ -2438,6 +2755,181 @@ class DeviceUtils(object):
check_return=True)
@decorators.WithTimeoutAndRetriesFromInstance()
+ def GetWebViewUpdateServiceDump(self, timeout=None, retries=None):
+ """Get the WebView update command sysdump on the device.
+
+ Returns:
+ A dictionary with these possible entries:
+ FallbackLogicEnabled: True|False
+ CurrentWebViewPackage: "package name" or None
+ MinimumWebViewVersionCode: int
+ WebViewPackages: Dict of installed WebView providers, mapping "package
+ name" to "reason it's valid/invalid."
+
+ It may return an empty dictionary if device does not
+ support the "dumpsys webviewupdate" command.
+
+ Raises:
+ CommandFailedError on failure.
+ CommandTimeoutError on timeout.
+ DeviceUnreachableError on missing device.
+ """
+ result = {}
+
+ # Command was implemented starting in Oreo
+ if self.build_version_sdk < version_codes.OREO:
+ return result
+
+ output = self.RunShellCommand(
+ ['dumpsys', 'webviewupdate'], check_return=True)
+ webview_packages = {}
+ for line in output:
+ match = re.search(_WEBVIEW_SYSUPDATE_CURRENT_PKG_RE, line)
+ if match:
+ result['CurrentWebViewPackage'] = match.group(1)
+ match = re.search(_WEBVIEW_SYSUPDATE_NULL_PKG_RE, line)
+ if match:
+ result['CurrentWebViewPackage'] = None
+ match = re.search(_WEBVIEW_SYSUPDATE_FALLBACK_LOGIC_RE, line)
+ if match:
+ result['FallbackLogicEnabled'] = \
+ True if match.group(1) == 'true' else False
+ match = re.search(_WEBVIEW_SYSUPDATE_PACKAGE_INSTALLED_RE, line)
+ if match:
+ package_name = match.group(1)
+ reason = match.group(2)
+ webview_packages[package_name] = reason
+ match = re.search(_WEBVIEW_SYSUPDATE_PACKAGE_NOT_INSTALLED_RE, line)
+ if match:
+ package_name = match.group(1)
+ reason = match.group(2)
+ webview_packages[package_name] = reason
+ match = re.search(_WEBVIEW_SYSUPDATE_MIN_VERSION_CODE, line)
+ if match:
+ result['MinimumWebViewVersionCode'] = int(match.group(1))
+ if webview_packages:
+ result['WebViewPackages'] = webview_packages
+
+ missing_fields = set(['CurrentWebViewPackage', 'FallbackLogicEnabled']) - \
+ set(result.keys())
+ if len(missing_fields) > 0:
+ raise device_errors.CommandFailedError(
+ '%s not found in dumpsys webviewupdate' % str(list(missing_fields)))
+ return result
+
+ @decorators.WithTimeoutAndRetriesFromInstance()
+ def SetWebViewImplementation(self, package_name, timeout=None, retries=None):
+ """Select the WebView implementation to the specified package.
+
+ Args:
+ package_name: The package name of a WebView implementation. The package
+ must be already installed on the device.
+ timeout: timeout in seconds
+ retries: number of retries
+
+ Raises:
+ CommandFailedError on failure.
+ CommandTimeoutError on timeout.
+ DeviceUnreachableError on missing device.
+ """
+ installed = self.GetApplicationPaths(package_name)
+ if not installed:
+ raise device_errors.CommandFailedError(
+ '%s is not installed' % package_name, str(self))
+ output = self.RunShellCommand(
+ ['cmd', 'webviewupdate', 'set-webview-implementation', package_name],
+ single_line=True,
+ check_return=False)
+ if output == 'Success':
+ logging.info('WebView provider set to: %s', package_name)
+ else:
+ dumpsys_output = self.GetWebViewUpdateServiceDump()
+ webview_packages = dumpsys_output.get('WebViewPackages')
+ if webview_packages:
+ reason = webview_packages.get(package_name)
+ if not reason:
+ all_provider_package_names = webview_packages.keys()
+ raise device_errors.CommandFailedError(
+ '%s is not in the system WebView provider list. Must choose one '
+ 'of %r.' % (package_name, all_provider_package_names), str(self))
+ if re.search(r'is\s+NOT\s+installed/enabled for all users', reason):
+ raise device_errors.CommandFailedError(
+ '%s is disabled, make sure to disable WebView fallback logic' %
+ package_name, str(self))
+ if re.search(r'No WebView-library manifest flag', reason):
+ raise device_errors.CommandFailedError(
+ '%s does not declare a WebView native library, so it cannot '
+ 'be a WebView provider' % package_name, str(self))
+ if re.search(r'SDK version too low', reason):
+ raise device_errors.CommandFailedError(
+ '%s needs a higher targetSdkVersion (must be >= %d)' %
+ (package_name, self.build_version_sdk), str(self))
+ if re.search(r'Version code too low', reason):
+ raise device_errors.CommandFailedError(
+ '%s needs a higher versionCode (must be >= %d)' %
+ (package_name, dumpsys_output.get('MinimumWebViewVersionCode')),
+ str(self))
+ if re.search(r'Incorrect signature', reason):
+ raise device_errors.CommandFailedError(
+ '%s is not signed with release keys (but user builds require '
+ 'this for WebView providers)' % package_name, str(self))
+ raise device_errors.CommandFailedError(
+ 'Error setting WebView provider: %s' % output, str(self))
+
+ @decorators.WithTimeoutAndRetriesFromInstance()
+ def SetWebViewFallbackLogic(self, enabled, timeout=None, retries=None):
+ """Set whether WebViewUpdateService's "fallback logic" should be enabled.
+
+ WebViewUpdateService has nonintuitive "fallback logic" for devices where
+ Monochrome (Chrome Stable) is preinstalled as the WebView provider, with a
+ "stub" (little-to-no code) implementation of standalone WebView.
+
+ "Fallback logic" (enabled by default) is designed, in the case where the
+ user has disabled Chrome, to fall back to the stub standalone WebView by
+ enabling the package. The implementation plumbs through the Chrome APK until
+ Play Store installs an update with the full implementation.
+
+ A surprising side-effect of "fallback logic" is that, immediately after
+ sideloading WebView, WebViewUpdateService re-disables the package and
+ uninstalls the update. This can prevent successfully using standalone
+ WebView for development, although "fallback logic" can be disabled on
+ userdebug/eng devices.
+
+ Because this is only relevant for devices with the standalone WebView stub,
+ this command is only relevant on N-P (inclusive).
+
+ You can determine if "fallback logic" is currently enabled by checking
+ FallbackLogicEnabled in the dictionary returned by
+ GetWebViewUpdateServiceDump.
+
+ Args:
+ enabled: bool - True for enabled, False for disabled
+ timeout: timeout in seconds
+ retries: number of retries
+
+ Raises:
+ CommandFailedError on failure.
+ CommandTimeoutError on timeout.
+ DeviceUnreachableError on missing device.
+ """
+
+ # Command is only available on devices which preinstall stub WebView.
+ if not version_codes.NOUGAT <= self.build_version_sdk <= version_codes.PIE:
+ return
+
+ # redundant-packages is the opposite of fallback logic
+ enable_string = 'disable' if enabled else 'enable'
+ output = self.RunShellCommand(
+ ['cmd', 'webviewupdate', '%s-redundant-packages' % enable_string],
+ single_line=True, check_return=True)
+ if output == 'Success':
+ logging.info('WebView Fallback Logic is %s',
+ 'enabled' if enabled else 'disabled')
+ else:
+ raise device_errors.CommandFailedError(
+ 'Error setting WebView Fallback Logic: %s' % output, str(self))
+
+ @decorators.WithTimeoutAndRetriesFromInstance()
def TakeScreenshot(self, host_path=None, timeout=None, retries=None):
"""Takes a screenshot of the device.
@@ -2511,7 +3003,7 @@ class DeviceUtils(object):
self._client_caches[client_name] = {}
return self._client_caches[client_name]
- def _ClearCache(self):
+ def ClearCache(self):
"""Clears all caches."""
for client in self._client_caches:
self._client_caches[client].clear()
@@ -2614,8 +3106,8 @@ class DeviceUtils(object):
return parallelizer.SyncParallelizer(devices)
@classmethod
- def HealthyDevices(cls, blacklist=None, device_arg='default', retry=True,
- **kwargs):
+ def HealthyDevices(cls, blacklist=None, device_arg='default', retries=1,
+ enable_usb_resets=False, abis=None, **kwargs):
"""Returns a list of DeviceUtils instances.
Returns a list of DeviceUtils instances that are attached, not blacklisted,
@@ -2637,8 +3129,14 @@ class DeviceUtils(object):
blacklisted.
['A', 'B', ...] -> Returns instances for the subset that is not
blacklisted.
- retry: If true, will attempt to restart adb server and query it again if
- no devices are found.
+ retries: Number of times to restart adb server and query it again if no
+ devices are found on the previous attempts, with exponential backoffs
+ up to 60s between each retry.
+ enable_usb_resets: If true, will attempt to trigger a USB reset prior to
+ the last attempt if there are no available devices. It will only reset
+ those that appear to be android devices.
+ abis: A list of ABIs for which the device needs to support at least one of
+ (optional). See devil.android.ndk.abis for valid values.
A device serial, or a list of device serials (optional).
Returns:
@@ -2674,14 +3172,23 @@ class DeviceUtils(object):
return True
return False
+ def supports_abi(abi, serial):
+ if abis and abi not in abis:
+ logger.warning("Device %s doesn't support required ABIs.", serial)
+ return False
+ return True
+
def _get_devices():
if device_arg:
devices = [cls(x, **kwargs) for x in device_arg if not blacklisted(x)]
else:
devices = []
for adb in adb_wrapper.AdbWrapper.Devices():
- if not blacklisted(adb.GetDeviceSerial()):
- devices.append(cls(_CreateAdbWrapper(adb), **kwargs))
+ serial = adb.GetDeviceSerial()
+ if not blacklisted(serial):
+ device = cls(_CreateAdbWrapper(adb), **kwargs)
+ if supports_abi(device.GetABI(), serial):
+ devices.append(device)
if len(devices) == 0 and not allow_no_devices:
raise device_errors.NoDevicesError()
@@ -2689,15 +3196,37 @@ class DeviceUtils(object):
raise device_errors.MultipleDevicesError(devices)
return sorted(devices)
- try:
- return _get_devices()
- except device_errors.NoDevicesError:
- if not retry:
- raise
- logger.warning(
- 'No devices found. Will try again after restarting adb server.')
- RestartServer()
- return _get_devices()
+ def _reset_devices():
+ if not reset_usb:
+ logging.error(
+ 'reset_usb.py not supported on this platform (%s). Skipping usb '
+ 'resets.', sys.platform)
+ return
+ if device_arg:
+ for serial in device_arg:
+ reset_usb.reset_android_usb(serial)
+ else:
+ reset_usb.reset_all_android_devices()
+
+ for attempt in xrange(retries+1):
+ try:
+ return _get_devices()
+ except device_errors.NoDevicesError:
+ if attempt == retries:
+ logging.error('No devices found after exhausting all retries.')
+ raise
+ elif attempt == retries - 1 and enable_usb_resets:
+ logging.warning(
+ 'Attempting to reset relevant USB devices prior to the last '
+ 'attempt.')
+ _reset_devices()
+ # math.pow returns floats, so cast to int for easier testing
+ sleep_s = min(int(math.pow(2, attempt + 1)), 60)
+ logger.warning(
+ 'No devices found. Will try again after restarting adb server '
+ 'and a short nap of %d s.', sleep_s)
+ time.sleep(sleep_s)
+ RestartServer()
@decorators.WithTimeoutAndRetriesFromInstance()
def RestartAdbd(self, timeout=None, retries=None):
@@ -2806,3 +3335,39 @@ class DeviceUtils(object):
return
self.SendKeyEvent(keyevent.KEYCODE_POWER)
timeout_retry.WaitFor(screen_test, wait_period=1)
+
+ @decorators.WithTimeoutAndRetriesFromInstance()
+ def ChangeOwner(self, owner_group, paths, timeout=None, retries=None):
+ """Changes file system ownership for permissions.
+
+ Args:
+ owner_group: New owner and group to assign. Note that this should be a
+ string in the form user[.group] where the group is option.
+ paths: Paths to change ownership of.
+
+ Note that the -R recursive option is not supported by all Android
+ versions.
+ """
+ if not paths:
+ return
+ self.RunShellCommand(['chown', owner_group] + paths, check_return=True)
+
+ @decorators.WithTimeoutAndRetriesFromInstance()
+ def ChangeSecurityContext(self, security_context, paths, timeout=None,
+ retries=None):
+ """Changes the SELinux security context for files.
+
+ Args:
+ security_context: The new security context as a string
+ paths: Paths to change the security context of.
+
+ Note that the -R recursive option is not supported by all Android
+ versions.
+ """
+ if not paths:
+ return
+ command = ['chcon', security_context] + paths
+
+ # Note, need to force su because chcon can fail with permission errors even
+ # if the device is rooted.
+ self.RunShellCommand(command, as_root=_FORCE_SU, check_return=True)
diff --git a/systrace/catapult/devil/devil/android/device_utils_devicetest.py b/systrace/catapult/devil/devil/android/device_utils_devicetest.py
index 173094b..0836f3e 100755
--- a/systrace/catapult/devil/devil/android/device_utils_devicetest.py
+++ b/systrace/catapult/devil/devil/android/device_utils_devicetest.py
@@ -210,6 +210,39 @@ class DeviceUtilsPushDeleteFilesTest(device_test_case.DeviceTestCase):
cmd_helper.RunCmd(['rm', '-rf', host_tmp_dir])
self.device.RemovePath(_DEVICE_DIR, recursive=True, force=True)
+ def testPushWithStaleDirectories(self):
+ # Make a few files and directories to push.
+ host_tmp_dir = tempfile.mkdtemp()
+ host_sub_dir1 = '%s/%s' % (host_tmp_dir, _SUB_DIR1)
+ host_sub_dir2 = "%s/%s/%s" % (host_tmp_dir, _SUB_DIR, _SUB_DIR2)
+ os.makedirs(host_sub_dir1)
+ os.makedirs(host_sub_dir2)
+
+ self._MakeTempFileGivenDir(host_sub_dir1, _OLD_CONTENTS)
+ self._MakeTempFileGivenDir(host_sub_dir2, _OLD_CONTENTS)
+
+ # Push all our created files/directories and verify they're on the device.
+ self.device.PushChangedFiles([(host_tmp_dir, _DEVICE_DIR)],
+ delete_device_stale=True)
+ top_level_dirs = self.device.ListDirectory(_DEVICE_DIR)
+ self.assertIn(_SUB_DIR1, top_level_dirs)
+ self.assertIn(_SUB_DIR, top_level_dirs)
+ sub_dir = self.device.ListDirectory('%s/%s' % (_DEVICE_DIR, _SUB_DIR))
+ self.assertIn(_SUB_DIR2, sub_dir)
+
+ # Remove one of the directories on the host and push again.
+ cmd_helper.RunCmd(['rm', '-rf', host_sub_dir2])
+ self.device.PushChangedFiles([(host_tmp_dir, _DEVICE_DIR)],
+ delete_device_stale=True)
+
+ # Verify that the directory we removed is no longer on the device, but the
+ # other directories still are.
+ top_level_dirs = self.device.ListDirectory(_DEVICE_DIR)
+ self.assertIn(_SUB_DIR1, top_level_dirs)
+ self.assertIn(_SUB_DIR, top_level_dirs)
+ sub_dir = self.device.ListDirectory('%s/%s' % (_DEVICE_DIR, _SUB_DIR))
+ self.assertEqual([], sub_dir)
+
def testRestartAdbd(self):
def get_adbd_pid():
try:
diff --git a/systrace/catapult/devil/devil/android/device_utils_test.py b/systrace/catapult/devil/devil/android/device_utils_test.py
index b5660ac..5799c7b 100755
--- a/systrace/catapult/devil/devil/android/device_utils_test.py
+++ b/systrace/catapult/devil/devil/android/device_utils_test.py
@@ -15,12 +15,14 @@ import json
import logging
import os
import stat
+import sys
import unittest
from devil import devil_env
from devil.android import device_errors
from devil.android import device_signal
from devil.android import device_utils
+from devil.android.ndk import abis
from devil.android.sdk import adb_wrapper
from devil.android.sdk import intent
from devil.android.sdk import keyevent
@@ -31,7 +33,6 @@ from devil.utils import mock_calls
with devil_env.SysPath(devil_env.PYMOCK_PATH):
import mock # pylint: disable=import-error
-
def Process(name, pid, ppid='1'):
return device_utils.ProcessInfo(name=name, pid=pid, ppid=ppid)
@@ -55,8 +56,10 @@ class _MockApkHelper(object):
def __init__(self, path, package_name, perms=None):
self.path = path
+ self.is_bundle = path.endswith('_bundle')
self.package_name = package_name
self.perms = perms
+ self.abis = [abis.ARM]
def GetPackageName(self):
return self.package_name
@@ -64,6 +67,9 @@ class _MockApkHelper(object):
def GetPermissions(self):
return self.perms
+ def GetAbis(self):
+ return self.abis
+
class _MockMultipleDevicesError(Exception):
pass
@@ -308,32 +314,62 @@ class DeviceUtilsIsOnlineTest(DeviceUtilsTest):
class DeviceUtilsHasRootTest(DeviceUtilsTest):
def testHasRoot_true(self):
- with self.patch_call(self.call.device.product_name,
- return_value='notasailfish'), (
+ with self.patch_call(self.call.device.build_type,
+ return_value='userdebug'), (
+ self.patch_call(self.call.device.product_name,
+ return_value='notasailfish')), (
self.assertCall(self.call.adb.Shell('ls /root'), 'foo\n')):
self.assertTrue(self.device.HasRoot())
def testhasRootSpecial_true(self):
- with self.patch_call(self.call.device.product_name,
- return_value='sailfish'), (
+ with self.patch_call(self.call.device.build_type,
+ return_value='userdebug'), (
+ self.patch_call(self.call.device.product_name,
+ return_value='sailfish')), (
self.assertCall(self.call.adb.Shell('getprop service.adb.root'),
'1\n')):
self.assertTrue(self.device.HasRoot())
+ def testhasRootSpecialAosp_true(self):
+ with self.patch_call(self.call.device.build_type,
+ return_value='userdebug'), (
+ self.patch_call(self.call.device.product_name,
+ return_value='aosp_sailfish')), (
+ self.assertCall(self.call.adb.Shell('getprop service.adb.root'),
+ '1\n')):
+ self.assertTrue(self.device.HasRoot())
+
+ def testhasRootEngBuild_true(self):
+ with self.patch_call(self.call.device.build_type,
+ return_value='eng'):
+ self.assertTrue(self.device.HasRoot())
+
def testHasRoot_false(self):
- with self.patch_call(self.call.device.product_name,
- return_value='notasailfish'), (
+ with self.patch_call(self.call.device.build_type,
+ return_value='userdebug'), (
+ self.patch_call(self.call.device.product_name,
+ return_value='notasailfish')), (
self.assertCall(self.call.adb.Shell('ls /root'),
self.ShellError())):
self.assertFalse(self.device.HasRoot())
def testHasRootSpecial_false(self):
- with self.patch_call(self.call.device.product_name,
- return_value='sailfish'), (
+ with self.patch_call(self.call.device.build_type,
+ return_value='userdebug'), (
+ self.patch_call(self.call.device.product_name,
+ return_value='sailfish')), (
self.assertCall(self.call.adb.Shell('getprop service.adb.root'),
'\n')):
self.assertFalse(self.device.HasRoot())
+ def testHasRootSpecialAosp_false(self):
+ with self.patch_call(self.call.device.build_type,
+ return_value='userdebug'), (
+ self.patch_call(self.call.device.product_name,
+ return_value='aosp_sailfish')), (
+ self.assertCall(self.call.adb.Shell('getprop service.adb.root'),
+ '\n')):
+ self.assertFalse(self.device.HasRoot())
class DeviceUtilsEnableRootTest(DeviceUtilsTest):
@@ -341,7 +377,7 @@ class DeviceUtilsEnableRootTest(DeviceUtilsTest):
with self.assertCalls(
self.call.adb.Root(),
self.call.adb.WaitForDevice(),
- (self.call.device.GetProp('service.adb.root', cache=False), '1')):
+ (self.call.device.HasRoot(), True)):
self.device.EnableRoot()
def testEnableRoot_userBuild(self):
@@ -358,6 +394,16 @@ class DeviceUtilsEnableRootTest(DeviceUtilsTest):
with self.assertRaises(device_errors.AdbCommandFailedError):
self.device.EnableRoot()
+ def testEnableRoot_timeoutInWaitForDevice(self):
+ with self.assertCalls(
+ (self.call.adb.Root(),
+ self.AdbCommandError(
+ output='timeout expired while waiting for device')),
+ (self.call.device.IsUserBuild(), False),
+ self.call.adb.WaitForDevice(),
+ (self.call.device.HasRoot(), True)):
+ self.device.EnableRoot()
+
class DeviceUtilsIsUserBuildTest(DeviceUtilsTest):
@@ -465,6 +511,27 @@ class DeviceUtils_GetApplicationVersionTest(DeviceUtilsTest):
self.device.GetApplicationVersion('com.android.chrome')
+class DeviceUtils_GetPackageArchitectureTest(DeviceUtilsTest):
+
+ def test_GetPackageArchitecture_exists(self):
+ with self.assertCall(
+ self.call.device._RunPipedShellCommand(
+ 'dumpsys package com.android.chrome | grep -F primaryCpuAbi'),
+ [' primaryCpuAbi=armeabi-v7a']):
+ self.assertEquals(
+ abis.ARM,
+ self.device.GetPackageArchitecture('com.android.chrome'))
+
+ def test_GetPackageArchitecture_notExists(self):
+ with self.assertCall(
+ self.call.device._RunPipedShellCommand(
+ 'dumpsys package com.android.chrome | grep -F primaryCpuAbi'),
+ []):
+ self.assertEquals(
+ None,
+ self.device.GetPackageArchitecture('com.android.chrome'))
+
+
class DeviceUtilsGetApplicationDataDirectoryTest(DeviceUtilsTest):
def testGetApplicationDataDirectory_exists(self):
@@ -715,6 +782,18 @@ class DeviceUtilsInstallTest(DeviceUtilsTest):
self.device.Install(DeviceUtilsInstallTest.mock_apk, retries=0,
permissions=['p1', 'p2'])
+ def testInstall_identicalPriorInstall(self):
+ with self.assertCalls(
+ (mock.call.os.path.exists('/fake/test/app.apk'), True),
+ (self.call.device._GetApplicationPathsInternal('test.package'),
+ ['/fake/data/app/test.package.apk']),
+ (self.call.device._ComputeStaleApks('test.package',
+ ['/fake/test/app.apk']),
+ ([], None)),
+ (self.call.device.ForceStop('test.package'))):
+ self.device.Install(DeviceUtilsInstallTest.mock_apk, retries=0,
+ permissions=[])
+
def testInstall_differentPriorInstall(self):
with self.assertCalls(
(mock.call.os.path.exists('/fake/test/app.apk'), True),
@@ -729,6 +808,18 @@ class DeviceUtilsInstallTest(DeviceUtilsTest):
self.device.Install(DeviceUtilsInstallTest.mock_apk, retries=0,
permissions=[])
+ def testInstall_differentPriorInstallSplitApk(self):
+ with self.assertCalls(
+ (mock.call.os.path.exists('/fake/test/app.apk'), True),
+ (self.call.device._GetApplicationPathsInternal('test.package'),
+ ['/fake/data/app/test.package.apk',
+ '/fake/data/app/test.package2.apk']),
+ self.call.device.Uninstall('test.package'),
+ self.call.adb.Install('/fake/test/app.apk', reinstall=False,
+ allow_downgrade=False)):
+ self.device.Install(DeviceUtilsInstallTest.mock_apk, retries=0,
+ permissions=[])
+
def testInstall_differentPriorInstall_reinstall(self):
with self.assertCalls(
(mock.call.os.path.exists('/fake/test/app.apk'), True),
@@ -783,6 +874,11 @@ class DeviceUtilsInstallTest(DeviceUtilsTest):
self.device.Install(DeviceUtilsInstallTest.mock_apk,
reinstall=True, retries=0, permissions=[], allow_downgrade=True)
+ def testInstall_modulesSpecified(self):
+ with self.assertRaises(device_errors.CommandFailedError):
+ self.device.Install(DeviceUtilsInstallTest.mock_apk,
+ modules=['base'])
+
class DeviceUtilsInstallSplitApkTest(DeviceUtilsTest):
@@ -865,6 +961,61 @@ class DeviceUtilsInstallSplitApkTest(DeviceUtilsTest):
['split1.apk', 'split2.apk', 'split3.apk'], permissions=[],
retries=0)
+ def testInstallSplitApk_previouslyNonSplit(self):
+ with self.assertCalls(
+ (self.call.device._CheckSdkLevel(21)),
+ (mock.call.devil.android.sdk.split_select.SelectSplits(
+ self.device, 'base.apk',
+ ['split1.apk', 'split2.apk', 'split3.apk'],
+ allow_cached_props=False),
+ ['split2.apk']),
+ (mock.call.os.path.exists('base.apk'), True),
+ (mock.call.os.path.exists('split2.apk'), True),
+ (self.call.device._GetApplicationPathsInternal(
+ 'test.package'), ['/fake/data/app/test.package.apk']),
+ self.call.device.Uninstall('test.package'),
+ (self.call.adb.InstallMultiple(
+ ['base.apk', 'split2.apk'], partial=None, reinstall=False,
+ allow_downgrade=False))):
+ self.device.InstallSplitApk(DeviceUtilsInstallSplitApkTest.mock_apk,
+ ['split1.apk', 'split2.apk', 'split3.apk'], permissions=[], retries=0)
+
+
+class DeviceUtilsInstallBundleTest(DeviceUtilsTest):
+ mock_apk = _MockApkHelper('/fake/test/app_bundle', 'test.package', ['p1'])
+
+ def testInstallBundle_noPriorInstall(self):
+ with self.patch_call(self.call.device.build_version_sdk, return_value=23):
+ with self.assertCalls(
+ (mock.call.devil.utils.cmd_helper.RunCmd(
+ ['/fake/test/app_bundle', 'install', '--device',
+ self.device.serial]), 0),
+ (self.call.device.GrantPermissions('test.package', ['p1']), [])):
+ self.device.Install(DeviceUtilsInstallBundleTest.mock_apk)
+
+ def testInstallBundle_modulesSpecified(self):
+ with self.patch_call(self.call.device.build_version_sdk, return_value=23):
+ with self.assertCalls(
+ (mock.call.devil.utils.cmd_helper.RunCmd(
+ ['/fake/test/app_bundle', 'install', '--device',
+ self.device.serial, '-m', 'base']), 0),
+ (self.call.device.GrantPermissions('test.package', ['p1']), [])):
+ self.device.Install(
+ DeviceUtilsInstallBundleTest.mock_apk, modules=['base'])
+
+ def testInstallBundle_permissionsPreM(self):
+ with self.patch_call(self.call.device.build_version_sdk, return_value=20):
+ with self.assertCalls(
+ (mock.call.devil.utils.cmd_helper.RunCmd(
+ ['/fake/test/app_bundle', 'install', '--device',
+ self.device.serial]), 0)):
+ self.device.Install(DeviceUtilsInstallBundleTest.mock_apk)
+
+ def testInstallBundle_splitApks(self):
+ with self.assertRaises(device_errors.CommandFailedError):
+ self.device.InstallSplitApk(
+ DeviceUtilsInstallBundleTest.mock_apk, ['apk1', 'apk2'])
+
class DeviceUtilsUninstallTest(DeviceUtilsTest):
@@ -1415,6 +1566,62 @@ class DeviceUtilsStartActivityTest(DeviceUtilsTest):
self.device.StartActivity(test_intent)
+class DeviceUtilsStartServiceTest(DeviceUtilsTest):
+ def testStartService_success(self):
+ test_intent = intent.Intent(action='android.intent.action.START',
+ package='test.package',
+ activity='.Main')
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.NOUGAT):
+ with self.assertCall(
+ self.call.adb.Shell('am startservice '
+ '-a android.intent.action.START '
+ '-n test.package/.Main'),
+ 'Starting service: Intent { act=android.intent.action.START }'):
+ self.device.StartService(test_intent)
+
+ def testStartService_failure(self):
+ test_intent = intent.Intent(action='android.intent.action.START',
+ package='test.package',
+ activity='.Main')
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.NOUGAT):
+ with self.assertCall(
+ self.call.adb.Shell('am startservice '
+ '-a android.intent.action.START '
+ '-n test.package/.Main'),
+ 'Error: Failed to start test service'):
+ with self.assertRaises(device_errors.CommandFailedError):
+ self.device.StartService(test_intent)
+
+ def testStartService_withUser(self):
+ test_intent = intent.Intent(action='android.intent.action.START',
+ package='test.package',
+ activity='.Main')
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.NOUGAT):
+ with self.assertCall(
+ self.call.adb.Shell('am startservice '
+ '--user TestUser '
+ '-a android.intent.action.START '
+ '-n test.package/.Main'),
+ 'Starting service: Intent { act=android.intent.action.START }'):
+ self.device.StartService(test_intent, user_id='TestUser')
+
+ def testStartService_onOreo(self):
+ test_intent = intent.Intent(action='android.intent.action.START',
+ package='test.package',
+ activity='.Main')
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.OREO):
+ with self.assertCall(
+ self.call.adb.Shell('am start-service '
+ '-a android.intent.action.START '
+ '-n test.package/.Main'),
+ 'Starting service: Intent { act=android.intent.action.START }'):
+ self.device.StartService(test_intent)
+
+
class DeviceUtilsStartInstrumentationTest(DeviceUtilsTest):
def testStartInstrumentation_nothing(self):
@@ -1691,6 +1898,8 @@ class DeviceUtilsPushChangedFilesZippedTest(DeviceUtilsTest):
mock_zip_temp_dir),
(mock.call.devil.utils.zip_utils.WriteZipFile(
'/test/temp/dir/tmp.zip', test_files)),
+ (mock.call.os.path.getsize(
+ '/test/temp/dir/tmp.zip'), 123),
(self.call.device.NeedsSU(), True),
(mock.call.devil.android.device_temp_file.DeviceTempFile(self.adb,
suffix='.zip'),
@@ -1818,6 +2027,33 @@ class DeviceUtilsPullFileTest(DeviceUtilsTest):
self.device.PullFile('/data/app/test.file.does.not.exist',
'/test/file/host/path')
+ def testPullFile_asRoot(self):
+ with mock.patch('os.path.exists', return_value=True):
+ with self.assertCalls(
+ (self.call.device.NeedsSU(), True),
+ (self.call.device.PathExists('/this/file/can.be.read.with.su',
+ as_root=True), True),
+ (mock.call.devil.android.device_temp_file.DeviceTempFile(self.adb),
+ MockTempFile('/sdcard/tmp/on.device')),
+ self.call.device.RunShellCommand(
+ 'SRC=/this/file/can.be.read.with.su DEST=/sdcard/tmp/on.device;'
+ 'cp "$SRC" "$DEST" && chmod 666 "$DEST"',
+ shell=True, as_root=True, check_return=True),
+ (self.call.adb.Pull('/sdcard/tmp/on.device',
+ '/test/file/host/path'))):
+ self.device.PullFile('/this/file/can.be.read.with.su',
+ '/test/file/host/path', as_root=True)
+
+ def testPullFile_asRootDoesntExistOnDevice(self):
+ with mock.patch('os.path.exists', return_value=True):
+ with self.assertCalls(
+ (self.call.device.NeedsSU(), True),
+ (self.call.device.PathExists('/data/app/test.file.does.not.exist',
+ as_root=True), False)):
+ with self.assertRaises(device_errors.CommandFailedError):
+ self.device.PullFile('/data/app/test.file.does.not.exist',
+ '/test/file/host/path', as_root=True)
+
class DeviceUtilsReadFileTest(DeviceUtilsTest):
@@ -2525,6 +2761,205 @@ class DeviceUtilsGetSetEnforce(DeviceUtilsTest):
self.device.SetEnforce(enabled='0') # Not recommended but it works!
+class DeviceUtilsGetWebViewUpdateServiceDumpTest(DeviceUtilsTest):
+
+ def testGetWebViewUpdateServiceDump_success(self):
+ # Some of the lines of adb shell dumpsys webviewupdate:
+ dumpsys_lines = [
+ 'Fallback logic enabled: true',
+ ('Current WebView package (name, version): '
+ '(com.android.chrome, 61.0.3163.98)'),
+ 'Minimum WebView version code: 12345',
+ 'WebView packages:',
+ ('Valid package com.android.chrome (versionName: '
+ '61.0.3163.98, versionCode: 1, targetSdkVersion: 26) is '
+ 'installed/enabled for all users'),
+ ('Valid package com.google.android.webview (versionName: '
+ '58.0.3029.125, versionCode: 1, targetSdkVersion: 26) is NOT '
+ 'installed/enabled for all users'),
+ ('Invalid package com.google.android.apps.chrome (versionName: '
+ '56.0.2924.122, versionCode: 2, targetSdkVersion: 25), reason: SDK '
+ 'version too low'),
+ ('com.chrome.canary is NOT installed.'),
+ ]
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.OREO):
+ with self.assertCall(
+ self.call.adb.Shell('dumpsys webviewupdate'),
+ '\n'.join(dumpsys_lines)):
+ update = self.device.GetWebViewUpdateServiceDump()
+ self.assertTrue(update['FallbackLogicEnabled'])
+ self.assertEqual('com.android.chrome',
+ update['CurrentWebViewPackage'])
+ self.assertEqual(12345, update['MinimumWebViewVersionCode'])
+ # Order isn't really important, and we shouldn't have duplicates, so we
+ # convert to sets.
+ expected = {
+ 'com.android.chrome', 'com.google.android.webview',
+ 'com.google.android.apps.chrome', 'com.chrome.canary'
+ }
+ self.assertSetEqual(expected, set(update['WebViewPackages'].keys()))
+ self.assertEquals(
+ 'is installed/enabled for all users',
+ update['WebViewPackages']['com.android.chrome'])
+ self.assertEquals(
+ 'is NOT installed/enabled for all users',
+ update['WebViewPackages']['com.google.android.webview'])
+ self.assertEquals(
+ 'reason: SDK version too low',
+ update['WebViewPackages']['com.google.android.apps.chrome'])
+ self.assertEquals(
+ 'is NOT installed.',
+ update['WebViewPackages']['com.chrome.canary'])
+
+ def testGetWebViewUpdateServiceDump_missingkey(self):
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.OREO):
+ with self.assertCall(self.call.adb.Shell('dumpsys webviewupdate'),
+ 'Fallback logic enabled: true'):
+ with self.assertRaises(device_errors.CommandFailedError):
+ self.device.GetWebViewUpdateServiceDump()
+
+ def testGetWebViewUpdateServiceDump_noop(self):
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.NOUGAT_MR1):
+ with self.assertCalls():
+ self.device.GetWebViewUpdateServiceDump()
+
+ def testGetWebViewUpdateServiceDump_noPackage(self):
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.OREO):
+ with self.assertCall(self.call.adb.Shell('dumpsys webviewupdate'),
+ 'Fallback logic enabled: true\n'
+ 'Current WebView package is null'):
+ update = self.device.GetWebViewUpdateServiceDump()
+ self.assertEqual(True, update['FallbackLogicEnabled'])
+ self.assertEqual(None, update['CurrentWebViewPackage'])
+
+
+class DeviceUtilsSetWebViewImplementationTest(DeviceUtilsTest):
+
+ def testSetWebViewImplementation_success(self):
+ with self.patch_call(
+ self.call.device.GetApplicationPaths, return_value=['/any/path']):
+ with self.assertCall(
+ self.call.adb.Shell(
+ 'cmd webviewupdate set-webview-implementation foo.org'),
+ 'Success'):
+ self.device.SetWebViewImplementation('foo.org')
+
+ def testSetWebViewImplementation_uninstalled(self):
+ with self.patch_call(self.call.device.GetApplicationPaths, return_value=[]):
+ with self.assertRaises(device_errors.CommandFailedError) as cfe:
+ self.device.SetWebViewImplementation('foo.org')
+ self.assertIn('is not installed', cfe.exception.message)
+
+ def _testSetWebViewImplementationHelper(self, mock_dump_sys,
+ exception_message_substr):
+ with self.patch_call(
+ self.call.device.GetApplicationPaths, return_value=['/any/path']):
+ with self.assertCall(
+ self.call.adb.Shell(
+ 'cmd webviewupdate set-webview-implementation foo.org'), 'Oops!'):
+ with self.patch_call(
+ self.call.device.GetWebViewUpdateServiceDump,
+ return_value=mock_dump_sys):
+ with self.assertRaises(device_errors.CommandFailedError) as cfe:
+ self.device.SetWebViewImplementation('foo.org')
+ self.assertIn(exception_message_substr, cfe.exception.message)
+
+ def testSetWebViewImplementation_notInProviderList(self):
+ mock_dump_sys = {
+ 'WebViewPackages': {
+ 'some.package': 'any reason',
+ 'other.package': 'any reason',
+ }
+ }
+ self._testSetWebViewImplementationHelper(mock_dump_sys, 'provider list')
+
+ def testSetWebViewImplementation_notEnabled(self):
+ mock_dump_sys = {
+ 'WebViewPackages': {
+ 'foo.org': 'is NOT installed/enabled for all users',
+ }
+ }
+ self._testSetWebViewImplementationHelper(mock_dump_sys, 'is disabled')
+
+ def testSetWebViewImplementation_missingManifestTag(self):
+ mock_dump_sys = {
+ 'WebViewPackages': {
+ 'foo.org': 'No WebView-library manifest flag',
+ }
+ }
+ self._testSetWebViewImplementationHelper(mock_dump_sys,
+ 'WebView native library')
+
+ def testSetWebViewImplementation_lowTargetSdkVersion(self):
+ mock_dump_sys = {'WebViewPackages': {'foo.org': 'SDK version too low',}}
+ with self.patch_call(self.call.device.build_version_sdk, return_value=26):
+ self._testSetWebViewImplementationHelper(mock_dump_sys,
+ 'higher targetSdkVersion')
+
+ def testSetWebViewImplementation_lowVersionCode(self):
+ mock_dump_sys = {
+ 'MinimumWebViewVersionCode': 12345,
+ 'WebViewPackages': {
+ 'foo.org': 'Version code too low',
+ }
+ }
+ self._testSetWebViewImplementationHelper(mock_dump_sys,
+ 'higher versionCode')
+
+ def testSetWebViewImplementation_invalidSignature(self):
+ mock_dump_sys = {
+ 'WebViewPackages': {
+ 'foo.org': 'Incorrect signature',
+ }
+ }
+ self._testSetWebViewImplementationHelper(mock_dump_sys,
+ 'signed with release keys')
+
+
+class DeviceUtilsSetWebViewFallbackLogicTest(DeviceUtilsTest):
+
+ def testSetWebViewFallbackLogic_False_success(self):
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.NOUGAT):
+ with self.assertCall(self.call.adb.Shell(
+ 'cmd webviewupdate enable-redundant-packages'), 'Success'):
+ self.device.SetWebViewFallbackLogic(False)
+
+ def testSetWebViewFallbackLogic_True_success(self):
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.NOUGAT):
+ with self.assertCall(self.call.adb.Shell(
+ 'cmd webviewupdate disable-redundant-packages'), 'Success'):
+ self.device.SetWebViewFallbackLogic(True)
+
+ def testSetWebViewFallbackLogic_failure(self):
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.NOUGAT):
+ with self.assertCall(self.call.adb.Shell(
+ 'cmd webviewupdate enable-redundant-packages'), 'Oops!'):
+ with self.assertRaises(device_errors.CommandFailedError):
+ self.device.SetWebViewFallbackLogic(False)
+
+ def testSetWebViewFallbackLogic_beforeNougat(self):
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=version_codes.MARSHMALLOW):
+ with self.assertCalls():
+ self.device.SetWebViewFallbackLogic(False)
+
+ def testSetWebViewFallbackLogic_afterPie(self):
+ # TODO(ntfschr): replace this with the Q constant when the SDK is public and
+ # the codename is finalized.
+ q_version_code = version_codes.PIE + 1
+ with self.patch_call(self.call.device.build_version_sdk,
+ return_value=q_version_code):
+ with self.assertCalls():
+ self.device.SetWebViewFallbackLogic(False)
+
+
class DeviceUtilsTakeScreenshotTest(DeviceUtilsTest):
def testTakeScreenshot_fileNameProvided(self):
@@ -2599,7 +3034,7 @@ class DeviceUtilsClientCache(DeviceUtilsTest):
self.assertEqual(self.device._cache['test'], 0)
self.assertEqual(client_cache_one, {'test': 1})
self.assertEqual(client_cache_two, {'test': 2})
- self.device._ClearCache()
+ self.device.ClearCache()
self.assertTrue('test' not in self.device._cache)
self.assertEqual(client_cache_one, {})
self.assertEqual(client_cache_two, {})
@@ -2610,7 +3045,7 @@ class DeviceUtilsClientCache(DeviceUtilsTest):
client_cache_two = self.device.GetClientCache('ClientOne')
self.assertEqual(client_cache_one, {'test': 1})
self.assertEqual(client_cache_two, {'test': 1})
- self.device._ClearCache()
+ self.device.ClearCache()
self.assertEqual(client_cache_one, {})
self.assertEqual(client_cache_two, {})
@@ -2621,7 +3056,11 @@ class DeviceUtilsHealthyDevicesTest(mock_calls.TestCase):
test_serials = ['0123456789abcdef', 'fedcba9876543210']
with self.assertCalls(
(mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
- [_AdbWrapperMock(s) for s in test_serials])):
+ [_AdbWrapperMock(s) for s in test_serials]),
+ (mock.call.devil.android.device_utils.DeviceUtils.GetABI(),
+ abis.ARM),
+ (mock.call.devil.android.device_utils.DeviceUtils.GetABI(),
+ abis.ARM)):
blacklist = mock.NonCallableMock(**{'Read.return_value': []})
devices = device_utils.DeviceUtils.HealthyDevices(blacklist)
for serial, device in zip(test_serials, devices):
@@ -2632,7 +3071,9 @@ class DeviceUtilsHealthyDevicesTest(mock_calls.TestCase):
test_serials = ['0123456789abcdef', 'fedcba9876543210']
with self.assertCalls(
(mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
- [_AdbWrapperMock(s) for s in test_serials])):
+ [_AdbWrapperMock(s) for s in test_serials]),
+ (mock.call.devil.android.device_utils.DeviceUtils.GetABI(),
+ abis.ARM)):
blacklist = mock.NonCallableMock(
**{'Read.return_value': ['fedcba9876543210']})
devices = device_utils.DeviceUtils.HealthyDevices(blacklist)
@@ -2645,6 +3086,10 @@ class DeviceUtilsHealthyDevicesTest(mock_calls.TestCase):
with self.assertCalls(
(mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
[_AdbWrapperMock(s) for s in test_serials]),
+ (mock.call.devil.android.device_utils.DeviceUtils.GetABI(),
+ abis.ARM),
+ (mock.call.devil.android.device_utils.DeviceUtils.GetABI(),
+ abis.ARM),
(mock.call.devil.android.device_errors.MultipleDevicesError(mock.ANY),
_MockMultipleDevicesError())):
with self.assertRaises(_MockMultipleDevicesError):
@@ -2654,7 +3099,9 @@ class DeviceUtilsHealthyDevicesTest(mock_calls.TestCase):
test_serials = ['0123456789abcdef']
with self.assertCalls(
(mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
- [_AdbWrapperMock(s) for s in test_serials])):
+ [_AdbWrapperMock(s) for s in test_serials]),
+ (mock.call.devil.android.device_utils.DeviceUtils.GetABI(),
+ abis.ARM)):
devices = device_utils.DeviceUtils.HealthyDevices(device_arg=None)
self.assertEquals(1, len(devices))
@@ -2664,7 +3111,7 @@ class DeviceUtilsHealthyDevicesTest(mock_calls.TestCase):
(mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
[_AdbWrapperMock(s) for s in test_serials])):
with self.assertRaises(device_errors.NoDevicesError):
- device_utils.DeviceUtils.HealthyDevices(device_arg=None, retry=False)
+ device_utils.DeviceUtils.HealthyDevices(device_arg=None, retries=0)
def testHealthyDevices_noneDeviceArg_multiple_attached_ANDROID_SERIAL(self):
try:
@@ -2684,7 +3131,11 @@ class DeviceUtilsHealthyDevicesTest(mock_calls.TestCase):
test_serials = ['0123456789abcdef', 'fedcba9876543210']
with self.assertCalls(
(mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
- [_AdbWrapperMock(s) for s in test_serials])):
+ [_AdbWrapperMock(s) for s in test_serials]),
+ (mock.call.devil.android.device_utils.DeviceUtils.GetABI(),
+ abis.ARM),
+ (mock.call.devil.android.device_utils.DeviceUtils.GetABI(),
+ abis.ARM)):
devices = device_utils.DeviceUtils.HealthyDevices(device_arg=())
self.assertEquals(2, len(devices))
@@ -2703,17 +3154,47 @@ class DeviceUtilsHealthyDevicesTest(mock_calls.TestCase):
(mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
[_AdbWrapperMock(s) for s in test_serials])):
with self.assertRaises(device_errors.NoDevicesError):
- device_utils.DeviceUtils.HealthyDevices(device_arg=[], retry=False)
-
- def testHealthyDevices_EmptyListDeviceArg_no_attached_with_retry(self):
- test_serials = []
- with self.assertCalls(
- (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
- [_AdbWrapperMock(s) for s in test_serials]),
- (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
- [_AdbWrapperMock(s) for s in test_serials])):
+ device_utils.DeviceUtils.HealthyDevices(device_arg=[], retries=0)
+
+ @mock.patch('time.sleep')
+ @mock.patch('devil.android.device_utils.RestartServer')
+ def testHealthyDevices_EmptyListDeviceArg_no_attached_with_retry(
+ self, mock_restart, mock_sleep):
+ with self.assertCalls(
+ (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(), []),
+ (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(), []),
+ (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(), []),
+ (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(), []),
+ (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(), [])):
with self.assertRaises(device_errors.NoDevicesError):
- device_utils.DeviceUtils.HealthyDevices(device_arg=[], retry=True)
+ device_utils.DeviceUtils.HealthyDevices(device_arg=[], retries=4)
+ self.assertEquals(mock_restart.call_count, 4)
+ self.assertEquals(mock_sleep.call_args_list, [
+ mock.call(2), mock.call(4), mock.call(8), mock.call(16)])
+
+ @mock.patch('time.sleep')
+ @mock.patch('devil.android.device_utils.RestartServer')
+ def testHealthyDevices_EmptyListDeviceArg_no_attached_with_resets(
+ self, mock_restart, mock_sleep):
+ # The reset_usb import fails on windows. Mock the full import here so it can
+ # succeed like it would on linux.
+ mock_reset_import = mock.MagicMock()
+ sys.modules['devil.utils.reset_usb'] = mock_reset_import
+ with self.assertCalls(
+ (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(), []),
+ (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(), []),
+ (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(), []),
+ (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(), []),
+ (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(), [])):
+ with self.assertRaises(device_errors.NoDevicesError):
+ with mock.patch.object(
+ mock_reset_import, 'reset_all_android_devices') as mock_reset:
+ device_utils.DeviceUtils.HealthyDevices(device_arg=[], retries=4,
+ enable_usb_resets=True)
+ self.assertEquals(mock_reset.call_count, 1)
+ self.assertEquals(mock_restart.call_count, 4)
+ self.assertEquals(mock_sleep.call_args_list, [
+ mock.call(2), mock.call(4), mock.call(8), mock.call(16)])
def testHealthyDevices_ListDeviceArg(self):
device_arg = ['0123456789abcdef', 'fedcba9876543210']
@@ -2725,6 +3206,33 @@ class DeviceUtilsHealthyDevicesTest(mock_calls.TestCase):
del os.environ['ANDROID_SERIAL']
self.assertEquals(2, len(devices))
+ def testHealthyDevices_abisArg_no_matching_abi(self):
+ test_serials = ['0123456789abcdef', 'fedcba9876543210']
+ with self.assertCalls(
+ (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
+ [_AdbWrapperMock(s) for s in test_serials]),
+ (mock.call.devil.android.device_utils.DeviceUtils.GetABI(),
+ abis.ARM),
+ (mock.call.devil.android.device_utils.DeviceUtils.GetABI(),
+ abis.ARM)):
+ with self.assertRaises(device_errors.NoDevicesError):
+ device_utils.DeviceUtils.HealthyDevices(device_arg=[], retries=0,
+ abis=[abis.ARM_64])
+
+ def testHealthyDevices_abisArg_filter_on_abi(self):
+ test_serials = ['0123456789abcdef', 'fedcba9876543210']
+ with self.assertCalls(
+ (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
+ [_AdbWrapperMock(s) for s in test_serials]),
+ (mock.call.devil.android.device_utils.DeviceUtils.GetABI(),
+ abis.ARM_64),
+ (mock.call.devil.android.device_utils.DeviceUtils.GetABI(),
+ abis.ARM)):
+ devices = device_utils.DeviceUtils.HealthyDevices(device_arg=[],
+ retries=0,
+ abis=[abis.ARM_64])
+ self.assertEquals(1, len(devices))
+
class DeviceUtilsRestartAdbdTest(DeviceUtilsTest):
@@ -2967,6 +3475,69 @@ class DeviceUtilsGetIMEITest(DeviceUtilsTest):
self.device.GetIMEI()
+class DeviceUtilsChangeOwner(DeviceUtilsTest):
+
+ def testChangeOwner(self):
+ with self.assertCalls(
+ (self.call.device.RunShellCommand(
+ ['chown', 'user.group', '/path/to/file1', 'file2'],
+ check_return=True))):
+ self.device.ChangeOwner('user.group', ['/path/to/file1', 'file2'])
+
+
+class DeviceUtilsChangeSecurityContext(DeviceUtilsTest):
+
+ def testChangeSecurityContext(self):
+ with self.assertCalls(
+ (self.call.device.RunShellCommand(
+ ['chcon', 'u:object_r:system_data_file:s0', '/path', '/path2'],
+ as_root=device_utils._FORCE_SU, check_return=True))):
+ self.device.ChangeSecurityContext('u:object_r:system_data_file:s0',
+ ['/path', '/path2'])
+
+
+class DeviceUtilsLocale(DeviceUtilsTest):
+
+ def testLocaleLegacy(self):
+ with self.assertCalls(
+ (self.call.device.GetProp('persist.sys.locale', cache=False), ''),
+ (self.call.device.GetProp('persist.sys.language', cache=False), 'en'),
+ (self.call.device.GetProp('persist.sys.country', cache=False), 'US')):
+ self.assertEquals(self.device.GetLocale(), ('en', 'US'))
+
+ def testLocale(self):
+ with self.assertCalls(
+ (self.call.device.GetProp('persist.sys.locale', cache=False), 'en-US'),
+ (self.call.device.GetProp('persist.sys.locale', cache=False),
+ 'en-US-sw')):
+ self.assertEquals(self.device.GetLocale(), ('en', 'US'))
+ self.assertEquals(self.device.GetLocale(), ('en', 'US-sw'))
+
+ def testBadLocale(self):
+ with self.assertCalls(
+ (self.call.device.GetProp('persist.sys.locale', cache=False), 'en')):
+ self.assertEquals(self.device.GetLocale(), ('', ''))
+
+
+ def testLanguageAndCountryLegacy(self):
+ with self.assertCalls(
+ (self.call.device.GetProp('persist.sys.locale', cache=False), ''),
+ (self.call.device.GetProp('persist.sys.language', cache=False), 'en'),
+ (self.call.device.GetProp('persist.sys.country', cache=False), 'US'),
+ (self.call.device.GetProp('persist.sys.locale', cache=False), ''),
+ (self.call.device.GetProp('persist.sys.language', cache=False), 'en'),
+ (self.call.device.GetProp('persist.sys.country', cache=False), 'US')):
+ self.assertEquals(self.device.GetLanguage(), 'en')
+ self.assertEquals(self.device.GetCountry(), 'US')
+
+ def testLanguageAndCountry(self):
+ with self.assertCalls(
+ (self.call.device.GetProp('persist.sys.locale', cache=False), 'en-US'),
+ (self.call.device.GetProp('persist.sys.locale', cache=False), 'en-US')):
+ self.assertEquals(self.device.GetLanguage(), 'en')
+ self.assertEquals(self.device.GetCountry(), 'US')
+
+
if __name__ == '__main__':
logging.getLogger().setLevel(logging.DEBUG)
unittest.main(verbosity=2)
diff --git a/systrace/catapult/devil/devil/android/fastboot_utils.py b/systrace/catapult/devil/devil/android/fastboot_utils.py
index 3bd3ee8..3621d7f 100644
--- a/systrace/catapult/devil/devil/android/fastboot_utils.py
+++ b/systrace/catapult/devil/devil/android/fastboot_utils.py
@@ -108,7 +108,7 @@ class FastbootUtils(object):
This waits for the device serial to show up in fastboot devices output.
"""
def fastboot_mode():
- return self._serial in self.fastboot.Devices()
+ return any(self._serial == str(d) for d in self.fastboot.Devices())
timeout_retry.WaitFor(fastboot_mode, wait_period=self._FASTBOOT_WAIT_TIME)
diff --git a/systrace/catapult/devil/devil/android/flag_changer.py b/systrace/catapult/devil/devil/android/flag_changer.py
index 0055e23..110cf82 100644
--- a/systrace/catapult/devil/devil/android/flag_changer.py
+++ b/systrace/catapult/devil/devil/android/flag_changer.py
@@ -52,12 +52,14 @@ class FlagChanger(object):
once the tests have completed.
"""
- def __init__(self, device, cmdline_file):
+ def __init__(self, device, cmdline_file, use_legacy_path=False):
"""Initializes the FlagChanger and records the original arguments.
Args:
device: A DeviceUtils instance.
cmdline_file: Name of the command line file where to store flags.
+ use_legacy_path: Whether to use the legacy commandline path (needed for
+ M54 and earlier)
"""
self._device = device
self._should_reset_enforce = False
@@ -66,13 +68,20 @@ class FlagChanger(object):
raise ValueError(
'cmdline_file should be a file name only, do not include path'
' separators in: %s' % cmdline_file)
- self._cmdline_path = posixpath.join(_CMDLINE_DIR, cmdline_file)
+ cmdline_path = posixpath.join(_CMDLINE_DIR, cmdline_file)
+ alternate_cmdline_path = posixpath.join(_CMDLINE_DIR_LEGACY, cmdline_file)
- cmdline_path_legacy = posixpath.join(_CMDLINE_DIR_LEGACY, cmdline_file)
- if self._device.PathExists(cmdline_path_legacy):
+ if use_legacy_path:
+ cmdline_path, alternate_cmdline_path = (
+ alternate_cmdline_path, cmdline_path)
+ if not self._device.HasRoot():
+ raise ValueError('use_legacy_path requires a rooted device')
+ self._cmdline_path = cmdline_path
+
+ if self._device.PathExists(alternate_cmdline_path):
logger.warning(
- 'Removing legacy command line file %r.', cmdline_path_legacy)
- self._device.RemovePath(cmdline_path_legacy, as_root=True)
+ 'Removing alternate command line file %r.', alternate_cmdline_path)
+ self._device.RemovePath(alternate_cmdline_path, as_root=True)
self._state_stack = [None] # Actual state is set by GetCurrentFlags().
self.GetCurrentFlags()
@@ -86,7 +95,8 @@ class FlagChanger(object):
A list of flags.
"""
if self._device.PathExists(self._cmdline_path):
- command_line = self._device.ReadFile(self._cmdline_path).strip()
+ command_line = self._device.ReadFile(
+ self._cmdline_path, as_root=True).strip()
else:
command_line = ''
flags = _ParseFlags(command_line)
@@ -95,7 +105,7 @@ class FlagChanger(object):
self._state_stack[-1] = set(flags)
return flags
- def ReplaceFlags(self, flags):
+ def ReplaceFlags(self, flags, log_flags=True):
"""Replaces the flags in the command line with the ones provided.
Saves the current flags state on the stack, so a call to Restore will
change the state back to the one preceeding the call to ReplaceFlags.
@@ -111,7 +121,7 @@ class FlagChanger(object):
new_flags = set(flags)
self._state_stack.append(new_flags)
self._SetPermissive()
- return self._UpdateCommandLineFile()
+ return self._UpdateCommandLineFile(log_flags=log_flags)
def AddFlags(self, flags):
"""Appends flags to the command line if they aren't already there.
@@ -171,10 +181,14 @@ class FlagChanger(object):
"""Set SELinux to permissive, if needed.
On Android N and above this is needed in order to allow Chrome to read the
- command line file.
+ legacy command line file.
TODO(crbug.com/699082): Remove when a better solution exists.
"""
+ # TODO(crbug.com/948578): figure out the exact scenarios where the lowered
+ # permissions are needed, and document them in the code.
+ if not self._device.HasRoot():
+ return
if (self._device.build_version_sdk >= version_codes.NOUGAT and
self._device.GetEnforce()):
self._device.SetEnforce(enabled=False)
@@ -195,13 +209,13 @@ class FlagChanger(object):
"""
# The initial state must always remain on the stack.
assert len(self._state_stack) > 1, (
- "Mismatch between calls to Add/RemoveFlags and Restore")
+ 'Mismatch between calls to Add/RemoveFlags and Restore')
self._state_stack.pop()
if len(self._state_stack) == 1:
self._ResetEnforce()
return self._UpdateCommandLineFile()
- def _UpdateCommandLineFile(self):
+ def _UpdateCommandLineFile(self, log_flags=True):
"""Writes out the command line to the file, or removes it if empty.
Returns:
@@ -209,13 +223,15 @@ class FlagChanger(object):
"""
command_line = _SerializeFlags(self._state_stack[-1])
if command_line is not None:
- self._device.WriteFile(self._cmdline_path, command_line)
+ self._device.WriteFile(self._cmdline_path, command_line, as_root=True)
else:
- self._device.RemovePath(self._cmdline_path, force=True)
+ self._device.RemovePath(self._cmdline_path, force=True, as_root=True)
- current_flags = self.GetCurrentFlags()
- logger.info('Flags now set on the device: %s', current_flags)
- return current_flags
+ flags = self.GetCurrentFlags()
+ logging.info('Flags now written on the device to %s', self._cmdline_path)
+ if log_flags:
+ logging.info('Flags: %s', flags)
+ return flags
def _ParseFlags(line):
@@ -237,6 +253,7 @@ def _ParseFlags(line):
current_quote = None
current_flag = None
+ # pylint: disable=unsubscriptable-object
for c in line:
# Detect start or end of quote block.
if (current_quote is None and c in _QUOTES) or c == current_quote:
diff --git a/systrace/catapult/devil/devil/android/flag_changer_test.py b/systrace/catapult/devil/devil/android/flag_changer_test.py
index 5342cf4..dbe6fac 100755
--- a/systrace/catapult/devil/devil/android/flag_changer_test.py
+++ b/systrace/catapult/devil/devil/android/flag_changer_test.py
@@ -42,7 +42,7 @@ class FlagChangerTest(unittest.TestCase):
self.cmdline_path_legacy = posixpath.join(
flag_changer._CMDLINE_DIR_LEGACY, _CMDLINE_FILE)
- def testFlagChanger_removeLegacyCmdLine(self):
+ def testFlagChanger_removeAlternateCmdLine(self):
self.device.WriteFile(self.cmdline_path_legacy, 'chrome --old --stuff')
self.assertTrue(self.device.PathExists(self.cmdline_path_legacy))
@@ -52,6 +52,17 @@ class FlagChangerTest(unittest.TestCase):
self.cmdline_path)
self.assertFalse(self.device.PathExists(self.cmdline_path_legacy))
+ def testFlagChanger_removeAlternateCmdLineLegacyPath(self):
+ self.device.WriteFile(self.cmdline_path, 'chrome --old --stuff')
+ self.assertTrue(self.device.PathExists(self.cmdline_path))
+
+ changer = flag_changer.FlagChanger(self.device, 'chrome-command-line',
+ use_legacy_path=True)
+ self.assertEquals(
+ changer._cmdline_path, # pylint: disable=protected-access
+ self.cmdline_path_legacy)
+ self.assertFalse(self.device.PathExists(self.cmdline_path))
+
def testFlagChanger_mustBeFileName(self):
with self.assertRaises(ValueError):
flag_changer.FlagChanger(self.device, '/data/local/chrome-command-line')
diff --git a/systrace/catapult/devil/devil/android/forwarder.py b/systrace/catapult/devil/devil/android/forwarder.py
index cf1fbe1..6be4651 100644
--- a/systrace/catapult/devil/devil/android/forwarder.py
+++ b/systrace/catapult/devil/devil/android/forwarder.py
@@ -306,7 +306,7 @@ class Forwarder(object):
instance = Forwarder._GetInstanceLocked(None)
serial = str(device)
serial_with_port = (serial, device_port)
- if not serial_with_port in instance._device_to_host_port_map:
+ if serial_with_port not in instance._device_to_host_port_map:
logger.error('Trying to unmap non-forwarded port %d', device_port)
return
diff --git a/systrace/catapult/devil/devil/android/logcat_monitor.py b/systrace/catapult/devil/devil/android/logcat_monitor.py
index 249320b..b5f796b 100644
--- a/systrace/catapult/devil/devil/android/logcat_monitor.py
+++ b/systrace/catapult/devil/devil/android/logcat_monitor.py
@@ -31,7 +31,7 @@ class LogcatMonitor(object):
r'(?P<log_level>%s) +(?P<component>%s) *: +(?P<message>%s)$')
def __init__(self, adb, clear=True, filter_specs=None, output_file=None,
- transform_func=None):
+ transform_func=None, check_error=True):
"""Create a LogcatMonitor instance.
Args:
@@ -41,11 +41,14 @@ class LogcatMonitor(object):
output_file: File path to save recorded logcat.
transform_func: An optional unary callable that takes and returns
a list of lines, possibly transforming them in the process.
+ check_error: Check for and raise an exception on nonzero exit codes
+ from the underlying logcat command.
"""
if isinstance(adb, adb_wrapper.AdbWrapper):
self._adb = adb
else:
raise ValueError('Unsupported type passed for argument "device"')
+ self._check_error = check_error
self._clear = clear
self._filter_specs = filter_specs
self._output_file = output_file
@@ -168,9 +171,11 @@ class LogcatMonitor(object):
def record_to_file():
# Write the log with line buffering so the consumer sees each individual
# line.
- for data in self._adb.Logcat(filter_specs=self._filter_specs,
- logcat_format='threadtime',
- iter_timeout=self._RECORD_ITER_TIMEOUT):
+ for data in self._adb.Logcat(
+ filter_specs=self._filter_specs,
+ logcat_format='threadtime',
+ iter_timeout=self._RECORD_ITER_TIMEOUT,
+ check_error=self._check_error):
if self._stop_recording_event.isSet():
return
diff --git a/systrace/catapult/devil/devil/android/md5sum.py b/systrace/catapult/devil/devil/android/md5sum.py
index 6dece9e..f5b6f3c 100644
--- a/systrace/catapult/devil/devil/android/md5sum.py
+++ b/systrace/catapult/devil/devil/android/md5sum.py
@@ -89,7 +89,8 @@ def CalculateDeviceMd5Sums(paths, device):
# Note: ":" is equivalent to "true".
md5sum_script += ';:'
try:
- out = device.RunShellCommand(md5sum_script, shell=True, check_return=True)
+ out = device.RunShellCommand(
+ md5sum_script, shell=True, check_return=True, large_output=True)
except device_errors.AdbShellCommandFailedError as e:
# Push the binary only if it is found to not exist
# (faster than checking up-front).
@@ -106,7 +107,8 @@ def CalculateDeviceMd5Sums(paths, device):
device.RunShellCommand(mkdir_cmd, shell=True, check_return=True)
device.adb.Push(md5sum_dist_bin_path, MD5SUM_DEVICE_BIN_PATH)
- out = device.RunShellCommand(md5sum_script, shell=True, check_return=True)
+ out = device.RunShellCommand(
+ md5sum_script, shell=True, check_return=True, large_output=True)
else:
raise
diff --git a/systrace/catapult/devil/devil/android/ndk/__init__.py b/systrace/catapult/devil/devil/android/ndk/__init__.py
new file mode 100644
index 0000000..edd8dbc
--- /dev/null
+++ b/systrace/catapult/devil/devil/android/ndk/__init__.py
@@ -0,0 +1,6 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This package is intended for modules that are very tightly coupled to
+# tools or APIs from the Android NDK.
diff --git a/systrace/catapult/devil/devil/android/ndk/abis.py b/systrace/catapult/devil/devil/android/ndk/abis.py
new file mode 100644
index 0000000..dd32f7c
--- /dev/null
+++ b/systrace/catapult/devil/devil/android/ndk/abis.py
@@ -0,0 +1,16 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Android NDK ABIs.
+
+https://developer.android.com/ndk/guides/abis
+
+These constants can be compared against the value of
+devil.android.DeviceUtils.product_cpu_abi.
+"""
+
+ARM = 'armeabi-v7a'
+ARM_64 = 'arm64-v8a'
+X86 = 'x86'
+X86_64 = 'x86_64'
diff --git a/systrace/catapult/devil/devil/android/perf/perf_control.py b/systrace/catapult/devil/devil/android/perf/perf_control.py
index 06a5db6..1226be8 100644
--- a/systrace/catapult/devil/devil/android/perf/perf_control.py
+++ b/systrace/catapult/devil/devil/android/perf/perf_control.py
@@ -9,6 +9,116 @@ import re
from devil.android import device_errors
logger = logging.getLogger(__name__)
+_atexit_messages = set()
+
+
+# Defines how to switch between the default performance configuration
+# ('default_mode') and the mode for use when benchmarking ('high_perf_mode').
+# For devices not in the list the defaults are to set up the scaling governor to
+# 'performance' and reset it back to 'ondemand' when benchmarking is finished.
+#
+# The 'default_mode_governor' is mandatory to define, while
+# 'high_perf_mode_governor' is not taken into account. The latter is because the
+# governor 'performance' is currently used for all benchmarking on all devices.
+#
+# TODO(crbug.com/383566): Add definitions for all devices used in the perf
+# waterfall.
+_PERFORMANCE_MODE_DEFINITIONS = {
+ # Fire TV Edition - 4K
+ 'AFTKMST12': {
+ 'default_mode_governor': 'interactive',
+ },
+ # Pixel 3
+ 'blueline': {
+ 'high_perf_mode': {
+ 'bring_cpu_cores_online': True,
+ # The SoC is Arm big.LITTLE. The cores 0..3 are LITTLE, the 4..7 are big.
+ 'cpu_max_freq': {'0..3': 1228800, '4..7': 1536000},
+ 'gpu_max_freq': 520000000,
+ },
+ 'default_mode': {
+ 'cpu_max_freq': {'0..3': 1766400, '4..7': 2649600},
+ 'gpu_max_freq': 710000000,
+ },
+ 'default_mode_governor': 'schedutil',
+ },
+ 'GT-I9300': {
+ 'default_mode_governor': 'pegasusq',
+ },
+ 'Galaxy Nexus': {
+ 'default_mode_governor': 'interactive',
+ },
+ # Pixel
+ 'msm8996': {
+ 'high_perf_mode': {
+ 'bring_cpu_cores_online': True,
+ 'cpu_max_freq': 1209600,
+ 'gpu_max_freq': 315000000,
+ },
+ 'default_mode': {
+ # The SoC is Arm big.LITTLE. The cores 0..1 are LITTLE, the 2..3 are big.
+ 'cpu_max_freq': {'0..1': 1593600, '2..3': 2150400},
+ 'gpu_max_freq': 624000000,
+ },
+ 'default_mode_governor': 'sched',
+ },
+ 'Nexus 7': {
+ 'default_mode_governor': 'interactive',
+ },
+ 'Nexus 10': {
+ 'default_mode_governor': 'interactive',
+ },
+ 'Nexus 4': {
+ 'high_perf_mode': {
+ 'bring_cpu_cores_online': True,
+ },
+ 'default_mode_governor': 'ondemand',
+ },
+ 'Nexus 5': {
+ # The list of possible GPU frequency values can be found in:
+ # /sys/class/kgsl/kgsl-3d0/gpu_available_frequencies.
+ # For CPU cores the possible frequency values are at:
+ # /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
+ 'high_perf_mode': {
+ 'bring_cpu_cores_online': True,
+ 'cpu_max_freq': 1190400,
+ 'gpu_max_freq': 200000000,
+ },
+ 'default_mode': {
+ 'cpu_max_freq': 2265600,
+ 'gpu_max_freq': 450000000,
+ },
+ 'default_mode_governor': 'ondemand',
+ },
+ 'Nexus 5X': {
+ 'high_perf_mode': {
+ 'bring_cpu_cores_online': True,
+ 'cpu_max_freq': 1248000,
+ 'gpu_max_freq': 300000000,
+ },
+ 'default_mode': {
+ 'governor': 'ondemand',
+ # The SoC is ARM big.LITTLE. The cores 4..5 are big, the 0..3 are LITTLE.
+ 'cpu_max_freq': {'0..3': 1440000, '4..5': 1824000},
+ 'gpu_max_freq': 600000000,
+ },
+ 'default_mode_governor': 'ondemand',
+ },
+}
+
+def _GetPerfModeDefinitions(product_model):
+ if product_model.startswith('AOSP on '):
+ product_model = product_model.replace('AOSP on ', '')
+ return _PERFORMANCE_MODE_DEFINITIONS.get(product_model)
+
+def _NoisyWarning(message):
+ message += ' Results may be NOISY!!'
+ logger.warning(message)
+ # Add an additional warning at exit, such that it's clear that any results
+ # may be different/noisy (due to the lack of intended performance mode).
+ if message not in _atexit_messages:
+ _atexit_messages.add(message)
+ atexit.register(logger.warning, message)
class PerfControl(object):
@@ -21,10 +131,10 @@ class PerfControl(object):
def __init__(self, device):
self._device = device
- self._cpu_files = [
- filename
- for filename in self._device.ListDirectory(self._CPU_PATH, as_root=True)
- if self._CPU_FILE_PATTERN.match(filename)]
+ self._cpu_files = []
+ for file_name in self._device.ListDirectory(self._CPU_PATH, as_root=True):
+ if self._CPU_FILE_PATTERN.match(file_name):
+ self._cpu_files.append(file_name)
assert self._cpu_files, 'Failed to detect CPUs.'
self._cpu_file_list = ' '.join(self._cpu_files)
logger.info('CPUs found: %s', self._cpu_file_list)
@@ -36,34 +146,73 @@ class PerfControl(object):
(cpu, raw_governors.strip().split() if not exit_code else None)
for cpu, raw_governors, exit_code in raw]
+ def _SetMaxFrequenciesFromMode(self, mode):
+ """Set maximum frequencies for GPU and CPU cores.
+
+ Args:
+ mode: A dictionary mapping optional keys 'cpu_max_freq' and 'gpu_max_freq'
+ to integer values of frequency supported by the device.
+ """
+ cpu_max_freq = mode.get('cpu_max_freq')
+ if cpu_max_freq:
+ if not isinstance(cpu_max_freq, dict):
+ self._SetScalingMaxFreqForCpus(cpu_max_freq, self._cpu_file_list)
+ else:
+ for key, max_frequency in cpu_max_freq.iteritems():
+ # Convert 'X' to 'cpuX' and 'X..Y' to 'cpuX cpu<X+1> .. cpuY'.
+ if '..' in key:
+ range_min, range_max = key.split('..')
+ range_min, range_max = int(range_min), int(range_max)
+ else:
+ range_min = range_max = int(key)
+ cpu_files = ['cpu%d' % number
+ for number in xrange(range_min, range_max + 1)]
+ # Set the |max_frequency| on requested subset of the cores.
+ self._SetScalingMaxFreqForCpus(max_frequency, ' '.join(cpu_files))
+ gpu_max_freq = mode.get('gpu_max_freq')
+ if gpu_max_freq:
+ self._SetMaxGpuClock(gpu_max_freq)
+
def SetHighPerfMode(self):
"""Sets the highest stable performance mode for the device."""
try:
self._device.EnableRoot()
except device_errors.CommandFailedError:
- message = 'Need root for performance mode. Results may be NOISY!!'
- logger.warning(message)
- # Add an additional warning at exit, such that it's clear that any results
- # may be different/noisy (due to the lack of intended performance mode).
- atexit.register(logger.warning, message)
+ _NoisyWarning('Need root for performance mode.')
return
-
- product_model = self._device.product_model
- # TODO(epenner): Enable on all devices (http://crbug.com/383566)
- if 'Nexus 4' == product_model:
- self._ForceAllCpusOnline(True)
- if not self._AllCpusAreOnline():
- logger.warning('Failed to force CPUs online. Results may be NOISY!')
+ mode_definitions = _GetPerfModeDefinitions(self._device.product_model)
+ if not mode_definitions:
+ self.SetScalingGovernor('performance')
+ return
+ high_perf_mode = mode_definitions.get('high_perf_mode')
+ if not high_perf_mode:
self.SetScalingGovernor('performance')
- elif 'Nexus 5' == product_model:
+ return
+ if high_perf_mode.get('bring_cpu_cores_online', False):
self._ForceAllCpusOnline(True)
if not self._AllCpusAreOnline():
- logger.warning('Failed to force CPUs online. Results may be NOISY!')
- self.SetScalingGovernor('performance')
- self._SetScalingMaxFreq(1190400)
- self._SetMaxGpuClock(200000000)
+ _NoisyWarning('Failed to force CPUs online.')
+ # Scaling governor must be set _after_ bringing all CPU cores online,
+ # otherwise it would not affect the cores that are currently offline.
+ self.SetScalingGovernor('performance')
+ self._SetMaxFrequenciesFromMode(high_perf_mode)
+
+ def SetDefaultPerfMode(self):
+ """Sets the performance mode for the device to its default mode."""
+ if not self._device.HasRoot():
+ return
+ mode_definitions = _GetPerfModeDefinitions(self._device.product_model)
+ if not mode_definitions:
+ self.SetScalingGovernor('ondemand')
else:
- self.SetScalingGovernor('performance')
+ default_mode_governor = mode_definitions.get('default_mode_governor')
+ assert default_mode_governor, ('Default mode governor must be provided '
+ 'for all perf mode definitions.')
+ self.SetScalingGovernor(default_mode_governor)
+ default_mode = mode_definitions.get('default_mode')
+ if default_mode:
+ self._SetMaxFrequenciesFromMode(default_mode)
+ self._ForceAllCpusOnline(False)
def SetPerfProfilingMode(self):
"""Enables all cores for reliable perf profiling."""
@@ -74,27 +223,6 @@ class PerfControl(object):
raise RuntimeError('Need root to force CPUs online.')
raise RuntimeError('Failed to force CPUs online.')
- def SetDefaultPerfMode(self):
- """Sets the performance mode for the device to its default mode."""
- if not self._device.HasRoot():
- return
- product_model = self._device.product_model
- if 'Nexus 5' == product_model:
- if self._AllCpusAreOnline():
- self._SetScalingMaxFreq(2265600)
- self._SetMaxGpuClock(450000000)
-
- governor_mode = {
- 'GT-I9300': 'pegasusq',
- 'Galaxy Nexus': 'interactive',
- 'Nexus 4': 'ondemand',
- 'Nexus 5': 'ondemand',
- 'Nexus 7': 'interactive',
- 'Nexus 10': 'interactive'
- }.get(product_model, 'ondemand')
- self.SetScalingGovernor(governor_mode)
- self._ForceAllCpusOnline(False)
-
def GetCpuInfo(self):
online = (output.rstrip() == '1' and status == 0
for (_, output, status) in self._ForEachCpu('cat "$CPU/online"'))
@@ -103,9 +231,24 @@ class PerfControl(object):
in self._ForEachCpu('cat "$CPU/cpufreq/scaling_governor"'))
return zip(self._cpu_files, online, governor)
- def _ForEachCpu(self, cmd):
+ def _ForEachCpu(self, cmd, cpu_list=None):
+ """Runs a command on the device for each of the CPUs.
+
+ Args:
+ cmd: A string with a shell command, may may use shell expansion: "$CPU" to
+ refer to the current CPU in the string form (e.g. "cpu0", "cpu1",
+ and so on).
+ cpu_list: A space-separated string of CPU core names, like in the example
+ above
+ Returns:
+ A list of tuples in the form (cpu_string, command_output, exit_code), one
+ tuple per each command invocation. As usual, all lines of the output
+ command are joined into one line with spaces.
+ """
+ if cpu_list is None:
+ cpu_list = self._cpu_file_list
script = '; '.join([
- 'for CPU in %s' % self._cpu_file_list,
+ 'for CPU in %s' % cpu_list,
'do %s' % cmd,
'echo -n "%~%$?%~%"',
'done'
@@ -115,20 +258,20 @@ class PerfControl(object):
output = '\n'.join(output).split('%~%')
return zip(self._cpu_files, output[0::2], (int(c) for c in output[1::2]))
- def _WriteEachCpuFile(self, path, value):
- self._ConditionallyWriteEachCpuFile(path, value, condition='true')
-
- def _ConditionallyWriteEachCpuFile(self, path, value, condition):
+ def _ConditionallyWriteCpuFiles(self, path, value, cpu_files, condition):
template = (
'{condition} && test -e "$CPU/{path}" && echo {value} > "$CPU/{path}"')
results = self._ForEachCpu(
- template.format(path=path, value=value, condition=condition))
+ template.format(path=path, value=value, condition=condition), cpu_files)
cpus = ' '.join(cpu for (cpu, _, status) in results if status == 0)
if cpus:
logger.info('Successfully set %s to %r on: %s', path, value, cpus)
else:
logger.warning('Failed to set %s to %r on any cpus', path, value)
+ def _WriteCpuFiles(self, path, value, cpu_files):
+ self._ConditionallyWriteCpuFiles(path, value, cpu_files, condition='true')
+
def _ReadEachCpuFile(self, path):
return self._ForEachCpu(
'cat "$CPU/{path}"'.format(path=path))
@@ -145,8 +288,8 @@ class PerfControl(object):
condition = 'test -e "{path}" && grep -q {value} {path}'.format(
path=('${CPU}/%s' % self._AVAILABLE_GOVERNORS_REL_PATH),
value=value)
- self._ConditionallyWriteEachCpuFile(
- 'cpufreq/scaling_governor', value, condition)
+ self._ConditionallyWriteCpuFiles(
+ 'cpufreq/scaling_governor', value, self._cpu_file_list, condition)
def GetScalingGovernor(self):
"""Gets the currently set governor for each CPU.
@@ -169,8 +312,8 @@ class PerfControl(object):
"""
return self._available_governors
- def _SetScalingMaxFreq(self, value):
- self._WriteEachCpuFile('cpufreq/scaling_max_freq', '%d' % value)
+ def _SetScalingMaxFreqForCpus(self, value, cpu_files):
+ self._WriteCpuFiles('cpufreq/scaling_max_freq', '%d' % value, cpu_files)
def _SetMaxGpuClock(self, value):
self._device.WriteFile('/sys/class/kgsl/kgsl-3d0/max_gpuclk',
@@ -179,8 +322,9 @@ class PerfControl(object):
def _AllCpusAreOnline(self):
results = self._ForEachCpu('cat "$CPU/online"')
- # TODO(epenner): Investigate why file may be missing
- # (http://crbug.com/397118)
+ # The file 'cpu0/online' is missing on some devices (example: Nexus 9). This
+ # is likely because on these devices it is impossible to bring the cpu0
+ # offline. Assuming the same for all devices until proven otherwise.
return all(output.rstrip() == '1' and status == 0
for (cpu, output, status) in results
if cpu != 'cpu0')
diff --git a/systrace/catapult/devil/devil/android/perf/perf_control_test.py b/systrace/catapult/devil/devil/android/perf/perf_control_test.py
new file mode 100644
index 0000000..3832424
--- /dev/null
+++ b/systrace/catapult/devil/devil/android/perf/perf_control_test.py
@@ -0,0 +1,105 @@
+# Copyright 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import unittest
+
+from devil import devil_env
+from devil.android import device_utils
+from devil.android.perf import perf_control
+from devil.android.sdk import adb_wrapper
+
+with devil_env.SysPath(devil_env.PYMOCK_PATH):
+ import mock
+
+
+# pylint: disable=unused-argument
+def _ShellCommandHandler(cmd, shell=False, check_return=False,
+ cwd=None, env=None, run_as=None, as_root=False, single_line=False,
+ large_output=False, raw_output=False, timeout=None, retries=None):
+ if cmd.startswith('for CPU in '):
+ if 'scaling_available_governors' in cmd:
+ contents = 'interactive ondemand userspace powersave performance'
+ return [contents + '\n%~%0%~%'] * 4
+ if 'cat "$CPU/online"' in cmd:
+ return ['1\n%~%0%~%'] * 4
+ assert False, 'Should not be called with cmd: {}'.format(cmd)
+
+
+class PerfControlTest(unittest.TestCase):
+ @staticmethod
+ def _MockOutLowLevelPerfControlMethods(perf_control_object):
+ # pylint: disable=protected-access
+ perf_control_object.SetScalingGovernor = mock.Mock()
+ perf_control_object._ForceAllCpusOnline = mock.Mock()
+ perf_control_object._SetScalingMaxFreqForCpus = mock.Mock()
+ perf_control_object._SetMaxGpuClock = mock.Mock()
+
+ # pylint: disable=no-self-use
+ def testNexus5HighPerfMode(self):
+ # Mock out the device state for PerfControl.
+ cpu_list = ['cpu%d' % cpu for cpu in xrange(4)]
+ mock_device = mock.Mock(spec=device_utils.DeviceUtils)
+ mock_device.product_model = 'Nexus 5'
+ mock_device.adb = mock.Mock(spec=adb_wrapper.AdbWrapper)
+ mock_device.ListDirectory.return_value = cpu_list + ['cpufreq']
+ mock_device.FileExists.return_value = True
+ mock_device.RunShellCommand = mock.Mock(side_effect=_ShellCommandHandler)
+ pc = perf_control.PerfControl(mock_device)
+ self._MockOutLowLevelPerfControlMethods(pc)
+
+ # Verify.
+ # pylint: disable=protected-access
+ # pylint: disable=no-member
+ pc.SetHighPerfMode()
+ mock_device.EnableRoot.assert_called_once_with()
+ pc._ForceAllCpusOnline.assert_called_once_with(True)
+ pc.SetScalingGovernor.assert_called_once_with('performance')
+ pc._SetScalingMaxFreqForCpus.assert_called_once_with(
+ 1190400, ' '.join(cpu_list))
+ pc._SetMaxGpuClock.assert_called_once_with(200000000)
+
+ def testNexus5XHighPerfMode(self):
+ # Mock out the device state for PerfControl.
+ cpu_list = ['cpu%d' % cpu for cpu in xrange(6)]
+ mock_device = mock.Mock(spec=device_utils.DeviceUtils)
+ mock_device.product_model = 'Nexus 5X'
+ mock_device.adb = mock.Mock(spec=adb_wrapper.AdbWrapper)
+ mock_device.ListDirectory.return_value = cpu_list + ['cpufreq']
+ mock_device.FileExists.return_value = True
+ mock_device.RunShellCommand = mock.Mock(side_effect=_ShellCommandHandler)
+ pc = perf_control.PerfControl(mock_device)
+ self._MockOutLowLevelPerfControlMethods(pc)
+
+ # Verify.
+ # pylint: disable=protected-access
+ # pylint: disable=no-member
+ pc.SetHighPerfMode()
+ mock_device.EnableRoot.assert_called_once_with()
+ pc._ForceAllCpusOnline.assert_called_once_with(True)
+ pc.SetScalingGovernor.assert_called_once_with('performance')
+ pc._SetScalingMaxFreqForCpus.assert_called_once_with(
+ 1248000, ' '.join(cpu_list))
+ pc._SetMaxGpuClock.assert_called_once_with(300000000)
+
+ def testNexus5XDefaultPerfMode(self):
+ # Mock out the device state for PerfControl.
+ cpu_list = ['cpu%d' % cpu for cpu in xrange(6)]
+ mock_device = mock.Mock(spec=device_utils.DeviceUtils)
+ mock_device.product_model = 'Nexus 5X'
+ mock_device.adb = mock.Mock(spec=adb_wrapper.AdbWrapper)
+ mock_device.ListDirectory.return_value = cpu_list + ['cpufreq']
+ mock_device.FileExists.return_value = True
+ mock_device.RunShellCommand = mock.Mock(side_effect=_ShellCommandHandler)
+ pc = perf_control.PerfControl(mock_device)
+ self._MockOutLowLevelPerfControlMethods(pc)
+
+ # Verify.
+ # pylint: disable=protected-access
+ # pylint: disable=no-member
+ pc.SetDefaultPerfMode()
+ pc.SetScalingGovernor.assert_called_once_with('ondemand')
+ pc._SetScalingMaxFreqForCpus.assert_any_call(1440000, 'cpu0 cpu1 cpu2 cpu3')
+ pc._SetScalingMaxFreqForCpus.assert_any_call(1824000, 'cpu4 cpu5')
+ pc._SetMaxGpuClock.assert_called_once_with(600000000)
+ pc._ForceAllCpusOnline.assert_called_once_with(False)
diff --git a/systrace/catapult/devil/devil/android/perf/surface_stats_collector.py b/systrace/catapult/devil/devil/android/perf/surface_stats_collector.py
index eab493d..f1140c1 100644
--- a/systrace/catapult/devil/devil/android/perf/surface_stats_collector.py
+++ b/systrace/catapult/devil/devil/android/perf/surface_stats_collector.py
@@ -2,7 +2,9 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import logging
import Queue
+import re
import threading
@@ -116,6 +118,14 @@ class SurfaceStatsCollector(object):
except StopIteration:
raise Exception('Unable to get surface flinger process id')
+ def _GetSurfaceViewWindowName(self):
+ results = self._device.RunShellCommand(
+ ['dumpsys', 'SurfaceFlinger', '--list'], check_return=True)
+ for window_name in results:
+ if window_name.startswith('SurfaceView'):
+ return window_name
+ return None
+
def _GetSurfaceFlingerFrameData(self):
"""Returns collected SurfaceFlinger frame timing data.
@@ -127,59 +137,73 @@ class SurfaceStatsCollector(object):
The return value may be (None, None) if there was no data collected (for
example, if the app was closed before the collector thread has finished).
"""
- # adb shell dumpsys SurfaceFlinger --latency <window name>
- # prints some information about the last 128 frames displayed in
- # that window.
- # The data returned looks like this:
- # 16954612
- # 7657467895508 7657482691352 7657493499756
- # 7657484466553 7657499645964 7657511077881
- # 7657500793457 7657516600576 7657527404785
- # (...)
- #
- # The first line is the refresh period (here 16.95 ms), it is followed
- # by 128 lines w/ 3 timestamps in nanosecond each:
- # A) when the app started to draw
- # B) the vsync immediately preceding SF submitting the frame to the h/w
- # C) timestamp immediately after SF submitted that frame to the h/w
- #
- # The difference between the 1st and 3rd timestamp is the frame-latency.
- # An interesting data is when the frame latency crosses a refresh period
- # boundary, this can be calculated this way:
- #
- # ceil((C - A) / refresh-period)
- #
- # (each time the number above changes, we have a "jank").
- # If this happens a lot during an animation, the animation appears
- # janky, even if it runs at 60 fps in average.
- #
- # We use the special "SurfaceView" window name because the statistics for
- # the activity's main window are not updated when the main web content is
- # composited into a SurfaceView.
- results = self._device.RunShellCommand(
- ['dumpsys', 'SurfaceFlinger', '--latency', 'SurfaceView'],
- check_return=True)
- if not len(results):
- return (None, None)
-
- timestamps = []
- nanoseconds_per_millisecond = 1e6
- refresh_period = long(results[0]) / nanoseconds_per_millisecond
-
- # If a fence associated with a frame is still pending when we query the
- # latency data, SurfaceFlinger gives the frame a timestamp of INT64_MAX.
- # Since we only care about completed frames, we will ignore any timestamps
- # with this value.
- pending_fence_timestamp = (1 << 63) - 1
-
- for line in results[1:]:
- fields = line.split()
- if len(fields) != 3:
- continue
- timestamp = long(fields[1])
- if timestamp == pending_fence_timestamp:
- continue
- timestamp /= nanoseconds_per_millisecond
- timestamps.append(timestamp)
-
- return (refresh_period, timestamps)
+ window_name = self._GetSurfaceViewWindowName()
+ command = ['dumpsys', 'SurfaceFlinger', '--latency']
+ # Even if we don't find the window name, run the command to get the refresh
+ # period.
+ if window_name:
+ command.append(window_name)
+ output = self._device.RunShellCommand(command, check_return=True)
+ return ParseFrameData(output, parse_timestamps=bool(window_name))
+
+
+def ParseFrameData(lines, parse_timestamps):
+ # adb shell dumpsys SurfaceFlinger --latency <window name>
+ # prints some information about the last 128 frames displayed in
+ # that window.
+ # The data returned looks like this:
+ # 16954612
+ # 7657467895508 7657482691352 7657493499756
+ # 7657484466553 7657499645964 7657511077881
+ # 7657500793457 7657516600576 7657527404785
+ # (...)
+ #
+ # The first line is the refresh period (here 16.95 ms), it is followed
+ # by 128 lines w/ 3 timestamps in nanosecond each:
+ # A) when the app started to draw
+ # B) the vsync immediately preceding SF submitting the frame to the h/w
+ # C) timestamp immediately after SF submitted that frame to the h/w
+ #
+ # The difference between the 1st and 3rd timestamp is the frame-latency.
+ # An interesting data is when the frame latency crosses a refresh period
+ # boundary, this can be calculated this way:
+ #
+ # ceil((C - A) / refresh-period)
+ #
+ # (each time the number above changes, we have a "jank").
+ # If this happens a lot during an animation, the animation appears
+ # janky, even if it runs at 60 fps in average.
+ results = []
+ for line in lines:
+ # Skip over lines with anything other than digits and whitespace.
+ if re.search(r'[^\d\s]', line):
+ logging.warning('unexpected output: %s', line)
+ else:
+ results.append(line)
+ if not results:
+ return None, None
+
+ timestamps = []
+ nanoseconds_per_millisecond = 1e6
+ refresh_period = long(results[0]) / nanoseconds_per_millisecond
+ if not parse_timestamps:
+ return refresh_period, timestamps
+
+ # If a fence associated with a frame is still pending when we query the
+ # latency data, SurfaceFlinger gives the frame a timestamp of INT64_MAX.
+ # Since we only care about completed frames, we will ignore any timestamps
+ # with this value.
+ pending_fence_timestamp = (1 << 63) - 1
+
+ for line in results[1:]:
+ fields = line.split()
+ if len(fields) != 3:
+ logging.warning('Unexpected line: %s', line)
+ continue
+ timestamp = long(fields[1])
+ if timestamp == pending_fence_timestamp:
+ continue
+ timestamp /= nanoseconds_per_millisecond
+ timestamps.append(timestamp)
+
+ return refresh_period, timestamps
diff --git a/systrace/catapult/devil/devil/android/perf/surface_stats_collector_test.py b/systrace/catapult/devil/devil/android/perf/surface_stats_collector_test.py
new file mode 100644
index 0000000..13b345c
--- /dev/null
+++ b/systrace/catapult/devil/devil/android/perf/surface_stats_collector_test.py
@@ -0,0 +1,40 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import unittest
+
+from devil.android.perf import surface_stats_collector
+
+
+class SurfaceStatsCollectorTests(unittest.TestCase):
+ def testParseFrameData_simple(self):
+ actual = surface_stats_collector.ParseFrameData([
+ '16954612',
+ '7657467895508 7657482691352 7657493499756',
+ '7657484466553 7657499645964 7657511077881',
+ '7657500793457 7657516600576 7657527404785',
+ ], parse_timestamps=True)
+ self.assertEqual(
+ actual, (16.954612, [7657482.691352, 7657499.645964, 7657516.600576]))
+
+ def testParseFrameData_withoutTimestamps(self):
+ actual = surface_stats_collector.ParseFrameData([
+ '16954612',
+ '7657467895508 7657482691352 7657493499756',
+ '7657484466553 7657499645964 7657511077881',
+ '7657500793457 7657516600576 7657527404785',
+ ], parse_timestamps=False)
+ self.assertEqual(
+ actual, (16.954612, []))
+
+ def testParseFrameData_withWarning(self):
+ actual = surface_stats_collector.ParseFrameData([
+ 'SurfaceFlinger appears to be unresponsive, dumping anyways',
+ '16954612',
+ '7657467895508 7657482691352 7657493499756',
+ '7657484466553 7657499645964 7657511077881',
+ '7657500793457 7657516600576 7657527404785',
+ ], parse_timestamps=True)
+ self.assertEqual(
+ actual, (16.954612, [7657482.691352, 7657499.645964, 7657516.600576]))
diff --git a/systrace/catapult/devil/devil/android/perf/thermal_throttle.py b/systrace/catapult/devil/devil/android/perf/thermal_throttle.py
index 546a92e..fd6b08f 100644
--- a/systrace/catapult/devil/devil/android/perf/thermal_throttle.py
+++ b/systrace/catapult/devil/devil/android/perf/thermal_throttle.py
@@ -76,6 +76,7 @@ class ThermalThrottle(object):
self._device = device
self._throttled = False
self._detector = None
+ # pylint: disable=redefined-variable-type
if OmapThrottlingDetector.IsSupported(device):
self._detector = OmapThrottlingDetector(device)
elif ExynosThrottlingDetector.IsSupported(device):
diff --git a/systrace/catapult/devil/devil/android/ports.py b/systrace/catapult/devil/devil/android/ports.py
index 1d4e5f2..4547a62 100644
--- a/systrace/catapult/devil/devil/android/ports.py
+++ b/systrace/catapult/devil/devil/android/ports.py
@@ -116,7 +116,7 @@ def IsDevicePortUsed(device, device_port, state=''):
"""
base_urls = ('127.0.0.1:%d' % device_port, 'localhost:%d' % device_port)
netstat_results = device.RunShellCommand(
- ['netstat', '-a'], check_return=True, large_output=True)
+ ['netstat', '-an'], check_return=True, large_output=True)
for single_connect in netstat_results:
# Column 3 is the local address which we want to check with.
connect_results = single_connect.split()
diff --git a/systrace/catapult/devil/devil/android/sdk/adb_wrapper.py b/systrace/catapult/devil/devil/android/sdk/adb_wrapper.py
index 5d24d47..13c0f52 100644
--- a/systrace/catapult/devil/devil/android/sdk/adb_wrapper.py
+++ b/systrace/catapult/devil/devil/android/sdk/adb_wrapper.py
@@ -9,7 +9,9 @@ should be delegated to a higher level (ex. DeviceUtils).
"""
import collections
-import distutils.version
+# pylint: disable=import-error
+# pylint: disable=no-name-in-module
+import distutils.version as du_version
import errno
import logging
import os
@@ -17,6 +19,7 @@ import posixpath
import re
import subprocess
+from devil import base_error
from devil import devil_env
from devil.android import decorators
from devil.android import device_errors
@@ -31,6 +34,7 @@ logger = logging.getLogger(__name__)
ADB_KEYS_FILE = '/data/misc/adb/adb_keys'
+ADB_HOST_KEYS_DIR = os.path.join(os.path.expanduser('~'), '.android')
DEFAULT_TIMEOUT = 30
DEFAULT_RETRIES = 2
@@ -39,8 +43,10 @@ _ADB_VERSION_RE = re.compile(r'Android Debug Bridge version (\d+\.\d+\.\d+)')
_EMULATOR_RE = re.compile(r'^emulator-[0-9]+$')
_DEVICE_NOT_FOUND_RE = re.compile(r"error: device '(?P<serial>.+)' not found")
_READY_STATE = 'device'
-_VERITY_DISABLE_RE = re.compile(r'Verity (already )?disabled')
-_VERITY_ENABLE_RE = re.compile(r'Verity (already )?enabled')
+_VERITY_DISABLE_RE = re.compile(r'(V|v)erity (is )?(already )?disabled'
+ r'|Successfully disabled verity')
+_VERITY_ENABLE_RE = re.compile(r'(V|v)erity (is )?(already )?enabled'
+ r'|Successfully enabled verity')
_WAITING_FOR_DEVICE_RE = re.compile(r'- waiting for device -')
@@ -92,7 +98,11 @@ def _GetVersion():
def _ShouldRetryAdbCmd(exc):
- return not isinstance(exc, device_errors.NoAdbError)
+ # Errors are potentially transient and should be retried, with the exception
+ # of NoAdbError. Exceptions [e.g. generated from SIGTERM handler] should be
+ # raised.
+ return (isinstance(exc, base_error.BaseError) and
+ not isinstance(exc, device_errors.NoAdbError))
DeviceStat = collections.namedtuple('DeviceStat',
@@ -253,13 +263,22 @@ class AdbWrapper(object):
@classmethod
@decorators.WithTimeoutAndConditionalRetries(_ShouldRetryAdbCmd)
def _RunAdbCmd(cls, args, timeout=None, retries=None, device_serial=None,
- check_error=True, cpu_affinity=None):
- # pylint: disable=no-member
+ check_error=True, cpu_affinity=None, additional_env=None):
+ if timeout:
+ remaining = timeout_retry.CurrentTimeoutThreadGroup().GetRemainingTime()
+ if remaining:
+ # Use a slightly smaller timeout than remaining time to ensure that we
+ # have time to collect output from the command.
+ timeout = 0.95 * remaining
+ else:
+ timeout = None
+ env = cls._ADB_ENV.copy()
+ if additional_env:
+ env.update(additional_env)
try:
status, output = cmd_helper.GetCmdStatusAndOutputWithTimeout(
cls._BuildAdbCmd(args, device_serial, cpu_affinity=cpu_affinity),
- timeout_retry.CurrentTimeoutThreadGroup().GetRemainingTime(),
- env=cls._ADB_ENV)
+ timeout, env=env)
except OSError as e:
if e.errno in (errno.ENOENT, errno.ENOEXEC):
raise device_errors.NoAdbError(msg=str(e))
@@ -291,7 +310,8 @@ class AdbWrapper(object):
timeout: Timeout in seconds.
retries: Number of retries.
check_error: Check that the command doesn't return an error message. This
- does NOT check the exit status of shell commands.
+ does check the error status of adb but DOES NOT check the exit status
+ of shell commands.
Returns:
The output of the command.
@@ -300,13 +320,17 @@ class AdbWrapper(object):
device_serial=self._device_serial,
check_error=check_error)
- def _IterRunDeviceAdbCmd(self, args, iter_timeout, timeout):
+ def _IterRunDeviceAdbCmd(self, args, iter_timeout, timeout,
+ check_error=True):
"""Runs an adb command and returns an iterator over its output lines.
Args:
args: A list of arguments to adb.
iter_timeout: Timeout for each iteration in seconds.
timeout: Timeout for the entire command in seconds.
+ check_error: Check that the command succeeded. This does check the
+ error status of the adb command but DOES NOT check the exit status
+ of shell commands.
Yields:
The output of the command line by line.
@@ -315,7 +339,8 @@ class AdbWrapper(object):
self._BuildAdbCmd(args, self._device_serial),
iter_timeout=iter_timeout,
timeout=timeout,
- env=self._ADB_ENV)
+ env=self._ADB_ENV,
+ check_status=check_error)
def __eq__(self, other):
"""Consider instances equal if they refer to the same device.
@@ -353,10 +378,21 @@ class AdbWrapper(object):
cls._RunAdbCmd(['kill-server'], timeout=timeout, retries=retries)
@classmethod
- def StartServer(cls, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
+ def StartServer(cls, keys=None, timeout=DEFAULT_TIMEOUT,
+ retries=DEFAULT_RETRIES):
+ """Starts the ADB server.
+
+ Args:
+ keys: (optional) List of local ADB keys to use to auth with devices.
+ timeout: (optional) Timeout per try in seconds.
+ retries: (optional) Number of retries to attempt.
+ """
+ additional_env = {}
+ if keys:
+ additional_env['ADB_VENDOR_KEYS'] = ':'.join(keys)
# CPU affinity is used to reduce adb instability http://crbug.com/268450
cls._RunAdbCmd(['start-server'], timeout=timeout, retries=retries,
- cpu_affinity=0)
+ cpu_affinity=0, additional_env=additional_env)
@classmethod
def GetDevices(cls, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
@@ -422,8 +458,8 @@ class AdbWrapper(object):
"""
VerifyLocalFileExists(local)
- if (distutils.version.LooseVersion(self.Version()) <
- distutils.version.LooseVersion('1.0.36')):
+ if (du_version.LooseVersion(self.Version()) <
+ du_version.LooseVersion('1.0.36')):
# Different versions of adb handle pushing a directory to an existing
# directory differently.
@@ -480,6 +516,19 @@ class AdbWrapper(object):
'File pulled from the device did not arrive on the host: %s' % local,
device_serial=str(self))
+ def StartShell(self, cmd):
+ """Starts a subprocess on the device and returns a handle to the process.
+
+ Args:
+ args: A sequence of program arguments. The executable to run is the first
+ item in the sequence.
+
+ Returns:
+ An instance of subprocess.Popen associated with the live process.
+ """
+ return cmd_helper.StartCmd(
+ self._BuildAdbCmd(['shell'] + cmd, self._device_serial))
+
def Shell(self, command, expect_status=0, timeout=DEFAULT_TIMEOUT,
retries=DEFAULT_RETRIES):
"""Runs a shell command on the device.
@@ -575,7 +624,7 @@ class AdbWrapper(object):
def Logcat(self, clear=False, dump=False, filter_specs=None,
logcat_format=None, ring_buffer=None, iter_timeout=None,
- timeout=None, retries=DEFAULT_RETRIES):
+ check_error=True, timeout=None, retries=DEFAULT_RETRIES):
"""Get an iterable over the logcat output.
Args:
@@ -591,6 +640,7 @@ class AdbWrapper(object):
iter_timeout: If set and neither clear nor dump is set, the number of
seconds to wait between iterations. If no line is found before the
given number of seconds elapses, the iterable will yield None.
+ check_error: Whether to check the exit status of the logcat command.
timeout: (optional) If set, timeout per try in seconds. If clear or dump
is set, defaults to DEFAULT_TIMEOUT.
retries: (optional) If clear or dump is set, the number of retries to
@@ -616,10 +666,13 @@ class AdbWrapper(object):
cmd.extend(filter_specs)
if use_iter:
- return self._IterRunDeviceAdbCmd(cmd, iter_timeout, timeout)
+ return self._IterRunDeviceAdbCmd(
+ cmd, iter_timeout, timeout, check_error=check_error)
else:
timeout = timeout if timeout is not None else DEFAULT_TIMEOUT
- return self._RunDeviceAdbCmd(cmd, timeout, retries).splitlines()
+ output = self._RunDeviceAdbCmd(
+ cmd, timeout, retries, check_error=check_error)
+ return output.splitlines()
def Forward(self, local, remote, allow_rebind=False,
timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
@@ -671,8 +724,8 @@ class AdbWrapper(object):
Returns:
The output of adb forward --list as a string.
"""
- if (distutils.version.LooseVersion(self.Version()) >=
- distutils.version.LooseVersion('1.0.36')):
+ if (du_version.LooseVersion(self.Version()) >=
+ du_version.LooseVersion('1.0.36')):
# Starting in 1.0.36, this can occasionally fail with a protocol fault.
# As this interrupts all connections with all devices, we instead just
# return an empty list. This may give clients an inaccurate result, but
@@ -915,18 +968,28 @@ class AdbWrapper(object):
return self._RunDeviceAdbCmd(['emu'] + cmd, timeout, retries)
def DisableVerity(self, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
- """Disable Marshmallow's Verity security feature"""
+ """Disable Marshmallow's Verity security feature.
+
+ Returns:
+ The output of the disable-verity command as a string.
+ """
output = self._RunDeviceAdbCmd(['disable-verity'], timeout, retries)
if output and not _VERITY_DISABLE_RE.search(output):
raise device_errors.AdbCommandFailedError(
['disable-verity'], output, device_serial=self._device_serial)
+ return output
def EnableVerity(self, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
- """Enable Marshmallow's Verity security feature"""
+ """Enable Marshmallow's Verity security feature.
+
+ Returns:
+ The output of the enable-verity command as a string.
+ """
output = self._RunDeviceAdbCmd(['enable-verity'], timeout, retries)
if output and not _VERITY_ENABLE_RE.search(output):
raise device_errors.AdbCommandFailedError(
['enable-verity'], output, device_serial=self._device_serial)
+ return output
@property
def is_emulator(self):
diff --git a/systrace/catapult/devil/devil/android/sdk/fastboot.py b/systrace/catapult/devil/devil/android/sdk/fastboot.py
index ae99d39..47f4167 100644
--- a/systrace/catapult/devil/devil/android/sdk/fastboot.py
+++ b/systrace/catapult/devil/devil/android/sdk/fastboot.py
@@ -54,7 +54,7 @@ class Fastboot(object):
Raises:
TypeError: If cmd is not of type list.
"""
- if type(cmd) == list:
+ if isinstance(cmd, list):
cmd = [cls._fastboot_path.read()] + cmd
else:
raise TypeError(
@@ -76,7 +76,7 @@ class Fastboot(object):
Raises:
TypeError: If cmd is not of type list.
"""
- if type(cmd) == list:
+ if isinstance(cmd, list):
cmd = ['-s', self._device_serial] + cmd
return self._RunFastbootCommand(cmd)
diff --git a/systrace/catapult/devil/devil/android/sdk/shared_prefs.py b/systrace/catapult/devil/devil/android/sdk/shared_prefs.py
index 2fa2e6a..c8c82b4 100644
--- a/systrace/catapult/devil/devil/android/sdk/shared_prefs.py
+++ b/systrace/catapult/devil/devil/android/sdk/shared_prefs.py
@@ -10,10 +10,10 @@ See e.g.:
import logging
import posixpath
+from xml.etree import ElementTree
from devil.android import device_errors
from devil.android.sdk import version_codes
-from xml.etree import ElementTree
logger = logging.getLogger(__name__)
@@ -167,7 +167,7 @@ _PREF_TYPES = {c.tag_name: c for c in [BooleanPref, FloatPref, IntPref,
class SharedPrefs(object):
- def __init__(self, device, package, filename):
+ def __init__(self, device, package, filename, use_encrypted_path=False):
"""Helper object to read and update "Shared Prefs" of Android apps.
Such files typically look like, e.g.:
@@ -196,12 +196,29 @@ class SharedPrefs(object):
package: A string with the package name of the app that owns the shared
preferences file.
filename: A string with the name of the preferences file to read/write.
+ use_encrypted_path: Whether to read and write to the shared prefs location
+ in the device-encrypted path (/data/user_de) instead of the older,
+ unencrypted path (/data/data). Only supported on N+, but falls back to
+ the unencrypted path if the encrypted path is not supported on the given
+ device.
"""
self._device = device
self._xml = None
self._package = package
self._filename = filename
- self._path = '/data/data/%s/shared_prefs/%s' % (package, filename)
+ self._unencrypted_path = '/data/data/%s/shared_prefs/%s' % (package,
+ filename)
+ self._encrypted_path = '/data/user_de/0/%s/shared_prefs/%s' % (package,
+ filename)
+ self._path = self._unencrypted_path
+ self._encrypted = use_encrypted_path
+ if use_encrypted_path:
+ if self._device.build_version_sdk < version_codes.NOUGAT:
+ logging.info('SharedPrefs set to use encrypted path, but given device '
+ 'is not running N+. Falling back to unencrypted path')
+ self._encrypted = False
+ else:
+ self._path = self._encrypted_path
self._changed = False
def __repr__(self):
@@ -261,12 +278,17 @@ class SharedPrefs(object):
self._xml = None
self._changed = True
- def Commit(self):
+ def Commit(self, force_commit=False):
"""Save the current set of preferences to the device.
- Only actually saves if some preferences have been modified.
+ Only actually saves if some preferences have been modified or force_commit
+ is set to True.
+
+ Args:
+ force_commit: Commit even if no changes have been made to the SharedPrefs
+ instance.
"""
- if not self.changed:
+ if not (self.changed or force_commit):
return
self._device.RunShellCommand(
['mkdir', '-p', posixpath.dirname(self.path)],
@@ -277,14 +299,24 @@ class SharedPrefs(object):
# to the shared_prefs directory, which mimics the behavior of a file
# created by the app itself
if self._device.build_version_sdk >= version_codes.MARSHMALLOW:
- security_context = self._GetSecurityContext(self.package)
- if security_context == None:
+ security_context = self._device.GetSecurityContextForPackage(self.package,
+ encrypted=self._encrypted)
+ if security_context is None:
raise device_errors.CommandFailedError(
'Failed to get security context for %s' % self.package)
- self._device.RunShellCommand(
- ['chcon', '-R', security_context,
- '/data/data/%s/shared_prefs' % self.package],
- as_root=True, check_return=True)
+ paths = [posixpath.dirname(self.path), self.path]
+ self._device.ChangeSecurityContext(security_context, paths)
+
+ # Ensure that there isn't both an encrypted and unencrypted version of the
+ # file on the device at the same time.
+ if self._device.build_version_sdk >= version_codes.NOUGAT:
+ remove_path = (self._unencrypted_path if self._encrypted
+ else self._encrypted_path)
+ if self._device.PathExists(remove_path, as_root=True):
+ logging.warning('Found an equivalent shared prefs file at %s, removing',
+ remove_path)
+ self._device.RemovePath(remove_path, as_root=True)
+
self._device.KillAll(self.package, exact=True, as_root=True, quiet=True)
self._changed = False
@@ -406,15 +438,3 @@ class SharedPrefs(object):
pref.set(value)
self._changed = True
logger.info('Setting property: %s', pref)
-
- def _GetSecurityContext(self, package):
- for line in self._device.RunShellCommand(['ls', '-Z', '/data/data/'],
- as_root=True, check_return=True):
- split_line = line.split()
- # ls -Z output differs between Android versions, but the package is
- # always last and the context always starts with "u:object"
- if split_line[-1] == package:
- for column in split_line:
- if column.startswith('u:object'):
- return column
- return None
diff --git a/systrace/catapult/devil/devil/android/sdk/shared_prefs_test.py b/systrace/catapult/devil/devil/android/sdk/shared_prefs_test.py
index 4c31c56..08bbb46 100755
--- a/systrace/catapult/devil/devil/android/sdk/shared_prefs_test.py
+++ b/systrace/catapult/devil/devil/android/sdk/shared_prefs_test.py
@@ -19,6 +19,14 @@ with devil_env.SysPath(devil_env.PYMOCK_PATH):
import mock # pylint: disable=import-error
+INITIAL_XML = ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
+ '<map>\n'
+ ' <int name="databaseVersion" value="107" />\n'
+ ' <boolean name="featureEnabled" value="false" />\n'
+ ' <string name="someHashValue">249b3e5af13d4db2</string>\n'
+ '</map>')
+
+
def MockDeviceWithFiles(files=None):
if files is None:
files = {}
@@ -43,13 +51,7 @@ class SharedPrefsTest(unittest.TestCase):
def setUp(self):
self.device = MockDeviceWithFiles({
- '/data/data/com.some.package/shared_prefs/prefs.xml':
- "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
- '<map>\n'
- ' <int name="databaseVersion" value="107" />\n'
- ' <boolean name="featureEnabled" value="false" />\n'
- ' <string name="someHashValue">249b3e5af13d4db2</string>\n'
- '</map>'})
+ '/data/data/com.some.package/shared_prefs/prefs.xml': INITIAL_XML})
self.expected_data = {'databaseVersion': 107,
'featureEnabled': False,
'someHashValue': '249b3e5af13d4db2'}
@@ -127,6 +129,22 @@ class SharedPrefsTest(unittest.TestCase):
'bigNumner': 6000000000,
'apps': ['gmail', 'chrome', 'music']}) # data survived roundtrip
+ def testForceCommit(self):
+ prefs = shared_prefs.SharedPrefs(
+ self.device, 'com.some.package', 'prefs.xml')
+ prefs.Load()
+ new_xml = 'Not valid XML'
+ self.device.WriteFile('/data/data/com.some.package/shared_prefs/prefs.xml',
+ new_xml)
+ prefs.Commit()
+ # Since we didn't change anything, Commit() should be a no-op.
+ self.assertEquals(self.device.ReadFile(
+ '/data/data/com.some.package/shared_prefs/prefs.xml'), new_xml)
+ prefs.Commit(force_commit=True)
+ # Forcing the commit should restore the originally read XML.
+ self.assertEquals(self.device.ReadFile(
+ '/data/data/com.some.package/shared_prefs/prefs.xml'), INITIAL_XML)
+
def testAsContextManager_onlyReads(self):
with shared_prefs.SharedPrefs(
self.device, 'com.some.package', 'prefs.xml') as prefs:
@@ -166,6 +184,19 @@ class SharedPrefsTest(unittest.TestCase):
# contents were not modified
self.assertEquals(prefs.AsDict(), self.expected_data)
+ def testEncryptedPath(self):
+ type(self.device).build_version_sdk = mock.PropertyMock(
+ return_value=version_codes.MARSHMALLOW)
+ with shared_prefs.SharedPrefs(self.device, 'com.some.package',
+ 'prefs.xml', use_encrypted_path=True) as prefs:
+ self.assertTrue(prefs.path.startswith('/data/data'))
+
+ type(self.device).build_version_sdk = mock.PropertyMock(
+ return_value=version_codes.NOUGAT)
+ with shared_prefs.SharedPrefs(self.device, 'com.some.package',
+ 'prefs.xml', use_encrypted_path=True) as prefs:
+ self.assertTrue(prefs.path.startswith('/data/user_de/0'))
+
if __name__ == '__main__':
logging.getLogger().setLevel(logging.DEBUG)
unittest.main(verbosity=2)
diff --git a/systrace/catapult/devil/devil/android/sdk/version_codes.py b/systrace/catapult/devil/devil/android/sdk/version_codes.py
index ec14359..29c7285 100644
--- a/systrace/catapult/devil/devil/android/sdk/version_codes.py
+++ b/systrace/catapult/devil/devil/android/sdk/version_codes.py
@@ -17,5 +17,6 @@ LOLLIPOP_MR1 = 22
MARSHMALLOW = 23
NOUGAT = 24
NOUGAT_MR1 = 25
-O = 26
-O_MR1 = 27
+OREO = 26
+OREO_MR1 = 27
+PIE = 28
diff --git a/systrace/catapult/devil/devil/android/tools/device_monitor.py b/systrace/catapult/devil/devil/android/tools/device_monitor.py
index 10e0333..565f865 100755
--- a/systrace/catapult/devil/devil/android/tools/device_monitor.py
+++ b/systrace/catapult/devil/devil/android/tools/device_monitor.py
@@ -112,9 +112,9 @@ def get_device_status_unsafe(device):
except ValueError:
continue
key = line.split(':')[0].strip()
- if 'MemTotal' == key:
+ if key == 'MemTotal':
status['mem']['total'] = value
- elif 'MemFree' == key:
+ elif key == 'MemFree':
status['mem']['free'] = value
# Process
@@ -162,7 +162,8 @@ def get_device_status(device):
try:
status = get_device_status_unsafe(device)
except device_errors.DeviceUnreachableError:
- status = {'state': 'offline'}
+ status = collections.defaultdict(dict)
+ status['state'] = 'offline'
return status
diff --git a/systrace/catapult/devil/devil/android/tools/device_recovery.py b/systrace/catapult/devil/devil/android/tools/device_recovery.py
index 0925aae..8050e6f 100755
--- a/systrace/catapult/devil/devil/android/tools/device_recovery.py
+++ b/systrace/catapult/devil/devil/android/tools/device_recovery.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env vpython
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -6,12 +6,14 @@
"""A script to recover devices in a known bad state."""
import argparse
+import glob
import logging
import os
-import psutil
import signal
import sys
+import psutil
+
if __name__ == '__main__':
sys.path.append(
os.path.abspath(os.path.join(os.path.dirname(__file__),
@@ -29,16 +31,20 @@ from devil.utils import reset_usb # pylint: disable=unused-import
logger = logging.getLogger(__name__)
+from py_utils import modules_util
+
+
+# Script depends on features from psutil version 2.0 or higher.
+modules_util.RequireVersion(psutil, '2.0')
+
def KillAllAdb():
def get_all_adb():
for p in psutil.process_iter():
try:
- # Note: p.as_dict is compatible with both older (v1 and under) as well
- # as newer (v2 and over) versions of psutil.
- # See: http://grodola.blogspot.com/2014/01/psutil-20-porting.html
+ # Retrieve all required process infos at once.
pinfo = p.as_dict(attrs=['pid', 'name', 'cmdline'])
- if 'adb' == pinfo['name']:
+ if pinfo['name'] == 'adb':
pinfo['cmdline'] = ' '.join(pinfo['cmdline'])
yield p, pinfo
except (psutil.NoSuchProcess, psutil.AccessDenied):
@@ -59,12 +65,58 @@ def KillAllAdb():
pass
+def TryAuth(device):
+ """Uses anything in ~/.android/ that looks like a key to auth with the device.
+
+ Args:
+ device: The DeviceUtils device to attempt to auth.
+
+ Returns:
+ True if device successfully authed.
+ """
+ possible_keys = glob.glob(os.path.join(adb_wrapper.ADB_HOST_KEYS_DIR, '*key'))
+ if len(possible_keys) <= 1:
+ logger.warning(
+ 'Only %d ADB keys available. Not forcing auth.', len(possible_keys))
+ return False
+
+ KillAllAdb()
+ adb_wrapper.AdbWrapper.StartServer(keys=possible_keys)
+ new_state = device.adb.GetState()
+ if new_state != 'device':
+ logger.error(
+ 'Auth failed. Device %s still stuck in %s.', str(device), new_state)
+ return False
+
+ # It worked! Now register the host's default ADB key on the device so we don't
+ # have to do all that again.
+ pub_key = os.path.join(adb_wrapper.ADB_HOST_KEYS_DIR, 'adbkey.pub')
+ if not os.path.exists(pub_key): # This really shouldn't happen.
+ logger.error('Default ADB key not available at %s.', pub_key)
+ return False
+
+ with open(pub_key) as f:
+ pub_key_contents = f.read()
+ try:
+ device.WriteFile(adb_wrapper.ADB_KEYS_FILE, pub_key_contents, as_root=True)
+ except (device_errors.CommandTimeoutError,
+ device_errors.CommandFailedError,
+ device_errors.DeviceUnreachableError):
+ logger.exception('Unable to write default ADB key to %s.', str(device))
+ return False
+ return True
+
+
def RecoverDevice(device, blacklist, should_reboot=lambda device: True):
if device_status.IsBlacklisted(device.adb.GetDeviceSerial(),
blacklist):
logger.debug('%s is blacklisted, skipping recovery.', str(device))
return
+ if device.adb.GetState() == 'unauthorized' and TryAuth(device):
+ logger.info('Successfully authed device %s!', str(device))
+ return
+
if should_reboot(device):
try:
device.WaitUntilFullyBooted(retries=0)
@@ -135,7 +187,7 @@ def RecoverDevices(devices, blacklist, enable_usb_reset=False):
should_restart_adb = should_restart_usb.union(set(
status['serial'] for status in statuses
if status['adb_status'] == 'unauthorized'))
- should_reboot_device = should_restart_adb.union(set(
+ should_reboot_device = should_restart_usb.union(set(
status['serial'] for status in statuses
if status['blacklisted']))
diff --git a/systrace/catapult/devil/devil/android/tools/provision_devices.py b/systrace/catapult/devil/devil/android/tools/provision_devices.py
index 68aca3b..47b1dc3 100755
--- a/systrace/catapult/devil/devil/android/tools/provision_devices.py
+++ b/systrace/catapult/devil/devil/android/tools/provision_devices.py
@@ -39,6 +39,7 @@ from devil.android import settings
from devil.android.sdk import adb_wrapper
from devil.android.sdk import intent
from devil.android.sdk import keyevent
+from devil.android.sdk import shared_prefs
from devil.android.sdk import version_codes
from devil.android.tools import script_common
from devil.constants import exit_codes
@@ -51,6 +52,9 @@ _SYSTEM_APP_DIRECTORIES = ['/system/app/', '/system/priv-app/']
_SYSTEM_WEBVIEW_NAMES = ['webview', 'WebViewGoogle']
_CHROME_PACKAGE_REGEX = re.compile('.*chrom.*')
_TOMBSTONE_REGEX = re.compile('tombstone.*')
+_STANDALONE_VR_DEVICES = [
+ 'vega', # Lenovo Mirage Solo
+]
class _DEFAULT_TIMEOUTS(object):
@@ -134,6 +138,7 @@ def ProvisionDevices(
steps.append(ProvisionStep(SetDate))
steps.append(ProvisionStep(CheckExternalStorage))
+ steps.append(ProvisionStep(StandaloneVrDeviceSetup))
parallel_devices.pMap(ProvisionDevice, steps, blacklist, reboot_timeout)
@@ -509,6 +514,8 @@ def LogDeviceProperties(device):
logger.info(' %s', prop)
+# TODO(jbudorick): Relocate this either to device_utils or a separate
+# and more intentionally reusable layer on top of device_utils.
def CheckExternalStorage(device):
"""Checks that storage is writable and if not makes it writable.
@@ -529,6 +536,30 @@ def CheckExternalStorage(device):
device.WriteFile(f.name, 'test')
+def StandaloneVrDeviceSetup(device):
+ """Performs any additional setup necessary for standalone Android VR devices.
+
+ Arguments:
+ device: The device to check.
+ """
+ if device.product_name not in _STANDALONE_VR_DEVICES:
+ return
+
+ # Modify VrCore's settings so that any first time setup, etc. is skipped.
+ shared_pref = shared_prefs.SharedPrefs(device, 'com.google.vr.vrcore',
+ 'VrCoreSettings.xml', use_encrypted_path=True)
+ shared_pref.Load()
+ # Skip first time setup.
+ shared_pref.SetBoolean('DaydreamSetupComplete', True)
+ # Disable the automatic prompt that shows anytime the device detects that a
+ # controller isn't connected.
+ shared_pref.SetBoolean('gConfigFlags:controller_recovery_enabled', False)
+ # Use an automated controller instead of a real one so we get past the
+ # controller pairing screen that's shown on startup.
+ shared_pref.SetBoolean('UseAutomatedController', True)
+ shared_pref.Commit()
+
+
def main(raw_args):
# Recommended options on perf bots:
# --disable-network
diff --git a/systrace/catapult/devil/devil/android/tools/script_common.py b/systrace/catapult/devil/devil/android/tools/script_common.py
index 150e63f..897659b 100644
--- a/systrace/catapult/devil/devil/android/tools/script_common.py
+++ b/systrace/catapult/devil/devil/android/tools/script_common.py
@@ -11,13 +11,38 @@ from devil.android import device_utils
def AddEnvironmentArguments(parser):
- """Adds environment-specific arguments to the provided parser."""
+ """Adds environment-specific arguments to the provided parser.
+
+ After adding these arguments, you must pass the user-specified values when
+ initializing devil. See the InitializeEnvironment() to determine how to do so.
+
+ Args:
+ parser: an instance of argparse.ArgumentParser
+ """
parser.add_argument(
'--adb-path', type=os.path.realpath,
help='Path to the adb binary')
def InitializeEnvironment(args):
+ """Initializes devil based on the args added by AddEnvironmentArguments().
+
+ This initializes devil, and configures it to use the adb binary specified by
+ the '--adb-path' flag (if provided by the user, otherwise this defaults to
+ devil's copy of adb). Although this is one possible way to initialize devil,
+ you should check if your project has prefered ways to initialize devil (ex.
+ the chromium project uses devil_chromium.Initialize() to have different
+ defaults for dependencies).
+
+ This method requires having previously called AddEnvironmentArguments() on the
+ relevant argparse.ArgumentParser.
+
+ Note: you should only initialize devil once, and subsequent calls to any
+ method wrapping devil_env.config.Initialize() will have no effect.
+
+ Args:
+ args: the parsed args returned by an argparse.ArgumentParser
+ """
devil_dynamic_config = devil_env.EmptyConfig()
if args.adb_path:
devil_dynamic_config['dependencies'].update(
@@ -28,7 +53,11 @@ def InitializeEnvironment(args):
def AddDeviceArguments(parser):
- """Adds device and blacklist arguments to the provided parser."""
+ """Adds device and blacklist arguments to the provided parser.
+
+ Args:
+ parser: an instance of argparse.ArgumentParser
+ """
parser.add_argument(
'-d', '--device', dest='devices', action='append',
help='Serial number of the Android device to use. (default: use all)')
diff --git a/systrace/catapult/devil/devil/android/tools/script_common_test.py b/systrace/catapult/devil/devil/android/tools/script_common_test.py
index 3ddb1c1..30f9aaf 100755
--- a/systrace/catapult/devil/devil/android/tools/script_common_test.py
+++ b/systrace/catapult/devil/devil/android/tools/script_common_test.py
@@ -18,6 +18,7 @@ with devil_env.SysPath(devil_env.PYMOCK_PATH):
import mock # pylint: disable=import-error
with devil_env.SysPath(devil_env.DEPENDENCY_MANAGER_PATH):
+ # pylint: disable=wrong-import-order
from dependency_manager import exceptions
@@ -90,4 +91,3 @@ class InitializeEnvironmentTest(unittest.TestCase):
if __name__ == '__main__':
sys.exit(unittest.main())
-
diff --git a/systrace/catapult/devil/devil/android/tools/system_app.py b/systrace/catapult/devil/devil/android/tools/system_app.py
index 00ea312..8629ae6 100755
--- a/systrace/catapult/devil/devil/android/tools/system_app.py
+++ b/systrace/catapult/devil/devil/android/tools/system_app.py
@@ -10,6 +10,7 @@ import contextlib
import logging
import os
import posixpath
+import re
import sys
@@ -31,6 +32,19 @@ from devil.utils import run_tests_helper
logger = logging.getLogger(__name__)
+# Some system apps aren't actually installed in the /system/ directory, so
+# special case them here with the correct install location.
+SPECIAL_SYSTEM_APP_LOCATIONS = {
+ # This also gets installed in /data/app when not a system app, so this script
+ # will remove either version. This doesn't appear to cause any issues, but
+ # will cause a few unnecessary reboots if this is the only package getting
+ # removed and it's already not a system app.
+ 'com.google.ar.core': '/data/app/',
+}
+
+# Gets app path and package name pm list packages -f output.
+_PM_LIST_PACKAGE_PATH_RE = re.compile(r'^\s*package:(\S+)=(\S+)\s*$')
+
def RemoveSystemApps(device, package_names):
"""Removes the given system apps.
@@ -46,7 +60,8 @@ def RemoveSystemApps(device, package_names):
@contextlib.contextmanager
-def ReplaceSystemApp(device, package_name, replacement_apk):
+def ReplaceSystemApp(device, package_name, replacement_apk,
+ install_timeout=None):
"""A context manager that replaces the given system app while in scope.
Args:
@@ -57,7 +72,7 @@ def ReplaceSystemApp(device, package_name, replacement_apk):
"""
storage_dir = device_temp_file.NamedDeviceTemporaryDirectory(device.adb)
relocate_app = _RelocateApp(device, package_name, storage_dir.name)
- install_app = _TemporarilyInstallApp(device, replacement_apk)
+ install_app = _TemporarilyInstallApp(device, replacement_apk, install_timeout)
with storage_dir, relocate_app, install_app:
yield
@@ -66,8 +81,36 @@ def _FindSystemPackagePaths(device, system_package_list):
"""Finds all system paths for the given packages."""
found_paths = []
for system_package in system_package_list:
- found_paths.extend(device.GetApplicationPaths(system_package))
- return [p for p in found_paths if p.startswith('/system/')]
+ paths = _GetApplicationPaths(device, system_package)
+ p = _GetSystemPath(system_package, paths)
+ if p:
+ found_paths.append(p)
+ return found_paths
+
+
+# Find all application paths, even those flagged as uninstalled, as these
+# would still block another package with the same name from installation
+# if they differ in signing keys.
+# TODO(aluo): Move this into device_utils.py
+def _GetApplicationPaths(device, package):
+ paths = []
+ lines = device.RunShellCommand(['pm', 'list', 'packages', '-f', '-u',
+ package], check_return=True)
+ for line in lines:
+ match = re.match(_PM_LIST_PACKAGE_PATH_RE, line)
+ if match:
+ path = match.group(1)
+ package_name = match.group(2)
+ if package_name == package:
+ paths.append(path)
+ return paths
+
+
+def _GetSystemPath(package, paths):
+ for p in paths:
+ if p.startswith(SPECIAL_SYSTEM_APP_LOCATIONS.get(package, '/system/')):
+ return p
+ return None
_ENABLE_MODIFICATION_PROP = 'devil.modify_sys_apps'
@@ -84,6 +127,12 @@ def EnableSystemAppModification(device):
yield
return
+ # All calls that could potentially need root should run with as_root=True, but
+ # it looks like some parts of Telemetry work as-is by implicitly assuming that
+ # root is already granted if it's necessary. The reboot can mess with this, so
+ # as a workaround, check whether we're starting with root already, and if so,
+ # restore the device to that state at the end.
+ should_restore_root = device.HasRoot()
device.EnableRoot()
if not device.HasRoot():
raise device_errors.CommandFailedError(
@@ -107,6 +156,8 @@ def EnableSystemAppModification(device):
device.SetProp(_ENABLE_MODIFICATION_PROP, '0')
device.Reboot()
device.WaitUntilFullyBooted()
+ if should_restore_root:
+ device.EnableRoot()
@contextlib.contextmanager
@@ -136,13 +187,17 @@ def _RelocateApp(device, package_name, relocate_to):
@contextlib.contextmanager
-def _TemporarilyInstallApp(device, apk):
+def _TemporarilyInstallApp(device, apk, install_timeout=None):
"""A context manager that installs an app while in scope."""
- device.adb.Install(apk, reinstall=True)
+ if install_timeout is None:
+ device.Install(apk, reinstall=True)
+ else:
+ device.Install(apk, reinstall=True, timeout=install_timeout)
+
try:
yield
finally:
- device.adb.Uninstall(apk_helper.GetPackageName(apk))
+ device.Uninstall(apk_helper.GetPackageName(apk))
def _MoveApp(device, relocation_map):
diff --git a/systrace/catapult/devil/devil/android/tools/system_app_devicetest.py b/systrace/catapult/devil/devil/android/tools/system_app_devicetest.py
index 0e8afdc..293bad1 100755
--- a/systrace/catapult/devil/devil/android/tools/system_app_devicetest.py
+++ b/systrace/catapult/devil/devil/android/tools/system_app_devicetest.py
@@ -39,7 +39,7 @@ class SystemAppDeviceTest(device_test_case.DeviceTestCase):
self._cached_apks = {}
for o in self._original_paths:
h = os.path.join(self._apk_cache_dir, posixpath.basename(o))
- self._device.PullFile(o, h)
+ self._device.PullFile(o, h, timeout=60)
self._cached_apks[h] = o
def tearDown(self):
diff --git a/systrace/catapult/devil/devil/android/tools/system_app_test.py b/systrace/catapult/devil/devil/android/tools/system_app_test.py
index f72aa16..44df7ea 100644
--- a/systrace/catapult/devil/devil/android/tools/system_app_test.py
+++ b/systrace/catapult/devil/devil/android/tools/system_app_test.py
@@ -21,6 +21,16 @@ with devil_env.SysPath(devil_env.PYMOCK_PATH):
import mock
+_PACKAGE_NAME = 'com.android'
+_PACKAGE_PATH = '/path/to/com.android.apk'
+_PM_LIST_PACKAGES_COMMAND = ['pm', 'list', 'packages', '-f', '-u',
+ _PACKAGE_NAME]
+_PM_LIST_PACKAGES_OUTPUT_WITH_PATH = ['package:/path/to/other=' + _PACKAGE_NAME
+ + '.other', 'package:' + _PACKAGE_PATH +
+ '=' + _PACKAGE_NAME]
+_PM_LIST_PACKAGES_OUTPUT_WITHOUT_PATH = ['package:/path/to/other=' +
+ _PACKAGE_NAME + '.other']
+
class SystemAppTest(unittest.TestCase):
def testDoubleEnableModification(self):
@@ -47,7 +57,7 @@ class SystemAppTest(unittest.TestCase):
mock_device.GetProp.side_effect = dict_getprop
with system_app.EnableSystemAppModification(mock_device):
- mock_device.EnableRoot.assert_called_once()
+ mock_device.EnableRoot.assert_called_once_with()
mock_device.GetProp.assert_called_once_with(
system_app._ENABLE_MODIFICATION_PROP)
mock_device.SetProp.assert_called_once_with(
@@ -55,15 +65,71 @@ class SystemAppTest(unittest.TestCase):
mock_device.reset_mock()
with system_app.EnableSystemAppModification(mock_device):
- mock_device.EnableRoot.assert_not_called()
+ self.assertFalse(mock_device.EnableRoot.mock_calls) # assert not called
mock_device.GetProp.assert_called_once_with(
system_app._ENABLE_MODIFICATION_PROP)
- mock_device.SetProp.assert_not_called()
+ self.assertFalse(mock_device.SetProp.mock_calls) # assert not called
mock_device.reset_mock()
mock_device.SetProp.assert_called_once_with(
system_app._ENABLE_MODIFICATION_PROP, '0')
+ def test_GetApplicationPaths_found(self):
+ """Path found in output along with another package having similar name."""
+ # pylint: disable=protected-access
+ mock_device = mock.Mock(spec=device_utils.DeviceUtils)
+ mock_device.RunShellCommand.configure_mock(
+ return_value=_PM_LIST_PACKAGES_OUTPUT_WITH_PATH
+ )
+
+ paths = system_app._GetApplicationPaths(mock_device, _PACKAGE_NAME)
+
+ self.assertEquals([_PACKAGE_PATH], paths)
+ mock_device.RunShellCommand.assert_called_once_with(
+ _PM_LIST_PACKAGES_COMMAND, check_return=True)
+
+ def test_GetApplicationPaths_notFound(self):
+ """Path not found in output, only another package with similar name."""
+ # pylint: disable=protected-access
+ mock_device = mock.Mock(spec=device_utils.DeviceUtils)
+ mock_device.RunShellCommand.configure_mock(
+ return_value=_PM_LIST_PACKAGES_OUTPUT_WITHOUT_PATH
+ )
+
+ paths = system_app._GetApplicationPaths(mock_device, _PACKAGE_NAME)
+
+ self.assertEquals([], paths)
+ mock_device.RunShellCommand.assert_called_once_with(
+ _PM_LIST_PACKAGES_COMMAND, check_return=True)
+
+ def test_GetApplicationPaths_noPaths(self):
+ """Nothing containing text of package name found in output."""
+ # pylint: disable=protected-access
+ mock_device = mock.Mock(spec=device_utils.DeviceUtils)
+ mock_device.RunShellCommand.configure_mock(
+ return_value=[]
+ )
+
+ paths = system_app._GetApplicationPaths(mock_device, _PACKAGE_NAME)
+
+ self.assertEquals([], paths)
+ mock_device.RunShellCommand.assert_called_once_with(
+ _PM_LIST_PACKAGES_COMMAND, check_return=True)
+
+ def test_GetApplicationPaths_emptyName(self):
+ """Called with empty name, should not return any packages."""
+ # pylint: disable=protected-access
+ mock_device = mock.Mock(spec=device_utils.DeviceUtils)
+ mock_device.RunShellCommand.configure_mock(
+ return_value=_PM_LIST_PACKAGES_OUTPUT_WITH_PATH
+ )
+
+ paths = system_app._GetApplicationPaths(mock_device, '')
+
+ self.assertEquals([], paths)
+ mock_device.RunShellCommand.assert_called_once_with(
+ _PM_LIST_PACKAGES_COMMAND[:-1] + [''], check_return=True)
+
if __name__ == '__main__':
unittest.main()
diff --git a/systrace/catapult/devil/devil/android/tools/unlock_bootloader.py b/systrace/catapult/devil/devil/android/tools/unlock_bootloader.py
index 46fec9d..b38f669 100644
--- a/systrace/catapult/devil/devil/android/tools/unlock_bootloader.py
+++ b/systrace/catapult/devil/devil/android/tools/unlock_bootloader.py
@@ -106,8 +106,10 @@ def unlock_bootloader(d):
logging.info('Device %s already unlocked.', d)
elif 'unlock is not allowed' in out:
logging.error("Device %s is oem locked. Can't unlock bootloader.", d)
+ return 1
else:
logging.error('Device %s in unknown state: "%s"', d, out)
+ return 1
break
if leftover_pids:
diff --git a/systrace/catapult/devil/devil/android/tools/webview_app.py b/systrace/catapult/devil/devil/android/tools/webview_app.py
new file mode 100755
index 0000000..36b7039
--- /dev/null
+++ b/systrace/catapult/devil/devil/android/tools/webview_app.py
@@ -0,0 +1,205 @@
+#!/usr/bin/env python
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""A script to use a package as the WebView provider while running a command."""
+
+import argparse
+import contextlib
+import logging
+import os
+import re
+import sys
+
+
+if __name__ == '__main__':
+ sys.path.append(
+ os.path.abspath(os.path.join(os.path.dirname(__file__),
+ '..', '..', '..')))
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),
+ '..', '..', '..', '..', 'common', 'py_utils')))
+
+
+from devil.android import apk_helper
+from devil.android import device_errors
+from devil.android.sdk import version_codes
+from devil.android.tools import script_common
+from devil.android.tools import system_app
+from devil.utils import cmd_helper
+from devil.utils import parallelizer
+from devil.utils import run_tests_helper
+from py_utils import tempfile_ext
+
+logger = logging.getLogger(__name__)
+
+_SYSTEM_PATH_RE = re.compile(r'^\s*\/system\/')
+_WEBVIEW_INSTALL_TIMEOUT = 300
+
+@contextlib.contextmanager
+def UseWebViewProvider(device, apk, expected_package=''):
+ """A context manager that uses the apk as the webview provider while in scope.
+
+ Args:
+ device: (device_utils.DeviceUtils) The device for which the webview apk
+ should be used as the provider.
+ apk: (str) The path to the webview APK to use.
+ expected_package: (str) If non-empty, verify apk's package name matches
+ this value.
+ """
+ package_name = apk_helper.GetPackageName(apk)
+
+ if expected_package:
+ if package_name != expected_package:
+ raise device_errors.CommandFailedError(
+ 'WebView Provider package %s does not match expected %s' %
+ (package_name, expected_package), str(device))
+
+ if (device.build_version_sdk in
+ [version_codes.NOUGAT, version_codes.NOUGAT_MR1]):
+ logger.warning('Due to webviewupdate bug in Nougat, WebView Fallback Logic '
+ 'will be disabled and WebView provider may be changed after '
+ 'exit of UseWebViewProvider context manager scope.')
+
+ webview_update = device.GetWebViewUpdateServiceDump()
+ original_fallback_logic = webview_update.get('FallbackLogicEnabled', None)
+ original_provider = webview_update.get('CurrentWebViewPackage', None)
+
+ # This is only necessary if the provider is a fallback provider, but we can't
+ # generally determine this, so we set this just in case.
+ device.SetWebViewFallbackLogic(False)
+
+ try:
+ # If user installed versions of the package is present, they must be
+ # uninstalled first, so that the system version of the package,
+ # if any, can be found by the ReplaceSystemApp context manager
+ with _UninstallNonSystemApp(device, package_name):
+ all_paths = device.GetApplicationPaths(package_name)
+ system_paths = _FilterPaths(all_paths, True)
+ non_system_paths = _FilterPaths(all_paths, False)
+ if non_system_paths:
+ raise device_errors.CommandFailedError(
+ 'Non-System application paths found after uninstallation: ',
+ str(non_system_paths))
+ elif system_paths:
+ # app is system app, use ReplaceSystemApp to install
+ with system_app.ReplaceSystemApp(
+ device,
+ package_name,
+ apk,
+ install_timeout=_WEBVIEW_INSTALL_TIMEOUT):
+ _SetWebViewProvider(device, package_name)
+ yield
+ else:
+ # app is not present on device, can directly install
+ with _InstallApp(device, apk):
+ _SetWebViewProvider(device, package_name)
+ yield
+ finally:
+ # restore the original provider only if it was known and not the current
+ # provider
+ if original_provider is not None:
+ webview_update = device.GetWebViewUpdateServiceDump()
+ new_provider = webview_update.get('CurrentWebViewPackage', None)
+ if new_provider != original_provider:
+ device.SetWebViewImplementation(original_provider)
+
+ # enable the fallback logic only if it was known to be enabled
+ if original_fallback_logic is True:
+ device.SetWebViewFallbackLogic(True)
+
+
+def _SetWebViewProvider(device, package_name):
+ """ Set the WebView provider to the package_name if supported. """
+ if device.build_version_sdk >= version_codes.NOUGAT:
+ device.SetWebViewImplementation(package_name)
+
+
+def _FilterPaths(path_list, is_system):
+ """ Return paths in the path_list that are/aren't system paths. """
+ return [
+ p for p in path_list if is_system == bool(re.match(_SYSTEM_PATH_RE, p))
+ ]
+
+
+def _RebasePath(new_root, old_root):
+ """ Graft old_root onto new_root and return the result. """
+ return os.path.join(new_root, os.path.relpath(old_root, '/'))
+
+
+@contextlib.contextmanager
+def _UninstallNonSystemApp(device, package_name):
+ """ Make package un-installed while in scope. """
+ all_paths = device.GetApplicationPaths(package_name)
+ user_paths = _FilterPaths(all_paths, False)
+ host_paths = []
+ if user_paths:
+ with tempfile_ext.NamedTemporaryDirectory() as temp_dir:
+ for user_path in user_paths:
+ host_path = _RebasePath(temp_dir, user_path)
+ # PullFile takes care of host_path creation if needed.
+ device.PullFile(user_path, host_path)
+ host_paths.append(host_path)
+ device.Uninstall(package_name)
+ try:
+ yield
+ finally:
+ for host_path in reversed(host_paths):
+ device.Install(host_path, reinstall=True,
+ timeout=_WEBVIEW_INSTALL_TIMEOUT)
+ else:
+ yield
+
+
+@contextlib.contextmanager
+def _InstallApp(device, apk):
+ """ Make apk installed while in scope. """
+ package_name = apk_helper.GetPackageName(apk)
+ device.Install(apk, reinstall=True, timeout=_WEBVIEW_INSTALL_TIMEOUT)
+ try:
+ yield
+ finally:
+ device.Uninstall(package_name)
+
+
+def main(raw_args):
+ parser = argparse.ArgumentParser()
+
+ def add_common_arguments(p):
+ script_common.AddDeviceArguments(p)
+ script_common.AddEnvironmentArguments(p)
+ p.add_argument(
+ '-v', '--verbose', action='count', default=0,
+ help='Print more information.')
+ p.add_argument('command', nargs='*')
+
+ @contextlib.contextmanager
+ def use_webview_provider(device, args):
+ with UseWebViewProvider(device, args.apk, args.expected_package):
+ yield
+
+ parser.add_argument(
+ '--apk', required=True,
+ help='The apk to use as the provider.')
+ parser.add_argument(
+ '--expected-package', default='',
+ help="Verify apk's package name matches value, disabled by default.")
+ add_common_arguments(parser)
+ parser.set_defaults(func=use_webview_provider)
+
+ args = parser.parse_args(raw_args)
+
+ run_tests_helper.SetLogLevel(args.verbose)
+ script_common.InitializeEnvironment(args)
+
+ devices = script_common.GetDevices(args.devices, args.blacklist_file)
+ parallel_devices = parallelizer.SyncParallelizer(
+ [args.func(d, args) for d in devices])
+ with parallel_devices:
+ if args.command:
+ return cmd_helper.Call(args.command)
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))
diff --git a/systrace/catapult/devil/devil/devil_dependencies.json b/systrace/catapult/devil/devil/devil_dependencies.json
index 6884a36..8b39788 100644
--- a/systrace/catapult/devil/devil/devil_dependencies.json
+++ b/systrace/catapult/devil/devil/devil_dependencies.json
@@ -6,7 +6,7 @@
"cloud_storage_bucket": "chromium-telemetry",
"file_info": {
"linux2_x86_64": {
- "cloud_storage_hash": "16ba3180141a2489d7ec99b39fd6e3434a9a373f",
+ "cloud_storage_hash": "87bd288daab30624e41faa62aa2c1d5bac3e60aa",
"download_path": "../bin/deps/linux2/x86_64/bin/aapt"
}
}
@@ -26,8 +26,8 @@
"cloud_storage_bucket": "chromium-telemetry",
"file_info": {
"linux2_x86_64": {
- "cloud_storage_hash": "91cdce1e3bd81b2ac1fd380013896d0e2cdb40a0",
- "download_path": "../bin/deps/linux2/x86_64/lib/libc++.so"
+ "cloud_storage_hash": "9b986774ad27288a6777ebfa9a08fd8a52003008",
+ "download_path": "../bin/deps/linux2/x86_64/lib64/libc++.so"
}
}
},
@@ -46,7 +46,7 @@
"cloud_storage_bucket": "chromium-telemetry",
"file_info": {
"linux2_x86_64": {
- "cloud_storage_hash": "acfb10f7a868baf9bcf446a2d9f8ed6b5d52c3c6",
+ "cloud_storage_hash": "c3fdf75afe8eb4062d66703cb556ee1e2064b8ae",
"download_path": "../bin/deps/linux2/x86_64/bin/dexdump"
}
}
@@ -55,6 +55,10 @@
"cloud_storage_base_folder": "binary_dependencies",
"cloud_storage_bucket": "chromium-telemetry",
"file_info": {
+ "android_arm64-v8a": {
+ "cloud_storage_hash": "34e583c631a495afbba82ce8a1d4f9b5118a4411",
+ "download_path": "../bin/deps/android/arm64-v8a/apks/EmptySystemWebView.apk"
+ },
"android_armeabi-v7a": {
"cloud_storage_hash": "220ff3ba1a6c3c81877997e32784ffd008f293a5",
"download_path": "../bin/deps/android/armeabi-v7a/apks/EmptySystemWebView.apk"
@@ -128,10 +132,10 @@
"cloud_storage_bucket": "chromium-telemetry",
"file_info": {
"linux2_x86_64": {
- "cloud_storage_hash": "abb9753a8d3efeea4144e328933931729e01571c",
+ "cloud_storage_hash": "c116fd0d7ff089561971c078317b75b90f053207",
"download_path": "../bin/deps/linux2/x86_64/bin/split-select"
}
}
}
}
-} \ No newline at end of file
+}
diff --git a/systrace/catapult/devil/devil/utils/__init__.py b/systrace/catapult/devil/devil/utils/__init__.py
index ff84988..e69de29 100644
--- a/systrace/catapult/devil/devil/utils/__init__.py
+++ b/systrace/catapult/devil/devil/utils/__init__.py
@@ -1,23 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-def _JoinPath(*path_parts):
- return os.path.abspath(os.path.join(*path_parts))
-
-
-def _AddDirToPythonPath(*path_parts):
- path = _JoinPath(*path_parts)
- if os.path.isdir(path) and path not in sys.path:
- # Some call sites that use Telemetry assume that sys.path[0] is the
- # directory containing the script, so we add these extra paths to right
- # after sys.path[0].
- sys.path.insert(1, path)
-
-_CATAPULT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)),
- os.path.pardir, os.path.pardir, os.path.pardir)
-
-_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'battor')
diff --git a/systrace/catapult/devil/devil/utils/battor_device_mapping.py b/systrace/catapult/devil/devil/utils/battor_device_mapping.py
deleted file mode 100755
index 8cabb83..0000000
--- a/systrace/catapult/devil/devil/utils/battor_device_mapping.py
+++ /dev/null
@@ -1,309 +0,0 @@
-#!/usr/bin/python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-'''
-This script provides tools to map BattOrs to phones.
-
-Phones are identified by the following string:
-
-"Phone serial number" - Serial number of the phone. This can be
-obtained via 'adb devices' or 'usb-devices', and is not expected
-to change for a given phone.
-
-BattOrs are identified by the following two strings:
-
-"BattOr serial number" - Serial number of the BattOr. This can be
-obtained via 'usb-devices', and is not expected to change for
-a given BattOr.
-
-"BattOr path" - The path of the form '/dev/ttyUSB*' that is used
-to communicate with the BattOr (the battor_agent binary takes
-this BattOr path as a parameter). The BattOr path is frequently
-reassigned by the OS, most often when the device is disconnected
-and then reconnected. Thus, the BattOr path cannot be expected
-to be stable.
-
-In a typical application, the user will require the BattOr path
-for the BattOr that is plugged into a given phone. For instance,
-the user will be running tracing on a particular phone, and will
-need to know which BattOr path to use to communicate with the BattOr
-to get the corresponding power trace.
-
-Getting this mapping requires two steps: (1) determining the
-mapping between phone serial numbers and BattOr serial numbers, and
-(2) getting the BattOr path corresponding to a given BattOr serial
-number.
-
-For step (1), we generate a JSON file giving this mapping. This
-JSON file consists of a list of items of the following form:
-[{'phone': <phone serial 1>, 'battor': <battor serial 1>},
-{'phone': <phone serial 2>, 'battor': <battor serial 2>}, ...]
-
-The default way to generate this JSON file is using the function
-GenerateSerialMapFile, which generates a mapping based on assuming
-that the system has two identical USB hubs connected to it, and
-the phone plugged into physical port number 1 on one hub corresponds
-to the BattOr plugged into physical port number 1 on the other hub,
-and similarly with physical port numbers 2, 3, etc. This generates
-the map file based on the structure at the time GenerateSerialMapFile called.
-Note that after the map file is generated, port numbers are no longer used;
-the user could move around the devices in the ports without affecting
-which phone goes with which BattOr. (Thus, if the user wanted to update the
-mapping to match the new port connections, the user would have to
-re-generate this file.)
-
-The script update_mapping.py will do this updating from the command line.
-
-If the user wanted to specify a custom mapping, the user could instead
-create the JSON file manually. (In this case, hubs would not be necessary
-and the physical ports connected would be irrelevant.)
-
-Step (2) is conducted through the function GetBattOrPathFromPhoneSerial,
-which takes a serial number mapping generated via step (1) and a phone
-serial number, then gets the corresponding BattOr serial number from the
-map and determines its BattOr path (e.g. /dev/ttyUSB0). Since BattOr paths
-can change if devices are connected and disconnected (even if connected
-or disconnected via the same port) this function should be called to
-determine the BattOr path every time before connecting to the BattOr.
-
-Note that if there is only one BattOr connected to the system, then
-GetBattOrPathFromPhoneSerial will always return that BattOr and will ignore
-the mapping file. Thus, if the user never has more than one BattOr connected
-to the system, the user will not need to generate mapping files.
-'''
-
-
-import json
-import collections
-
-from battor import battor_error
-from devil.utils import find_usb_devices
-from devil.utils import usb_hubs
-
-
-def GetBattOrList(device_tree_map):
- return [x for x in find_usb_devices.GetTTYList()
- if IsBattOr(x, device_tree_map)]
-
-
-def IsBattOr(tty_string, device_tree_map):
- (bus, device) = find_usb_devices.GetBusDeviceFromTTY(tty_string)
- node = device_tree_map[bus].FindDeviceNumber(device)
- return '0403:6001' in node.desc
-
-
-def GetBattOrSerialNumbers(device_tree_map):
- for x in find_usb_devices.GetTTYList():
- if IsBattOr(x, device_tree_map):
- (bus, device) = find_usb_devices.GetBusDeviceFromTTY(x)
- devnode = device_tree_map[bus].FindDeviceNumber(device)
- yield devnode.serial
-
-
-def ReadSerialMapFile(filename):
- """Reads JSON file giving phone-to-battor serial number map.
-
- Parses a JSON file consisting of a list of items of the following form:
- [{'phone': <phone serial 1>, 'battor': <battor serial 1>},
- {'phone': <phone serial 2>, 'battor': <battor serial 2>}, ...]
-
- indicating which phone serial numbers should be matched with
- which BattOr serial numbers. Returns dictionary of the form:
-
- {<phone serial 1>: <BattOr serial 1>,
- <phone serial 2>: <BattOr serial 2>}
-
- Args:
- filename: Name of file to read.
- """
- result = {}
- with open(filename, 'r') as infile:
- in_dict = json.load(infile)
- for x in in_dict:
- result[x['phone']] = x['battor']
- return result
-
-def WriteSerialMapFile(filename, serial_map):
- """Writes a map of phone serial numbers to BattOr serial numbers to file.
-
- Writes a JSON file consisting of a list of items of the following form:
- [{'phone': <phone serial 1>, 'battor': <battor serial 1>},
- {'phone': <phone serial 2>, 'battor': <battor serial 2>}, ...]
-
- indicating which phone serial numbers should be matched with
- which BattOr serial numbers. Mapping is based on the physical port numbers
- of the hubs that the BattOrs and phones are connected to.
-
- Args:
- filename: Name of file to write.
- serial_map: Serial map {phone: battor}
- """
- result = []
- for (phone, battor) in serial_map.iteritems():
- result.append({'phone': phone, 'battor': battor})
- with open(filename, 'w') as outfile:
- json.dump(result, outfile)
-
-def GenerateSerialMap(hub_types=None):
- """Generates a map of phone serial numbers to BattOr serial numbers.
-
- Generates a dict of:
- {<phone serial 1>: <battor serial 1>,
- <phone serial 2>: <battor serial 2>}
- indicating which phone serial numbers should be matched with
- which BattOr serial numbers. Mapping is based on the physical port numbers
- of the hubs that the BattOrs and phones are connected to.
-
- Args:
- hub_types: List of hub types to check for. If not specified, checks
- for all defined hub types. (see usb_hubs.py for details)
- """
- if hub_types:
- hub_types = [usb_hubs.GetHubType(x) for x in hub_types]
- else:
- hub_types = usb_hubs.ALL_HUBS
-
- devtree = find_usb_devices.GetBusNumberToDeviceTreeMap()
-
- # List of serial numbers in the system that represent BattOrs.
- battor_serials = list(GetBattOrSerialNumbers(devtree))
-
- # If there's only one BattOr in the system, then a serial number ma
- # is not necessary.
- if len(battor_serials) == 1:
- return {}
-
- # List of dictionaries, one for each hub, that maps the physical
- # port number to the serial number of that hub. For instance, in a 2
- # hub system, this could return [{1:'ab', 2:'cd'}, {1:'jkl', 2:'xyz'}]
- # where 'ab' and 'cd' are the phone serial numbers and 'jkl' and 'xyz'
- # are the BattOr serial numbers.
- port_to_serial = find_usb_devices.GetAllPhysicalPortToSerialMaps(
- hub_types, device_tree_map=devtree)
-
- class serials(object):
- def __init__(self):
- self.phone = None
- self.battor = None
-
- # Map of {physical port number: [phone serial #, BattOr serial #]. This
- # map is populated by executing the code below. For instance, in the above
- # example, after the code below is executed, port_to_devices would equal
- # {1: ['ab', 'jkl'], 2: ['cd', 'xyz']}
- port_to_devices = collections.defaultdict(serials)
- for hub in port_to_serial:
- for (port, serial) in hub.iteritems():
- if serial in battor_serials:
- if port_to_devices[port].battor is not None:
- raise battor_error.BattOrError('Multiple BattOrs on same port number')
- else:
- port_to_devices[port].battor = serial
- else:
- if port_to_devices[port].phone is not None:
- raise battor_error.BattOrError('Multiple phones on same port number')
- else:
- port_to_devices[port].phone = serial
-
- # Turn the port_to_devices map into a map of the form
- # {phone serial number: BattOr serial number}.
- result = {}
- for pair in port_to_devices.values():
- if pair.phone is None:
- continue
- if pair.battor is None:
- raise battor_error.BattOrError(
- 'Phone detected with no corresponding BattOr')
- result[pair.phone] = pair.battor
- return result
-
-def GenerateSerialMapFile(filename, hub_types=None):
- """Generates a serial map file and writes it."""
- WriteSerialMapFile(filename, GenerateSerialMap(hub_types))
-
-def _PhoneToPathMap(serial, serial_map, devtree):
- """Maps phone serial number to TTY path, assuming serial map is provided."""
- try:
- battor_serial = serial_map[serial]
- except KeyError:
- raise battor_error.BattOrError('Serial number not found in serial map.')
- for tree in devtree.values():
- for node in tree.AllNodes():
- if isinstance(node, find_usb_devices.USBDeviceNode):
- if node.serial == battor_serial:
- bus_device_to_tty = find_usb_devices.GetBusDeviceToTTYMap()
- bus_device = (node.bus_num, node.device_num)
- try:
- return bus_device_to_tty[bus_device]
- except KeyError:
- raise battor_error.BattOrError(
- 'Device with given serial number not a BattOr '
- '(does not have TTY path)')
-
-
-def GetBattOrPathFromPhoneSerial(serial, serial_map=None,
- serial_map_file=None):
- """Gets the TTY path (e.g. '/dev/ttyUSB0') to communicate with the BattOr.
-
- (1) If serial_map is given, it is treated as a dictionary mapping
- phone serial numbers to BattOr serial numbers. This function will get the
- TTY path for the given BattOr serial number.
-
- (2) If serial_map_file is given, it is treated as the name of a
- phone-to-BattOr mapping file (generated with GenerateSerialMapFile)
- and this will be loaded and used as the dict to map port numbers to
- BattOr serial numbers.
-
- You can only give one of serial_map and serial_map_file.
-
- Args:
- serial: Serial number of phone connected on the same physical port that
- the BattOr is connected to.
- serial_map: Map of phone serial numbers to BattOr serial numbers, given
- as a dictionary.
- serial_map_file: Map of phone serial numbers to BattOr serial numbers,
- given as a file.
- hub_types: List of hub types to check for. Used only if serial_map_file
- is None.
-
- Returns:
- Device string used to communicate with device.
-
- Raises:
- ValueError: If serial number is not given.
- BattOrError: If BattOr not found or unexpected USB topology.
- """
- # If there's only one BattOr connected to the system, just use that one.
- # This allows for use on, e.g., a developer's workstation with no hubs.
- devtree = find_usb_devices.GetBusNumberToDeviceTreeMap()
- all_battors = GetBattOrList(devtree)
- if len(all_battors) == 1:
- return '/dev/' + all_battors[0]
-
- if not serial:
- raise battor_error.BattOrError(
- 'Two or more BattOrs connected, no serial provided')
-
- if serial_map and serial_map_file:
- raise ValueError('Cannot specify both serial_map and serial_map_file')
-
- if serial_map_file:
- serial_map = ReadSerialMapFile(serial_map_file)
-
- tty_string = _PhoneToPathMap(serial, serial_map, devtree)
-
- if not tty_string:
- raise battor_error.BattOrError(
- 'No device with given serial number detected.')
-
- if IsBattOr(tty_string, devtree):
- return '/dev/' + tty_string
- else:
- raise battor_error.BattOrError(
- 'Device with given serial number is not a BattOr.')
-
-if __name__ == '__main__':
- # Main function for testing purposes
- print GenerateSerialMap()
diff --git a/systrace/catapult/devil/devil/utils/cmd_helper.py b/systrace/catapult/devil/devil/utils/cmd_helper.py
index b477c70..3c4a06e 100644
--- a/systrace/catapult/devil/devil/utils/cmd_helper.py
+++ b/systrace/catapult/devil/devil/utils/cmd_helper.py
@@ -4,6 +4,7 @@
"""A wrapper for subprocess to make calling shell commands easier."""
+import codecs
import logging
import os
import pipes
@@ -15,11 +16,16 @@ import subprocess
import sys
import time
+from devil import base_error
logger = logging.getLogger(__name__)
_SafeShellChars = frozenset(string.ascii_letters + string.digits + '@%_-+=:,./')
+# Cache the string-escape codec to ensure subprocess can find it
+# later. Return value doesn't matter.
+codecs.lookup('string-escape')
+
def SingleQuote(s):
"""Return an shell-escaped version of the string using single quotes.
@@ -152,12 +158,12 @@ def _ValidateAndLogCommand(args, cwd, shell):
else:
if shell:
raise Exception('array args must be run with shell=False')
- args = ' '.join(SingleQuote(c) for c in args)
+ args = ' '.join(SingleQuote(str(c)) for c in args)
if cwd is None:
cwd = ''
else:
cwd = ':' + cwd
- logger.info('[host]%s> %s', cwd, args)
+ logger.debug('[host]%s> %s', cwd, args)
return args
@@ -187,6 +193,27 @@ def GetCmdStatusAndOutput(args, cwd=None, shell=False, env=None):
return (status, stdout)
+def StartCmd(args, cwd=None, shell=False, env=None):
+ """Starts a subprocess and returns a handle to the process.
+
+ Args:
+ args: A string or a sequence of program arguments. The program to execute is
+ the string or the first item in the args sequence.
+ cwd: If not None, the subprocess's current directory will be changed to
+ |cwd| before it's executed.
+ shell: Whether to execute args as a shell command. Must be True if args
+ is a string and False if args is a sequence.
+ env: If not None, a mapping that defines environment variables for the
+ subprocess.
+
+ Returns:
+ A process handle from subprocess.Popen.
+ """
+ _ValidateAndLogCommand(args, cwd, shell)
+ return Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+ shell=shell, cwd=cwd, env=env)
+
+
def GetCmdStatusOutputAndError(args, cwd=None, shell=False, env=None):
"""Executes a subprocess and returns its exit code, output, and errors.
@@ -210,11 +237,11 @@ def GetCmdStatusOutputAndError(args, cwd=None, shell=False, env=None):
return (pipe.returncode, stdout, stderr)
-class TimeoutError(Exception):
+class TimeoutError(base_error.BaseError):
"""Module-specific timeout exception."""
def __init__(self, output=None):
- super(TimeoutError, self).__init__()
+ super(TimeoutError, self).__init__('Timeout')
self._output = output
@property
@@ -226,6 +253,7 @@ def _IterProcessStdoutFcntl(
process, iter_timeout=None, timeout=None, buffer_size=4096,
poll_interval=1):
"""An fcntl-based implementation of _IterProcessStdout."""
+ # pylint: disable=too-many-nested-blocks
import fcntl
try:
# Enable non-blocking reads from the child's stdout.
diff --git a/systrace/catapult/devil/devil/utils/find_usb_devices.py b/systrace/catapult/devil/devil/utils/find_usb_devices.py
index 74b888d..b6dcc70 100755
--- a/systrace/catapult/devil/devil/utils/find_usb_devices.py
+++ b/systrace/catapult/devil/devil/utils/find_usb_devices.py
@@ -452,9 +452,9 @@ def GetBusDeviceFromTTY(tty_string):
for line in _GetTtyUSBInfo(tty_string).splitlines():
bus_match = _BUS_NUM_REGEX.match(line)
device_match = _DEVICE_NUM_REGEX.match(line)
- if bus_match and bus_num == None:
+ if bus_match and bus_num is None:
bus_num = int(bus_match.group(1))
- if device_match and device_num == None:
+ if device_match and device_num is None:
device_num = int(device_match.group(1))
if bus_num is None or device_num is None:
raise ValueError('Info not found')
diff --git a/systrace/catapult/devil/devil/utils/find_usb_devices_test.py b/systrace/catapult/devil/devil/utils/find_usb_devices_test.py
index e8b00c8..c22f21b 100755
--- a/systrace/catapult/devil/devil/utils/find_usb_devices_test.py
+++ b/systrace/catapult/devil/devil/utils/find_usb_devices_test.py
@@ -17,23 +17,21 @@ Bus 001:
Bus 002:
1: Device 011 "quux"
2: Device 020 "My Test HUB" #hub 1
-2:1: Device 021 "battor_p7_h1_t0" #physical port 7 on hub 1, on ttyUSB0
-2:3: Device 022 "battor_p5_h1_t1" #physical port 5 on hub 1, on ttyUSB1
+2:1: Device 021 "usb_device_p7_h1_t0" #physical port 7 on hub 1, on ttyUSB0
+2:3: Device 022 "usb_device_p5_h1_t1" #physical port 5 on hub 1, on ttyUSB1
2:4: Device 023 "My Test Internal HUB" #internal section of hub 1
-2:4:2: Device 024 "battor_p3_h1_t2" #physical port 3 on hub 1, on ttyUSB2
+2:4:2: Device 024 "usb_device_p3_h1_t2" #physical port 3 on hub 1, on ttyUSB2
2:4:3: Device 026 "Not a Battery Monitor" #physical port 1 on hub 1, on ttyUSB3
-2:4:4: Device 025 "battor_p1_h1_t3" #physical port 1 on hub 1, on ttyUSB3
+2:4:4: Device 025 "usb_device_p1_h1_t3" #physical port 1 on hub 1, on ttyUSB3
3: Device 100 "My Test HUB" #hub 2
3:4: Device 101 "My Test Internal HUB" #internal section of hub 2
-3:4:4: Device 102 "battor_p1_h2_t4" #physical port 1 on hub 2, on ttyusb4
+3:4:4: Device 102 "usb_device_p1_h2_t4" #physical port 1 on hub 2, on ttyusb4
"""
import logging
-import os
import unittest
from devil import devil_env
-from devil.utils import battor_device_mapping
from devil.utils import find_usb_devices
from devil.utils import lsusb
from devil.utils import usb_hubs
@@ -51,15 +49,15 @@ DEVLIST = [(1, 11, 'foo'),
(1, 13, 'baz'),
(2, 11, 'quux'),
(2, 20, 'My Test HUB'),
- (2, 21, 'ID 0403:6001 battor_p7_h1_t0'),
- (2, 22, 'ID 0403:6001 battor_p5_h1_t1'),
+ (2, 21, 'ID 0403:6001 usb_device_p7_h1_t0'),
+ (2, 22, 'ID 0403:6001 usb_device_p5_h1_t1'),
(2, 23, 'My Test Internal HUB'),
- (2, 24, 'ID 0403:6001 battor_p3_h1_t2'),
- (2, 25, 'ID 0403:6001 battor_p1_h1_t3'),
+ (2, 24, 'ID 0403:6001 usb_device_p3_h1_t2'),
+ (2, 25, 'ID 0403:6001 usb_device_p1_h1_t3'),
(2, 26, 'Not a Battery Monitor'),
(2, 100, 'My Test HUB'),
(2, 101, 'My Test Internal HUB'),
- (2, 102, 'ID 0403:6001 battor_p1_h1_t4')]
+ (2, 102, 'ID 0403:6001 usb_device_p1_h1_t4')]
LSUSB_OUTPUT = [
{'bus': b, 'device': d, 'desc': t, 'id': (1000*b)+d}
@@ -82,14 +80,14 @@ T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 11 Spd=000 MxCh=00
T: Bus=02 Lev=00 Prnt=00 Port=01 Cnt=00 Dev#= 20 Spd=000 MxCh=00
T: Bus=02 Lev=00 Prnt=20 Port=00 Cnt=00 Dev#= 21 Spd=000 MxCh=00
-S: SerialNumber=BattOr0
+S: SerialNumber=UsbDevice0
T: Bus=02 Lev=00 Prnt=20 Port=02 Cnt=00 Dev#= 22 Spd=000 MxCh=00
-S: SerialNumber=BattOr1
+S: SerialNumber=UsbDevice1
T: Bus=02 Lev=00 Prnt=20 Port=03 Cnt=00 Dev#= 23 Spd=000 MxCh=00
T: Bus=02 Lev=00 Prnt=23 Port=01 Cnt=00 Dev#= 24 Spd=000 MxCh=00
-S: SerialNumber=BattOr2
+S: SerialNumber=UsbDevice2
T: Bus=02 Lev=00 Prnt=23 Port=03 Cnt=00 Dev#= 25 Spd=000 MxCh=00
-S: SerialNumber=BattOr3
+S: SerialNumber=UsbDevice3
T: Bus=02 Lev=00 Prnt=23 Port=02 Cnt=00 Dev#= 26 Spd=000 MxCh=00
T: Bus=02 Lev=00 Prnt=00 Port=02 Cnt=00 Dev#=100 Spd=000 MxCh=00
@@ -103,15 +101,15 @@ Bus 001 Device 012: FAST bar
Bus 001 Device 013: baz
Bus 002 Device 011: quux
Bus 002 Device 020: My Test HUB
-Bus 002 Device 021: ID 0403:6001 battor_p7_h1_t0
-Bus 002 Device 022: ID 0403:6001 battor_p5_h1_t1
+Bus 002 Device 021: ID 0403:6001 usb_device_p7_h1_t0
+Bus 002 Device 022: ID 0403:6001 usb_device_p5_h1_t1
Bus 002 Device 023: My Test Internal HUB
-Bus 002 Device 024: ID 0403:6001 battor_p3_h1_t2
-Bus 002 Device 025: ID 0403:6001 battor_p1_h1_t3
+Bus 002 Device 024: ID 0403:6001 usb_device_p3_h1_t2
+Bus 002 Device 025: ID 0403:6001 usb_device_p1_h1_t3
Bus 002 Device 026: Not a Battery Monitor
Bus 002 Device 100: My Test HUB
Bus 002 Device 101: My Test Internal HUB
-Bus 002 Device 102: ID 0403:6001 battor_p1_h1_t4
+Bus 002 Device 102: ID 0403:6001 usb_device_p1_h1_t4
'''
LIST_TTY_OUTPUT = '''
@@ -213,17 +211,6 @@ class USBScriptTest(unittest.TestCase):
lsusb.raw_lsusb = mock.Mock(
return_value=RAW_LSUSB_OUTPUT)
- def testIsBattOr(self):
- bd = find_usb_devices.GetBusNumberToDeviceTreeMap()
- self.assertTrue(battor_device_mapping.IsBattOr('ttyUSB3', bd))
- self.assertFalse(battor_device_mapping.IsBattOr('ttyUSB5', bd))
-
- def testGetBattOrs(self):
- bd = find_usb_devices.GetBusNumberToDeviceTreeMap()
- self.assertEquals(battor_device_mapping.GetBattOrList(bd),
- ['ttyUSB0', 'ttyUSB1', 'ttyUSB2',
- 'ttyUSB3', 'ttyUSB4'])
-
def testGetTTYDevices(self):
pp = find_usb_devices.GetAllPhysicalPortToTTYMaps([TEST_HUB])
result = list(pp)
@@ -247,131 +234,49 @@ class USBScriptTest(unittest.TestCase):
def testGetSerialMapping(self):
pp = find_usb_devices.GetAllPhysicalPortToSerialMaps([TEST_HUB])
result = list(pp)
- self.assertEquals(result[0], {7:'BattOr0',
- 5:'BattOr1',
- 3:'BattOr2',
- 1:'BattOr3'})
+ self.assertEquals(result[0], {7:'UsbDevice0',
+ 5:'UsbDevice1',
+ 3:'UsbDevice2',
+ 1:'UsbDevice3'})
self.assertEquals(result[1], {})
def testFastDeviceDescriptions(self):
bd = find_usb_devices.GetBusNumberToDeviceTreeMap()
dev_foo = bd[1].FindDeviceNumber(11)
dev_bar = bd[1].FindDeviceNumber(12)
- dev_battor_p7_h1_t0 = bd[2].FindDeviceNumber(21)
+ dev_usb_device_p7_h1_t0 = bd[2].FindDeviceNumber(21)
self.assertEquals(dev_foo.desc, 'FAST foo')
self.assertEquals(dev_bar.desc, 'FAST bar')
- self.assertEquals(dev_battor_p7_h1_t0.desc,
- 'ID 0403:6001 battor_p7_h1_t0')
+ self.assertEquals(dev_usb_device_p7_h1_t0.desc,
+ 'ID 0403:6001 usb_device_p7_h1_t0')
def testDeviceDescriptions(self):
bd = find_usb_devices.GetBusNumberToDeviceTreeMap(fast=False)
dev_foo = bd[1].FindDeviceNumber(11)
dev_bar = bd[1].FindDeviceNumber(12)
- dev_battor_p7_h1_t0 = bd[2].FindDeviceNumber(21)
+ dev_usb_device_p7_h1_t0 = bd[2].FindDeviceNumber(21)
self.assertEquals(dev_foo.desc, 'foo')
self.assertEquals(dev_bar.desc, 'bar')
- self.assertEquals(dev_battor_p7_h1_t0.desc,
- 'ID 0403:6001 battor_p7_h1_t0')
+ self.assertEquals(dev_usb_device_p7_h1_t0.desc,
+ 'ID 0403:6001 usb_device_p7_h1_t0')
def testDeviceInformation(self):
bd = find_usb_devices.GetBusNumberToDeviceTreeMap(fast=False)
dev_foo = bd[1].FindDeviceNumber(11)
dev_bar = bd[1].FindDeviceNumber(12)
- dev_battor_p7_h1_t0 = bd[2].FindDeviceNumber(21)
+ dev_usb_device_p7_h1_t0 = bd[2].FindDeviceNumber(21)
self.assertEquals(dev_foo.info['id'], 1011)
self.assertEquals(dev_bar.info['id'], 1012)
- self.assertEquals(dev_battor_p7_h1_t0.info['id'], 2021)
+ self.assertEquals(dev_usb_device_p7_h1_t0.info['id'], 2021)
def testSerialNumber(self):
bd = find_usb_devices.GetBusNumberToDeviceTreeMap(fast=False)
dev_foo = bd[1].FindDeviceNumber(11)
dev_bar = bd[1].FindDeviceNumber(12)
- dev_battor_p7_h1_t0 = bd[2].FindDeviceNumber(21)
+ dev_usb_device_p7_h1_t0 = bd[2].FindDeviceNumber(21)
self.assertEquals(dev_foo.serial, 'FooSerial')
self.assertEquals(dev_bar.serial, 'BarSerial')
- self.assertEquals(dev_battor_p7_h1_t0.serial, 'BattOr0')
-
- def testBattOrDictMapping(self):
- map_dict = {'Phone1':'BattOr1', 'Phone2':'BattOr2', 'Phone3':'BattOr3'}
- a1 = battor_device_mapping.GetBattOrPathFromPhoneSerial(
- 'Phone1', serial_map=map_dict)
- a2 = battor_device_mapping.GetBattOrPathFromPhoneSerial(
- 'Phone2', serial_map=map_dict)
- a3 = battor_device_mapping.GetBattOrPathFromPhoneSerial(
- 'Phone3', serial_map=map_dict)
- self.assertEquals(a1, '/dev/ttyUSB1')
- self.assertEquals(a2, '/dev/ttyUSB2')
- self.assertEquals(a3, '/dev/ttyUSB3')
-
- def testBattOrDictFromFileMapping(self):
- try:
- map_dict = {'Phone1':'BattOr1', 'Phone2':'BattOr2', 'Phone3':'BattOr3'}
- curr_dir = os.path.dirname(os.path.realpath(__file__))
- filename = os.path.join(curr_dir, 'test', 'data', 'test_write_map.json')
- battor_device_mapping.WriteSerialMapFile(filename, map_dict)
- a1 = battor_device_mapping.GetBattOrPathFromPhoneSerial(
- 'Phone1', serial_map_file=filename)
- a2 = battor_device_mapping.GetBattOrPathFromPhoneSerial(
- 'Phone2', serial_map_file=filename)
- a3 = battor_device_mapping.GetBattOrPathFromPhoneSerial(
- 'Phone3', serial_map_file=filename)
- finally:
- os.remove(filename)
- self.assertEquals(a1, '/dev/ttyUSB1')
- self.assertEquals(a2, '/dev/ttyUSB2')
- self.assertEquals(a3, '/dev/ttyUSB3')
-
- def testReadSerialMapFile(self):
- curr_dir = os.path.dirname(os.path.realpath(__file__))
- map_dict = battor_device_mapping.ReadSerialMapFile(
- os.path.join(curr_dir, 'test', 'data', 'test_serial_map.json'))
- self.assertEquals(len(map_dict.keys()), 3)
- self.assertEquals(map_dict['Phone1'], 'BattOr1')
- self.assertEquals(map_dict['Phone2'], 'BattOr2')
- self.assertEquals(map_dict['Phone3'], 'BattOr3')
-
-original_PPTSM = find_usb_devices.GetAllPhysicalPortToSerialMaps
-original_PPTTM = find_usb_devices.GetAllPhysicalPortToTTYMaps
-original_GBL = battor_device_mapping.GetBattOrList
-original_GBNDM = find_usb_devices.GetBusNumberToDeviceTreeMap
-original_IB = battor_device_mapping.IsBattOr
-original_GBSM = battor_device_mapping.GetBattOrSerialNumbers
-
-def setup_battor_test(serial, tty, battor, bser=None):
- serial_mapper = mock.Mock(return_value=serial)
- tty_mapper = mock.Mock(return_value=tty)
- battor_lister = mock.Mock(return_value=battor)
- devtree = mock.Mock(return_value=None)
- is_battor = mock.Mock(side_effect=lambda x, y: x in battor)
- battor_serials = mock.Mock(return_value=bser)
- find_usb_devices.GetAllPhysicalPortToSerialMaps = serial_mapper
- find_usb_devices.GetAllPhysicalPortToTTYMaps = tty_mapper
- battor_device_mapping.GetBattOrList = battor_lister
- find_usb_devices.GetBusNumberToDeviceTreeMap = devtree
- battor_device_mapping.IsBattOr = is_battor
- battor_device_mapping.GetBattOrSerialNumbers = battor_serials
-
-class BattOrMappingTest(unittest.TestCase):
- def tearDown(self):
- find_usb_devices.GetAllPhysicalPortToSerialMaps = original_PPTSM
- find_usb_devices.GetAllPhysicalPortToTTYMaps = original_PPTTM
- battor_device_mapping.GetBattOrList = original_GBL
- find_usb_devices.GetBusNumberToDeviceTreeMap = original_GBNDM
- battor_device_mapping.IsBattOr = original_IB
- battor_device_mapping.GetBattOrSerialNumbers = original_GBSM
-
- def test_generate_serial_map(self):
- setup_battor_test([{1:'Phn1', 2:'Phn2', 3:'Phn3'},
- {1:'Bat1', 2:'Bat2', 3:'Bat3'}],
- [{},
- {1:'ttyUSB0', 2:'ttyUSB1', 3:'ttyUSB2'}],
- ['ttyUSB0', 'ttyUSB1', 'ttyUSB2'],
- ['Bat1', 'Bat2', 'Bat3'])
- result = battor_device_mapping.GenerateSerialMap()
- self.assertEqual(len(result), 3)
- self.assertEqual(result['Phn1'], 'Bat1')
- self.assertEqual(result['Phn2'], 'Bat2')
- self.assertEqual(result['Phn3'], 'Bat3')
+ self.assertEquals(dev_usb_device_p7_h1_t0.serial, 'UsbDevice0')
if __name__ == "__main__":
diff --git a/systrace/catapult/devil/devil/utils/lazy/weak_constant.py b/systrace/catapult/devil/devil/utils/lazy/weak_constant.py
index 3558f29..24ad940 100644
--- a/systrace/catapult/devil/devil/utils/lazy/weak_constant.py
+++ b/systrace/catapult/devil/devil/utils/lazy/weak_constant.py
@@ -4,6 +4,9 @@
import threading
+from devil.utils import reraiser_thread
+from devil.utils import timeout_retry
+
class WeakConstant(object):
"""A thread-safe, lazily initialized object.
@@ -13,17 +16,27 @@ class WeakConstant(object):
"""
def __init__(self, initializer):
- self._initialized = False
+ self._initialized = threading.Event()
self._initializer = initializer
self._lock = threading.Lock()
self._val = None
def read(self):
"""Get the object, creating it if necessary."""
- if self._initialized:
+ if self._initialized.is_set():
return self._val
with self._lock:
- if not self._initialized:
- self._val = self._initializer()
- self._initialized = True
+ if not self._initialized.is_set():
+ # We initialize the value on a separate thread to protect
+ # from holding self._lock indefinitely in the event that
+ # self._initializer hangs.
+ initializer_thread = reraiser_thread.ReraiserThread(
+ self._initializer)
+ initializer_thread.start()
+ timeout_retry.WaitFor(
+ lambda: initializer_thread.join(1) or not initializer_thread.isAlive(),
+ wait_period=0)
+ self._val = initializer_thread.GetReturnValue()
+ self._initialized.set()
+
return self._val
diff --git a/systrace/catapult/devil/devil/utils/lazy/weak_constant_test.py b/systrace/catapult/devil/devil/utils/lazy/weak_constant_test.py
new file mode 100644
index 0000000..643351d
--- /dev/null
+++ b/systrace/catapult/devil/devil/utils/lazy/weak_constant_test.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+# Copyright 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# pylint: disable=protected-access
+
+import time
+import unittest
+
+from devil import devil_env
+from devil.utils import lazy
+from devil.utils import timeout_retry
+
+with devil_env.SysPath(devil_env.PYMOCK_PATH):
+ import mock
+
+
+class DynamicSideEffect(object):
+ """A helper object for handling a sequence of single-use side effects."""
+
+ def __init__(self, side_effects):
+ self._side_effects = iter(side_effects or [])
+
+ def __call__(self):
+ val = next(self._side_effects)()
+ if isinstance(val, Exception):
+ raise val
+ return val
+
+
+class WeakConstantTest(unittest.TestCase):
+
+ def testUninitialized(self):
+ """Ensure that the first read calls the initializer."""
+ initializer = mock.Mock(return_value='initializer called')
+ test_constant = lazy.WeakConstant(initializer)
+ self.assertEquals(
+ 'initializer called',
+ test_constant.read())
+ initializer.assert_called_once_with()
+
+ def testInitialized(self):
+ """Ensure that reading doesn't reinitialize the value."""
+ initializer = mock.Mock(return_value='initializer called')
+ test_constant = lazy.WeakConstant(initializer)
+ test_constant._initialized.set()
+ test_constant._val = 'initializer not called'
+ self.assertEquals(
+ 'initializer not called',
+ test_constant.read())
+ self.assertFalse(initializer.mock_calls) # assert not called
+
+ def testFirstCallHangs(self):
+ """Ensure that reading works even if the first initializer call hangs."""
+ dyn = DynamicSideEffect([
+ lambda: time.sleep(10),
+ lambda: 'second try worked!'
+ ])
+
+ initializer = mock.Mock(side_effect=dyn)
+ test_constant = lazy.WeakConstant(initializer)
+ self.assertEquals(
+ 'second try worked!',
+ timeout_retry.Run(test_constant.read, 1, 1))
+ initializer.assert_has_calls([mock.call(), mock.call()])
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/systrace/catapult/devil/devil/utils/logging_common.py b/systrace/catapult/devil/devil/utils/logging_common.py
index 5aea3c6..ab364a2 100644
--- a/systrace/catapult/devil/devil/utils/logging_common.py
+++ b/systrace/catapult/devil/devil/utils/logging_common.py
@@ -8,13 +8,32 @@ import time
def AddLoggingArguments(parser):
- parser.add_argument(
+ """Adds standard logging flags to the parser.
+
+ After parsing args, remember to invoke InitializeLogging() with the parsed
+ args, to configure the log level.
+ """
+ group = parser.add_mutually_exclusive_group()
+ group.add_argument(
'-v', '--verbose', action='count', default=0,
help='Log more. Use multiple times for even more logging.')
+ group.add_argument(
+ '-q', '--quiet', action='count', default=0,
+ help=('Log less (suppress output). Use multiple times for even less '
+ 'output.'))
def InitializeLogging(args, handler=None):
- if args.verbose == 0:
+ """Initialized the log level based on commandline flags.
+
+ This expects to be given an "args" object with the options defined by
+ AddLoggingArguments().
+ """
+ if args.quiet >= 2:
+ log_level = logging.CRITICAL
+ elif args.quiet == 1:
+ log_level = logging.ERROR
+ elif args.verbose == 0:
log_level = logging.WARNING
elif args.verbose == 1:
log_level = logging.INFO
diff --git a/systrace/catapult/devil/devil/utils/markdown.py b/systrace/catapult/devil/devil/utils/markdown.py
index 54e7ed5..ba66664 100755
--- a/systrace/catapult/devil/devil/utils/markdown.py
+++ b/systrace/catapult/devil/devil/utils/markdown.py
@@ -3,6 +3,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+from __future__ import print_function
+
import argparse
import imp
import os
@@ -182,7 +184,7 @@ def md_module(module_obj, module_path=None, module_link=None):
A list of markdown-formatted lines.
"""
def should_doc(name):
- return (type(module_obj.__dict__[name]) != types.ModuleType
+ return (not isinstance(module_obj.__dict__[name], types.ModuleType)
and not name.startswith('_'))
stuff_to_doc = sorted(
@@ -193,9 +195,9 @@ def md_module(module_obj, module_path=None, module_link=None):
functions_to_doc = []
for s in stuff_to_doc:
- if type(s) == types.TypeType:
+ if isinstance(s, types.TypeType):
classes_to_doc.append(s)
- elif type(s) == types.FunctionType:
+ elif isinstance(s, types.FunctionType):
functions_to_doc.append(s)
command = ['devil/utils/markdown.py']
@@ -221,7 +223,7 @@ def md_module(module_obj, module_path=None, module_link=None):
for f in functions_to_doc:
content += md_function(f)
- print '\n'.join(content)
+ print('\n'.join(content))
return 0
@@ -243,7 +245,7 @@ def md_class(class_obj):
content.extend(md_docstring(class_obj.__doc__))
def should_doc(name, obj):
- return (type(obj) == types.FunctionType
+ return (isinstance(obj, types.FunctionType)
and (name.startswith('__') or not name.startswith('_')))
methods_to_doc = sorted(
diff --git a/systrace/catapult/devil/devil/utils/reraiser_thread.py b/systrace/catapult/devil/devil/utils/reraiser_thread.py
index 56d95f3..6e6c810 100644
--- a/systrace/catapult/devil/devil/utils/reraiser_thread.py
+++ b/systrace/catapult/devil/devil/utils/reraiser_thread.py
@@ -11,12 +11,14 @@ import threading
import time
import traceback
+from devil import base_error
from devil.utils import watchdog_timer
-class TimeoutError(Exception):
+class TimeoutError(base_error.BaseError):
"""Module-specific timeout exception."""
- pass
+ def __init__(self, message):
+ super(TimeoutError, self).__init__(message)
def LogThreadStack(thread, error_log_func=logging.critical):
@@ -47,10 +49,13 @@ class ReraiserThread(threading.Thread):
func: callable to call on a new thread.
args: list of positional arguments for callable, defaults to empty.
kwargs: dictionary of keyword arguments for callable, defaults to empty.
- name: thread name, defaults to Thread-N.
+ name: thread name, defaults to the function name.
"""
- if not name and func.__name__ != '<lambda>':
- name = func.__name__
+ if not name:
+ if hasattr(func, '__name__') and func.__name__ != '<lambda>':
+ name = func.__name__
+ else:
+ name = 'anonymous'
super(ReraiserThread, self).__init__(name=name)
if not args:
args = []
@@ -64,10 +69,17 @@ class ReraiserThread(threading.Thread):
self._exc_info = None
self._thread_group = None
- def ReraiseIfException(self):
- """Reraise exception if an exception was raised in the thread."""
- if self._exc_info:
- raise self._exc_info[0], self._exc_info[1], self._exc_info[2]
+ if sys.version_info < (3,):
+ # pylint: disable=exec-used
+ exec('''def ReraiseIfException(self):
+ """Reraise exception if an exception was raised in the thread."""
+ if self._exc_info:
+ raise self._exc_info[0], self._exc_info[1], self._exc_info[2]''')
+ else:
+ def ReraiseIfException(self):
+ """Reraise exception if an exception was raised in the thread."""
+ if self._exc_info:
+ raise self._exc_info[1]
def GetReturnValue(self):
"""Reraise exception if present, otherwise get the return value."""
diff --git a/systrace/catapult/devil/devil/utils/reset_usb.py b/systrace/catapult/devil/devil/utils/reset_usb.py
index 0335227..404a44c 100755
--- a/systrace/catapult/devil/devil/utils/reset_usb.py
+++ b/systrace/catapult/devil/devil/utils/reset_usb.py
@@ -3,12 +3,15 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import sys
+if sys.platform == 'win32':
+ raise ImportError('devil.utils.reset_usb only supported on unix systems.')
+
import argparse
import fcntl
import logging
import os
import re
-import sys
if __name__ == '__main__':
sys.path.append(
diff --git a/systrace/catapult/devil/devil/utils/run_tests_helper.py b/systrace/catapult/devil/devil/utils/run_tests_helper.py
index 7f71b65..0b9dd47 100644
--- a/systrace/catapult/devil/devil/utils/run_tests_helper.py
+++ b/systrace/catapult/devil/devil/utils/run_tests_helper.py
@@ -14,7 +14,7 @@ CustomFormatter = logging_common.CustomFormatter
_WrappedLoggingArgs = collections.namedtuple(
- '_WrappedLoggingArgs', ['verbose'])
+ '_WrappedLoggingArgs', ['verbose', 'quiet'])
def SetLogLevel(verbose_count, add_handler=True):
@@ -25,5 +25,5 @@ def SetLogLevel(verbose_count, add_handler=True):
add_handler: If true, adds a handler with |CustomFormatter|.
"""
logging_common.InitializeLogging(
- _WrappedLoggingArgs(verbose_count),
+ _WrappedLoggingArgs(verbose_count, 0),
handler=None if add_handler else logging.NullHandler())
diff --git a/systrace/catapult/devil/devil/utils/test/data/test_serial_map.json b/systrace/catapult/devil/devil/utils/test/data/test_serial_map.json
deleted file mode 100644
index f068281..0000000
--- a/systrace/catapult/devil/devil/utils/test/data/test_serial_map.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"phone": "Phone1", "battor": "BattOr1"}, {"phone": "Phone2", "battor": "BattOr2"}, {"phone": "Phone3", "battor": "BattOr3"}]
diff --git a/systrace/catapult/devil/devil/utils/timeout_retry.py b/systrace/catapult/devil/devil/utils/timeout_retry.py
index 2327b6b..d662c1d 100644
--- a/systrace/catapult/devil/devil/utils/timeout_retry.py
+++ b/systrace/catapult/devil/devil/utils/timeout_retry.py
@@ -109,7 +109,8 @@ def WaitFor(condition, wait_period=5, max_tries=None):
# pylint: disable=no-member
timeout_thread_group.GetRemainingTime(wait_period,
suffix=' waiting for condition %r' % condition_name)
- time.sleep(wait_period)
+ if wait_period:
+ time.sleep(wait_period)
return None
diff --git a/systrace/catapult/devil/devil/utils/update_mapping.py b/systrace/catapult/devil/devil/utils/update_mapping.py
deleted file mode 100755
index 6666b9b..0000000
--- a/systrace/catapult/devil/devil/utils/update_mapping.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import sys
-
-from devil.utils import battor_device_mapping
-
-def parse_options():
- """Parses and checks the command-line options.
-
- Returns:
- A tuple containing the options structure.
- """
- usage = 'Usage: ./update_mapping.py [options]'
- desc = ('Example: ./update_mapping.py -o mapping.json.\n'
- 'This script generates and stores a file that gives the\n'
- 'mapping between phone serial numbers and BattOr serial numbers\n'
- 'Mapping is based on which physical ports on the USB hubs the\n'
- 'devices are plugged in to. For instance, if there are two hubs,\n'
- 'the phone connected to port N on the first hub is mapped to the\n'
- 'BattOr connected to port N on the second hub, for each N.')
- parser = argparse.ArgumentParser(usage=usage, description=desc)
- parser.add_argument('-o', '--output', dest='out_file',
- default='mapping.json', type=str,
- action='store', help='mapping file name')
- parser.add_argument('-u', '--hub', dest='hub_types',
- action='append', choices=['plugable_7port',
- 'plugable_7port_usb3_part2',
- 'plugable_7port_usb3_part3'],
- help='USB hub types.')
- options = parser.parse_args()
- if not options.hub_types:
- options.hub_types = ['plugable_7port', 'plugable_7port_usb3_part2',
- 'plugable_7port_usb3_part3']
- return options
-
-def main():
- options = parse_options()
- battor_device_mapping.GenerateSerialMapFile(options.out_file,
- options.hub_types)
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/systrace/catapult/devil/pylintrc b/systrace/catapult/devil/pylintrc
index 7e024a2..1a059cf 100644
--- a/systrace/catapult/devil/pylintrc
+++ b/systrace/catapult/devil/pylintrc
@@ -14,6 +14,7 @@ disable=
locally-enabled,
missing-docstring,
star-args,
+ wrong-import-position,
[REPORTS]
diff --git a/systrace/catapult/systrace/PRESUBMIT.py b/systrace/catapult/systrace/PRESUBMIT.py
index 1234a8d..275dfdb 100644
--- a/systrace/catapult/systrace/PRESUBMIT.py
+++ b/systrace/catapult/systrace/PRESUBMIT.py
@@ -25,7 +25,6 @@ def _GetPathsToPrepend(input_api):
return [
project_dir,
- input_api.os_path.join(catapult_dir, 'common', 'battor'),
input_api.os_path.join(catapult_dir, 'common', 'py_trace_event'),
input_api.os_path.join(catapult_dir, 'common', 'py_utils'),
input_api.os_path.join(catapult_dir, 'devil'),
diff --git a/systrace/catapult/systrace/atrace_helper/jni/atrace_process_dump.cc b/systrace/catapult/systrace/atrace_helper/jni/atrace_process_dump.cc
index ef72f78..d4dada0 100644
--- a/systrace/catapult/systrace/atrace_helper/jni/atrace_process_dump.cc
+++ b/systrace/catapult/systrace/atrace_helper/jni/atrace_process_dump.cc
@@ -4,6 +4,7 @@
#include "atrace_process_dump.h"
+#include <inttypes.h>
#include <stdint.h>
#include <limits>
@@ -37,7 +38,7 @@ void AtraceProcessDump::SetDumpInterval(int interval_ms) {
void AtraceProcessDump::RunAndPrintJson(FILE* stream) {
out_ = stream;
- fprintf(out_, "{\"start_ts\": \"%llu\", \"snapshots\":[\n",
+ fprintf(out_, "{\"start_ts\": \"%" PRIu64 "\", \"snapshots\":[\n",
time_utils::GetTimestamp());
CHECK(snapshot_timer_);
@@ -132,13 +133,14 @@ bool AtraceProcessDump::ShouldTakeFullDump(const ProcessInfo* process) {
}
void AtraceProcessDump::SerializeSnapshot() {
- fprintf(out_, "{\"ts\":\"%llu\",\"memdump\":{\n", snapshot_timestamp_);
+ fprintf(out_, "{\"ts\":\"%" PRIu64 "\",\"memdump\":{\n",
+ snapshot_timestamp_);
for (auto it = snapshot_.begin(); it != snapshot_.end();) {
const ProcessSnapshot* process = it->second.get();
const ProcessMemoryStats* mem = &process->memory;
fprintf(out_, "\"%d\":{", process->pid);
- fprintf(out_, "\"vm\":%llu,\"rss\":%llu",
+ fprintf(out_, "\"vm\":%" PRIu64 ",\"rss\":%" PRIu64,
mem->virt_kb(), mem->rss_kb());
fprintf(out_, ",\"oom_sc\":%d,\"oom_sc_adj\":%d"
@@ -149,17 +151,18 @@ void AtraceProcessDump::SerializeSnapshot() {
process->utime, process->stime);
if (mem->full_stats_available()) {
- fprintf(out_, ",\"pss\":%llu,\"swp\":%llu"
- ",\"pc\":%llu,\"pd\":%llu,\"sc\":%llu,\"sd\":%llu",
+ fprintf(out_, ",\"pss\":%" PRIu64 ",\"swp\":%" PRIu64
+ ",\"pc\":%" PRIu64 ",\"pd\":%" PRIu64
+ ",\"sc\":%" PRIu64 ",\"sd\":%" PRIu64,
mem->pss_kb(), mem->swapped_kb(),
mem->private_clean_kb(), mem->private_dirty_kb(),
mem->shared_clean_kb(), mem->shared_dirty_kb());
}
if (mem->gpu_stats_available()) {
- fprintf(out_, ",\"gpu_egl\":%llu,\"gpu_egl_pss\":%llu"
- ",\"gpu_gl\":%llu,\"gpu_gl_pss\":%llu"
- ",\"gpu_etc\":%llu,\"gpu_etc_pss\":%llu",
+ fprintf(out_, ",\"gpu_egl\":%" PRIu64 ",\"gpu_egl_pss\":%" PRIu64
+ ",\"gpu_gl\":%" PRIu64 ",\"gpu_gl_pss\":%" PRIu64
+ ",\"gpu_etc\":%" PRIu64 ",\"gpu_etc_pss\":%" PRIu64,
mem->gpu_graphics_kb(), mem->gpu_graphics_pss_kb(),
mem->gpu_gl_kb(), mem->gpu_gl_pss_kb(),
mem->gpu_other_kb(), mem->gpu_other_pss_kb());
@@ -176,11 +179,13 @@ void AtraceProcessDump::SerializeSnapshot() {
for (size_t k = 0; k < n_mmaps; ++k) {
const ProcessMemoryStats::MmapInfo* mm = mem->mmap(k);
fprintf(out_,
- "{\"vm\":\"%llx-%llx\",\"file\":\"%s\",\"flags\":\"%s\","
- "\"pss\":%llu,\"rss\":%llu,\"swp\":%llu,"
- "\"pc\":%llu,\"pd\":%llu,"
- "\"sc\":%llu,\"sd\":%llu}",
- mm->start_addr, mm->end_addr, mm->mapped_file, mm->prot_flags,
+ "{\"vm\":\"%" PRIx64 "-%" PRIx64 "\","
+ "\"file\":\"%s\",\"flags\":\"%s\","
+ "\"pss\":%" PRIu64 ",\"rss\":%" PRIu64 ",\"swp\":%" PRIu64 ","
+ "\"pc\":%" PRIu64 ",\"pd\":%" PRIu64 ","
+ "\"sc\":%" PRIu64 ",\"sd\":%" PRIu64 "}",
+ mm->start_addr, mm->end_addr,
+ mm->mapped_file, mm->prot_flags,
mm->pss_kb, mm->rss_kb, mm->swapped_kb,
mm->private_clean_kb, mm->private_dirty_kb,
mm->shared_clean_kb, mm->shared_dirty_kb);
@@ -233,11 +238,12 @@ void AtraceProcessDump::SerializePersistentProcessInfo() {
void AtraceProcessDump::TakeAndSerializeMemInfo() {
std::map<std::string, uint64_t> mem_info;
CHECK(procfs_utils::ReadMemInfoStats(&mem_info));
- fprintf(out_, "{\"ts\":\"%llu\",\"meminfo\":{\n", time_utils::GetTimestamp());
+ fprintf(out_, "{\"ts\":\"%" PRIu64 "\",\"meminfo\":{\n",
+ time_utils::GetTimestamp());
for (auto it = mem_info.begin(); it != mem_info.end(); ++it) {
if (it != mem_info.begin())
fprintf(out_, ",");
- fprintf(out_, "\"%s\":%llu", it->first.c_str(), it->second);
+ fprintf(out_, "\"%s\":%" PRIu64, it->first.c_str(), it->second);
}
fprintf(out_, "}}");
}
diff --git a/systrace/catapult/systrace/atrace_helper/jni/logging.h b/systrace/catapult/systrace/atrace_helper/jni/logging.h
index c132051..824fddd 100644
--- a/systrace/catapult/systrace/atrace_helper/jni/logging.h
+++ b/systrace/catapult/systrace/atrace_helper/jni/logging.h
@@ -9,6 +9,7 @@
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#define CHECK_ARGS(COND, ERR) \
"FAILED CHECK(%s) @ %s:%d (errno: %s)\n", #COND, __FILE__, __LINE__, \
diff --git a/systrace/catapult/systrace/atrace_helper/jni/main.cc b/systrace/catapult/systrace/atrace_helper/jni/main.cc
index 764b573..68593b4 100644
--- a/systrace/catapult/systrace/atrace_helper/jni/main.cc
+++ b/systrace/catapult/systrace/atrace_helper/jni/main.cc
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <inttypes.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
@@ -45,7 +46,7 @@ int main(int argc, char** argv) {
if (argc == 2 && !strcmp(argv[1], "--echo-ts")) {
// Used by clock sync marker to correct the difference between
// Linux monotonic clocks on the device and host.
- printf("%llu\n", time_utils::GetTimestamp());
+ printf("%" PRIu64 "\n", time_utils::GetTimestamp());
return 0;
}
diff --git a/systrace/catapult/systrace/atrace_helper/jni/process_memory_stats.cc b/systrace/catapult/systrace/atrace_helper/jni/process_memory_stats.cc
index e13dc22..fbad23b 100644
--- a/systrace/catapult/systrace/atrace_helper/jni/process_memory_stats.cc
+++ b/systrace/catapult/systrace/atrace_helper/jni/process_memory_stats.cc
@@ -4,6 +4,7 @@
#include "process_memory_stats.h"
+#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
@@ -73,7 +74,8 @@ bool ProcessMemoryStats::ReadFullStats(int pid) {
// Note that the mapped file name ([stack]) is optional and won't be
// present on anonymous memory maps (hence res >= 3 below).
int res = sscanf(line,
- "%llx-%llx %4s %*llx %*[:0-9a-f] %*[0-9a-f]%*[ \t]%127[^\n]",
+ "%" PRIx64 "-%" PRIx64 " %4s %*" PRIx64 " %*[:0-9a-f] "
+ "%*[0-9a-f]%*[ \t]%127[^\n]",
&new_mmap->start_addr, &new_mmap->end_addr, new_mmap->prot_flags,
new_mmap->mapped_file);
last_mmap_entry = new_mmap.get();
diff --git a/systrace/catapult/systrace/atrace_helper/jni/time_utils.cc b/systrace/catapult/systrace/atrace_helper/jni/time_utils.cc
index 2da7d79..3c8aa16 100644
--- a/systrace/catapult/systrace/atrace_helper/jni/time_utils.cc
+++ b/systrace/catapult/systrace/atrace_helper/jni/time_utils.cc
@@ -7,6 +7,7 @@
#include <sys/time.h>
#include <sys/timerfd.h>
#include <time.h>
+#include <unistd.h>
#include "logging.h"
diff --git a/systrace/catapult/systrace/bin/adb_profile_chrome_startup b/systrace/catapult/systrace/bin/adb_profile_chrome_startup
index 6bd3270..42b37df 100755
--- a/systrace/catapult/systrace/bin/adb_profile_chrome_startup
+++ b/systrace/catapult/systrace/bin/adb_profile_chrome_startup
@@ -53,6 +53,12 @@ def _CreateOptionParser():
parser.add_option('-t', '--time', help='Stops tracing after N seconds, 0 to '
'manually stop (startup trace ends after at most 5s).',
default=5, metavar='N', type='int', dest='trace_time')
+ parser.add_option('-c', '--chrome_categories', help='Chrome tracing '
+ 'categories to record.', default=_DEFAULT_CHROME_CATEGORIES,
+ type='string')
+ parser.add_option('-u', '--atrace-buffer-size', help='Number of bytes to'
+ ' be used for capturing atrace data', type='int',
+ default=None, dest='trace_buf_size')
parser.add_option_group(chrome_startup_tracing_agent.add_options(parser))
parser.add_option_group(atrace_agent.add_options(parser))
@@ -91,7 +97,6 @@ def main():
# removed.
options.ring_buffer = False
options.trace_memory = False
- options.chrome_categories = _DEFAULT_CHROME_CATEGORIES
if options.atrace_categories in ['list', 'help']:
atrace_agent.list_categories(atrace_agent.get_config(options))
diff --git a/systrace/catapult/systrace/profile_chrome/chrome_startup_tracing_agent.py b/systrace/catapult/systrace/profile_chrome/chrome_startup_tracing_agent.py
index e389c15..53be30c 100644
--- a/systrace/catapult/systrace/profile_chrome/chrome_startup_tracing_agent.py
+++ b/systrace/catapult/systrace/profile_chrome/chrome_startup_tracing_agent.py
@@ -5,9 +5,10 @@
import logging
import optparse
import os
-import py_utils
import re
+import py_utils
+
from devil.android import flag_changer
from devil.android.constants import webapk
from devil.android.perf import cache_control
@@ -39,7 +40,7 @@ class ChromeStartupTracingAgent(tracing_agents.TracingAgent):
def _SetupTracing(self):
# TODO(lizeb): Figure out how to clean up the command-line file when
# _TearDownTracing() is not executed in StopTracing().
- flags = ['--trace-startup']
+ flags = ['--trace-startup', '--enable-perfetto']
if self._trace_time is not None:
flags.append('--trace-startup-duration={}'.format(self._trace_time))
self._flag_changer.AddFlags(flags)
diff --git a/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent.py b/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent.py
index 1e8895b..285d299 100644
--- a/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent.py
+++ b/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent.py
@@ -5,9 +5,10 @@
import json
import optparse
import os
-import py_utils
import re
+import py_utils
+
from devil.android import device_errors
from devil.android.sdk import intent
from systrace import trace_result
@@ -209,6 +210,8 @@ def _ComputeChromeCategories(config):
categories.append('disabled-by-default-blink.scheduler')
categories.append('disabled-by-default-cc.debug.scheduler')
categories.append('disabled-by-default-renderer.scheduler')
+ categories.append('disabled-by-default-sequence_manager')
+ categories.append('sequence_manager')
if config.chrome_categories:
categories += config.chrome_categories.split(',')
return categories
diff --git a/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent_unittest.py b/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent_unittest.py
index 25c701a..1556762 100644
--- a/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent_unittest.py
+++ b/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent_unittest.py
@@ -17,7 +17,7 @@ class ChromeAgentTest(agents_unittest.BaseAgentTest):
@decorators.Disabled
def testGetCategories(self):
curr_browser = self.GetChromeProcessID()
- if curr_browser == None:
+ if curr_browser is None:
self.StartBrowser()
categories = \
@@ -35,7 +35,7 @@ class ChromeAgentTest(agents_unittest.BaseAgentTest):
@decorators.Disabled
def testTracing(self):
curr_browser = self.GetChromeProcessID()
- if curr_browser == None:
+ if curr_browser is None:
self.StartBrowser()
categories = '*'
diff --git a/systrace/catapult/systrace/profile_chrome/ddms_tracing_agent.py b/systrace/catapult/systrace/profile_chrome/ddms_tracing_agent.py
index 9d041b9..d978939 100644
--- a/systrace/catapult/systrace/profile_chrome/ddms_tracing_agent.py
+++ b/systrace/catapult/systrace/profile_chrome/ddms_tracing_agent.py
@@ -4,9 +4,10 @@
import optparse
import os
-import py_utils
import re
+import py_utils
+
from profile_chrome import util
from systrace import trace_result
from systrace import tracing_agents
diff --git a/systrace/catapult/systrace/profile_chrome/perf_tracing_agent.py b/systrace/catapult/systrace/profile_chrome/perf_tracing_agent.py
index 65831df..1414905 100644
--- a/systrace/catapult/systrace/profile_chrome/perf_tracing_agent.py
+++ b/systrace/catapult/systrace/profile_chrome/perf_tracing_agent.py
@@ -5,12 +5,13 @@
import logging
import optparse
import os
-import py_utils
import signal
import subprocess
import sys
import tempfile
+import py_utils
+
from devil.android import device_temp_file
from devil.android.perf import perf_control
@@ -22,7 +23,7 @@ _CATAPULT_DIR = os.path.join(
os.path.dirname(os.path.abspath(__file__)), '..', '..')
sys.path.append(os.path.join(_CATAPULT_DIR, 'telemetry'))
try:
- # pylint: disable=F0401
+ # pylint: disable=F0401,no-name-in-module,wrong-import-position
from telemetry.internal.platform.profiler import android_profiling_helper
from telemetry.internal.util import binary_manager
except ImportError:
diff --git a/systrace/catapult/systrace/profile_chrome/profiler_unittest.py b/systrace/catapult/systrace/profile_chrome/profiler_unittest.py
index 9b35753..cd7af95 100644
--- a/systrace/catapult/systrace/profile_chrome/profiler_unittest.py
+++ b/systrace/catapult/systrace/profile_chrome/profiler_unittest.py
@@ -18,7 +18,7 @@ class ProfilerTest(unittest.TestCase):
def setUp(self):
ui.EnableTestMode()
self._tracing_options = tracing_controller.TracingControllerConfig(None,
- None, None, None, None, None, None, None, None)
+ None, None, None, None, None, None, None, None, None)
@decorators.ClientOnlyTest
def testCaptureBasicProfile(self):
diff --git a/systrace/catapult/systrace/systrace/__init__.py b/systrace/catapult/systrace/systrace/__init__.py
index 831f774..730c164 100644
--- a/systrace/catapult/systrace/systrace/__init__.py
+++ b/systrace/catapult/systrace/systrace/__init__.py
@@ -19,7 +19,6 @@ def _AddDirToPythonPath(*path_parts):
_CATAPULT_DIR = os.path.join(
os.path.dirname(os.path.abspath(__file__)), os.path.pardir, os.path.pardir)
-_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'battor')
_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'py_utils')
_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'py_trace_event')
_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'py_trace_event', 'py_trace_event')
diff --git a/systrace/catapult/systrace/systrace/output_generator.py b/systrace/catapult/systrace/systrace/output_generator.py
index 6b63ac8..b1dc275 100644
--- a/systrace/catapult/systrace/systrace/output_generator.py
+++ b/systrace/catapult/systrace/systrace/output_generator.py
@@ -25,7 +25,6 @@ _SYSTRACE_TO_TRACE_DATA_NAME_MAPPING = {
'androidProcessDump': trace_data.ANDROID_PROCESS_DATA_PART,
'atraceProcessDump': trace_data.ATRACE_PROCESS_DUMP_PART,
'systemTraceEvents': trace_data.ATRACE_PART,
- 'powerTraceAsString': trace_data.BATTOR_TRACE_PART,
'systraceController': trace_data.TELEMETRY_PART,
'traceEvents': trace_data.CHROME_TRACE_PART,
'waltTrace': trace_data.WALT_TRACE_PART,
@@ -34,12 +33,13 @@ _SYSTRACE_HEADER = 'Systrace'
def NewGenerateHTMLOutput(trace_results, output_file_name):
- trace_data_builder = trace_data.TraceDataBuilder()
- for trace in trace_results:
- trace_data_part = _SYSTRACE_TO_TRACE_DATA_NAME_MAPPING.get(
- trace.source_name)
- trace_data_builder.AddTraceFor(trace_data_part, trace.raw_data)
- trace_data_builder.AsData().Serialize(output_file_name, _SYSTRACE_HEADER)
+ with trace_data.TraceDataBuilder() as builder:
+ for trace in trace_results:
+ trace_data_part = _SYSTRACE_TO_TRACE_DATA_NAME_MAPPING.get(
+ trace.source_name)
+ builder.AddTraceFor(
+ trace_data_part, trace.raw_data, allow_unstructured=True)
+ builder.Serialize(output_file_name, _SYSTRACE_HEADER)
def GenerateHTMLOutput(trace_results, output_file_name):
diff --git a/systrace/catapult/systrace/systrace/output_generator_unittest.py b/systrace/catapult/systrace/systrace/output_generator_unittest.py
index 58e11ac..2347316 100644
--- a/systrace/catapult/systrace/systrace/output_generator_unittest.py
+++ b/systrace/catapult/systrace/systrace/output_generator_unittest.py
@@ -9,17 +9,17 @@ import json
import os
import unittest
+from py_utils import tempfile_ext
from systrace import decorators
from systrace import output_generator
from systrace import trace_result
from systrace import update_systrace_trace_viewer
-from systrace import util
from tracing.trace_data import trace_data as trace_data_module
TEST_DIR = os.path.join(os.path.dirname(__file__), 'test_data')
ATRACE_DATA = os.path.join(TEST_DIR, 'atrace_data')
-BATTOR_DATA = os.path.join(TEST_DIR, 'battor_test_data.txt')
+ATRACE_PROCESS_DUMP_DATA = os.path.join(TEST_DIR, 'atrace_procfs_dump')
COMBINED_PROFILE_CHROME_DATA = os.path.join(
TEST_DIR, 'profile-chrome_systrace_perf_chrome_data')
@@ -52,18 +52,14 @@ class OutputGeneratorTest(unittest.TestCase):
update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE))
with open(ATRACE_DATA) as f:
atrace_data = f.read().replace(" ", "").strip()
- trace_results = [trace_result.TraceResult('systemTraceEvents',
- atrace_data)]
- output_file_name = util.generate_random_filename_for_test()
- final_path = output_generator.GenerateHTMLOutput(trace_results,
- output_file_name)
+ trace_results = [trace_result.TraceResult('systemTraceEvents', atrace_data)]
+ with tempfile_ext.TemporaryFileName() as output_file_name:
+ output_generator.GenerateHTMLOutput(trace_results, output_file_name)
with open(output_file_name, 'r') as f:
- output_generator.GenerateHTMLOutput(trace_results, f.name)
html_output = f.read()
- trace_data = (html_output.split(
- '<script class="trace-data" type="application/text">')[1].split(
- '</script>'))[0].replace(" ", "").strip()
- os.remove(final_path)
+ trace_data = (html_output.split(
+ '<script class="trace-data" type="application/text">')[1].split(
+ '</script>'))[0].replace(" ", "").strip()
# Ensure the trace data written in HTML is located within the
# correct place in the HTML document and that the data is not
@@ -74,50 +70,42 @@ class OutputGeneratorTest(unittest.TestCase):
@decorators.HostOnlyTest
def testHtmlOutputGenerationFormatsMultipleTraces(self):
trace_results = []
- trace_data_builder = trace_data_module.TraceDataBuilder()
-
- with open(BATTOR_DATA) as fp:
- battor_data = fp.read()
- trace_results.append(
- trace_result.TraceResult('powerTraceAsString', battor_data))
- trace_data_builder.AddTraceFor(
- trace_data_module.BATTOR_TRACE_PART, battor_data)
-
- with open(ATRACE_DATA) as fp:
- atrace_data = fp.read()
- trace_results.append(
- trace_result.TraceResult('systemTraceEvents', atrace_data))
- trace_data_builder.AddTraceFor(trace_data_module.ATRACE_PART, atrace_data)
-
-
- with open(COMBINED_PROFILE_CHROME_DATA) as fp:
- chrome_data = fp.read()
- trace_results.append(
- trace_result.TraceResult('traceEvents', json.loads(chrome_data)))
- trace_data_builder.AddTraceFor(
- trace_data_module.CHROME_TRACE_PART, json.loads(chrome_data))
-
- trace_results.append(
- trace_result.TraceResult('systraceController', str({})))
- trace_data_builder.AddTraceFor(trace_data_module.TELEMETRY_PART, {})
-
- try:
- data_builder_out = util.generate_random_filename_for_test()
- output_generator_out = util.generate_random_filename_for_test()
- output_generator.GenerateHTMLOutput(trace_results, output_generator_out)
- trace_data_builder.AsData().Serialize(data_builder_out, 'Systrace')
-
- output_generator_md5sum = hashlib.md5(
- open(output_generator_out, 'rb').read()).hexdigest()
- data_builder_md5sum = hashlib.md5(
- open(data_builder_out, 'rb').read()).hexdigest()
-
- self.assertEqual(output_generator_md5sum, data_builder_md5sum)
- finally:
- def del_if_exist(path):
- try:
- os.remove(path)
- except IOError:
- pass
- del_if_exist(output_generator_out)
- del_if_exist(data_builder_out)
+ with trace_data_module.TraceDataBuilder() as trace_data_builder:
+ with open(ATRACE_DATA) as fp:
+ atrace_data = fp.read()
+ trace_results.append(
+ trace_result.TraceResult('systemTraceEvents', atrace_data))
+ trace_data_builder.AddTraceFor(trace_data_module.ATRACE_PART, atrace_data,
+ allow_unstructured=True)
+
+ with open(ATRACE_PROCESS_DUMP_DATA) as fp:
+ atrace_process_dump_data = fp.read()
+ trace_results.append(trace_result.TraceResult(
+ 'atraceProcessDump', atrace_process_dump_data))
+ trace_data_builder.AddTraceFor(trace_data_module.ATRACE_PROCESS_DUMP_PART,
+ atrace_process_dump_data,
+ allow_unstructured=True)
+
+ with open(COMBINED_PROFILE_CHROME_DATA) as fp:
+ chrome_data = json.load(fp)
+ trace_results.append(
+ trace_result.TraceResult('traceEvents', chrome_data))
+ trace_data_builder.AddTraceFor(
+ trace_data_module.CHROME_TRACE_PART, chrome_data)
+
+ trace_results.append(
+ trace_result.TraceResult('systraceController', str({})))
+ trace_data_builder.AddTraceFor(trace_data_module.TELEMETRY_PART, {})
+
+ with tempfile_ext.NamedTemporaryDirectory() as temp_dir:
+ data_builder_out = os.path.join(temp_dir, 'data_builder.html')
+ output_generator_out = os.path.join(temp_dir, 'output_generator.html')
+ output_generator.GenerateHTMLOutput(trace_results, output_generator_out)
+ trace_data_builder.Serialize(data_builder_out, 'Systrace')
+
+ output_generator_md5sum = hashlib.md5(
+ open(output_generator_out, 'rb').read()).hexdigest()
+ data_builder_md5sum = hashlib.md5(
+ open(data_builder_out, 'rb').read()).hexdigest()
+
+ self.assertEqual(output_generator_md5sum, data_builder_md5sum)
diff --git a/systrace/catapult/systrace/systrace/run_systrace.py b/systrace/catapult/systrace/systrace/run_systrace.py
index cb32036..15a39a3 100755
--- a/systrace/catapult/systrace/systrace/run_systrace.py
+++ b/systrace/catapult/systrace/systrace/run_systrace.py
@@ -14,6 +14,7 @@ the kernel. It creates an HTML file for visualizing the trace.
# The flags= parameter of re.sub() is new in Python 2.7. And Systrace does not
# support Python 3 yet.
+# pylint: disable=wrong-import-position
import sys
version = sys.version_info[:2]
@@ -44,13 +45,12 @@ from systrace import util
from systrace.tracing_agents import atrace_agent
from systrace.tracing_agents import atrace_from_file_agent
from systrace.tracing_agents import atrace_process_dump
-from systrace.tracing_agents import battor_trace_agent
from systrace.tracing_agents import ftrace_agent
from systrace.tracing_agents import walt_agent
ALL_MODULES = [atrace_agent, atrace_from_file_agent, atrace_process_dump,
- battor_trace_agent, ftrace_agent, walt_agent]
+ ftrace_agent, walt_agent]
def parse_options(argv):
@@ -158,13 +158,16 @@ def main_impl(arguments):
if options.target == 'android' and not options.from_file:
initialize_devil()
+ devices = [a.GetDeviceSerial() for a in adb_wrapper.AdbWrapper.Devices()]
if not options.device_serial_number:
- devices = [a.GetDeviceSerial() for a in adb_wrapper.AdbWrapper.Devices()]
if len(devices) == 0:
raise RuntimeError('No ADB devices connected.')
elif len(devices) >= 2:
raise RuntimeError('Multiple devices connected, serial number required')
options.device_serial_number = devices[0]
+ elif options.device_serial_number not in devices:
+ raise RuntimeError('Device with the serial number "%s" is not connected.'
+ % options.device_serial_number)
# If list_categories is selected, just print the list of categories.
# In this case, use of the tracing controller is not necessary.
diff --git a/systrace/catapult/systrace/systrace/systrace_runner.py b/systrace/catapult/systrace/systrace/systrace_runner.py
index b3d9324..514f5bb 100644
--- a/systrace/catapult/systrace/systrace/systrace_runner.py
+++ b/systrace/catapult/systrace/systrace/systrace_runner.py
@@ -14,13 +14,12 @@ from systrace.tracing_agents import android_process_data_agent
from systrace.tracing_agents import atrace_agent
from systrace.tracing_agents import atrace_from_file_agent
from systrace.tracing_agents import atrace_process_dump
-from systrace.tracing_agents import battor_trace_agent
from systrace.tracing_agents import ftrace_agent
from systrace.tracing_agents import walt_agent
AGENT_MODULES = [android_process_data_agent, atrace_agent,
atrace_from_file_agent, atrace_process_dump,
- battor_trace_agent, ftrace_agent, walt_agent]
+ ftrace_agent, walt_agent]
class SystraceRunner(object):
def __init__(self, script_dir, options):
diff --git a/systrace/catapult/systrace/systrace/systrace_trace_viewer.html b/systrace/catapult/systrace/systrace/systrace_trace_viewer.html
index 1b7fb39..ad9472e 100644
--- a/systrace/catapult/systrace/systrace/systrace_trace_viewer.html
+++ b/systrace/catapult/systrace/systrace/systrace_trace_viewer.html
@@ -108,7 +108,7 @@
text-decoration: underline;
}
</style>
- <a href="{{href}}" on-click="onClicked_" on-mouseenter="onMouseEnter_" on-mouseleave="onMouseLeave_"><content></content></a>
+ <a href="{{href}}" on-click="onClicked_" on-mouseenter="onMouseEnter_" on-mouseleave="onMouseLeave_"><slot></slot></a>
</template>
</dom-module><dom-module id="tr-ui-b-table">
@@ -614,23 +614,21 @@
</style>
<div class="header">
{{name}}
- <template if="{{_computeIf(richDetails)}}" is="dom-if">
+ <template if="{{_computeIfSKP(richDetails)}}" is="dom-if">
<a class="extra" download="drawing.skp" href$="{{_computeHref(richDetails)}}" on-click="{{stopPropagation}}">SKP</a>
</template>
</div>
<div class="details">
- <template if="{{rawDetails}}">
+ <template if="{{rawDetails}}" is="dom-if">
<div class="raw-details">{{rawDetails}}</div>
</template>
- <template bind="{{richDetails}}" if="{{richDetails}}" is="dom-if">
+ <template if="{{richDetails}}" is="dom-if">
<dl>
- <template bind="{{cullRect}}" if="{{cullRect}}" is="dom-if">
- <dt>Cull rect</dt>
- <dd>{{x}},{{y}} {{width}}×{{height}}</dd>
- </template>
- <template bind="{{visualRect}}" if="{{visualRect}}" is="dom-if">
+ <template if="{{richDetails.visualRect}}" is="dom-if">
<dt>Visual rect</dt>
- <dd>{{x}},{{y}} {{width}}×{{height}}</dd>
+ <dd>{{richDetails.visualRect.x}},{{richDetails.visualRect.y}}
+ {{richDetails.visualRect.width}}×{{richDetails.visualRect.height}}
+ </dd>
</template>
</dl>
</template>
@@ -655,7 +653,11 @@
</display-item-info>
</left-panel>
<right-panel>
- <raster-area><canvas></canvas></raster-area>
+ <raster-area>
+ <canvas-scroller>
+ <canvas></canvas>
+ </canvas-scroller>
+ </raster-area>
</right-panel>
</template><template id="quad-stack-view-template">
<style>
@@ -676,7 +678,9 @@
<div id="header"></div>
<input id="stacking-distance-slider" max="400" min="1" step="1" type="range"/>
- <canvas id="canvas"></canvas>
+ <div id="canvas-scroller">
+ <canvas id="canvas"></canvas>
+ </div>
<img id="chrome-left"/>
<img id="chrome-mid"/>
<img id="chrome-right"/>
@@ -756,6 +760,20 @@
</div>
<tr-ui-b-table id="content"></tr-ui-b-table>
</template>
+</dom-module><dom-module id="tr-ui-e-chrome-codesearch">
+ <template>
+ <style>
+ :host {
+ white-space: nowrap;
+ }
+ #codesearchLink {
+ font-size: x-small;
+ margin-left: 20px;
+ text-decoration: none;
+ }
+ </style>
+ <a id="codesearchLink" on-click="onClick" target="_blank">ðŸ”</a>
+ </template>
</dom-module><style>
.tr-ui-e-chrome-gpu-state-snapshot-view{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAEwATABMYqp3KAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB90JCQsBMCH7ZqYAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAUElEQVRYw+3WwQkAIAiF4Vc0hTO5/wiuURvYIcQOv1cRPhDlDXffSsrMsrYiQi/zU80FAACAVX3nt3lWAABA/x+ovnPyAAAA5AHyAAAA3wMOd34Xd+lsglgAAAAASUVORK5CYII=);display:flex;overflow:auto}.tr-ui-e-chrome-gpu-state-snapshot-view img{display:block;margin:16px auto 16px auto}
</style><dom-module id="tr-ui-a-layout-tree-sub-view">
@@ -938,6 +956,7 @@
</style>
<div style="padding-right: 200px">
<div style="float:right; border-style: solid; border-width: 1px; padding:20px">
+ X no feedback<br/>
0 uninitialized<br/>
. premonomorphic<br/>
1 monomorphic<br/>
@@ -1071,7 +1090,13 @@
#subView {
flex: 1 1 auto;
- overflow: auto;
+ min-width: 0;
+ display: flex;
+ }
+
+ #subView > * {
+ flex: 1 1 auto;
+ min-width: 0;
}
</style>
<div hidden="[[tabsHidden]]" id="tabs">
@@ -1089,8 +1114,8 @@
</template>
</div>
<div id="subView"></div>
- <content>
- </content>
+ <slot>
+ </slot>
</template>
</dom-module><dom-module id="tr-ui-a-memory-dump-heap-details-breakdown-view">
<template>
@@ -1528,25 +1553,10 @@
<div id="links"></div>
</template>
</dom-module><dom-module id="tr-v-ui-related-event-set-span">
-</dom-module><dom-module id="tr-v-ui-related-histogram-map-span">
- <template>
- <tr-ui-b-table id="table"></tr-ui-b-table>
- </template>
</dom-module><dom-module id="tr-v-ui-scalar-diagnostic-span">
<template>
<tr-v-ui-scalar-span id="scalar"></tr-v-ui-scalar-span>
</template>
-</dom-module><dom-module id="tr-v-ui-tag-map-span">
- <template>
- <style>
- #hide, #generic {
- display: none;
- }
- </style>
- <button id="show" on-click="onShow_">Show</button>
- <button id="hide" on-click="onHide_">Hide</button>
- <tr-ui-a-generic-object-view id="generic"></tr-ui-a-generic-object-view>
- </template>
</dom-module><dom-module id="tr-v-ui-unmergeable-diagnostic-set-span">
</dom-module><dom-module id="tr-v-ui-diagnostic-map-table">
<template>
@@ -1802,6 +1812,7 @@
#content {
display: flex;
flex: 1 1 auto;
+ min-width: 0;
}
#content > tr-ui-a-related-events {
margin-left: 8px;
@@ -1818,6 +1829,7 @@
}
#content {
flex: 1 1 auto;
+ min-width: 0;
}
</style>
<tr-ui-a-multi-event-sub-view id="content"></tr-ui-a-multi-event-sub-view>
@@ -2026,7 +2038,7 @@
vertical-align: top;
}
</style>
- <content></content>
+ <slot></slot>
</template>
</dom-module><dom-module id="tr-ui-a-power-sample-table">
<template>
@@ -2178,30 +2190,30 @@
height: 525px;
}
</style>
- <content></content>
+ <slot></slot>
</template>
</dom-module><dom-module id="tr-ui-b-dropdown">
<template>
<style>
button {
- @apply(--dropdown-button);
+ @apply --dropdown-button;
}
button.open {
- @apply(--dropdown-button-open);
+ @apply --dropdown-button-open;
}
dialog {
position: absolute;
margin: 0;
padding: 1em;
border: 1px solid darkgrey;
- @apply(--dropdown-dialog);
+ @apply --dropdown-dialog;
}
</style>
<button id="button" on-tap="open">[[label]]</button>
<dialog id="dialog" on-cancel="close" on-tap="onDialogTap_">
- <content></content>
+ <slot></slot>
</dialog>
</template>
</dom-module><dom-module id="tr-ui-b-info-bar-group">
@@ -2242,7 +2254,7 @@
}
</style>
<div id="aligner">
- <content></content>
+ <slot></slot>
</div>
</template>
</dom-module><style>
@@ -2271,7 +2283,7 @@
</style><style>
.thread-track{flex-direction:column;display:flex;position:relative}
</style><style>
-.process-track-header{flex:0 0 auto;background-image:-webkit-gradient(linear,0 0,100% 0,from(#E5E5E5),to(#D1D1D1));border-bottom:1px solid #8e8e8e;border-top:1px solid white;font-size:75%}.process-track-name:before{content:'\25B8';padding:0 5px}.process-track-base.expanded .process-track-name:before{content:'\25BE'}
+.process-track-header{display:flex;flex:0 0 auto;background-image:-webkit-gradient(linear,0 0,100% 0,from(#E5E5E5),to(#D1D1D1));border-bottom:1px solid #8e8e8e;border-top:1px solid white;font-size:75%}.process-track-name{flex-grow:1}.process-track-name:before{content:'\25B8';padding:0 5px}.process-track-base.expanded .process-track-name:before{content:'\25BE'}.process-track-close{color:black;border:1px solid transparent;padding:0px 2px}.process-track-close:hover{border:1px solid grey}
</style><style>
.model-track {
flex-grow: 1;
@@ -2312,7 +2324,7 @@
font-size: 8pt;
}
</style>
- <content></content>
+ <slot></slot>
<div id="drag_box"></div>
<div id="hint_text"></div>
@@ -2815,7 +2827,7 @@
tr-ui-b-drag-handle { flex: 0 0 auto; }
tr-ui-a-analysis-view { flex: 0 0 auto; }
- #view_options_dropdown {
+ #view_options_dropdown, #process_filter_dropdown {
--dropdown-button: {
-webkit-appearance: none;
align-items: normal;
@@ -2836,6 +2848,7 @@
<div id="left_controls"></div>
<div id="title">^_^</div>
<div id="right_controls">
+ <tr-ui-b-dropdown id="process_filter_dropdown" label="Processes"></tr-ui-b-dropdown>
<tr-ui-b-toolbar-button id="view_metadata_button">
M
</tr-ui-b-toolbar-button>
@@ -2854,7 +2867,7 @@
</tr-ui-b-info-bar-group>
</div>
<middle-container>
- <content></content>
+ <slot></slot>
<tr-ui-side-panel-container id="side_panel_container">
</tr-ui-side-panel-container>
@@ -3062,6 +3075,10 @@
margin-right: 20px;
}
+ #show_visualization {
+ margin-right: 20px;
+ }
+
#export {
margin-right: 20px;
}
@@ -3107,6 +3124,8 @@
<select id="statistic" value="{{displayStatisticName::change}}">
</select>
+ <button id="show_visualization" on-tap="loadVisualization_">Visualize</button>
+
<tr-ui-b-dropdown label="Export">
<tr-v-ui-histogram-set-controls-export>
</tr-v-ui-histogram-set-controls-export>
@@ -3332,6 +3351,221 @@
<tr-ui-b-table id="table">
</tr-ui-b-table></template>
+</dom-module><dom-module id="tr-v-ui-metrics-visualization">
+ <template>
+ <style>
+ button {
+ padding: 5px;
+ font-size: 14px;
+ }
+
+ .text_input {
+ width: 50px;
+ padding: 4px;
+ font-size: 14px;
+ }
+
+ .error {
+ color: red;
+ display: none;
+ }
+
+ .container {
+ position: relative;
+ display: inline-block;
+ margin-left: 15px;
+ }
+
+ #title {
+ font-size: 20px;
+ font-weight: bold;
+ padding-bottom: 5px;
+ }
+
+ #selectors {
+ display: block;
+ padding-bottom: 10px;
+ }
+
+ #search_page {
+ width: 200px;
+ margin-left: 30px;
+ }
+
+ #close {
+ display: none;
+ vertical-align: top;
+ }
+
+ #close svg{
+ height: 1em;
+ }
+
+ #close svg line {
+ stroke-width: 18;
+ stroke: black;
+ }
+
+ #close:hover svg {
+ background: black;
+ }
+
+ #close:hover svg line {
+ stroke: white;
+ }
+ </style>
+ <span class="container" id="aggregateContainer">
+ </span>
+ <span class="container" id="pageByPageContainer">
+ <span id="selectors">
+ <span id="percentile_label">Percentile Range:</span>
+ <input class="text_input" id="start" placeholder="0"/>
+ <input class="text_input" id="end" placeholder="100"/>
+ <button id="filter" on-tap="filterByPercentile_">Filter</button>
+ <input class="text_input" id="search_page" placeholder="Page Name"/>
+ <button id="search" on-tap="searchByPage_">Search</button>
+ <span class="error" id="search_error">Sorry, could not find that page!</span>
+ </span>
+ </span>
+ <div display="block" id="submetricsContainer">
+ <span id="close">
+ <svg viewBox="0 0 128 128">
+ <line x1="28" x2="100" y1="28" y2="100"></line>
+ <line x1="28" x2="100" y1="100" y2="28"></line>
+ </svg>
+ </span>
+ </div>
+ </template>
+</dom-module><dom-module id="tr-v-ui-raster-visualization">
+ <template>
+ <style>
+ button {
+ padding: 5px;
+ font-size: 14px;
+ }
+ .error {
+ color: red;
+ display: none;
+ }
+
+ .text_input {
+ width: 200px;
+ padding: 4px;
+ font-size: 14px;
+ }
+
+ .selector_container{
+ padding: 5px;
+ }
+
+ #search {
+ display: inline-block;
+ padding-bottom: 10px;
+ }
+
+ #search_page {
+ width: 200px;
+ }
+
+ #pageSelector {
+ display: inline-block;
+ font-size: 12pt;
+ }
+
+ #close {
+ display: none;
+ vertical-align: top;
+ }
+
+ #close svg{
+ height: 1em;
+ }
+
+ #close svg line {
+ stroke-width: 18;
+ stroke: black;
+ }
+
+ #close:hover svg {
+ background: black;
+ }
+
+ #close:hover svg line {
+ stroke: white;
+ }
+ </style>
+ <span id="aggregateContainer">
+ <div>
+ <div class="selector_container">
+ <span id="select_page_label">Individual Page Results:</span>
+ <select id="pageSelector">
+ <option id="select_page" value="">Select a page</option>
+ </select>
+ </div>
+ <div class="selector_container">
+ <div id="search_page_label">Search for a page:</div>
+ <input class="text_input" id="search_page" placeholder="Page Name"/>
+ <button id="search_button">Search</button>
+ <div class="error" id="search_error">Sorry, could not find that page!</div>
+ </div>
+ </div>
+ </span>
+ <span id="pageContainer">
+ <span id="close">
+ <svg viewBox="0 0 128 128">
+ <line x1="28" x2="100" y1="28" y2="100"></line>
+ <line x1="28" x2="100" y1="100" y2="28"></line>
+ </svg>
+ </span>
+ </span>
+ </template>
+</dom-module><meta charset="utf-8"/><dom-module id="tr-v-ui-visualizations-data-container">
+ <template>
+ <style>
+ .error {
+ color: red;
+ display: none;
+ }
+
+ .sample{
+ display: none;
+ }
+
+ .subtitle{
+ font-size: 20px;
+ font-weight: bold;
+ padding-bottom: 5px;
+ }
+
+ .description{
+ font-size: 15px;
+ padding-bottom: 5px;
+ }
+
+ #title {
+ font-size: 30px;
+ font-weight: bold;
+ padding-bottom: 5px;
+ }
+ </style>
+ <div id="title">Visualizations</div>
+ <div class="error" id="data_error">Invalid data provided.</div>
+ <div id="pipeline_per_frame_container">
+ <div class="subtitle">Graphics Pipeline and Raster Tasks</div>
+ <div class="description">
+ When raster tasks are completed in comparison to the rest of the graphics pipeline.<br/>
+ Only pages where raster tasks are completed after beginFrame is issued are included.
+ </div>
+ <tr-v-ui-raster-visualization id="rasterVisualization">
+ </tr-v-ui-raster-visualization>
+ </div>
+ <div id="metrics_container">
+ <div class="subtitle">Metrics</div>
+ <div class="description">Total amount of time taken for the indicated metrics.</div>
+ <tr-v-ui-metrics-visualization class="sample" id="metricsVisualization">
+ </tr-v-ui-metrics-visualization>
+ </div>
+ </template>
</dom-module><dom-module id="tr-v-ui-histogram-set-view">
<template>
<style>
@@ -3352,6 +3586,10 @@
#container {
display: none;
}
+
+ #visualizations{
+ display: none;
+ }
</style>
<div id="zero">zero Histograms</div>
@@ -3360,6 +3598,9 @@
<tr-v-ui-histogram-set-controls id="controls">
</tr-v-ui-histogram-set-controls>
+ <tr-v-ui-visualizations-data-container id="visualizations">
+ </tr-v-ui-visualizations-data-container>
+
<tr-v-ui-histogram-set-table id="table"></tr-v-ui-histogram-set-table>
</div>
</template>
@@ -3470,7 +3711,7 @@ if(attributes){this.mixin(this._aggregatedAttributes,attributes);}},_marshalHost
break;case Array:try{value=JSON.parse(value);}catch(x){value=null;console.warn('Polymer::Attributes: couldn`t decode Array as JSON');}
break;case Date:value=new Date(value);break;case String:default:break;}
return value;},serialize:function(value){switch(typeof value){case'boolean':return value?'':undefined;case'object':if(value instanceof Date){return value.toString();}else if(value){try{return JSON.stringify(value);}catch(x){return'';}}
-default:return value!=null?value:undefined;}}});Polymer.version="1.10.1";Polymer.Base._addFeature({_registerFeatures:function(){this._prepIs();this._prepBehaviors();this._prepConstructor();this._prepPropertyInfo();},_prepBehavior:function(b){this._addHostAttributes(b.hostAttributes);},_marshalBehavior:function(b){},_initFeatures:function(){this._marshalHostAttributes();this._marshalBehaviors();}});(function(){function resolveCss(cssText,ownerDocument){return cssText.replace(CSS_URL_RX,function(m,pre,url,post){return pre+'\''+resolve(url.replace(/["']/g,''),ownerDocument)+'\''+post;});}
+default:return value!=null?value:undefined;}}});Polymer.version="1.11.3";Polymer.Base._addFeature({_registerFeatures:function(){this._prepIs();this._prepBehaviors();this._prepConstructor();this._prepPropertyInfo();},_prepBehavior:function(b){this._addHostAttributes(b.hostAttributes);},_marshalBehavior:function(b){},_initFeatures:function(){this._marshalHostAttributes();this._marshalBehaviors();}});(function(){function resolveCss(cssText,ownerDocument){return cssText.replace(CSS_URL_RX,function(m,pre,url,post){return pre+'\''+resolve(url.replace(/["']/g,''),ownerDocument)+'\''+post;});}
function resolveAttrs(element,ownerDocument){for(var name in URL_ATTRS){var a$=URL_ATTRS[name];for(var i=0,l=a$.length,a,at,v;i<l&&(a=a$[i]);i++){if(name==='*'||element.localName===name){at=element.attributes[a];v=at&&at.value;if(v&&v.search(BINDING_RX)<0){at.value=a==='style'?resolveCss(v,ownerDocument):resolve(v,ownerDocument);}}}}}
function resolve(url,ownerDocument){if(url&&ABS_URL.test(url)){return url;}
var resolver=getUrlResolver(ownerDocument);resolver.href=url;return resolver.href||url;}
@@ -3673,9 +3914,10 @@ var bl=hbl.get(target);if(!bl){bl={};if(!Polymer.Settings.isIE||target!=window){
var key=this._boundListenerKey(eventName,methodName);bl[key]=handler;},_recallEventHandler:function(host,eventName,target,methodName){var hbl=host.__boundListeners;if(!hbl){return;}
var bl=hbl.get(target);if(!bl){return;}
var key=this._boundListenerKey(eventName,methodName);return bl[key];},_createEventHandler:function(node,eventName,methodName){var host=this;var handler=function(e){if(host[methodName]){host[methodName](e,e.detail);}else{host._warn(host._logf('_createEventHandler','listener method `'+methodName+'` not defined'));}};handler._listening=false;this._recordEventHandler(host,eventName,node,methodName,handler);return handler;},unlisten:function(node,eventName,methodName){var handler=this._recallEventHandler(this,eventName,node,methodName);if(handler){this._unlisten(node,eventName,handler);handler._listening=false;}},_listen:function(node,eventName,handler){node.addEventListener(eventName,handler);},_unlisten:function(node,eventName,handler){node.removeEventListener(eventName,handler);}});(function(){'use strict';var wrap=Polymer.DomApi.wrap;var HAS_NATIVE_TA=typeof document.head.style.touchAction==='string';var GESTURE_KEY='__polymerGestures';var HANDLED_OBJ='__polymerGesturesHandled';var TOUCH_ACTION='__polymerGesturesTouchAction';var TAP_DISTANCE=25;var TRACK_DISTANCE=5;var TRACK_LENGTH=2;var MOUSE_TIMEOUT=2500;var MOUSE_EVENTS=['mousedown','mousemove','mouseup','click'];var MOUSE_WHICH_TO_BUTTONS=[0,1,4,2];var MOUSE_HAS_BUTTONS=function(){try{return new MouseEvent('test',{buttons:1}).buttons===1;}catch(e){return false;}}();function isMouseEvent(name){return MOUSE_EVENTS.indexOf(name)>-1;}
-var SUPPORTS_PASSIVE=false;(function(){try{var opts=Object.defineProperty({},'passive',{get:function(){SUPPORTS_PASSIVE=true;}});window.addEventListener('test',null,opts);window.removeEventListener('test',null,opts);}catch(e){}}());function PASSIVE_TOUCH(){if(HAS_NATIVE_TA&&SUPPORTS_PASSIVE&&Polymer.Settings.passiveTouchGestures){return{passive:true};}}
+var SUPPORTS_PASSIVE=false;(function(){try{var opts=Object.defineProperty({},'passive',{get:function(){SUPPORTS_PASSIVE=true;}});window.addEventListener('test',null,opts);window.removeEventListener('test',null,opts);}catch(e){}}());function PASSIVE_TOUCH(eventName){if(isMouseEvent(eventName)||eventName==='touchend'){return;}
+if(HAS_NATIVE_TA&&SUPPORTS_PASSIVE&&Polymer.Settings.passiveTouchGestures){return{passive:true};}}
var IS_TOUCH_ONLY=navigator.userAgent.match(/iP(?:[oa]d|hone)|Android/);var mouseCanceller=function(mouseEvent){var sc=mouseEvent.sourceCapabilities;if(sc&&!sc.firesTouchEvents){return;}
-mouseEvent[HANDLED_OBJ]={skip:true};if(mouseEvent.type==='click'){var path=Polymer.dom(mouseEvent).path;for(var i=0;i<path.length;i++){if(path[i]===POINTERSTATE.mouse.target){return;}}
+mouseEvent[HANDLED_OBJ]={skip:true};if(mouseEvent.type==='click'){var path=Polymer.dom(mouseEvent).path;if(path){for(var i=0;i<path.length;i++){if(path[i]===POINTERSTATE.mouse.target){return;}}}
mouseEvent.preventDefault();mouseEvent.stopPropagation();}};function setupTeardownMouseCanceller(setup){var events=IS_TOUCH_ONLY?['click']:MOUSE_EVENTS;for(var i=0,en;i<events.length;i++){en=events[i];if(setup){document.addEventListener(en,mouseCanceller,true);}else{document.removeEventListener(en,mouseCanceller,true);}}}
function ignoreMouse(ev){if(!POINTERSTATE.mouse.mouseIgnoreJob){setupTeardownMouseCanceller(true);}
var unset=function(){setupTeardownMouseCanceller();POINTERSTATE.mouse.target=null;POINTERSTATE.mouse.mouseIgnoreJob=null;};POINTERSTATE.mouse.target=Polymer.dom(ev).rootTarget;POINTERSTATE.mouse.mouseIgnoreJob=Polymer.Debounce(POINTERSTATE.mouse.mouseIgnoreJob,unset,MOUSE_TIMEOUT);}
@@ -3703,9 +3945,9 @@ POINTERSTATE.touch.scrollDecided=true;var ta=firstTouchAction(ev);var prevent=fa
if(prevent){ev.preventDefault();}else{Gestures.prevent('track');}}},add:function(node,evType,handler){node=wrap(node);var recognizer=this.gestures[evType];var deps=recognizer.deps;var name=recognizer.name;var gobj=node[GESTURE_KEY];if(!gobj){node[GESTURE_KEY]=gobj={};}
for(var i=0,dep,gd;i<deps.length;i++){dep=deps[i];if(IS_TOUCH_ONLY&&isMouseEvent(dep)&&dep!=='click'){continue;}
gd=gobj[dep];if(!gd){gobj[dep]=gd={_count:0};}
-if(gd._count===0){var options=!isMouseEvent(dep)&&PASSIVE_TOUCH();node.addEventListener(dep,this.handleNative,options);}
+if(gd._count===0){node.addEventListener(dep,this.handleNative,PASSIVE_TOUCH(dep));}
gd[name]=(gd[name]||0)+1;gd._count=(gd._count||0)+1;}
-node.addEventListener(evType,handler);if(recognizer.touchAction){this.setTouchAction(node,recognizer.touchAction);}},remove:function(node,evType,handler){node=wrap(node);var recognizer=this.gestures[evType];var deps=recognizer.deps;var name=recognizer.name;var gobj=node[GESTURE_KEY];if(gobj){for(var i=0,dep,gd;i<deps.length;i++){dep=deps[i];gd=gobj[dep];if(gd&&gd[name]){gd[name]=(gd[name]||1)-1;gd._count=(gd._count||1)-1;if(gd._count===0){var options=!isMouseEvent(dep)&&PASSIVE_TOUCH();node.removeEventListener(dep,this.handleNative,options);}}}}
+node.addEventListener(evType,handler);if(recognizer.touchAction){this.setTouchAction(node,recognizer.touchAction);}},remove:function(node,evType,handler){node=wrap(node);var recognizer=this.gestures[evType];var deps=recognizer.deps;var name=recognizer.name;var gobj=node[GESTURE_KEY];if(gobj){for(var i=0,dep,gd;i<deps.length;i++){dep=deps[i];gd=gobj[dep];if(gd&&gd[name]){gd[name]=(gd[name]||1)-1;gd._count=(gd._count||1)-1;if(gd._count===0){node.removeEventListener(dep,this.handleNative,PASSIVE_TOUCH(dep));}}}}
node.removeEventListener(evType,handler);},register:function(recog){this.recognizers.push(recog);for(var i=0;i<recog.emits.length;i++){this.gestures[recog.emits[i]]=recog;}},findRecognizerByEvent:function(evName){for(var i=0,r;i<this.recognizers.length;i++){r=this.recognizers[i];for(var j=0,n;j<r.emits.length;j++){n=r.emits[j];if(n===evName){return r;}}}
return null;},setTouchAction:function(node,value){if(HAS_NATIVE_TA){node.style.touchAction=value;}
node[TOUCH_ACTION]=value;},fire:function(target,type,detail){var ev=Polymer.Base.fire(type,detail,{node:target,bubbles:true,cancelable:true});if(ev.defaultPrevented){var preventer=detail.preventer||detail.sourceEvent;if(preventer&&preventer.preventDefault){preventer.preventDefault();}}},prevent:function(evName){var recognizer=this.findRecognizerByEvent(evName);if(recognizer.info){recognizer.info.prevent=true;}},resetMouseCanceller:function(){if(POINTERSTATE.mouse.mouseIgnoreJob){POINTERSTATE.mouse.mouseIgnoreJob.complete();}}};Gestures.register({name:'downup',deps:['mousedown','touchstart','touchend'],flow:{start:['mousedown','touchstart'],end:['mouseup','touchend']},emits:['down','up'],info:{movefn:null,upfn:null},reset:function(){untrackDocument(this.info);},mousedown:function(e){if(!hasLeftMouseButton(e)){return;}
@@ -3797,7 +4039,7 @@ return node;},_expandUnicodeEscapes:function(s){return s.replace(/\\([0-9a-f]{1,
return'\\'+code;});},stringify:function(node,preserveProperties,text){text=text||'';var cssText='';if(node.cssText||node.rules){var r$=node.rules;if(r$&&!this._hasMixinRules(r$)){for(var i=0,l=r$.length,r;i<l&&(r=r$[i]);i++){cssText=this.stringify(r,preserveProperties,cssText);}}else{cssText=preserveProperties?node.cssText:this.removeCustomProps(node.cssText);cssText=cssText.trim();if(cssText){cssText=' '+cssText+'\n';}}}
if(cssText){if(node.selector){text+=node.selector+' '+this.OPEN_BRACE+'\n';}
text+=cssText;if(node.selector){text+=this.CLOSE_BRACE+'\n\n';}}
-return text;},_hasMixinRules:function(rules){return rules[0].selector.indexOf(this.VAR_START)===0;},removeCustomProps:function(cssText){cssText=this.removeCustomPropAssignment(cssText);return this.removeCustomPropApply(cssText);},removeCustomPropAssignment:function(cssText){return cssText.replace(this._rx.customProp,'').replace(this._rx.mixinProp,'');},removeCustomPropApply:function(cssText){return cssText.replace(this._rx.mixinApply,'').replace(this._rx.varApply,'');},types:{STYLE_RULE:1,KEYFRAMES_RULE:7,MEDIA_RULE:4,MIXIN_RULE:1000},OPEN_BRACE:'{',CLOSE_BRACE:'}',_rx:{comments:/\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim,port:/@import[^;]*;/gim,customProp:/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,mixinProp:/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,mixinApply:/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,varApply:/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,keyframesRule:/^@[^\s]*keyframes/,multipleSpaces:/\s+/g},VAR_START:'--',MEDIA_START:'@media',AT_START:'@'};}();Polymer.StyleUtil=function(){var settings=Polymer.Settings;return{NATIVE_VARIABLES:Polymer.Settings.useNativeCSSProperties,MODULE_STYLES_SELECTOR:'style, link[rel=import][type~=css], template',INCLUDE_ATTR:'include',toCssText:function(rules,callback){if(typeof rules==='string'){rules=this.parser.parse(rules);}
+return text;},_hasMixinRules:function(rules){return rules[0].selector.indexOf(this.VAR_START)===0;},removeCustomProps:function(cssText){cssText=this.removeCustomPropAssignment(cssText);return this.removeCustomPropApply(cssText);},removeCustomPropAssignment:function(cssText){return cssText.replace(this._rx.customProp,'').replace(this._rx.mixinProp,'');},removeCustomPropApply:function(cssText){return cssText.replace(this._rx.mixinApply,'').replace(this._rx.varApply,'');},types:{STYLE_RULE:1,KEYFRAMES_RULE:7,MEDIA_RULE:4,MIXIN_RULE:1000},OPEN_BRACE:'{',CLOSE_BRACE:'}',_rx:{comments:/\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim,port:/@import[^;]*;/gim,customProp:/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,mixinProp:/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,mixinApply:/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,varApply:/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,keyframesRule:/^@[^\s]*keyframes/,multipleSpaces:/\s+/g},VAR_START:'--',MEDIA_START:'@media',AT_START:'@'};}();Polymer.StyleUtil=function(){var settings=Polymer.Settings;return{unscopedStyleImports:new WeakMap(),SHADY_UNSCOPED_ATTR:'shady-unscoped',NATIVE_VARIABLES:Polymer.Settings.useNativeCSSProperties,MODULE_STYLES_SELECTOR:'style, link[rel=import][type~=css], template',INCLUDE_ATTR:'include',toCssText:function(rules,callback){if(typeof rules==='string'){rules=this.parser.parse(rules);}
if(callback){this.forEachRule(rules,callback);}
return this.parser.stringify(rules,this.NATIVE_VARIABLES);},forRulesInStyles:function(styles,styleRuleCallback,keyframesRuleCallback){if(styles){for(var i=0,l=styles.length,s;i<l&&(s=styles[i]);i++){this.forEachRuleInStyle(s,styleRuleCallback,keyframesRuleCallback);}}},forActiveRulesInStyles:function(styles,styleRuleCallback,keyframesRuleCallback){if(styles){for(var i=0,l=styles.length,s;i<l&&(s=styles[i]);i++){this.forEachRuleInStyle(s,styleRuleCallback,keyframesRuleCallback,true);}}},rulesForStyle:function(style){if(!style.__cssRules&&style.textContent){style.__cssRules=this.parser.parse(style.textContent);}
return style.__cssRules;},isKeyframesSelector:function(rule){return rule.parent&&rule.parent.type===this.ruleTypes.KEYFRAMES_RULE;},forEachRuleInStyle:function(style,styleRuleCallback,keyframesRuleCallback,onlyActiveRules){var rules=this.rulesForStyle(style);var styleCallback,keyframeCallback;if(styleRuleCallback){styleCallback=function(rule){styleRuleCallback(rule,style);};}
@@ -3806,11 +4048,11 @@ this.forEachRule(rules,styleCallback,keyframeCallback,onlyActiveRules);},forEach
var skipRules=false;if(onlyActiveRules){if(node.type===this.ruleTypes.MEDIA_RULE){var matchMedia=node.selector.match(this.rx.MEDIA_MATCH);if(matchMedia){if(!window.matchMedia(matchMedia[1]).matches){skipRules=true;}}}}
if(node.type===this.ruleTypes.STYLE_RULE){styleRuleCallback(node);}else if(keyframesRuleCallback&&node.type===this.ruleTypes.KEYFRAMES_RULE){keyframesRuleCallback(node);}else if(node.type===this.ruleTypes.MIXIN_RULE){skipRules=true;}
var r$=node.rules;if(r$&&!skipRules){for(var i=0,l=r$.length,r;i<l&&(r=r$[i]);i++){this.forEachRule(r,styleRuleCallback,keyframesRuleCallback,onlyActiveRules);}}},applyCss:function(cssText,moniker,target,contextNode){var style=this.createScopeStyle(cssText,moniker);return this.applyStyle(style,target,contextNode);},applyStyle:function(style,target,contextNode){target=target||document.head;var after=contextNode&&contextNode.nextSibling||target.firstChild;this.__lastHeadApplyNode=style;return target.insertBefore(style,after);},createScopeStyle:function(cssText,moniker){var style=document.createElement('style');if(moniker){style.setAttribute('scope',moniker);}
-style.textContent=cssText;return style;},__lastHeadApplyNode:null,applyStylePlaceHolder:function(moniker){var placeHolder=document.createComment(' Shady DOM styles for '+moniker+' ');var after=this.__lastHeadApplyNode?this.__lastHeadApplyNode.nextSibling:null;var scope=document.head;scope.insertBefore(placeHolder,after||scope.firstChild);this.__lastHeadApplyNode=placeHolder;return placeHolder;},cssFromModules:function(moduleIds,warnIfNotFound){var modules=moduleIds.trim().split(' ');var cssText='';for(var i=0;i<modules.length;i++){cssText+=this.cssFromModule(modules[i],warnIfNotFound);}
+style.textContent=cssText;return style;},__lastHeadApplyNode:null,applyStylePlaceHolder:function(moniker){var placeHolder=document.createComment(' Shady DOM styles for '+moniker+' ');var after=this.__lastHeadApplyNode?this.__lastHeadApplyNode.nextSibling:null;var scope=document.head;scope.insertBefore(placeHolder,after||scope.firstChild);this.__lastHeadApplyNode=placeHolder;return placeHolder;},cssFromModules:function(moduleIds,warnIfNotFound){var modules=moduleIds.trim().split(/\s+/);var cssText='';for(var i=0;i<modules.length;i++){cssText+=this.cssFromModule(modules[i],warnIfNotFound);}
return cssText;},cssFromModule:function(moduleId,warnIfNotFound){var m=Polymer.DomModule.import(moduleId);if(m&&!m._cssText){m._cssText=this.cssFromElement(m);}
if(!m&&warnIfNotFound){console.warn('Could not find style data in module named',moduleId);}
return m&&m._cssText||'';},cssFromElement:function(element){var cssText='';var content=element.content||element;var e$=Polymer.TreeApi.arrayCopy(content.querySelectorAll(this.MODULE_STYLES_SELECTOR));for(var i=0,e;i<e$.length;i++){e=e$[i];if(e.localName==='template'){if(!e.hasAttribute('preserve-content')){cssText+=this.cssFromElement(e);}}else{if(e.localName==='style'){var include=e.getAttribute(this.INCLUDE_ATTR);if(include){cssText+=this.cssFromModules(include,true);}
-e=e.__appliedElement||e;e.parentNode.removeChild(e);cssText+=this.resolveCss(e.textContent,element.ownerDocument);}else if(e.import&&e.import.body){cssText+=this.resolveCss(e.import.body.textContent,e.import);}}}
+e=e.__appliedElement||e;e.parentNode.removeChild(e);var css=this.resolveCss(e.textContent,element.ownerDocument);if(!settings.useNativeShadow&&e.hasAttribute(this.SHADY_UNSCOPED_ATTR)){e.textContent=css;document.head.insertBefore(e,document.head.firstChild);}else{cssText+=css;}}else if(e.import&&e.import.body){var importCss=this.resolveCss(e.import.body.textContent,e.import);if(!settings.useNativeShadow&&e.hasAttribute(this.SHADY_UNSCOPED_ATTR)){if(!this.unscopedStyleImports.has(e.import)){this.unscopedStyleImports.set(e.import,true);var importStyle=document.createElement('style');importStyle.setAttribute(this.SHADY_UNSCOPED_ATTR,'');importStyle.textContent=importCss;document.head.insertBefore(importStyle,document.head.firstChild);}}else{cssText+=importCss;}}}}
return cssText;},styleIncludesToTemplate:function(targetTemplate){var styles=targetTemplate.content.querySelectorAll('style[include]');for(var i=0,s;i<styles.length;i++){s=styles[i];s.parentNode.insertBefore(this._includesToFragment(s.getAttribute('include')),s);}},_includesToFragment:function(styleIncludes){var includeArray=styleIncludes.trim().split(' ');var frag=document.createDocumentFragment();for(var i=0;i<includeArray.length;i++){var t=Polymer.DomModule.import(includeArray[i],'template');if(t){this._addStylesToFragment(frag,t.content);}}
return frag;},_addStylesToFragment:function(frag,source){var s$=source.querySelectorAll('style');for(var i=0,s;i<s$.length;i++){s=s$[i];var include=s.getAttribute('include');if(include){frag.appendChild(this._includesToFragment(include));}
if(s.textContent){frag.appendChild(s.cloneNode(true));}}},isTargetedBuild:function(buildType){return settings.useNativeShadow?buildType==='shadow':buildType==='shady';},cssBuildTypeForModule:function(module){var dm=Polymer.DomModule.import(module);if(dm){return this.getCssBuildType(dm);}},getCssBuildType:function(element){return element.getAttribute('css-build');},_findMatchingParen:function(text,start){var level=0;for(var i=start,l=text.length;i<l;i++){switch(text[i]){case'(':level++;break;case')':if(--level===0){return i;}
@@ -3818,16 +4060,25 @@ break;}}
return-1;},processVariableAndFallback:function(str,callback){var start=str.indexOf('var(');if(start===-1){return callback(str,'','','');}
var end=this._findMatchingParen(str,start+3);var inner=str.substring(start+4,end);var prefix=str.substring(0,start);var suffix=this.processVariableAndFallback(str.substring(end+1),callback);var comma=inner.indexOf(',');if(comma===-1){return callback(prefix,inner.trim(),'',suffix);}
var value=inner.substring(0,comma).trim();var fallback=inner.substring(comma+1).trim();return callback(prefix,value,fallback,suffix);},rx:{VAR_ASSIGN:/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:([^;{]*)|{([^}]*)})(?:(?=[;\s}])|$)/gi,MIXIN_MATCH:/(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,VAR_CONSUMED:/(--[\w-]+)\s*([:,;)]|$)/gi,ANIMATION_MATCH:/(animation\s*:)|(animation-name\s*:)/,MEDIA_MATCH:/@media[^(]*(\([^)]*\))/,IS_VAR:/^--/,BRACKETED:/\{[^}]*\}/g,HOST_PREFIX:'(?:^|[^.#[:])',HOST_SUFFIX:'($|[.:[\\s>+~])'},resolveCss:Polymer.ResolveUrl.resolveCss,parser:Polymer.CssParse,ruleTypes:Polymer.CssParse.types};}();Polymer.StyleTransformer=function(){var styleUtil=Polymer.StyleUtil;var settings=Polymer.Settings;var api={dom:function(node,scope,useAttr,shouldRemoveScope){this._transformDom(node,scope||'',useAttr,shouldRemoveScope);},_transformDom:function(node,selector,useAttr,shouldRemoveScope){if(node.setAttribute){this.element(node,selector,useAttr,shouldRemoveScope);}
-var c$=Polymer.dom(node).childNodes;for(var i=0;i<c$.length;i++){this._transformDom(c$[i],selector,useAttr,shouldRemoveScope);}},element:function(element,scope,useAttr,shouldRemoveScope){if(useAttr){if(shouldRemoveScope){element.removeAttribute(SCOPE_NAME);}else{element.setAttribute(SCOPE_NAME,scope);}}else{if(scope){if(element.classList){if(shouldRemoveScope){element.classList.remove(SCOPE_NAME);element.classList.remove(scope);}else{element.classList.add(SCOPE_NAME);element.classList.add(scope);}}else if(element.getAttribute){var c=element.getAttribute(CLASS);if(shouldRemoveScope){if(c){element.setAttribute(CLASS,c.replace(SCOPE_NAME,'').replace(scope,''));}}else{element.setAttribute(CLASS,(c?c+' ':'')+SCOPE_NAME+' '+scope);}}}}},elementStyles:function(element,callback){var styles=element._styles;var cssText='';var cssBuildType=element.__cssBuild;var passthrough=settings.useNativeShadow||cssBuildType==='shady';var cb;if(passthrough){var self=this;cb=function(rule){rule.selector=self._slottedToContent(rule.selector);rule.selector=rule.selector.replace(ROOT,':host > *');if(callback){callback(rule);}};}
+var c$=Polymer.dom(node).childNodes;for(var i=0;i<c$.length;i++){this._transformDom(c$[i],selector,useAttr,shouldRemoveScope);}},element:function(element,scope,useAttr,shouldRemoveScope){if(useAttr){if(shouldRemoveScope){element.removeAttribute(SCOPE_NAME);}else{element.setAttribute(SCOPE_NAME,scope);}}else{if(scope){if(element.classList){if(shouldRemoveScope){element.classList.remove(SCOPE_NAME);element.classList.remove(scope);}else{element.classList.add(SCOPE_NAME);element.classList.add(scope);}}else if(element.getAttribute){var c=element.getAttribute(CLASS);if(shouldRemoveScope){if(c){element.setAttribute(CLASS,c.replace(SCOPE_NAME,'').replace(scope,''));}}else{element.setAttribute(CLASS,(c?c+' ':'')+SCOPE_NAME+' '+scope);}}}}},elementStyles:function(element,callback){var styles=element._styles;var cssText='';var cssBuildType=element.__cssBuild;var passthrough=settings.useNativeShadow||cssBuildType==='shady';var cb;if(passthrough){var self=this;cb=function(rule){rule.selector=self._slottedToContent(rule.selector);rule.selector=rule.selector.replace(ROOT,':host > *');rule.selector=self._dirShadowTransform(rule.selector);if(callback){callback(rule);}};}
for(var i=0,l=styles.length,s;i<l&&(s=styles[i]);i++){var rules=styleUtil.rulesForStyle(s);cssText+=passthrough?styleUtil.toCssText(rules,cb):this.css(rules,element.is,element.extends,callback,element._scopeCssViaAttr)+'\n\n';}
return cssText.trim();},css:function(rules,scope,ext,callback,useAttr){var hostScope=this._calcHostScope(scope,ext);scope=this._calcElementScope(scope,useAttr);var self=this;return styleUtil.toCssText(rules,function(rule){if(!rule.isScoped){self.rule(rule,scope,hostScope);rule.isScoped=true;}
-if(callback){callback(rule,scope,hostScope);}});},_calcElementScope:function(scope,useAttr){if(scope){return useAttr?CSS_ATTR_PREFIX+scope+CSS_ATTR_SUFFIX:CSS_CLASS_PREFIX+scope;}else{return'';}},_calcHostScope:function(scope,ext){return ext?'[is='+scope+']':scope;},rule:function(rule,scope,hostScope){this._transformRule(rule,this._transformComplexSelector,scope,hostScope);},_transformRule:function(rule,transformer,scope,hostScope){rule.selector=rule.transformedSelector=this._transformRuleCss(rule,transformer,scope,hostScope);},_transformRuleCss:function(rule,transformer,scope,hostScope){var p$=rule.selector.split(COMPLEX_SELECTOR_SEP);if(!styleUtil.isKeyframesSelector(rule)){for(var i=0,l=p$.length,p;i<l&&(p=p$[i]);i++){p$[i]=transformer.call(this,p,scope,hostScope);}}
-return p$.join(COMPLEX_SELECTOR_SEP);},_transformComplexSelector:function(selector,scope,hostScope){var stop=false;var hostContext=false;var self=this;selector=selector.trim();selector=this._slottedToContent(selector);selector=selector.replace(ROOT,':host > *');selector=selector.replace(CONTENT_START,HOST+' $1');selector=selector.replace(SIMPLE_SELECTOR_SEP,function(m,c,s){if(!stop){var info=self._transformCompoundSelector(s,c,scope,hostScope);stop=stop||info.stop;hostContext=hostContext||info.hostContext;c=info.combinator;s=info.value;}else{s=s.replace(SCOPE_JUMP,' ');}
-return c+s;});if(hostContext){selector=selector.replace(HOST_CONTEXT_PAREN,function(m,pre,paren,post){return pre+paren+' '+hostScope+post+COMPLEX_SELECTOR_SEP+' '+pre+hostScope+paren+post;});}
-return selector;},_transformCompoundSelector:function(selector,combinator,scope,hostScope){var jumpIndex=selector.search(SCOPE_JUMP);var hostContext=false;if(selector.indexOf(HOST_CONTEXT)>=0){hostContext=true;}else if(selector.indexOf(HOST)>=0){selector=this._transformHostSelector(selector,hostScope);}else if(jumpIndex!==0){selector=scope?this._transformSimpleSelector(selector,scope):selector;}
+if(callback){callback(rule,scope,hostScope);}});},_calcElementScope:function(scope,useAttr){if(scope){return useAttr?CSS_ATTR_PREFIX+scope+CSS_ATTR_SUFFIX:CSS_CLASS_PREFIX+scope;}else{return'';}},_calcHostScope:function(scope,ext){return ext?'[is='+scope+']':scope;},rule:function(rule,scope,hostScope){this._transformRule(rule,this._transformComplexSelector,scope,hostScope);},_transformRule:function(rule,transformer,scope,hostScope){rule.selector=rule.transformedSelector=this._transformRuleCss(rule,transformer,scope,hostScope);},_splitSelectorList:function(selector){var parts=[];var part='';for(var i=0;i>=0&&i<selector.length;i++){if(selector[i]==='('){var end=styleUtil._findMatchingParen(selector,i);part+=selector.slice(i,end+1);i=end;}else if(selector[i]===COMPLEX_SELECTOR_SEP){parts.push(part);part='';}else{part+=selector[i];}}
+if(part){parts.push(part);}
+if(parts.length===0){parts.push(selector);}
+return parts;},_transformRuleCss:function(rule,transformer,scope,hostScope){var p$=this._splitSelectorList(rule.selector);if(!styleUtil.isKeyframesSelector(rule)){for(var i=0,l=p$.length,p;i<l&&(p=p$[i]);i++){p$[i]=transformer.call(this,p,scope,hostScope);}}
+return p$.join(COMPLEX_SELECTOR_SEP);},_ensureScopedDir:function(s){var m=s.match(DIR_PAREN);if(m&&m[1]===''&&m[0].length===s.length){s='*'+s;}
+return s;},_additionalDirSelectors:function(dir,after,prefix){if(!dir||!after){return'';}
+prefix=prefix||'';return COMPLEX_SELECTOR_SEP+prefix+' '+dir+' '+after;},_transformComplexSelector:function(selector,scope,hostScope){var stop=false;var hostContext=false;var dir=false;var self=this;selector=selector.trim();selector=this._slottedToContent(selector);selector=selector.replace(ROOT,':host > *');selector=selector.replace(CONTENT_START,HOST+' $1');selector=this._ensureScopedDir(selector);selector=selector.replace(SIMPLE_SELECTOR_SEP,function(m,c,s){if(!stop){var info=self._transformCompoundSelector(s,c,scope,hostScope);stop=stop||info.stop;hostContext=hostContext||info.hostContext;dir=dir||info.dir;c=info.combinator;s=info.value;}else{s=s.replace(SCOPE_JUMP,' ');}
+return c+s;});if(hostContext){selector=selector.replace(HOST_CONTEXT_PAREN,function(m,pre,paren,post){var replacement=pre+paren+' '+hostScope+post+COMPLEX_SELECTOR_SEP+' '+pre+hostScope+paren+post;if(dir){replacement+=self._additionalDirSelectors(paren,post,hostScope);}
+return replacement;});}
+return selector;},_transformDir:function(s){s=s.replace(HOST_DIR,HOST_DIR_REPLACE);s=s.replace(DIR_PAREN,DIR_REPLACE);return s;},_transformCompoundSelector:function(selector,combinator,scope,hostScope){var jumpIndex=selector.search(SCOPE_JUMP);var hostContext=false;var dir=false;if(selector.match(DIR_PAREN)){selector=this._transformDir(selector);dir=true;}
+if(selector.indexOf(HOST_CONTEXT)>=0){hostContext=true;}else if(selector.indexOf(HOST)>=0){selector=this._transformHostSelector(selector,hostScope);}else if(jumpIndex!==0){selector=scope?this._transformSimpleSelector(selector,scope):selector;}
if(selector.indexOf(CONTENT)>=0){combinator='';}
var stop;if(jumpIndex>=0){selector=selector.replace(SCOPE_JUMP,' ');stop=true;}
-return{value:selector,combinator:combinator,stop:stop,hostContext:hostContext};},_transformSimpleSelector:function(selector,scope){var p$=selector.split(PSEUDO_PREFIX);p$[0]+=scope;return p$.join(PSEUDO_PREFIX);},_transformHostSelector:function(selector,hostScope){var m=selector.match(HOST_PAREN);var paren=m&&m[2].trim()||'';if(paren){if(!paren[0].match(SIMPLE_SELECTOR_PREFIX)){var typeSelector=paren.split(SIMPLE_SELECTOR_PREFIX)[0];if(typeSelector===hostScope){return paren;}else{return SELECTOR_NO_MATCH;}}else{return selector.replace(HOST_PAREN,function(m,host,paren){return hostScope+paren;});}}else{return selector.replace(HOST,hostScope);}},documentRule:function(rule){rule.selector=rule.parsedSelector;this.normalizeRootSelector(rule);if(!settings.useNativeShadow){this._transformRule(rule,this._transformDocumentSelector);}},normalizeRootSelector:function(rule){rule.selector=rule.selector.replace(ROOT,'html');var parts=rule.selector.split(COMPLEX_SELECTOR_SEP);parts=parts.filter(function(part){return!part.match(HOST_OR_HOST_GT_STAR);});rule.selector=parts.join(COMPLEX_SELECTOR_SEP);},_transformDocumentSelector:function(selector){return selector.match(SCOPE_JUMP)?this._transformComplexSelector(selector,SCOPE_DOC_SELECTOR):this._transformSimpleSelector(selector.trim(),SCOPE_DOC_SELECTOR);},_slottedToContent:function(cssText){return cssText.replace(SLOTTED_PAREN,CONTENT+'> $1');},SCOPE_NAME:'style-scope'};var SCOPE_NAME=api.SCOPE_NAME;var SCOPE_DOC_SELECTOR=':not(['+SCOPE_NAME+'])'+':not(.'+SCOPE_NAME+')';var COMPLEX_SELECTOR_SEP=',';var SIMPLE_SELECTOR_SEP=/(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=\[])+)/g;var SIMPLE_SELECTOR_PREFIX=/[[.:#*]/;var HOST=':host';var ROOT=':root';var HOST_PAREN=/(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/;var HOST_CONTEXT=':host-context';var HOST_CONTEXT_PAREN=/(.*)(?::host-context)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))(.*)/;var CONTENT='::content';var SCOPE_JUMP=/::content|::shadow|\/deep\//;var CSS_CLASS_PREFIX='.';var CSS_ATTR_PREFIX='['+SCOPE_NAME+'~=';var CSS_ATTR_SUFFIX=']';var PSEUDO_PREFIX=':';var CLASS='class';var CONTENT_START=new RegExp('^('+CONTENT+')');var SELECTOR_NO_MATCH='should_not_match';var SLOTTED_PAREN=/(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/g;var HOST_OR_HOST_GT_STAR=/:host(?:\s*>\s*\*)?/;return api;}();Polymer.StyleExtends=function(){var styleUtil=Polymer.StyleUtil;return{hasExtends:function(cssText){return Boolean(cssText.match(this.rx.EXTEND));},transform:function(style){var rules=styleUtil.rulesForStyle(style);var self=this;styleUtil.forEachRule(rules,function(rule){self._mapRuleOntoParent(rule);if(rule.parent){var m;while(m=self.rx.EXTEND.exec(rule.cssText)){var extend=m[1];var extendor=self._findExtendor(extend,rule);if(extendor){self._extendRule(rule,extendor);}}}
+return{value:selector,combinator:combinator,stop:stop,hostContext:hostContext,dir:dir};},_transformSimpleSelector:function(selector,scope){var p$=selector.split(PSEUDO_PREFIX);p$[0]+=scope;return p$.join(PSEUDO_PREFIX);},_transformHostSelector:function(selector,hostScope){var m=selector.match(HOST_PAREN);var paren=m&&m[2].trim()||'';if(paren){if(!paren[0].match(SIMPLE_SELECTOR_PREFIX)){var typeSelector=paren.split(SIMPLE_SELECTOR_PREFIX)[0];if(typeSelector===hostScope){return paren;}else{return SELECTOR_NO_MATCH;}}else{return selector.replace(HOST_PAREN,function(m,host,paren){return hostScope+paren;});}}else{return selector.replace(HOST,hostScope);}},documentRule:function(rule){rule.selector=rule.parsedSelector;this.normalizeRootSelector(rule);if(!settings.useNativeShadow){this._transformRule(rule,this._transformDocumentSelector);}},normalizeRootSelector:function(rule){rule.selector=rule.selector.replace(ROOT,'html');var parts=this._splitSelectorList(rule.selector);parts=parts.filter(function(part){return!part.match(HOST_OR_HOST_GT_STAR);});rule.selector=parts.join(COMPLEX_SELECTOR_SEP);},_transformDocumentSelector:function(selector){return this._transformComplexSelector(selector,SCOPE_DOC_SELECTOR);},_slottedToContent:function(cssText){return cssText.replace(SLOTTED_PAREN,CONTENT+'> $1');},_dirShadowTransform:function(selector){if(!selector.match(/:dir\(/)){return selector;}
+return this._splitSelectorList(selector).map(function(s){s=this._ensureScopedDir(s);s=this._transformDir(s);var m=HOST_CONTEXT_PAREN.exec(s);if(m){s+=this._additionalDirSelectors(m[2],m[3],'');}
+return s;},this).join(COMPLEX_SELECTOR_SEP);},SCOPE_NAME:'style-scope'};var SCOPE_NAME=api.SCOPE_NAME;var SCOPE_DOC_SELECTOR=':not(['+SCOPE_NAME+'])'+':not(.'+SCOPE_NAME+')';var COMPLEX_SELECTOR_SEP=',';var SIMPLE_SELECTOR_SEP=/(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=\[])+)/g;var SIMPLE_SELECTOR_PREFIX=/[[.:#*]/;var HOST=':host';var ROOT=':root';var HOST_PAREN=/(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/;var HOST_CONTEXT=':host-context';var HOST_CONTEXT_PAREN=/(.*)(?::host-context)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))(.*)/;var CONTENT='::content';var SCOPE_JUMP=/::content|::shadow|\/deep\//;var CSS_CLASS_PREFIX='.';var CSS_ATTR_PREFIX='['+SCOPE_NAME+'~=';var CSS_ATTR_SUFFIX=']';var PSEUDO_PREFIX=':';var CLASS='class';var CONTENT_START=new RegExp('^('+CONTENT+')');var SELECTOR_NO_MATCH='should_not_match';var SLOTTED_PAREN=/(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/g;var HOST_OR_HOST_GT_STAR=/:host(?:\s*>\s*\*)?/;var DIR_PAREN=/(.*):dir\((ltr|rtl)\)/;var DIR_REPLACE=':host-context([dir="$2"]) $1';var HOST_DIR=/:host\(:dir\((rtl|ltr)\)\)/g;var HOST_DIR_REPLACE=':host-context([dir="$1"])';return api;}();Polymer.StyleExtends=function(){var styleUtil=Polymer.StyleUtil;return{hasExtends:function(cssText){return Boolean(cssText.match(this.rx.EXTEND));},transform:function(style){var rules=styleUtil.rulesForStyle(style);var self=this;styleUtil.forEachRule(rules,function(rule){self._mapRuleOntoParent(rule);if(rule.parent){var m;while(m=self.rx.EXTEND.exec(rule.cssText)){var extend=m[1];var extendor=self._findExtendor(extend,rule);if(extendor){self._extendRule(rule,extendor);}}}
rule.cssText=rule.cssText.replace(self.rx.EXTEND,'');});return styleUtil.toCssText(rules,function(rule){if(rule.selector.match(self.rx.STRIP)){rule.cssText='';}},true);},_mapRuleOntoParent:function(rule){if(rule.parent){var map=rule.parent.map||(rule.parent.map={});var parts=rule.selector.split(',');for(var i=0,p;i<parts.length;i++){p=parts[i];map[p.trim()]=rule;}
return map;}},_findExtendor:function(extend,rule){return rule.parent&&rule.parent.map&&rule.parent.map[extend]||this._findExtendor(extend,rule.parent);},_extendRule:function(target,source){if(target.parent!==source.parent){this._cloneAndAddRuleToParent(source,target.parent);}
target.extends=target.extends||[];target.extends.push(source);source.selector=source.selector.replace(this.rx.STRIP,'');source.selector=(source.selector&&source.selector+',\n')+target.selector;if(source.extends){source.extends.forEach(function(e){this._extendRule(target,e);},this);}},_cloneAndAddRuleToParent:function(rule,parent){rule=Object.create(rule);rule.parent=parent;if(rule.extends){rule.extends=rule.extends.slice();}
@@ -3893,7 +4144,7 @@ var selectorToMatch=hostScope;if(isHost){if(settings.useNativeShadow&&!rule.tran
selectorToMatch=rule.transformedSelector||rule.parsedSelector;}
if(isRoot&&hostScope==='html'){selectorToMatch=rule.transformedSelector||rule.parsedSelector;}
callback({selector:selectorToMatch,isHost:isHost,isRoot:isRoot});},hostAndRootPropertiesForScope:function(scope){var hostProps={},rootProps={},self=this;styleUtil.forActiveRulesInStyles(scope._styles,function(rule,style){self.whenHostOrRootRule(scope,rule,style,function(info){var element=scope._element||scope;if(matchesSelector.call(element,info.selector)){if(info.isHost){self.collectProperties(rule,hostProps);}else{self.collectProperties(rule,rootProps);}}});});return{rootProps:rootProps,hostProps:hostProps};},transformStyles:function(element,properties,scopeSelector){var self=this;var hostSelector=styleTransformer._calcHostScope(element.is,element.extends);var rxHostSelector=element.extends?'\\'+hostSelector.slice(0,-1)+'\\]':hostSelector;var hostRx=new RegExp(this.rx.HOST_PREFIX+rxHostSelector+this.rx.HOST_SUFFIX);var keyframeTransforms=this._elementKeyframeTransforms(element,scopeSelector);return styleTransformer.elementStyles(element,function(rule){self.applyProperties(rule,properties);if(!settings.useNativeShadow&&!Polymer.StyleUtil.isKeyframesSelector(rule)&&rule.cssText){self.applyKeyframeTransforms(rule,keyframeTransforms);self._scopeSelector(rule,hostRx,hostSelector,element._scopeCssViaAttr,scopeSelector);}});},_elementKeyframeTransforms:function(element,scopeSelector){var keyframesRules=element._styles._keyframes;var keyframeTransforms={};if(!settings.useNativeShadow&&keyframesRules){for(var i=0,keyframesRule=keyframesRules[i];i<keyframesRules.length;keyframesRule=keyframesRules[++i]){this._scopeKeyframes(keyframesRule,scopeSelector);keyframeTransforms[keyframesRule.keyframesName]=this._keyframesRuleTransformer(keyframesRule);}}
-return keyframeTransforms;},_keyframesRuleTransformer:function(keyframesRule){return function(cssText){return cssText.replace(keyframesRule.keyframesNameRx,keyframesRule.transformedKeyframesName);};},_scopeKeyframes:function(rule,scopeId){rule.keyframesNameRx=new RegExp(rule.keyframesName,'g');rule.transformedKeyframesName=rule.keyframesName+'-'+scopeId;rule.transformedSelector=rule.transformedSelector||rule.selector;rule.selector=rule.transformedSelector.replace(rule.keyframesName,rule.transformedKeyframesName);},_scopeSelector:function(rule,hostRx,hostSelector,viaAttr,scopeId){rule.transformedSelector=rule.transformedSelector||rule.selector;var selector=rule.transformedSelector;var scope=viaAttr?'['+styleTransformer.SCOPE_NAME+'~='+scopeId+']':'.'+scopeId;var parts=selector.split(',');for(var i=0,l=parts.length,p;i<l&&(p=parts[i]);i++){parts[i]=p.match(hostRx)?p.replace(hostSelector,scope):scope+' '+p;}
+return keyframeTransforms;},_keyframesRuleTransformer:function(keyframesRule){return function(cssText){return cssText.replace(keyframesRule.keyframesNameRx,keyframesRule.transformedKeyframesName);};},_scopeKeyframes:function(rule,scopeId){rule.keyframesNameRx=new RegExp('\\b'+rule.keyframesName+'(?!\\B|-)','g');rule.transformedKeyframesName=rule.keyframesName+'-'+scopeId;rule.transformedSelector=rule.transformedSelector||rule.selector;rule.selector=rule.transformedSelector.replace(rule.keyframesName,rule.transformedKeyframesName);},_hasDirOrHostContext:function(parsedSelector){return/:host-context|:dir/.test(parsedSelector);},_scopeSelector:function(rule,hostRx,hostSelector,viaAttr,scopeId){rule.transformedSelector=rule.transformedSelector||rule.selector;var selector=rule.transformedSelector;var scope=styleTransformer._calcElementScope(scopeId,viaAttr);var hostScope=styleTransformer._calcElementScope(hostSelector,viaAttr);var parts=selector.split(',');var isDirOrHostContextSelector=this._hasDirOrHostContext(rule.parsedSelector);for(var i=0,l=parts.length,p;i<l&&(p=parts[i]);i++){parts[i]=p.match(hostRx)?p.replace(hostSelector,scope):isDirOrHostContextSelector?p.replace(hostScope,scope+' '+hostScope):scope+' '+p;}
rule.selector=parts.join(',');},applyElementScopeSelector:function(element,selector,old,viaAttr){var c=viaAttr?element.getAttribute(styleTransformer.SCOPE_NAME):element.getAttribute('class')||'';var v=old?c.replace(old,selector):(c?c+' ':'')+this.XSCOPE_NAME+' '+selector;if(c!==v){if(viaAttr){element.setAttribute(styleTransformer.SCOPE_NAME,v);}else{element.setAttribute('class',v);}}},applyElementStyle:function(element,properties,selector,style){var cssText=style?style.textContent||'':this.transformStyles(element,properties,selector);var s=element._customStyle;if(s&&!settings.useNativeShadow&&s!==style){s._useCount--;if(s._useCount<=0&&s.parentNode){s.parentNode.removeChild(s);}}
if(settings.useNativeShadow){if(element._customStyle){element._customStyle.textContent=cssText;style=element._customStyle;}else if(cssText){style=styleUtil.applyCss(cssText,selector,element.root,element._scopeStyle);}}else{if(!style){if(cssText){style=styleUtil.applyCss(cssText,selector,null,element._scopeStyle);}}else if(!style.parentNode){if(IS_IE&&cssText.indexOf('@media')>-1){style.textContent=cssText;}
styleUtil.applyStyle(style,null,element._scopeStyle);}}
@@ -3938,7 +4189,7 @@ if(template._content._ctor){this.ctor=template._content._ctor;this._prepParentPr
var archetype=Object.create(Polymer.Base);this._customPrepAnnotations(archetype,template);this._prepParentProperties(archetype,template);archetype._prepEffects();this._customPrepEffects(archetype);archetype._prepBehaviors();archetype._prepPropertyInfo();archetype._prepBindings();archetype._notifyPathUp=this._notifyPathUpImpl;archetype._scopeElementClass=this._scopeElementClassImpl;archetype.listen=this._listenImpl;archetype._showHideChildren=this._showHideChildrenImpl;archetype.__setPropertyOrig=this.__setProperty;archetype.__setProperty=this.__setPropertyImpl;var _constructor=this._constructorImpl;var ctor=function TemplateInstance(model,host){_constructor.call(this,model,host);};ctor.prototype=archetype;archetype.constructor=ctor;template._content._ctor=ctor;this.ctor=ctor;},_getRootDataHost:function(){return this.dataHost&&this.dataHost._rootDataHost||this.dataHost;},_showHideChildrenImpl:function(hide){var c=this._children;for(var i=0;i<c.length;i++){var n=c[i];if(Boolean(hide)!=Boolean(n.__hideTemplateChildren__)){if(n.nodeType===Node.TEXT_NODE){if(hide){n.__polymerTextContent__=n.textContent;n.textContent='';}else{n.textContent=n.__polymerTextContent__;}}else if(n.style){if(hide){n.__polymerDisplay__=n.style.display;n.style.display='none';}else{n.style.display=n.__polymerDisplay__;}}}
n.__hideTemplateChildren__=hide;}},__setPropertyImpl:function(property,value,fromAbove,node){if(node&&node.__hideTemplateChildren__&&property=='textContent'){property='__polymerTextContent__';}
this.__setPropertyOrig(property,value,fromAbove,node);},_debounceTemplate:function(fn){Polymer.dom.addDebouncer(this.debounce('_debounceTemplate',fn));},_flushTemplates:function(){Polymer.dom.flush();},_customPrepEffects:function(archetype){var parentProps=archetype._parentProps;for(var prop in parentProps){archetype._addPropertyEffect(prop,'function',this._createHostPropEffector(prop));}
-for(prop in this._instanceProps){archetype._addPropertyEffect(prop,'function',this._createInstancePropEffector(prop));}},_customPrepAnnotations:function(archetype,template){archetype._template=template;var c=template._content;if(!c._notes){var rootDataHost=archetype._rootDataHost;if(rootDataHost){Polymer.Annotations.prepElement=function(){rootDataHost._prepElement();};}
+for(prop in this._instanceProps){archetype._addPropertyEffect(prop,'function',this._createInstancePropEffector(prop));}},_customPrepAnnotations:function(archetype,template){var t=archetype._template=document.createElement('template');var c=t._content=template._content;if(!c._notes){var rootDataHost=archetype._rootDataHost;if(rootDataHost){Polymer.Annotations.prepElement=function(){rootDataHost._prepElement();};}
c._notes=Polymer.Annotations.parseAnnotations(template);Polymer.Annotations.prepElement=null;this._processAnnotations(c._notes);}
archetype._notes=c._notes;archetype._parentProps=c._parentProps;},_prepParentProperties:function(archetype,template){var parentProps=this._parentProps=archetype._parentProps;if(this._forwardParentProp&&parentProps){var proto=archetype._parentPropProto;var prop;if(!proto){for(prop in this._instanceProps){delete parentProps[prop];}
proto=archetype._parentPropProto=Object.create(null);if(template!=this){Polymer.Bind.prepareModel(proto);Polymer.Base.prepareModelNotifyPath(proto);}
@@ -4153,10 +4404,11 @@ function lesserPower(x,opt_base){const base=opt_base||10;return Math.pow(base,Ma
function greaterPower(x,opt_base){const base=opt_base||10;return Math.pow(base,Math.ceil(logOrLog10(x,base)));}
function lesserWholeNumber(x){if(x===0)return 0;const pow10=(x<0)?-lesserPower(-x):lesserPower(x);return pow10*Math.floor(x/pow10);}
function greaterWholeNumber(x){if(x===0)return 0;const pow10=(x<0)?-lesserPower(-x):lesserPower(x);return pow10*Math.ceil(x/pow10);}
+function truncate(value,digits){const pow10=Math.pow(10,digits);return Math.round(value*pow10)/pow10;}
function preferredNumberLargerThanMin(min){const absMin=Math.abs(min);const conservativeGuess=tr.b.math.lesserPower(absMin);let minPreferedNumber=undefined;for(const multiplier of PREFERRED_NUMBER_SERIES_MULTIPLIERS){const tightenedGuess=conservativeGuess*multiplier;if(tightenedGuess>=absMin){minPreferedNumber=tightenedGuess;break;}}
if(minPreferedNumber===undefined){throw new Error('Could not compute preferred number for '+min);}
if(min<0)minPreferedNumber*=-1;return minPreferedNumber;}
-return{approximately,clamp,lerp,normalize,deg2rad,erf,lesserPower,greaterPower,lesserWholeNumber,greaterWholeNumber,preferredNumberLargerThanMin,};});'use strict';tr.exportTo('tr.b.math',function(){function Range(){this.isEmpty_=true;this.min_=undefined;this.max_=undefined;}
+return{approximately,clamp,lerp,normalize,deg2rad,erf,lesserPower,greaterPower,lesserWholeNumber,greaterWholeNumber,preferredNumberLargerThanMin,truncate,};});'use strict';tr.exportTo('tr.b.math',function(){function Range(){this.isEmpty_=true;this.min_=undefined;this.max_=undefined;}
Range.prototype={__proto__:Object.prototype,clone(){if(this.isEmpty)return new Range();return Range.fromExplicitRange(this.min_,this.max_);},reset(){this.isEmpty_=true;this.min_=undefined;this.max_=undefined;},get isEmpty(){return this.isEmpty_;},addRange(range){if(range.isEmpty)return;this.addValue(range.min);this.addValue(range.max);},addValue(value){if(this.isEmpty_){this.max_=value;this.min_=value;this.isEmpty_=false;return;}
this.max_=Math.max(this.max_,value);this.min_=Math.min(this.min_,value);},set min(min){this.isEmpty_=false;this.min_=min;},get min(){if(this.isEmpty_)return undefined;return this.min_;},get max(){if(this.isEmpty_)return undefined;return this.max_;},set max(max){this.isEmpty_=false;this.max_=max;},get range(){if(this.isEmpty_)return undefined;return this.max_-this.min_;},get center(){return(this.min_+this.max_)*0.5;},get duration(){if(this.isEmpty_)return 0;return this.max_-this.min_;},enclosingPowers(opt_base){if(this.isEmpty)return new Range();return Range.fromExplicitRange(tr.b.math.lesserPower(this.min_,opt_base),tr.b.math.greaterPower(this.max_,opt_base));},normalize(x){return tr.b.math.normalize(x,this.min,this.max);},lerp(x){return tr.b.math.lerp(x,this.min,this.max);},clamp(x){return tr.b.math.clamp(x,this.min,this.max);},equals(that){if(this.isEmpty&&that.isEmpty)return true;if(this.isEmpty!==that.isEmpty)return false;return(tr.b.math.approximately(this.min,that.min)&&tr.b.math.approximately(this.max,that.max));},containsExplicitRangeInclusive(min,max){if(this.isEmpty)return false;return this.min_<=min&&max<=this.max_;},containsExplicitRangeExclusive(min,max){if(this.isEmpty)return false;return this.min_<min&&max<this.max_;},intersectsExplicitRangeInclusive(min,max){if(this.isEmpty)return false;return this.min_<=max&&min<=this.max_;},intersectsExplicitRangeExclusive(min,max){if(this.isEmpty)return false;return this.min_<max&&min<this.max_;},containsRangeInclusive(range){if(range.isEmpty)return false;return this.containsExplicitRangeInclusive(range.min_,range.max_);},containsRangeExclusive(range){if(range.isEmpty)return false;return this.containsExplicitRangeExclusive(range.min_,range.max_);},intersectsRangeInclusive(range){if(range.isEmpty)return false;return this.intersectsExplicitRangeInclusive(range.min_,range.max_);},intersectsRangeExclusive(range){if(range.isEmpty)return false;return this.intersectsExplicitRangeExclusive(range.min_,range.max_);},findExplicitIntersectionDuration(min,max){min=Math.max(this.min,min);max=Math.min(this.max,max);if(max<min)return 0;return max-min;},findIntersection(range){if(this.isEmpty||range.isEmpty)return new Range();const min=Math.max(this.min,range.min);const max=Math.min(this.max,range.max);if(max<min)return new Range();return Range.fromExplicitRange(min,max);},toJSON(){if(this.isEmpty_)return{isEmpty:true};return{isEmpty:false,max:this.max,min:this.min};},filterArray(sortedArray,opt_keyFunc,opt_this){if(this.isEmpty_)return[];const keyFunc=opt_keyFunc||(x=>x);function getValue(obj){return keyFunc.call(opt_this,obj);}
const first=tr.b.findFirstTrueIndexInSortedArray(sortedArray,obj=>this.min_===undefined||this.min_<=getValue(obj));const last=tr.b.findFirstTrueIndexInSortedArray(sortedArray,obj=>this.max_!==undefined&&this.max_<getValue(obj));return sortedArray.slice(first,last);}};Range.fromDict=function(d){if(d.isEmpty===true)return new Range();if(d.isEmpty===false){const range=new Range();range.min=d.min;range.max=d.max;return range;}
@@ -4203,7 +4455,7 @@ if(samples[-1]<1.0){locations.push(1.0);countLess.push(samples.length);countLess
let maxDiff=0;let minDiff=0;for(let i=1;i<locations.length;i++){const length=locations[i]-locations[i-1];const countClosed=countLessEqual[i]-countLess[i-1];const countOpen=countLess[i]-countLessEqual[i-1];const countClosedIncrement=countLessEqual[i]-countLessEqual[i-1];const countOpenIncrement=countLess[i]-countLess[i-1];maxDiff=Math.max(countClosedIncrement*invSampleCount-length+maxDiff,countClosed*invSampleCount-length);minDiff=Math.min(countOpenIncrement*invSampleCount-length+minDiff,countOpen*invSampleCount-length);maxLocalDiscrepancy=Math.max(maxDiff,-minDiff,maxLocalDiscrepancy);}
return maxLocalDiscrepancy;};Statistics.timestampsDiscrepancy=function(timestamps,opt_absolute,opt_locationCount){if(timestamps.length===0)return 0.0;if(opt_absolute===undefined)opt_absolute=true;if(Array.isArray(timestamps[0])){const rangeDiscrepancies=timestamps.map(function(r){return Statistics.timestampsDiscrepancy(r);});return Math.max.apply(null,rangeDiscrepancies);}
const s=Statistics.normalizeSamples(timestamps);const samples=s.normalized_samples;const sampleScale=s.scale;let discrepancy=Statistics.discrepancy(samples,opt_locationCount);const invSampleCount=1.0/samples.length;if(opt_absolute===true){discrepancy/=sampleScale;}else{discrepancy=tr.b.math.clamp((discrepancy-invSampleCount)/(1.0-invSampleCount),0.0,1.0);}
-return discrepancy;};Statistics.durationsDiscrepancy=function(durations,opt_absolute,opt_locationCount){if(durations.length===0)return 0.0;const timestamps=durations.reduce(function(prev,curr,index,array){prev.push(prev[prev.length-1]+curr);return prev;},[0]);return Statistics.timestampsDiscrepancy(timestamps,opt_absolute,opt_locationCount);};Statistics.uniformlySampleArray=function(samples,count){if(samples.length<=count){return samples;}
+return discrepancy;};Statistics.uniformlySampleArray=function(samples,count){if(samples.length<=count){return samples;}
while(samples.length>count){const i=parseInt(Math.random()*samples.length);samples.splice(i,1);}
return samples;};Statistics.uniformlySampleStream=function(samples,streamLength,newElement,numSamples){if(streamLength<=numSamples){if(samples.length>=streamLength){samples[streamLength-1]=newElement;}else{samples.push(newElement);}
return;}
@@ -4224,19 +4476,24 @@ get significance(){return this.significance_;}
compare(opt_alpha){const alpha=opt_alpha||Statistics.DEFAULT_ALPHA;if(this.p<alpha){this.significance_=Statistics.Significance.SIGNIFICANT;}else if(this.needMoreData_){this.significance_=Statistics.Significance.NEED_MORE_DATA;}else{this.significance_=Statistics.Significance.INSIGNIFICANT;}
return this.significance_;}
asDict(){return{p:this.p,U:this.U,significance:this.significance,};}}
-Statistics.mwu=function(a,b,opt_alpha,opt_reqSampleSize){const result=mannwhitneyu.test(a,b);const needMoreData=opt_reqSampleSize&&Math.min(a.length,b.length)<opt_reqSampleSize;return new HypothesisTestResult(result.p,result.U,needMoreData,opt_alpha);};return{Statistics,};});'use strict';const GREEK_SMALL_LETTER_MU=String.fromCharCode(956);tr.exportTo('tr.b',function(){const SECONDS_IN_A_MINUTE=60;const SECONDS_IN_AN_HOUR=SECONDS_IN_A_MINUTE*60;const SECONDS_IN_A_DAY=SECONDS_IN_AN_HOUR*24;const SECONDS_IN_A_WEEK=SECONDS_IN_A_DAY*7;const SECONDS_IN_A_YEAR=SECONDS_IN_A_DAY*365.2422;const SECONDS_IN_A_MONTH=SECONDS_IN_A_YEAR/12;const UnitPrefixScale={};const UnitScale={};function defineUnitPrefixScale(name,prefixes){if(UnitPrefixScale[name]!==undefined){throw new Error('Unit prefix scale \''+name+'\' already exists');}
+Statistics.mwu=function(a,b,opt_alpha,opt_reqSampleSize){const result=mannwhitneyu.test(a,b);const needMoreData=opt_reqSampleSize&&Math.min(a.length,b.length)<opt_reqSampleSize;return new HypothesisTestResult(result.p,result.U,needMoreData,opt_alpha);};return{Statistics,};});'use strict';tr.exportTo('tr.b',function(){const GREEK_SMALL_LETTER_MU=String.fromCharCode(956);const SECONDS_IN_A_MINUTE=60;const SECONDS_IN_AN_HOUR=SECONDS_IN_A_MINUTE*60;const SECONDS_IN_A_DAY=SECONDS_IN_AN_HOUR*24;const SECONDS_IN_A_WEEK=SECONDS_IN_A_DAY*7;const SECONDS_IN_A_YEAR=SECONDS_IN_A_DAY*365.2422;const SECONDS_IN_A_MONTH=SECONDS_IN_A_YEAR/12;const UnitPrefixScale={};const UnitScale={};function defineUnitPrefixScale(name,prefixes){if(UnitPrefixScale[name]!==undefined){throw new Error('Unit prefix scale \''+name+'\' already exists');}
if(prefixes.AUTO!==undefined){throw new Error('The \'AUTO\' unit prefix is not supported for unit'+'prefix scales and cannot be added to scale \''+name+'\'');}
UnitPrefixScale[name]=prefixes;}
UnitScale.defineUnitScale=function(name,unitScale){if(UnitScale[name]!==undefined){throw new Error('Unit scale \''+name+'\' already exists');}
if(unitScale.AUTO!==undefined){throw new Error('\'AUTO\' unit scale will be added automatically '+'for unit scale \''+name+'\'');}
-unitScale.AUTO=Object.values(unitScale);unitScale.AUTO.sort((a,b)=>a.value-b.value);if(name)UnitScale[name]=unitScale;return unitScale;};UnitScale.defineUnitScaleFromPrefixScale=function(baseSymbol,baseName,prefixScale,opt_scaleName){if(baseSymbol===undefined){throw new Error('Cannot create UnitScale with undefined baseSymbol.');}
+unitScale.AUTO=Object.values(unitScale);unitScale.AUTO.sort((a,b)=>a.value-b.value);if(name)UnitScale[name]=unitScale;return unitScale;};function definePrefixScaleFromUnitScale(prefixName,unitScale){if(!unitScale){throw new Error('Cannot create PrefixScale without a unit scale.');}
+const prefixScale={};for(const[curPrefix,curScale]of Object.entries(unitScale)){if(curPrefix==='AUTO'){continue;}
+if(curScale.symbol===undefined||!curScale.value){throw new Error(`Cannot create PrefixScale from malformed unit ${curScale}.`);}
+prefixScale[curPrefix]={value:curScale.value,symbol:curScale.symbol};}
+return defineUnitPrefixScale(prefixName,prefixScale);}
+UnitScale.defineUnitScaleFromPrefixScale=function(baseSymbol,baseName,prefixScale,opt_scaleName){if(baseSymbol===undefined){throw new Error('Cannot create UnitScale with undefined baseSymbol.');}
if(!baseName){throw new Error('Cannot create UnitScale without a baseName.');}
if(!prefixScale){throw new Error('Cannot create UnitScale without a prefix scale.');}
const unitScale={};for(const curPrefix of Object.keys(prefixScale)){const curScale=prefixScale[curPrefix];if(curScale.symbol===undefined||!curScale.value){throw new Error(`Cannot convert PrefixScale with malformed prefix ${curScale}.`);}
const name=curPrefix==='NONE'?baseName:`${curPrefix}_${baseName}`;unitScale[name]={value:curScale.value,symbol:curScale.symbol+baseSymbol,baseSymbol};}
return UnitScale.defineUnitScale(opt_scaleName,unitScale);};function convertUnit(value,fromScale,toScale){if(value===undefined)return undefined;const fromScaleBase=fromScale.baseSymbol;const toScaleBase=toScale.baseSymbol;if(fromScaleBase!==undefined&&toScaleBase!==undefined&&fromScaleBase!==toScaleBase){throw new Error('Cannot convert between units with different base symbols.');}
return value*(fromScale.value/toScale.value);}
-defineUnitPrefixScale('BINARY',{NONE:{value:Math.pow(1024,0),symbol:''},KIBI:{value:Math.pow(1024,1),symbol:'Ki'},MEBI:{value:Math.pow(1024,2),symbol:'Mi'},GIBI:{value:Math.pow(1024,3),symbol:'Gi'},TEBI:{value:Math.pow(1024,4),symbol:'Ti'}});defineUnitPrefixScale('METRIC',{NANO:{value:1e-9,symbol:'n'},MICRO:{value:1e-6,symbol:GREEK_SMALL_LETTER_MU},MILLI:{value:1e-3,symbol:'m'},NONE:{value:1,symbol:''},KILO:{value:1e3,symbol:'k'},MEGA:{value:1e6,symbol:'M'},GIGA:{value:1e9,symbol:'G'}});UnitScale.defineUnitScale('TIME',{NANO_SEC:{value:1e-9,symbol:'ns',baseSymbol:'s'},MICRO_SEC:{value:1e-6,symbol:GREEK_SMALL_LETTER_MU+'s',baseSymbol:'s'},MILLI_SEC:{value:1e-3,symbol:'ms',baseSymbol:'s'},SEC:{value:1,symbol:'s',baseSymbol:'s'},MINUTE:{value:SECONDS_IN_A_MINUTE,symbol:'min',baseSymbol:'s'},HOUR:{value:SECONDS_IN_AN_HOUR,symbol:'hr',baseSymbol:'s'},DAY:{value:SECONDS_IN_A_DAY,symbol:'days',baseSymbol:'s'},WEEK:{value:SECONDS_IN_A_WEEK,symbol:'weeks',baseSymbol:'s'},MONTH:{value:SECONDS_IN_A_MONTH,symbol:'months',baseSymbol:'s'},YEAR:{value:SECONDS_IN_A_YEAR,symbol:'years',baseSymbol:'s'}});UnitScale.defineUnitScaleFromPrefixScale('B','BYTE',UnitPrefixScale.BINARY,'MEMORY');return{UnitPrefixScale,UnitScale,convertUnit,};});'use strict';tr.exportTo('tr.b',function(){const msDisplayMode={scale:1e-3,suffix:'ms',roundedLess(a,b){return Math.round(a*1000)<Math.round(b*1000);},formatSpec:{unitScale:[tr.b.UnitScale.TIME.MILLI_SEC],minimumFractionDigits:3,}};const nsDisplayMode={scale:1e-9,suffix:'ns',roundedLess(a,b){return Math.round(a*1000000)<Math.round(b*1000000);},formatSpec:{unitScale:[tr.b.UnitScale.TIME.NANO_SEC],maximumFractionDigits:0}};const TimeDisplayModes={ns:nsDisplayMode,ms:msDisplayMode};return{TimeDisplayModes,};});'use strict';tr.exportTo('tr.ui.b',function(){function iterateElementDeeplyImpl(element,cb,thisArg,includeElement){if(includeElement&&cb.call(thisArg,element))return true;if(element.root&&element.root!==element&&iterateElementDeeplyImpl(element.root,cb,thisArg,false)){return true;}
+defineUnitPrefixScale('BINARY',{NONE:{value:Math.pow(1024,0),symbol:''},KIBI:{value:Math.pow(1024,1),symbol:'Ki'},MEBI:{value:Math.pow(1024,2),symbol:'Mi'},GIBI:{value:Math.pow(1024,3),symbol:'Gi'},TEBI:{value:Math.pow(1024,4),symbol:'Ti'}});defineUnitPrefixScale('METRIC',{NANO:{value:1e-9,symbol:'n'},MICRO:{value:1e-6,symbol:GREEK_SMALL_LETTER_MU},MILLI:{value:1e-3,symbol:'m'},NONE:{value:1,symbol:''},KILO:{value:1e3,symbol:'k'},MEGA:{value:1e6,symbol:'M'},GIGA:{value:1e9,symbol:'G'}});UnitScale.defineUnitScale('TIME',{NANO_SEC:{value:1e-9,symbol:'ns',baseSymbol:'s'},MICRO_SEC:{value:1e-6,symbol:GREEK_SMALL_LETTER_MU+'s',baseSymbol:'s'},MILLI_SEC:{value:1e-3,symbol:'ms',baseSymbol:'s'},SEC:{value:1,symbol:'s',baseSymbol:'s'},MINUTE:{value:SECONDS_IN_A_MINUTE,symbol:'min',baseSymbol:'s'},HOUR:{value:SECONDS_IN_AN_HOUR,symbol:'hr',baseSymbol:'s'},DAY:{value:SECONDS_IN_A_DAY,symbol:'days',baseSymbol:'s'},WEEK:{value:SECONDS_IN_A_WEEK,symbol:'weeks',baseSymbol:'s'},MONTH:{value:SECONDS_IN_A_MONTH,symbol:'months',baseSymbol:'s'},YEAR:{value:SECONDS_IN_A_YEAR,symbol:'years',baseSymbol:'s'}});UnitScale.defineUnitScaleFromPrefixScale('B','BYTE',UnitPrefixScale.BINARY,'MEMORY');definePrefixScaleFromUnitScale('DATA_SIZE',UnitScale.MEMORY);UnitScale.defineUnitScaleFromPrefixScale('/s','SECONDS',UnitPrefixScale.DATA_SIZE,'BANDWIDTH_BYTES');return{UnitPrefixScale,UnitScale,convertUnit,GREEK_SMALL_LETTER_MU,};});'use strict';tr.exportTo('tr.b',function(){const msDisplayMode={scale:1e-3,suffix:'ms',roundedLess(a,b){return Math.round(a*1000)<Math.round(b*1000);},formatSpec:{unitScale:[tr.b.UnitScale.TIME.MILLI_SEC],minimumFractionDigits:3,}};const nsDisplayMode={scale:1e-9,suffix:'ns',roundedLess(a,b){return Math.round(a*1000000)<Math.round(b*1000000);},formatSpec:{unitScale:[tr.b.UnitScale.TIME.NANO_SEC],maximumFractionDigits:0}};const TimeDisplayModes={ns:nsDisplayMode,ms:msDisplayMode};return{TimeDisplayModes,};});'use strict';tr.exportTo('tr.ui.b',function(){function iterateElementDeeplyImpl(element,cb,thisArg,includeElement){if(includeElement&&cb.call(thisArg,element))return true;if(element.root&&element.root!==element&&iterateElementDeeplyImpl(element.root,cb,thisArg,false)){return true;}
const children=Polymer.dom(element).children;for(let i=0;i<children.length;i++){if(iterateElementDeeplyImpl(children[i],cb,thisArg,true)){return true;}}
return false;}
function iterateElementDeeply(element,cb,thisArg){iterateElementDeeplyImpl(element,cb,thisArg,false);}
@@ -4254,19 +4511,23 @@ formatter=new Intl.NumberFormat(undefined,{minimumFractionDigits,maximumFraction
return formatter;}
function max(a,b){if(a===undefined)return b;if(b===undefined)return a;return a.scale>b.scale?a:b;}
const ImprovementDirection={DONT_CARE:0,BIGGER_IS_BETTER:1,SMALLER_IS_BETTER:2};function Unit(unitName,jsonName,scaleBaseUnit,isDelta,improvementDirection,formatSpec){this.unitName=unitName;this.jsonName=jsonName;this.scaleBaseUnit=scaleBaseUnit;this.isDelta=isDelta;this.improvementDirection=improvementDirection;this.formatSpec_=formatSpec;this.baseUnit=undefined;this.correspondingDeltaUnit=undefined;}
-Unit.prototype={asJSON(){return this.jsonName;},getUnitScale_(opt_context){let formatSpec=this.formatSpec_;let formatSpecWasFunction=false;if(typeof formatSpec==='function'){formatSpecWasFunction=true;formatSpec=formatSpec();}
+Unit.prototype={asJSON(){return this.jsonName;},asJSON2(){return this.asJSON().replace('_smallerIsBetter','-').replace('_biggerIsBetter','+');},truncate(value){if(typeof value!=='number')return value;if(0===(value%1))return value;if(typeof this.formatSpec_!=='function'&&(!this.formatSpec_.unitScale||((this.formatSpec_.unitScale.length===1)&&(this.formatSpec_.unitScale[0].value===1)))){const digits=this.formatSpec_.maximumFractionDigits||this.formatSpec_.minimumFractionDigits;return tr.b.math.truncate(value,digits+1);}
+const formatted=this.format(value);let test=Math.round(value);if(formatted===this.format(test))return test;let lo=1;let hi=16;while(lo<hi-1){const digits=parseInt((lo+hi)/2);test=tr.b.math.truncate(value,digits);if(formatted===this.format(test)){hi=digits;}else{lo=digits;}}
+test=tr.b.math.truncate(value,lo);if(formatted===this.format(test))return test;return tr.b.math.truncate(value,hi);},getUnitScale_(opt_context){let formatSpec=this.formatSpec_;let formatSpecWasFunction=false;if(typeof formatSpec==='function'){formatSpecWasFunction=true;formatSpec=formatSpec();}
const context=opt_context||{};let scale=undefined;if(context.unitScale){scale=context.unitScale;}else if(context.unitPrefix){const symbol=formatSpec.baseSymbol?formatSpec.baseSymbol:this.scaleBaseUnit.baseSymbol;scale=tr.b.UnitScale.defineUnitScaleFromPrefixScale(symbol,symbol,[context.unitPrefix]).AUTO;}else{scale=formatSpec.unitScale;if(!scale){scale=[{value:1,symbol:formatSpec.baseSymbol||'',baseSymbol:formatSpec.baseSymbol||''}];if(!formatSpecWasFunction)formatSpec.unitScale=scale;}}
if(!(scale instanceof Array)){throw new Error('Unit has a malformed unit scale.');}
return scale;},get unitString(){const scale=this.getUnitScale_();if(!scale){throw new Error('A UnitScale could not be found for Unit '+this.unitName);}
return scale[0].symbol;},format(value,opt_context){let signString='';if(value<0){signString='-';value=-value;}else if(this.isDelta){signString=value===0?PLUS_MINUS_SIGN:'+';}
-const context=opt_context||{};const scale=this.getUnitScale_(context);let deltaValue=context.deltaValue===undefined?value:context.deltaValue;deltaValue=Math.abs(deltaValue)*this.scaleBaseUnit.value;let i=0;while(i<scale.length-1&&deltaValue/scale[i+1].value>=1){i++;}
+const context=opt_context||{};const scale=this.getUnitScale_(context);let deltaValue=context.deltaValue===undefined?value:context.deltaValue;deltaValue=Math.abs(deltaValue)*this.scaleBaseUnit.value;if(deltaValue===0){deltaValue=1;}
+let i=0;while(i<scale.length-1&&deltaValue/scale[i+1].value>=1){i++;}
const selectedSubUnit=scale[i];let formatSpec=this.formatSpec_;if(typeof formatSpec==='function')formatSpec=formatSpec();let unitString='';if(selectedSubUnit.symbol){if(!formatSpec.avoidSpacePrecedingUnit)unitString=' ';unitString+=selectedSubUnit.symbol;}
-value=tr.b.convertUnit(value,this.scaleBaseUnit,selectedSubUnit);const numberString=getNumberFormatter(formatSpec.minimumFractionDigits,formatSpec.maximumFractionDigits,context.minimumFractionDigits,context.maximumFractionDigits).format(value);return signString+numberString+unitString;}};Unit.reset=function(){Unit.currentTimeDisplayMode=TimeDisplayModes.ms;};Unit.timestampFromUs=function(us){return tr.b.convertUnit(us,tr.b.UnitPrefixScale.METRIC.MICRO,tr.b.UnitPrefixScale.METRIC.MILLI);};Object.defineProperty(Unit,'currentTimeDisplayMode',{get(){return Unit.currentTimeDisplayMode_;},set(value){if(Unit.currentTimeDisplayMode_===value)return;Unit.currentTimeDisplayMode_=value;Unit.dispatchEvent(new tr.b.Event('display-mode-changed'));}});Unit.didPreferredTimeDisplayUnitChange=function(){let largest=undefined;const els=tr.ui.b.findDeepElementsMatching(document.body,'tr-v-ui-preferred-display-unit');els.forEach(function(el){largest=max(largest,el.preferredTimeDisplayMode);});Unit.currentTimeDisplayMode=largest===undefined?TimeDisplayModes.ms:largest;};Unit.byName={};Unit.byJSONName={};Unit.fromJSON=function(object){const u=Unit.byJSONName[object];if(u){return u;}
+value=tr.b.convertUnit(value,this.scaleBaseUnit,selectedSubUnit);const numberString=getNumberFormatter(formatSpec.minimumFractionDigits,formatSpec.maximumFractionDigits,context.minimumFractionDigits,context.maximumFractionDigits).format(value);return signString+numberString+unitString;}};Unit.reset=function(){Unit.currentTimeDisplayMode=TimeDisplayModes.ms;};Unit.timestampFromUs=function(us){return tr.b.convertUnit(us,tr.b.UnitPrefixScale.METRIC.MICRO,tr.b.UnitPrefixScale.METRIC.MILLI);};Object.defineProperty(Unit,'currentTimeDisplayMode',{get(){return Unit.currentTimeDisplayMode_;},set(value){if(Unit.currentTimeDisplayMode_===value)return;Unit.currentTimeDisplayMode_=value;Unit.dispatchEvent(new tr.b.Event('display-mode-changed'));}});Unit.didPreferredTimeDisplayUnitChange=function(){let largest=undefined;const els=tr.ui.b.findDeepElementsMatching(document.body,'tr-v-ui-preferred-display-unit');els.forEach(function(el){largest=max(largest,el.preferredTimeDisplayMode);});Unit.currentTimeDisplayMode=largest===undefined?TimeDisplayModes.ms:largest;};Unit.byName={};Unit.byJSONName={};Unit.fromJSON=function(object){if(typeof(object)==='string'){if(object.endsWith('+')){object=object.slice(0,object.length-1)+'_biggerIsBetter';}else if(object.endsWith('-')){object=object.slice(0,object.length-1)+'_smallerIsBetter';}
+const u=Unit.byJSONName[object];if(u)return u;}
throw new Error(`Unrecognized unit "${object}"`);};Unit.define=function(params){const definedUnits=[];for(const improvementDirection of Object.values(ImprovementDirection)){const regularUnit=Unit.defineUnitVariant_(params,false,improvementDirection);const deltaUnit=Unit.defineUnitVariant_(params,true,improvementDirection);regularUnit.correspondingDeltaUnit=deltaUnit;deltaUnit.correspondingDeltaUnit=deltaUnit;definedUnits.push(regularUnit,deltaUnit);}
const baseUnit=Unit.byName[params.baseUnitName];definedUnits.forEach(u=>u.baseUnit=baseUnit);};Unit.nameSuffixForImprovementDirection=function(improvementDirection){switch(improvementDirection){case ImprovementDirection.DONT_CARE:return'';case ImprovementDirection.BIGGER_IS_BETTER:return'_biggerIsBetter';case ImprovementDirection.SMALLER_IS_BETTER:return'_smallerIsBetter';default:throw new Error('Unknown improvement direction: '+improvementDirection);}};Unit.defineUnitVariant_=function(params,isDelta,improvementDirection){let nameSuffix=isDelta?'Delta':'';nameSuffix+=Unit.nameSuffixForImprovementDirection(improvementDirection);const unitName=params.baseUnitName+nameSuffix;const jsonName=params.baseJsonName+nameSuffix;if(Unit.byName[unitName]!==undefined){throw new Error('Unit \''+unitName+'\' already exists');}
if(Unit.byJSONName[jsonName]!==undefined){throw new Error('JSON unit \''+jsonName+'\' alread exists');}
let scaleBaseUnit=params.scaleBaseUnit;if(!scaleBaseUnit){let formatSpec=params.formatSpec;if(typeof formatSpec==='function')formatSpec=formatSpec();const baseSymbol=formatSpec.unitScale?formatSpec.unitScale[0].baseSymbol:(formatSpec.baseSymbol||'');scaleBaseUnit={value:1,symbol:baseSymbol,baseSymbol};}
-const unit=new Unit(unitName,jsonName,scaleBaseUnit,isDelta,improvementDirection,params.formatSpec);Unit.byName[unitName]=unit;Unit.byJSONName[jsonName]=unit;return unit;};tr.b.EventTarget.decorate(Unit);Unit.reset();Unit.define({baseUnitName:'timeInMsAutoFormat',baseJsonName:'msBestFitFormat',scaleBaseUnit:tr.b.UnitScale.TIME.MILLI_SEC,formatSpec:{unitScale:tr.b.UnitScale.TIME.AUTO,minimumFractionDigits:0,maximumFractionDigits:3}});Unit.define({baseUnitName:'timeDurationInMs',baseJsonName:'ms',scaleBaseUnit:tr.b.UnitScale.TIME.MILLI_SEC,formatSpec(){return Unit.currentTimeDisplayMode_.formatSpec;}});Unit.define({baseUnitName:'timeStampInMs',baseJsonName:'tsMs',scaleBaseUnit:tr.b.UnitScale.TIME.MILLI_SEC,formatSpec(){return Unit.currentTimeDisplayMode_.formatSpec;}});Unit.define({baseUnitName:'normalizedPercentage',baseJsonName:'n%',formatSpec:{unitScale:[{value:0.01,symbol:'%'}],avoidSpacePrecedingUnit:true,minimumFractionDigits:3,maximumFractionDigits:3}});Unit.define({baseUnitName:'sizeInBytes',baseJsonName:'sizeInBytes',formatSpec:{unitScale:tr.b.UnitScale.MEMORY.AUTO,minimumFractionDigits:1,maximumFractionDigits:1}});Unit.define({baseUnitName:'energyInJoules',baseJsonName:'J',formatSpec:{baseSymbol:'J',minimumFractionDigits:3}});Unit.define({baseUnitName:'powerInWatts',baseJsonName:'W',formatSpec:{baseSymbol:'W',minimumFractionDigits:3}});Unit.define({baseUnitName:'unitlessNumber',baseJsonName:'unitless',formatSpec:{minimumFractionDigits:3,maximumFractionDigits:3}});Unit.define({baseUnitName:'count',baseJsonName:'count',formatSpec:{minimumFractionDigits:0,maximumFractionDigits:0}});Unit.define({baseUnitName:'sigma',baseJsonName:'sigma',formatSpec:{baseSymbol:String.fromCharCode(963),minimumFractionDigits:1,maximumFractionDigits:1}});return{ImprovementDirection,Unit,};});'use strict';tr.exportTo('tr.b',function(){class Scalar{constructor(unit,value){if(!(unit instanceof tr.b.Unit)){throw new Error('Expected Unit');}
+const unit=new Unit(unitName,jsonName,scaleBaseUnit,isDelta,improvementDirection,params.formatSpec);Unit.byName[unitName]=unit;Unit.byJSONName[jsonName]=unit;return unit;};tr.b.EventTarget.decorate(Unit);Unit.reset();Unit.define({baseUnitName:'timeInMsAutoFormat',baseJsonName:'msBestFitFormat',scaleBaseUnit:tr.b.UnitScale.TIME.MILLI_SEC,formatSpec:{unitScale:tr.b.UnitScale.TIME.AUTO,minimumFractionDigits:0,maximumFractionDigits:3}});Unit.define({baseUnitName:'timeDurationInMs',baseJsonName:'ms',scaleBaseUnit:tr.b.UnitScale.TIME.MILLI_SEC,formatSpec(){return Unit.currentTimeDisplayMode_.formatSpec;}});Unit.define({baseUnitName:'timeStampInMs',baseJsonName:'tsMs',scaleBaseUnit:tr.b.UnitScale.TIME.MILLI_SEC,formatSpec(){return Unit.currentTimeDisplayMode_.formatSpec;}});Unit.define({baseUnitName:'normalizedPercentage',baseJsonName:'n%',formatSpec:{unitScale:[{value:0.01,symbol:'%'}],avoidSpacePrecedingUnit:true,minimumFractionDigits:1,maximumFractionDigits:1}});Unit.define({baseUnitName:'sizeInBytes',baseJsonName:'sizeInBytes',formatSpec:{unitScale:tr.b.UnitScale.MEMORY.AUTO,minimumFractionDigits:1,maximumFractionDigits:1}});Unit.define({baseUnitName:'bandwidthInBytesPerSecond',baseJsonName:'bytesPerSecond',formatSpec:{unitScale:tr.b.UnitScale.BANDWIDTH_BYTES.AUTO,minimumFractionDigits:1,maximumFractionDigits:1}});Unit.define({baseUnitName:'energyInJoules',baseJsonName:'J',formatSpec:{unitScale:tr.b.UnitScale.defineUnitScaleFromPrefixScale('J','JOULE',tr.b.UnitPrefixScale.METRIC,'JOULE').AUTO,minimumFractionDigits:3}});Unit.define({baseUnitName:'powerInWatts',baseJsonName:'W',formatSpec:{unitScale:tr.b.UnitScale.defineUnitScaleFromPrefixScale('W','WATT',tr.b.UnitPrefixScale.METRIC,'WATT').AUTO,minimumFractionDigits:3}});Unit.define({baseUnitName:'electricCurrentInAmperes',baseJsonName:'A',formatSpec:{baseSymbol:'A',unitScale:tr.b.UnitScale.defineUnitScaleFromPrefixScale('A','AMPERE',tr.b.UnitPrefixScale.METRIC,'AMPERE').AUTO,minimumFractionDigits:3}});Unit.define({baseUnitName:'electricPotentialInVolts',baseJsonName:'V',formatSpec:{baseSymbol:'V',unitScale:tr.b.UnitScale.defineUnitScaleFromPrefixScale('V','VOLT',tr.b.UnitPrefixScale.METRIC,'VOLT').AUTO,minimumFractionDigits:3}});Unit.define({baseUnitName:'frequencyInHertz',baseJsonName:'Hz',formatSpec:{baseSymbol:'Hz',unitScale:tr.b.UnitScale.defineUnitScaleFromPrefixScale('Hz','HERTZ',tr.b.UnitPrefixScale.METRIC,'HERTZ').AUTO,minimumFractionDigits:3}});Unit.define({baseUnitName:'unitlessNumber',baseJsonName:'unitless',formatSpec:{minimumFractionDigits:3,maximumFractionDigits:3}});Unit.define({baseUnitName:'count',baseJsonName:'count',formatSpec:{minimumFractionDigits:0,maximumFractionDigits:0}});Unit.define({baseUnitName:'sigma',baseJsonName:'sigma',formatSpec:{baseSymbol:String.fromCharCode(963),minimumFractionDigits:1,maximumFractionDigits:1}});return{ImprovementDirection,Unit,};});'use strict';tr.exportTo('tr.b',function(){class Scalar{constructor(unit,value){if(!(unit instanceof tr.b.Unit)){throw new Error('Expected Unit');}
if(!(typeof(value)==='number')){throw new Error('Expected value to be number');}
this.unit=unit;this.value=value;}
asDict(){return{unit:this.unit.asJSON(),value:tr.b.numberToJson(this.value),};}
@@ -4293,7 +4554,11 @@ if(r===max){h=(g-b)/delta;if(g<b)h+=6;}else if(g===max){h=2+((b-r)/delta);}else{
h/=6;}
return{h,s,l,a:this.a};},toStringWithAlphaOverride(alpha){return'rgba('+
this.r+','+this.g+','+
-this.b+','+alpha+')';}};return{Color,};});'use strict';tr.exportTo('tr.b',function(){const generalPurposeColors=[new tr.b.Color(122,98,135),new tr.b.Color(150,83,105),new tr.b.Color(44,56,189),new tr.b.Color(99,86,147),new tr.b.Color(104,129,107),new tr.b.Color(130,178,55),new tr.b.Color(87,109,147),new tr.b.Color(111,145,88),new tr.b.Color(81,152,131),new tr.b.Color(142,91,111),new tr.b.Color(81,163,70),new tr.b.Color(148,94,86),new tr.b.Color(144,89,118),new tr.b.Color(83,150,97),new tr.b.Color(105,94,139),new tr.b.Color(89,144,122),new tr.b.Color(105,119,128),new tr.b.Color(96,128,137),new tr.b.Color(145,88,145),new tr.b.Color(88,145,144),new tr.b.Color(90,100,143),new tr.b.Color(121,97,136),new tr.b.Color(111,160,73),new tr.b.Color(112,91,142),new tr.b.Color(86,147,86),new tr.b.Color(63,100,170),new tr.b.Color(81,152,107),new tr.b.Color(60,164,173),new tr.b.Color(143,72,161),new tr.b.Color(159,74,86)];const reservedColorsByName={thread_state_uninterruptible:new tr.b.Color(182,125,143),thread_state_iowait:new tr.b.Color(255,140,0),thread_state_running:new tr.b.Color(126,200,148),thread_state_runnable:new tr.b.Color(133,160,210),thread_state_sleeping:new tr.b.Color(240,240,240),thread_state_unknown:new tr.b.Color(199,155,125),background_memory_dump:new tr.b.Color(0,180,180),light_memory_dump:new tr.b.Color(0,0,180),detailed_memory_dump:new tr.b.Color(180,0,180),vsync_highlight_color:new tr.b.Color(0,0,255),generic_work:new tr.b.Color(125,125,125),good:new tr.b.Color(0,125,0),bad:new tr.b.Color(180,125,0),terrible:new tr.b.Color(180,0,0),black:new tr.b.Color(0,0,0),grey:new tr.b.Color(221,221,221),white:new tr.b.Color(255,255,255),yellow:new tr.b.Color(255,255,0),olive:new tr.b.Color(100,100,0),rail_response:new tr.b.Color(67,135,253),rail_animation:new tr.b.Color(244,74,63),rail_idle:new tr.b.Color(238,142,0),rail_load:new tr.b.Color(13,168,97),startup:new tr.b.Color(230,230,0),heap_dump_stack_frame:new tr.b.Color(128,128,128),heap_dump_object_type:new tr.b.Color(0,0,255),heap_dump_child_node_arrow:new tr.b.Color(204,102,0),cq_build_running:new tr.b.Color(255,255,119),cq_build_passed:new tr.b.Color(153,238,102),cq_build_failed:new tr.b.Color(238,136,136),cq_build_abandoned:new tr.b.Color(187,187,187),cq_build_attempt_runnig:new tr.b.Color(222,222,75),cq_build_attempt_passed:new tr.b.Color(103,218,35),cq_build_attempt_failed:new tr.b.Color(197,81,81)};const numGeneralPurposeColorIds=generalPurposeColors.length;const numReservedColorIds=Object.keys(reservedColorsByName).length;const numColorsPerVariant=numGeneralPurposeColorIds+numReservedColorIds;function ColorScheme(){}
+this.b+','+alpha+')';}};return{Color,};});'use strict';tr.exportTo('tr.b',function(){function SinebowColorGenerator(opt_a,opt_brightness){this.a_=(opt_a===undefined)?1:opt_a;this.brightness_=(opt_brightness===undefined)?1:opt_brightness;this.colorIndex_=0;this.keyToColor={};}
+SinebowColorGenerator.prototype={colorForKey(key){if(!this.keyToColor[key]){this.keyToColor[key]=this.nextColor();}
+return this.keyToColor[key];},nextColor(){const components=SinebowColorGenerator.nthColor(this.colorIndex_++);return tr.b.Color.fromString(SinebowColorGenerator.calculateColor(components[0],components[1],components[2],this.a_,this.brightness_));}};SinebowColorGenerator.PHI=(1+Math.sqrt(5))/2;SinebowColorGenerator.sinebow=function(h){h+=0.5;h=-h;let r=Math.sin(Math.PI*h);let g=Math.sin(Math.PI*(h+1/3));let b=Math.sin(Math.PI*(h+2/3));r*=r;g*=g;b*=b;const y=2*(0.2989*r+0.5870*g+0.1140*b);r/=y;g/=y;b/=y;return[256*r,256*g,256*b];};SinebowColorGenerator.nthColor=function(n){return SinebowColorGenerator.sinebow(n*this.PHI);};SinebowColorGenerator.calculateColor=function(r,g,b,a,brightness){if(brightness<=1){r*=brightness;g*=brightness;b*=brightness;}else{r=tr.b.math.lerp(tr.b.math.normalize(brightness,1,2),r,255);g=tr.b.math.lerp(tr.b.math.normalize(brightness,1,2),g,255);b=tr.b.math.lerp(tr.b.math.normalize(brightness,1,2),b,255);}
+r=Math.round(r);g=Math.round(g);b=Math.round(b);return'rgba('+r+','+g+','+b+', '+a+')';};return{SinebowColorGenerator,};});'use strict';tr.exportTo('tr.b',function(){const numGeneralPurposeColorIds=23;const generalPurposeColors=new Array(numGeneralPurposeColorIds);const sinebowAlpha=1.0;const sinebowBrightness=1.5;const sinebowColorGenerator=new tr.b.SinebowColorGenerator(sinebowAlpha,sinebowBrightness);for(let i=0;i<numGeneralPurposeColorIds;i++){generalPurposeColors[i]=sinebowColorGenerator.nextColor();}
+const reservedColorsByName={thread_state_uninterruptible:new tr.b.Color(182,125,143),thread_state_iowait:new tr.b.Color(255,140,0),thread_state_running:new tr.b.Color(126,200,148),thread_state_runnable:new tr.b.Color(133,160,210),thread_state_sleeping:new tr.b.Color(240,240,240),thread_state_unknown:new tr.b.Color(199,155,125),background_memory_dump:new tr.b.Color(0,180,180),light_memory_dump:new tr.b.Color(0,0,180),detailed_memory_dump:new tr.b.Color(180,0,180),vsync_highlight_color:new tr.b.Color(0,0,255),generic_work:new tr.b.Color(125,125,125),good:new tr.b.Color(0,125,0),bad:new tr.b.Color(180,125,0),terrible:new tr.b.Color(180,0,0),black:new tr.b.Color(0,0,0),grey:new tr.b.Color(221,221,221),white:new tr.b.Color(255,255,255),yellow:new tr.b.Color(255,255,0),olive:new tr.b.Color(100,100,0),rail_response:new tr.b.Color(67,135,253),rail_animation:new tr.b.Color(244,74,63),rail_idle:new tr.b.Color(238,142,0),rail_load:new tr.b.Color(13,168,97),startup:new tr.b.Color(230,230,0),heap_dump_stack_frame:new tr.b.Color(128,128,128),heap_dump_object_type:new tr.b.Color(0,0,255),heap_dump_child_node_arrow:new tr.b.Color(204,102,0),cq_build_running:new tr.b.Color(255,255,119),cq_build_passed:new tr.b.Color(153,238,102),cq_build_failed:new tr.b.Color(238,136,136),cq_build_abandoned:new tr.b.Color(187,187,187),cq_build_attempt_runnig:new tr.b.Color(222,222,75),cq_build_attempt_passed:new tr.b.Color(103,218,35),cq_build_attempt_failed:new tr.b.Color(197,81,81)};const numReservedColorIds=Object.keys(reservedColorsByName).length;const numColorsPerVariant=numGeneralPurposeColorIds+numReservedColorIds;function ColorScheme(){}
const paletteBase=[];paletteBase.push.apply(paletteBase,generalPurposeColors);paletteBase.push.apply(paletteBase,Object.values(reservedColorsByName));ColorScheme.colors=[];ColorScheme.properties={};ColorScheme.properties={numColorsPerVariant,};function pushVariant(func){const variantColors=paletteBase.map(func);ColorScheme.colors.push.apply(ColorScheme.colors,variantColors);}
pushVariant(function(c){return c;});ColorScheme.properties.brightenedOffsets=[];ColorScheme.properties.brightenedOffsets.push(ColorScheme.colors.length);pushVariant(function(c){return c.lighten(0.3,0.8);});ColorScheme.properties.brightenedOffsets.push(ColorScheme.colors.length);pushVariant(function(c){return c.lighten(0.48,0.85);});ColorScheme.properties.brightenedOffsets.push(ColorScheme.colors.length);pushVariant(function(c){return c.lighten(0.65,0.9);});ColorScheme.properties.dimmedOffsets=[];ColorScheme.properties.dimmedOffsets.push(ColorScheme.colors.length);pushVariant(function(c){return c.desaturate();});ColorScheme.properties.dimmedOffsets.push(ColorScheme.colors.length);pushVariant(function(c){return c.desaturate(0.5);});ColorScheme.properties.dimmedOffsets.push(ColorScheme.colors.length);pushVariant(function(c){return c.desaturate(0.3);});ColorScheme.colorsAsStrings=ColorScheme.colors.map(function(c){return c.toString();});const reservedColorNameToIdMap=(function(){const m=new Map();let i=generalPurposeColors.length;for(const key of Object.keys(reservedColorsByName)){m.set(key,i++);}
return m;})();ColorScheme.getColorIdForReservedName=function(name){const id=reservedColorNameToIdMap.get(name);if(id===undefined){throw new Error('Unrecognized color '+name);}
@@ -4327,7 +4592,7 @@ return{'events':stableIds};},asSet(){return this.events_;}};EventSet.IMMUTABLE_E
SelectableItem.prototype={get modelItem(){return this.modelItem_;},get selected(){return this.selectionState===SelectionState.SELECTED;},addToSelection(selection){const modelItem=this.modelItem_;if(!modelItem)return;selection.push(modelItem);},addToTrackMap(eventToTrackMap,track){const modelItem=this.modelItem_;if(!modelItem)return;eventToTrackMap.addEvent(modelItem,track);}};return{SelectableItem,};});'use strict';tr.exportTo('tr.model',function(){const SelectableItem=tr.model.SelectableItem;const SelectionState=tr.model.SelectionState;const IMMUTABLE_EMPTY_SET=tr.model.EventSet.IMMUTABLE_EMPTY_SET;function Event(){SelectableItem.call(this,this);this.guid_=tr.b.GUID.allocateSimple();this.selectionState=SelectionState.NONE;this.info=undefined;}
Event.prototype={__proto__:SelectableItem.prototype,get guid(){return this.guid_;},get stableId(){return undefined;},get range(){const range=new tr.b.math.Range();this.addBoundsToRange(range);return range;},associatedAlerts:IMMUTABLE_EMPTY_SET,addAssociatedAlert(alert){if(this.associatedAlerts===IMMUTABLE_EMPTY_SET){this.associatedAlerts=new tr.model.EventSet();}
this.associatedAlerts.push(alert);},addBoundsToRange(range){}};return{Event,};});'use strict';tr.exportTo('tr.model',function(){function TimedEvent(start){tr.model.Event.call(this);this.start=start;this.duration=0;this.cpuStart=undefined;this.cpuDuration=undefined;this.contexts=Object.freeze([]);}
-TimedEvent.prototype={__proto__:tr.model.Event.prototype,get end(){return this.start+this.duration;},addBoundsToRange(range){range.addValue(this.start);range.addValue(this.end);},bounds(that,opt_precisionUnit){if(opt_precisionUnit===undefined){opt_precisionUnit=tr.b.TimeDisplayModes.ms;}
+TimedEvent.prototype={__proto__:tr.model.Event.prototype,get end(){return this.start+this.duration;},get boundsRange(){return tr.b.math.Range.fromExplicitRange(this.start,this.end);},addBoundsToRange(range){range.addValue(this.start);range.addValue(this.end);},bounds(that,opt_precisionUnit){if(opt_precisionUnit===undefined){opt_precisionUnit=tr.b.TimeDisplayModes.ms;}
const startsBefore=opt_precisionUnit.roundedLess(that.start,this.start);const endsAfter=opt_precisionUnit.roundedLess(this.end,that.end);return!startsBefore&&!endsAfter;}};return{TimedEvent,};});'use strict';tr.exportTo('tr.model',function(){function Alert(info,start,opt_associatedEvents,opt_args){tr.model.TimedEvent.call(this,start);this.info=info;this.args=opt_args||{};this.associatedEvents=new tr.model.EventSet(opt_associatedEvents);this.associatedEvents.forEach(function(event){event.addAssociatedAlert(this);},this);}
Alert.prototype={__proto__:tr.model.TimedEvent.prototype,get title(){return this.info.title;},get colorId(){return this.info.colorId;},get userFriendlyName(){return'Alert '+this.title+' at '+
tr.b.Unit.byName.timeStampInMs.format(this.start);}};tr.model.EventRegistry.register(Alert,{name:'alert',pluralName:'alerts'});return{Alert,};});'use strict';tr.exportTo('tr.model',function(){const ColorScheme=tr.b.ColorScheme;const Statistics=tr.b.math.Statistics;const FRAME_PERF_CLASS={GOOD:'good',BAD:'bad',TERRIBLE:'terrible',NEUTRAL:'generic_work'};function Frame(associatedEvents,threadTimeRanges,opt_args){tr.model.Event.call(this);this.threadTimeRanges=threadTimeRanges;this.associatedEvents=new tr.model.EventSet(associatedEvents);this.args=opt_args||{};this.title='Frame';this.start=Statistics.min(threadTimeRanges,function(x){return x.start;});this.end=Statistics.max(threadTimeRanges,function(x){return x.end;});this.totalDuration=Statistics.sum(threadTimeRanges,function(x){return x.end-x.start;});this.perfClass=FRAME_PERF_CLASS.NEUTRAL;}
@@ -4474,9 +4739,13 @@ parentAsyncSliceGroup.slices.indexOf(this);},*findTopmostSlicesRelativeToThisSli
for(const s of this.subSlices){yield*s.findTopmostSlicesRelativeToThisSlice(eventPredicate);}},findDescendentSlice(targetTitle){if(!this.subSlices)return undefined;for(let i=0;i<this.subSlices.length;i++){if(this.subSlices[i].title===targetTitle){return this.subSlices[i];}
const slice=this.subSlices[i].findDescendentSlice(targetTitle);if(slice)return slice;}
return undefined;},*enumerateAllDescendents(){for(const slice of this.subSlices){yield slice;}
-for(const slice of this.subSlices){if(slice.enumerateAllDescendents!==undefined){yield*slice.enumerateAllDescendents();}}},compareTo(that){return this.title.localeCompare(that.title);}};tr.model.EventRegistry.register(AsyncSlice,{name:'asyncSlice',pluralName:'asyncSlices'});return{AsyncSlice,};});'use strict';tr.exportTo('tr.e.blink',function(){class BlinkSchedulerAsyncSlice extends tr.model.AsyncSlice{get viewSubGroupGroupingKey(){if(this.title.startsWith('WebFrameScheduler.')){return'WebFrame'+this.id;}
-return undefined;}}
-tr.model.AsyncSlice.subTypes.register(BlinkSchedulerAsyncSlice,{categoryParts:['renderer.scheduler','disabled-by-default-renderer.scheduler',]});return{BlinkSchedulerAsyncSlice,};});'use strict';tr.exportTo('tr.model.helpers',function(){const MAIN_FRAMETIME_TYPE='main_frametime_type';const IMPL_FRAMETIME_TYPE='impl_frametime_type';const MAIN_RENDERING_STATS='BenchmarkInstrumentation::MainThreadRenderingStats';const IMPL_RENDERING_STATS='BenchmarkInstrumentation::ImplThreadRenderingStats';function getSlicesIntersectingRange(rangeOfInterest,slices){const slicesInFilterRange=[];for(let i=0;i<slices.length;i++){const slice=slices[i];if(rangeOfInterest.intersectsExplicitRangeInclusive(slice.start,slice.end)){slicesInFilterRange.push(slice);}}
+for(const slice of this.subSlices){if(slice.enumerateAllDescendents!==undefined){yield*slice.enumerateAllDescendents();}}},compareTo(that){return this.title.localeCompare(that.title);}};tr.model.EventRegistry.register(AsyncSlice,{name:'asyncSlice',pluralName:'asyncSlices'});return{AsyncSlice,};});'use strict';tr.exportTo('tr.e.blink',function(){class BlinkSchedulerAsyncSlice extends tr.model.AsyncSlice{get viewSubGroupGroupingKey(){if(this.title.startsWith('FrameScheduler.')){return'Frame'+this.id;}
+if(this.title.startsWith('Scheduler.')){return'Renderer Scheduler';}
+return undefined;}
+get viewSubGroupTitle(){if(this.title.startsWith('FrameScheduler.')){return this.title.substring(15);}
+if(this.title.startsWith('Scheduler.')){return this.title.substring(10);}
+return this.title;}}
+tr.model.AsyncSlice.subTypes.register(BlinkSchedulerAsyncSlice,{categoryParts:['renderer.scheduler','disabled-by-default-renderer.scheduler','disabled-by-default-renderer.scheduler.debug',]});return{BlinkSchedulerAsyncSlice,};});'use strict';tr.exportTo('tr.model.helpers',function(){const MAIN_FRAMETIME_TYPE='main_frametime_type';const IMPL_FRAMETIME_TYPE='impl_frametime_type';const MAIN_RENDERING_STATS='BenchmarkInstrumentation::MainThreadRenderingStats';const IMPL_RENDERING_STATS='BenchmarkInstrumentation::ImplThreadRenderingStats';function getSlicesIntersectingRange(rangeOfInterest,slices){const slicesInFilterRange=[];for(let i=0;i<slices.length;i++){const slice=slices[i];if(rangeOfInterest.intersectsExplicitRangeInclusive(slice.start,slice.end)){slicesInFilterRange.push(slice);}}
return slicesInFilterRange;}
function ChromeProcessHelper(modelHelper,process){this.modelHelper=modelHelper;this.process=process;this.telemetryInternalRanges_=undefined;}
ChromeProcessHelper.prototype={get pid(){return this.process.pid;},isTelemetryInternalEvent(slice){if(this.telemetryInternalRanges_===undefined){this.findTelemetryInternalRanges_();}
@@ -4493,18 +4762,33 @@ ChromeGpuHelper.PROCESS_NAME='GPU Process';ChromeGpuHelper.isGpuProcess=function
return process.findAllThreadsNamed('CrGpuMain').length>0;};ChromeGpuHelper.prototype={__proto__:tr.model.helpers.ChromeProcessHelper.prototype};return{ChromeGpuHelper,};});'use strict';tr.exportTo('tr.model.helpers',function(){const NET_CATEGORIES=new Set(['net','netlog','disabled-by-default-netlog','disabled-by-default-network']);class ChromeThreadHelper{constructor(thread){this.thread=thread;}
getNetworkEvents(){const networkEvents=[];for(const slice of this.thread.asyncSliceGroup.slices){const categories=tr.b.getCategoryParts(slice.category);const isNetEvent=category=>NET_CATEGORIES.has(category);if(categories.filter(isNetEvent).length===0)continue;networkEvents.push(slice);}
return networkEvents;}}
-return{ChromeThreadHelper,};});'use strict';tr.exportTo('tr.model.helpers',function(){const ChromeThreadHelper=tr.model.helpers.ChromeThreadHelper;function ChromeRendererHelper(modelHelper,process){tr.model.helpers.ChromeProcessHelper.call(this,modelHelper,process);this.mainThread_=process.findAtMostOneThreadNamed('CrRendererMain')||process.findAtMostOneThreadNamed('Chrome_InProcRendererThread');this.compositorThread_=process.findAtMostOneThreadNamed('Compositor');this.rasterWorkerThreads_=process.findAllThreadsMatching(function(t){if(t.name===undefined)return false;if(t.name.indexOf('CompositorTileWorker')===0)return true;if(t.name.indexOf('CompositorRasterWorker')===0)return true;return false;});if(!process.name){process.name=ChromeRendererHelper.PROCESS_NAME;}}
-ChromeRendererHelper.PROCESS_NAME='Renderer';ChromeRendererHelper.isRenderProcess=function(process){if(process.findAtMostOneThreadNamed('CrRendererMain'))return true;if(process.findAtMostOneThreadNamed('Compositor'))return true;return false;};ChromeRendererHelper.isTracingProcess=function(process){return process.labels!==undefined&&process.labels.length===1&&process.labels[0]==='chrome://tracing';};ChromeRendererHelper.prototype={__proto__:tr.model.helpers.ChromeProcessHelper.prototype,get mainThread(){return this.mainThread_;},get compositorThread(){return this.compositorThread_;},get rasterWorkerThreads(){return this.rasterWorkerThreads_;},get isChromeTracingUI(){return ChromeRendererHelper.isTracingProcess(this.process);},};return{ChromeRendererHelper,};});'use strict';tr.exportTo('tr.model.helpers',function(){function findChromeBrowserProcesses(model){return model.getAllProcesses(tr.model.helpers.ChromeBrowserHelper.isBrowserProcess);}
+return{ChromeThreadHelper,};});'use strict';tr.exportTo('tr.model.helpers',function(){const ChromeThreadHelper=tr.model.helpers.ChromeThreadHelper;function ChromeRendererHelper(modelHelper,process){tr.model.helpers.ChromeProcessHelper.call(this,modelHelper,process);this.mainThread_=process.findAtMostOneThreadNamed('CrRendererMain')||process.findAtMostOneThreadNamed('Chrome_InProcRendererThread');this.compositorThread_=process.findAtMostOneThreadNamed('Compositor');this.rasterWorkerThreads_=process.findAllThreadsMatching(function(t){if(t.name===undefined)return false;if(t.name.startsWith('CompositorTileWorker'))return true;if(t.name.startsWith('CompositorRasterWorker'))return true;return false;});this.dedicatedWorkerThreads_=process.findAllThreadsMatching(function(t){return t.name&&t.name.startsWith('DedicatedWorker');});this.foregroundWorkerThreads_=process.findAllThreadsMatching(function(t){return t.name&&t.name.startsWith('ThreadPoolForegroundWorker');});if(!process.name){process.name=ChromeRendererHelper.PROCESS_NAME;}}
+ChromeRendererHelper.PROCESS_NAME='Renderer';ChromeRendererHelper.isRenderProcess=function(process){if(process.findAtMostOneThreadNamed('CrRendererMain'))return true;if(process.findAtMostOneThreadNamed('Compositor'))return true;return false;};ChromeRendererHelper.isTracingProcess=function(process){return process.labels!==undefined&&process.labels.length===1&&process.labels[0]==='chrome://tracing';};ChromeRendererHelper.prototype={__proto__:tr.model.helpers.ChromeProcessHelper.prototype,get mainThread(){return this.mainThread_;},get compositorThread(){return this.compositorThread_;},get rasterWorkerThreads(){return this.rasterWorkerThreads_;},get dedicatedWorkerThreads(){return this.dedicatedWorkerThreads_;},get foregroundWorkerThreads(){return this.foregroundWorkerThreads_;},get isChromeTracingUI(){return ChromeRendererHelper.isTracingProcess(this.process);},};return{ChromeRendererHelper,};});'use strict';tr.exportTo('tr.model.um',function(){class Segment extends tr.model.TimedEvent{constructor(start,duration){super(start);this.duration=duration;this.expectations_=[];}
+get expectations(){return this.expectations_;}
+clone(){const clone=new Segment(this.start,this.duration);clone.expectations.push(...this.expectations);return clone;}
+addSegment(other){this.duration+=other.duration;this.expectations.push(...other.expectations);}}
+return{Segment,};});'use strict';tr.exportTo('tr.model.helpers',function(){const GESTURE_EVENT='SyntheticGestureController::running';const IR_REG_EXP=/Interaction\.([^/]+)(\/[^/]*)?$/;const ChromeRendererHelper=tr.model.helpers.ChromeRendererHelper;class TelemetryHelper{constructor(modelHelper){this.modelHelper=modelHelper;this.renderersWithIR_=undefined;this.irSegments_=undefined;this.uiSegments_=undefined;this.animationSegments_=undefined;}
+get renderersWithIR(){this.findIRs_();return this.renderersWithIR_;}
+get irSegments(){this.findIRs_();return this.irSegments_;}
+get uiSegments(){this.findIRs_();return this.uiSegments_;}
+get animationSegments(){if(this.animationSegments_===undefined){const model=this.modelHelper.model;this.animationSegments_=model.userModel.segments.filter(segment=>segment.expectations.find(ue=>ue instanceof tr.model.um.AnimationExpectation));this.animationSegments_.sort((x,y)=>x.start-y.start);}
+return this.animationSegments_;}
+findIRs_(){if(this.irSegments_!==undefined)return;this.renderersWithIR_=[];const gestureEvents=[];const interactionRecords=[];const processes=Object.values(this.modelHelper.rendererHelpers).concat(this.modelHelper.browserHelpers).map(processHelper=>processHelper.process);for(const process of processes){let foundIR=false;for(const thread of Object.values(process.threads)){for(const slice of thread.asyncSliceGroup.slices){if(slice.title===GESTURE_EVENT){gestureEvents.push(slice);}else if(IR_REG_EXP.test(slice.title)){interactionRecords.push(slice);foundIR=true;}}}
+if(foundIR&&ChromeRendererHelper.isRenderProcess(process)&&!ChromeRendererHelper.isTracingProcess(process)){this.renderersWithIR_.push(new ChromeRendererHelper(this.modelHelper,process));}}
+this.irSegments_=[];this.uiSegments_=[];for(const ir of interactionRecords){const parts=IR_REG_EXP.exec(ir.title);let gestureEventFound=false;if(parts[1].startsWith('Gesture_')){for(const gestureEvent of gestureEvents){if(ir.boundsRange.intersectsRangeInclusive(gestureEvent.boundsRange)){this.irSegments_.push(new tr.model.um.Segment(gestureEvent.start,gestureEvent.duration));gestureEventFound=true;break;}}}else if(parts[1].startsWith('ui_')){this.uiSegments_.push(new tr.model.um.Segment(ir.start,ir.duration));}
+if(!gestureEventFound){this.irSegments_.push(new tr.model.um.Segment(ir.start,ir.duration));}}
+this.irSegments_.sort((x,y)=>x.start-y.start);this.uiSegments_.sort((x,y)=>x.start-y.start);}}
+return{TelemetryHelper,};});'use strict';tr.exportTo('tr.model.helpers',function(){function findChromeBrowserProcesses(model){return model.getAllProcesses(tr.model.helpers.ChromeBrowserHelper.isBrowserProcess);}
function findChromeRenderProcesses(model){return model.getAllProcesses(tr.model.helpers.ChromeRendererHelper.isRenderProcess);}
function findChromeGpuProcess(model){const gpuProcesses=model.getAllProcesses(tr.model.helpers.ChromeGpuHelper.isGpuProcess);if(gpuProcesses.length!==1)return undefined;return gpuProcesses[0];}
+function findTelemetrySurfaceFlingerProcess(model){const surfaceFlingerProcesses=model.getAllProcesses(process=>(process.name==='SurfaceFlinger'));if(surfaceFlingerProcesses.length!==1)return undefined;return surfaceFlingerProcesses[0];}
function ChromeModelHelper(model){this.model_=model;const browserProcesses=findChromeBrowserProcesses(model);this.browserHelpers_=browserProcesses.map(p=>new tr.model.helpers.ChromeBrowserHelper(this,p));const gpuProcess=findChromeGpuProcess(model);if(gpuProcess){this.gpuHelper_=new tr.model.helpers.ChromeGpuHelper(this,gpuProcess);}else{this.gpuHelper_=undefined;}
-const rendererProcesses_=findChromeRenderProcesses(model);this.rendererHelpers_={};rendererProcesses_.forEach(function(renderProcess){const rendererHelper=new tr.model.helpers.ChromeRendererHelper(this,renderProcess);this.rendererHelpers_[rendererHelper.pid]=rendererHelper;},this);this.chromeBounds_=undefined;}
-ChromeModelHelper.guid=tr.b.GUID.allocateSimple();ChromeModelHelper.supportsModel=function(model){if(findChromeBrowserProcesses(model).length)return true;if(findChromeRenderProcesses(model).length)return true;return false;};ChromeModelHelper.prototype={get pid(){throw new Error('woah');},get process(){throw new Error('woah');},get model(){return this.model_;},get browserProcess(){if(this.browserHelper===undefined)return undefined;return this.browserHelper.process;},get browserHelper(){return this.browserHelpers_[0];},get browserHelpers(){return this.browserHelpers_;},get gpuHelper(){return this.gpuHelper_;},get rendererHelpers(){return this.rendererHelpers_;},get rendererWithLargestPid(){let largestPid=-1;for(const pid in this.rendererHelpers){const rendererHelper=this.rendererHelpers[pid];if(rendererHelper.isChromeTracingUI)continue;if(pid>largestPid)largestPid=pid;}
-if(largestPid===-1)return undefined;return this.rendererHelpers[largestPid];},get chromeBounds(){if(!this.chromeBounds_){this.chromeBounds_=new tr.b.math.Range();for(const browserHelper of Object.values(this.browserHelpers)){this.chromeBounds_.addRange(browserHelper.process.bounds);}
+const rendererProcesses_=findChromeRenderProcesses(model);this.rendererHelpers_={};rendererProcesses_.forEach(function(renderProcess){const rendererHelper=new tr.model.helpers.ChromeRendererHelper(this,renderProcess);this.rendererHelpers_[rendererHelper.pid]=rendererHelper;},this);this.surfaceFlingerProcess_=findTelemetrySurfaceFlingerProcess(model);this.chromeBounds_=undefined;this.telemetryHelper_=new tr.model.helpers.TelemetryHelper(this);}
+ChromeModelHelper.guid=tr.b.GUID.allocateSimple();ChromeModelHelper.supportsModel=function(model){if(findChromeBrowserProcesses(model).length)return true;if(findChromeRenderProcesses(model).length)return true;return false;};ChromeModelHelper.prototype={get pid(){throw new Error('woah');},get process(){throw new Error('woah');},get model(){return this.model_;},get browserProcess(){if(this.browserHelper===undefined)return undefined;return this.browserHelper.process;},get browserHelper(){return this.browserHelpers_[0];},get browserHelpers(){return this.browserHelpers_;},get gpuHelper(){return this.gpuHelper_;},get rendererHelpers(){return this.rendererHelpers_;},get surfaceFlingerProcess(){return this.surfaceFlingerProcess_;},get chromeBounds(){if(!this.chromeBounds_){this.chromeBounds_=new tr.b.math.Range();for(const browserHelper of Object.values(this.browserHelpers)){this.chromeBounds_.addRange(browserHelper.process.bounds);}
for(const rendererHelper of Object.values(this.rendererHelpers)){this.chromeBounds_.addRange(rendererHelper.process.bounds);}
if(this.gpuHelper){this.chromeBounds_.addRange(this.gpuHelper.process.bounds);}}
if(this.chromeBounds_.isEmpty){return undefined;}
-return this.chromeBounds_;}};return{ChromeModelHelper,};});'use strict';tr.exportTo('tr.e.cc',function(){const AsyncSlice=tr.model.AsyncSlice;const EventSet=tr.model.EventSet;const UI_COMP_NAME='INPUT_EVENT_LATENCY_UI_COMPONENT';const ORIGINAL_COMP_NAME='INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT';const BEGIN_COMP_NAME='INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT';const END_COMP_NAME='INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT';const MAIN_RENDERER_THREAD_NAME='CrRendererMain';const COMPOSITOR_THREAD_NAME='Compositor';const POSTTASK_FLOW_EVENT='disabled-by-default-toplevel.flow';const IPC_FLOW_EVENT='disabled-by-default-ipc.flow';const INPUT_EVENT_TYPE_NAMES={CHAR:'Char',CLICK:'GestureClick',CONTEXT_MENU:'ContextMenu',FLING_CANCEL:'GestureFlingCancel',FLING_START:'GestureFlingStart',KEY_DOWN:'KeyDown',KEY_DOWN_RAW:'RawKeyDown',KEY_UP:'KeyUp',LATENCY_SCROLL_UPDATE:'ScrollUpdate',MOUSE_DOWN:'MouseDown',MOUSE_ENTER:'MouseEnter',MOUSE_LEAVE:'MouseLeave',MOUSE_MOVE:'MouseMove',MOUSE_UP:'MouseUp',MOUSE_WHEEL:'MouseWheel',PINCH_BEGIN:'GesturePinchBegin',PINCH_END:'GesturePinchEnd',PINCH_UPDATE:'GesturePinchUpdate',SCROLL_BEGIN:'GestureScrollBegin',SCROLL_END:'GestureScrollEnd',SCROLL_UPDATE:'GestureScrollUpdate',SCROLL_UPDATE_RENDERER:'ScrollUpdate',SHOW_PRESS:'GestureShowPress',TAP:'GestureTap',TAP_CANCEL:'GestureTapCancel',TAP_DOWN:'GestureTapDown',TOUCH_CANCEL:'TouchCancel',TOUCH_END:'TouchEnd',TOUCH_MOVE:'TouchMove',TOUCH_START:'TouchStart',UNKNOWN:'UNKNOWN'};function InputLatencyAsyncSlice(){AsyncSlice.apply(this,arguments);this.associatedEvents_=new EventSet();this.typeName_=undefined;if(!this.isLegacyEvent){this.determineModernTypeName_();}}
+return this.chromeBounds_;},get telemetryHelper(){return this.telemetryHelper_;}};return{ChromeModelHelper,};});'use strict';tr.exportTo('tr.e.cc',function(){const AsyncSlice=tr.model.AsyncSlice;const EventSet=tr.model.EventSet;const UI_COMP_NAME='INPUT_EVENT_LATENCY_UI_COMPONENT';const ORIGINAL_COMP_NAME='INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT';const BEGIN_COMP_NAME='INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT';const END_COMP_NAME='INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT';const LEGACY_END_COMP_NAME='INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT';const MAIN_RENDERER_THREAD_NAME='CrRendererMain';const COMPOSITOR_THREAD_NAME='Compositor';const POSTTASK_FLOW_EVENT='disabled-by-default-toplevel.flow';const IPC_FLOW_EVENT='disabled-by-default-ipc.flow';const INPUT_EVENT_TYPE_NAMES={CHAR:'Char',CLICK:'GestureClick',CONTEXT_MENU:'ContextMenu',FLING_CANCEL:'GestureFlingCancel',FLING_START:'GestureFlingStart',KEY_DOWN:'KeyDown',KEY_DOWN_RAW:'RawKeyDown',KEY_UP:'KeyUp',LATENCY_SCROLL_UPDATE:'ScrollUpdate',MOUSE_DOWN:'MouseDown',MOUSE_ENTER:'MouseEnter',MOUSE_LEAVE:'MouseLeave',MOUSE_MOVE:'MouseMove',MOUSE_UP:'MouseUp',MOUSE_WHEEL:'MouseWheel',PINCH_BEGIN:'GesturePinchBegin',PINCH_END:'GesturePinchEnd',PINCH_UPDATE:'GesturePinchUpdate',SCROLL_BEGIN:'GestureScrollBegin',SCROLL_END:'GestureScrollEnd',SCROLL_UPDATE:'GestureScrollUpdate',SCROLL_UPDATE_RENDERER:'ScrollUpdate',SHOW_PRESS:'GestureShowPress',TAP:'GestureTap',TAP_CANCEL:'GestureTapCancel',TAP_DOWN:'GestureTapDown',TOUCH_CANCEL:'TouchCancel',TOUCH_END:'TouchEnd',TOUCH_MOVE:'TouchMove',TOUCH_START:'TouchStart',UNKNOWN:'UNKNOWN'};function InputLatencyAsyncSlice(){AsyncSlice.apply(this,arguments);this.associatedEvents_=new EventSet();this.typeName_=undefined;if(!this.isLegacyEvent){this.determineModernTypeName_();}}
InputLatencyAsyncSlice.prototype={__proto__:AsyncSlice.prototype,get isLegacyEvent(){return this.title==='InputLatency';},get typeName(){if(!this.typeName_){this.determineLegacyTypeName_();}
return this.typeName_;},checkTypeName_(){if(!this.typeName_){throw new Error('Unable to determine typeName');}
let found=false;for(const typeName in INPUT_EVENT_TYPE_NAMES){if(this.typeName===INPUT_EVENT_TYPE_NAMES[typeName]){found=true;break;}}
@@ -4533,19 +4817,18 @@ while(pendingEventQueue.length!==0){const event=pendingEventQueue.pop();this.add
const COMPOSITOR_ON_BIFD='Scheduler::OnBeginImplFrameDeadline';beginImplFrame=event.findDescendentSlice(COMPOSITOR_ON_BIFD);if(beginImplFrame){this.backtraceFromDraw(beginImplFrame,visitedEvents);}}
const INPUT_GSU='InputLatency::GestureScrollUpdate';if(this.title===INPUT_GSU){this.addScrollUpdateEvents(rendererHelper);}},get associatedEvents(){if(this.associatedEvents_.length!==0){return this.associatedEvents_;}
const modelIndices=this.startThread.parent.model.modelIndices;const flowEvents=modelIndices.getFlowEventsWithId(this.id);if(flowEvents.length===0){return this.associatedEvents_;}
-const sourceSlices=this.addDirectlyAssociatedEvents(flowEvents);const rendererHelper=this.getRendererHelper(sourceSlices);this.addOtherCausallyRelatedEvents(rendererHelper,sourceSlices,flowEvents);return this.associatedEvents_;},get inputLatency(){if(!('data'in this.args))return undefined;const data=this.args.data;if(!(END_COMP_NAME in data))return undefined;let latency=0;const endTime=data[END_COMP_NAME].time;if(ORIGINAL_COMP_NAME in data){latency=endTime-data[ORIGINAL_COMP_NAME].time;}else if(UI_COMP_NAME in data){latency=endTime-data[UI_COMP_NAME].time;}else if(BEGIN_COMP_NAME in data){latency=endTime-data[BEGIN_COMP_NAME].time;}else{throw new Error('No valid begin latency component');}
-return latency;}};const eventTypeNames=['Char','ContextMenu','GestureClick','GestureFlingCancel','GestureFlingStart','GestureScrollBegin','GestureScrollEnd','GestureScrollUpdate','GestureShowPress','GestureTap','GestureTapCancel','GestureTapDown','GesturePinchBegin','GesturePinchEnd','GesturePinchUpdate','KeyDown','KeyUp','MouseDown','MouseEnter','MouseLeave','MouseMove','MouseUp','MouseWheel','RawKeyDown','ScrollUpdate','TouchCancel','TouchEnd','TouchMove','TouchStart'];const allTypeNames=['InputLatency'];eventTypeNames.forEach(function(eventTypeName){allTypeNames.push('InputLatency:'+eventTypeName);allTypeNames.push('InputLatency::'+eventTypeName);});AsyncSlice.subTypes.register(InputLatencyAsyncSlice,{typeNames:allTypeNames,categoryParts:['latencyInfo']});return{InputLatencyAsyncSlice,INPUT_EVENT_TYPE_NAMES,};});'use strict';tr.exportTo('tr.b',function(){function SinebowColorGenerator(opt_a,opt_brightness){this.a_=(opt_a===undefined)?1:opt_a;this.brightness_=(opt_brightness===undefined)?1:opt_brightness;this.colorIndex_=0;this.keyToColor={};}
-SinebowColorGenerator.prototype={colorForKey(key){if(!this.keyToColor[key]){this.keyToColor[key]=this.nextColor();}
-return this.keyToColor[key];},nextColor(){const components=SinebowColorGenerator.nthColor(this.colorIndex_++);return tr.b.Color.fromString(SinebowColorGenerator.calculateColor(components[0],components[1],components[2],this.a_,this.brightness_));}};SinebowColorGenerator.PHI=(1+Math.sqrt(5))/2;SinebowColorGenerator.sinebow_=function(h){h+=0.5;h=-h;let r=Math.sin(Math.PI*h);let g=Math.sin(Math.PI*(h+1/3));let b=Math.sin(Math.PI*(h+2/3));r*=r;g*=g;b*=b;const y=2*(0.2989*r+0.5870*g+0.1140*b);r/=y;g/=y;b/=y;return[256*r,256*g,256*b];};SinebowColorGenerator.nthColor=function(n){return SinebowColorGenerator.sinebow_(n*this.PHI);};SinebowColorGenerator.calculateColor=function(r,g,b,a,brightness){if(brightness<=1){r*=brightness;g*=brightness;b*=brightness;}else{r=tr.b.math.lerp(tr.b.math.normalize(brightness,1,2),r,255);g=tr.b.math.lerp(tr.b.math.normalize(brightness,1,2),g,255);b=tr.b.math.lerp(tr.b.math.normalize(brightness,1,2),b,255);}
-r=Math.round(r);g=Math.round(g);b=Math.round(b);return'rgba('+r+','+g+','+b+', '+a+')';};return{SinebowColorGenerator,};});'use strict';tr.exportTo('tr.e.chrome',function(){const SAME_AS_PARENT='same-as-parent';const TITLES_FOR_USER_FRIENDLY_CATEGORY={composite:['CompositingInputsUpdater::update','ThreadProxy::SetNeedsUpdateLayers','LayerTreeHost::UpdateLayers::CalcDrawProps','UpdateLayerTree',],gc:['minorGC','majorGC','MajorGC','MinorGC','V8.GCScavenger','V8.GCIncrementalMarking','V8.GCIdleNotification','V8.GCContext','V8.GCCompactor','V8GCController::traceDOMWrappers',],iframe_creation:['WebLocalFrameImpl::createChildframe',],imageDecode:['Decode Image','ImageFrameGenerator::decode','ImageFrameGenerator::decodeAndScale','ImageResourceContent::updateImage',],input:['HitTest','ScrollableArea::scrollPositionChanged','EventHandler::handleMouseMoveEvent',],layout:['DisplayItemList::Finalize','IntersectionObserverController::computeTrackedIntersectionObservations','LocalFrameView::invalidateTree','LocalFrameView::layout','LocalFrameView::performLayout','LocalFrameView::performPostLayoutTasks','LocalFrameView::performPreLayoutTasks','FrameView::invalidateTree','FrameView::layout','FrameView::performLayout','FrameView::performPostLayoutTasks','FrameView::performPreLayoutTasks','Layer::updateLayerPositionsAfterLayout','LayerTreeHostInProcess::UpdateLayers::BuildPropertyTrees','Layout','LayoutView::hitTest','PaintLayer::updateLayerPositionsAfterLayout','ResourceLoadPriorityOptimizer::updateAllImageResourcePriorities','WebViewImpl::layout',],parseHTML:['BackgroundHTMLParser::pumpTokenizer','BackgroundHTMLParser::sendTokensToMainThread','HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser','HTMLDocumentParser::documentElementAvailable','HTMLDocumentParser::notifyPendingTokenizedChunks','HTMLDocumentParser::processParsedChunkFromBackgroundParser','HTMLDocumentParser::processTokenizedChunkFromBackgroundParser','ParseHTML',],raster:['DisplayListRasterSource::PerformSolidColorAnalysis','Picture::Raster','RasterBufferImpl::Playback','RasterTask','RasterizerTaskImpl::RunOnWorkerThread','SkCanvas::drawImageRect()','SkCanvas::drawPicture()','SkCanvas::drawTextBlob()','TileTaskWorkerPool::PlaybackToMemory',],record:['Canvas2DLayerBridge::flushRecordingOnly','CompositingRequirementsUpdater::updateRecursive','ContentLayerDelegate::paintContents','DeprecatedPaintLayerCompositor::updateIfNeededRecursive','DeprecatedPaintLayerCompositor::updateLayerPositionsAfterLayout','LocalFrameView::paintTree','LocalFrameView::prePaint','Paint','PaintController::commitNewDisplayItems','PaintLayerCompositor::updateIfNeededRecursive','Picture::Record','PictureLayer::Update','RenderLayer::updateLayerPositionsAfterLayout',],style:['CSSParserImpl::parseStyleSheet.parse','CSSParserImpl::parseStyleSheet.tokenize','Document::rebuildLayoutTree','Document::recalcStyle','Document::updateActiveStyle','Document::updateStyle','Document::updateStyleInvalidationIfNeeded','LocalFrameView::updateStyleAndLayoutIfNeededRecursive','ParseAuthorStyleSheet','RuleSet::addRulesFromSheet','StyleElement::processStyleSheet','StyleEngine::createResolver','StyleEngine::updateActiveStyleSheets','StyleSheetContents::parseAuthorStyleSheet','UpdateLayoutTree',],script_parse_and_compile:['V8.CompileFullCode','V8.NewContext','V8.Parse','V8.ParseLazy','V8.RecompileSynchronous','V8.ScriptCompiler','v8.compile','v8.parseOnBackground',],script_execute:['EvaluateScript','FunctionCall','HTMLParserScriptRunner ExecuteScript','V8.Execute','V8.RunMicrotasks','V8.Task','WindowProxy::initialize','v8.callFunction','v8.run',],resource_loading:['RenderFrameImpl::didFinishDocumentLoad','RenderFrameImpl::didFinishLoad','Resource::appendData','ResourceDispatcher::OnReceivedData','ResourceDispatcher::OnReceivedResponse','ResourceDispatcher::OnRequestComplete','ResourceFetcher::requestResource','WebURLLoaderImpl::Context::Cancel','WebURLLoaderImpl::Context::OnCompletedRequest','WebURLLoaderImpl::Context::OnReceivedData','WebURLLoaderImpl::Context::OnReceivedRedirect','WebURLLoaderImpl::Context::OnReceivedResponse','WebURLLoaderImpl::Context::Start','WebURLLoaderImpl::loadAsynchronously','WebURLLoaderImpl::loadSynchronously','content::mojom::URLLoaderClient',],renderer_misc:['DecodeFont','ThreadState::completeSweep',],v8_runtime:[],[SAME_AS_PARENT]:['SyncChannel::Send',]};const COLOR_FOR_USER_FRIENDLY_CATEGORY=new tr.b.SinebowColorGenerator();const USER_FRIENDLY_CATEGORY_FOR_TITLE=new Map();for(const category in TITLES_FOR_USER_FRIENDLY_CATEGORY){TITLES_FOR_USER_FRIENDLY_CATEGORY[category].forEach(function(title){USER_FRIENDLY_CATEGORY_FOR_TITLE.set(title,category);});}
+const sourceSlices=this.addDirectlyAssociatedEvents(flowEvents);const rendererHelper=this.getRendererHelper(sourceSlices);this.addOtherCausallyRelatedEvents(rendererHelper,sourceSlices,flowEvents);return this.associatedEvents_;},get inputLatency(){if(!('data'in this.args))return undefined;const data=this.args.data;const endTimeComp=data[END_COMP_NAME]||data[LEGACY_END_COMP_NAME];if(endTimeComp===undefined)return undefined;let latency=0;const endTime=endTimeComp.time;if(ORIGINAL_COMP_NAME in data){latency=endTime-data[ORIGINAL_COMP_NAME].time;}else if(UI_COMP_NAME in data){latency=endTime-data[UI_COMP_NAME].time;}else if(BEGIN_COMP_NAME in data){latency=endTime-data[BEGIN_COMP_NAME].time;}else{throw new Error('No valid begin latency component');}
+return latency;}};const eventTypeNames=['Char','ContextMenu','GestureClick','GestureFlingCancel','GestureFlingStart','GestureScrollBegin','GestureScrollEnd','GestureScrollUpdate','GestureShowPress','GestureTap','GestureTapCancel','GestureTapDown','GesturePinchBegin','GesturePinchEnd','GesturePinchUpdate','KeyDown','KeyUp','MouseDown','MouseEnter','MouseLeave','MouseMove','MouseUp','MouseWheel','RawKeyDown','ScrollUpdate','TouchCancel','TouchEnd','TouchMove','TouchStart'];const allTypeNames=['InputLatency'];eventTypeNames.forEach(function(eventTypeName){allTypeNames.push('InputLatency:'+eventTypeName);allTypeNames.push('InputLatency::'+eventTypeName);});AsyncSlice.subTypes.register(InputLatencyAsyncSlice,{typeNames:allTypeNames,categoryParts:['latencyInfo']});return{InputLatencyAsyncSlice,INPUT_EVENT_TYPE_NAMES,};});'use strict';tr.exportTo('tr.e.chrome',function(){const SAME_AS_PARENT='same-as-parent';const TITLES_FOR_USER_FRIENDLY_CATEGORY={composite:['CompositingInputsUpdater::update','ThreadProxy::SetNeedsUpdateLayers','LayerTreeHost::DoUpdateLayers','LayerTreeHost::UpdateLayers::BuildPropertyTrees','LocalFrameView::pushPaintArtifactToCompositor','LocalFrameView::updateCompositedSelectionIfNeeded','LocalFrameView::RunCompositingLifecyclePhase','UpdateLayerTree',],gc:['minorGC','majorGC','MajorGC','MinorGC','V8.GCScavenger','V8.GCIncrementalMarking','V8.GCIdleNotification','V8.GCContext','V8.GCCompactor','V8GCController::traceDOMWrappers',],iframe_creation:['WebLocalFrameImpl::createChildframe',],imageDecode:['Decode Image','ImageFrameGenerator::decode','ImageFrameGenerator::decodeAndScale','ImageFrameGenerator::decodeToYUV','ImageResourceContent::updateImage',],input:['HitTest','ScrollableArea::scrollPositionChanged','EventHandler::handleMouseMoveEvent',],layout:['IntersectionObserverController::computeTrackedIntersectionObservations','LocalFrameView::invalidateTree','LocalFrameView::layout','LocalFrameView::performLayout','LocalFrameView::performPostLayoutTasks','LocalFrameView::performPreLayoutTasks','LocalFrameView::RunStyleAndLayoutCompositingPhases','Layout','PaintLayer::updateLayerPositionsAfterLayout','ResourceLoadPriorityOptimizer::updateAllImageResourcePriorities','WebViewImpl::updateAllLifecyclePhases','WebViewImpl::beginFrame',],parseHTML:['BackgroundHTMLParser::pumpTokenizer','BackgroundHTMLParser::sendTokensToMainThread','HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser','HTMLDocumentParser::documentElementAvailable','HTMLDocumentParser::notifyPendingTokenizedChunks','HTMLDocumentParser::processParsedChunkFromBackgroundParser','HTMLDocumentParser::processTokenizedChunkFromBackgroundParser','ParseHTML',],raster:['DisplayListRasterSource::PerformSolidColorAnalysis','Picture::Raster','RasterBufferImpl::Playback','RasterTask','RasterizerTaskImpl::RunOnWorkerThread','SkCanvas::drawImageRect()','SkCanvas::drawPicture()','SkCanvas::drawTextBlob()','TileTaskWorkerPool::PlaybackToMemory',],record:['Canvas2DLayerBridge::flushRecordingOnly','CompositingInputsUpdater::update','CompositingRequirementsUpdater::updateRecursive','ContentLayerDelegate::paintContents','DisplayItemList::Finalize','LocalFrameView::RunPaintLifecyclePhase','LocalFrameView::RunPrePaintLifecyclePhase','Paint','PaintController::commitNewDisplayItems','PaintLayerCompositor::updateIfNeededRecursive','Picture::Record','PictureLayer::Update',],style:['CSSParserImpl::parseStyleSheet.parse','CSSParserImpl::parseStyleSheet.tokenize','Document::rebuildLayoutTree','Document::recalcStyle','Document::updateActiveStyle','Document::updateStyle','Document::updateStyleInvalidationIfNeeded','LocalFrameView::updateStyleAndLayoutIfNeededRecursive','ParseAuthorStyleSheet','RuleSet::addRulesFromSheet','StyleElement::processStyleSheet','StyleEngine::createResolver','StyleEngine::updateActiveStyleSheets','StyleSheetContents::parseAuthorStyleSheet','UpdateLayoutTree',],script_parse_and_compile:['V8.CompileFullCode','V8.NewContext','V8.Parse','V8.ParseLazy','V8.RecompileSynchronous','V8.ScriptCompiler','v8.compile','v8.parseOnBackground',],script_execute:['EvaluateScript','FunctionCall','HTMLParserScriptRunner ExecuteScript','V8.Execute','V8.RunMicrotasks','V8.Task','WindowProxy::initialize','v8.callFunction','v8.run',],resource_loading:['RenderFrameImpl::didFinishDocumentLoad','RenderFrameImpl::didFinishLoad','Resource::appendData','ResourceDispatcher::OnReceivedData','ResourceDispatcher::OnReceivedResponse','ResourceDispatcher::OnRequestComplete','ResourceFetcher::requestResource','WebURLLoaderImpl::Context::Cancel','WebURLLoaderImpl::Context::OnCompletedRequest','WebURLLoaderImpl::Context::OnReceivedData','WebURLLoaderImpl::Context::OnReceivedRedirect','WebURLLoaderImpl::Context::OnReceivedResponse','WebURLLoaderImpl::Context::Start','WebURLLoaderImpl::loadAsynchronously','WebURLLoaderImpl::loadSynchronously','content::mojom::URLLoaderClient',],renderer_misc:['DecodeFont','ThreadState::completeSweep',],v8_runtime:[],[SAME_AS_PARENT]:['SyncChannel::Send',]};const COLOR_FOR_USER_FRIENDLY_CATEGORY=new tr.b.SinebowColorGenerator();const USER_FRIENDLY_CATEGORY_FOR_TITLE=new Map();for(const category in TITLES_FOR_USER_FRIENDLY_CATEGORY){TITLES_FOR_USER_FRIENDLY_CATEGORY[category].forEach(function(title){USER_FRIENDLY_CATEGORY_FOR_TITLE.set(title,category);});}
const USER_FRIENDLY_CATEGORY_FOR_EVENT_CATEGORY={netlog:'net',overhead:'overhead',startup:'startup',gpu:'gpu',};function ChromeUserFriendlyCategoryDriver(){}
ChromeUserFriendlyCategoryDriver.fromEvent=function(event){let userFriendlyCategory=USER_FRIENDLY_CATEGORY_FOR_TITLE.get(event.title);if(userFriendlyCategory){if(userFriendlyCategory===SAME_AS_PARENT){if(event.parentSlice){return ChromeUserFriendlyCategoryDriver.fromEvent(event.parentSlice);}}else{return userFriendlyCategory;}}
const eventCategoryParts=tr.b.getCategoryParts(event.category);for(let i=0;i<eventCategoryParts.length;++i){const eventCategory=eventCategoryParts[i];userFriendlyCategory=USER_FRIENDLY_CATEGORY_FOR_EVENT_CATEGORY[eventCategory];if(userFriendlyCategory){return userFriendlyCategory;}}
return'other';};ChromeUserFriendlyCategoryDriver.getColor=function(ufc){return COLOR_FOR_USER_FRIENDLY_CATEGORY.colorForKey(ufc);};ChromeUserFriendlyCategoryDriver.ALL_TITLES=['other'];for(const category in TITLES_FOR_USER_FRIENDLY_CATEGORY){if(category===SAME_AS_PARENT)continue;ChromeUserFriendlyCategoryDriver.ALL_TITLES.push(category);}
for(const category of Object.values(USER_FRIENDLY_CATEGORY_FOR_EVENT_CATEGORY)){ChromeUserFriendlyCategoryDriver.ALL_TITLES.push(category);}
ChromeUserFriendlyCategoryDriver.ALL_TITLES.sort();for(const category of ChromeUserFriendlyCategoryDriver.ALL_TITLES){ChromeUserFriendlyCategoryDriver.getColor(category);}
-return{ChromeUserFriendlyCategoryDriver,};});'use strict';tr.exportTo('tr.model',function(){return{BROWSER_PROCESS_PID_REF:-1,OBJECT_DEFAULT_SCOPE:'ptr',LOCAL_ID_PHASES:new Set(['N','D','O','(',')'])};});'use strict';tr.exportTo('tr.e.audits',function(){const Auditor=tr.c.Auditor;function ChromeAuditor(model){Auditor.call(this,model);const modelHelper=this.model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(modelHelper&&modelHelper.browserHelper){this.modelHelper=modelHelper;}else{this.modelHelper=undefined;}}
-ChromeAuditor.prototype={__proto__:Auditor.prototype,runAnnotate(){if(!this.modelHelper)return;for(const pid in this.modelHelper.rendererHelpers){const rendererHelper=this.modelHelper.rendererHelpers[pid];if(rendererHelper.isChromeTracingUI){rendererHelper.process.important=false;}}},installUserFriendlyCategoryDriverIfNeeded(){this.model.addUserFriendlyCategoryDriver(tr.e.chrome.ChromeUserFriendlyCategoryDriver);},runAudit(){if(!this.modelHelper)return;this.model.replacePIDRefsInPatchups(tr.model.BROWSER_PROCESS_PID_REF,this.modelHelper.browserProcess.pid);this.model.applyObjectRefPatchups();}};Auditor.register(ChromeAuditor);return{ChromeAuditor,};});'use strict';tr.exportTo('tr.e.chrome',function(){const KNOWN_PROPERTIES={absX:1,absY:1,address:1,anonymous:1,childNeeds:1,children:1,classNames:1,col:1,colSpan:1,float:1,height:1,htmlId:1,name:1,posChildNeeds:1,positioned:1,positionedMovement:1,relX:1,relY:1,relativePositioned:1,row:1,rowSpan:1,selfNeeds:1,stickyPositioned:1,tag:1,width:1};function LayoutObject(snapshot,args){this.snapshot_=snapshot;this.id_=args.address;this.name_=args.name;this.childLayoutObjects_=[];this.otherProperties_={};this.tag_=args.tag;this.relativeRect_=tr.b.math.Rect.fromXYWH(args.relX,args.relY,args.width,args.height);this.absoluteRect_=tr.b.math.Rect.fromXYWH(args.absX,args.absY,args.width,args.height);this.isFloat_=args.float;this.isStickyPositioned_=args.stickyPositioned;this.isPositioned_=args.positioned;this.isRelativePositioned_=args.relativePositioned;this.isAnonymous_=args.anonymous;this.htmlId_=args.htmlId;this.classNames_=args.classNames;this.needsLayoutReasons_=[];if(args.selfNeeds){this.needsLayoutReasons_.push('self');}
+return{ChromeUserFriendlyCategoryDriver,};});'use strict';tr.exportTo('tr.model',function(){return{BROWSER_PROCESS_PID_REF:-1,OBJECT_DEFAULT_SCOPE:'ptr',LOCAL_ID_PHASES:new Set(['N','D','O','(',')'])};});'use strict';tr.exportTo('tr.e.audits',function(){const Auditor=tr.c.Auditor;const Alert=tr.model.Alert;const EventInfo=tr.model.EventInfo;function ChromeAuditor(model){Auditor.call(this,model);const modelHelper=this.model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(modelHelper&&modelHelper.browserHelper){this.modelHelper=modelHelper;}else{this.modelHelper=undefined;}}
+function getMissedFrameAlerts(rendererHelpers){const alerts=[];for(const rendererHelper of rendererHelpers){if(!rendererHelper.compositorThread)continue;const thread=rendererHelper.compositorThread;const asyncSlices=Object.values(thread.asyncSliceGroup.slices);for(const slice of asyncSlices){if(slice.title!=='PipelineReporter'||!slice.args.termination_status||slice.args.termination_status!=='missed_frame')continue;const alertSlices=[slice].concat(slice.subSlices);alerts.push(new Alert(new EventInfo('Missed Frame','Frame was not submitted before deadline.'),slice.start,alertSlices));}}
+return alerts;}
+ChromeAuditor.prototype={__proto__:Auditor.prototype,runAnnotate(){if(!this.modelHelper)return;for(const pid in this.modelHelper.rendererHelpers){const rendererHelper=this.modelHelper.rendererHelpers[pid];if(rendererHelper.isChromeTracingUI){rendererHelper.process.important=false;}}},installUserFriendlyCategoryDriverIfNeeded(){this.model.addUserFriendlyCategoryDriver(tr.e.chrome.ChromeUserFriendlyCategoryDriver);},runAudit(){if(!this.modelHelper)return;this.model.replacePIDRefsInPatchups(tr.model.BROWSER_PROCESS_PID_REF,this.modelHelper.browserProcess.pid);this.model.applyObjectRefPatchups();const alerts=getMissedFrameAlerts(Object.values(this.modelHelper.rendererHelpers));this.model.alerts=this.model.alerts.concat(alerts);}};Auditor.register(ChromeAuditor);return{ChromeAuditor,};});'use strict';tr.exportTo('tr.e.chrome',function(){const KNOWN_PROPERTIES={absX:1,absY:1,address:1,anonymous:1,childNeeds:1,children:1,classNames:1,col:1,colSpan:1,float:1,height:1,htmlId:1,name:1,posChildNeeds:1,positioned:1,positionedMovement:1,relX:1,relY:1,relativePositioned:1,row:1,rowSpan:1,selfNeeds:1,stickyPositioned:1,tag:1,width:1};function LayoutObject(snapshot,args){this.snapshot_=snapshot;this.id_=args.address;this.name_=args.name;this.childLayoutObjects_=[];this.otherProperties_={};this.tag_=args.tag;this.relativeRect_=tr.b.math.Rect.fromXYWH(args.relX,args.relY,args.width,args.height);this.absoluteRect_=tr.b.math.Rect.fromXYWH(args.absX,args.absY,args.width,args.height);this.isFloat_=args.float;this.isStickyPositioned_=args.stickyPositioned;this.isPositioned_=args.positioned;this.isRelativePositioned_=args.relativePositioned;this.isAnonymous_=args.anonymous;this.htmlId_=args.htmlId;this.classNames_=args.classNames;this.needsLayoutReasons_=[];if(args.selfNeeds){this.needsLayoutReasons_.push('self');}
if(args.childNeeds){this.needsLayoutReasons_.push('child');}
if(args.posChildNeeds){this.needsLayoutReasons_.push('positionedChild');}
if(args.positionedMovement){this.needsLayoutReasons_.push('positionedMovement');}
@@ -4555,7 +4838,8 @@ LayoutObject.prototype={get snapshot(){return this.snapshot_;},get id(){return t
return names;},getProperty(name){return this.otherProperties_[name];},get previousSnapshotLayoutObject(){if(!this.snapshot.previousSnapshot)return undefined;return this.snapshot.previousSnapshot.getLayoutObjectById(this.id);},get nextSnapshotLayoutObject(){if(!this.snapshot.nextSnapshot)return undefined;return this.snapshot.nextSnapshot.getLayoutObjectById(this.id);}};return{LayoutObject,};});'use strict';tr.exportTo('tr.e.chrome',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;const ObjectInstance=tr.model.ObjectInstance;function LayoutTreeInstance(){ObjectInstance.apply(this,arguments);}
LayoutTreeInstance.prototype={__proto__:ObjectInstance.prototype,};ObjectInstance.subTypes.register(LayoutTreeInstance,{typeName:'LayoutTree'});function LayoutTreeSnapshot(){ObjectSnapshot.apply(this,arguments);this.rootLayoutObject=new tr.e.chrome.LayoutObject(this,this.args);}
LayoutTreeSnapshot.prototype={__proto__:ObjectSnapshot.prototype,};ObjectSnapshot.subTypes.register(LayoutTreeSnapshot,{typeName:'LayoutTree'});return{LayoutTreeInstance,LayoutTreeSnapshot,};});'use strict';tr.exportTo('tr.model',function(){function EventContainer(){this.guid_=tr.b.GUID.allocateSimple();this.important=true;this.bounds_=new tr.b.math.Range();}
-EventContainer.prototype={get guid(){return this.guid_;},get stableId(){throw new Error('Not implemented');},get bounds(){return this.bounds_;},updateBounds(){throw new Error('Not implemented');},shiftTimestampsForward(amount){throw new Error('Not implemented');},*childEvents(){},*getDescendantEvents(){yield*this.childEvents();for(const container of this.childEventContainers()){yield*container.getDescendantEvents();}},*childEventContainers(){},*getDescendantEventContainers(){yield this;for(const container of this.childEventContainers()){yield*container.getDescendantEventContainers();}},*findTopmostSlicesInThisContainer(eventPredicate,opt_this){},*findTopmostSlices(eventPredicate){for(const ec of this.getDescendantEventContainers()){yield*ec.findTopmostSlicesInThisContainer(eventPredicate);}},*findTopmostSlicesNamed(name){yield*this.findTopmostSlices(e=>e.title===name);}};return{EventContainer,};});'use strict';tr.exportTo('tr.model',function(){const Event=tr.model.Event;const EventRegistry=tr.model.EventRegistry;class ResourceUsageSample extends Event{constructor(series,start,usage){super();this.series_=series;this.start_=start;this.usage_=usage;}
+EventContainer.prototype={get guid(){return this.guid_;},get stableId(){throw new Error('Not implemented');},get bounds(){return this.bounds_;},updateBounds(){throw new Error('Not implemented');},shiftTimestampsForward(amount){throw new Error('Not implemented');},*childEvents(){},*getDescendantEvents(){yield*this.childEvents();for(const container of this.childEventContainers()){yield*container.getDescendantEvents();}},*childEventContainers(){},*getDescendantEventContainers(){yield this;for(const container of this.childEventContainers()){yield*container.getDescendantEventContainers();}},*getDescendantEventsInSortedRanges(ranges,opt_containerPredicate){if(opt_containerPredicate===undefined||opt_containerPredicate(this)){for(const event of this.childEvents()){const i=tr.b.findFirstTrueIndexInSortedArray(ranges,range=>event.start<=range.max);if(i<ranges.length&&event.end>=ranges[i].min)yield event;}}
+for(const container of this.childEventContainers()){yield*container.getDescendantEventsInSortedRanges(ranges,opt_containerPredicate);}},*findTopmostSlicesInThisContainer(eventPredicate,opt_this){},*findTopmostSlices(eventPredicate){for(const ec of this.getDescendantEventContainers()){yield*ec.findTopmostSlicesInThisContainer(eventPredicate);}},*findTopmostSlicesNamed(name){yield*this.findTopmostSlices(e=>e.title===name);}};return{EventContainer,};});'use strict';tr.exportTo('tr.model',function(){const Event=tr.model.Event;const EventRegistry=tr.model.EventRegistry;class ResourceUsageSample extends Event{constructor(series,start,usage){super();this.series_=series;this.start_=start;this.usage_=usage;}
get series(){return this.series_;}
get start(){return this.start_;}
set start(value){this.start_=value;}
@@ -4607,10 +4891,12 @@ let exitTime;if(header.version===5&&header.opcode===kProcessDefunctOpcode){exitT
return{pageDirectoryBase,uniqueProcessKey,processId,parentId,sessionId,exitStatus,directoryTableBase,flags,userSID,imageFileName,commandLine,packageFullName,applicationId,exitTime};},decodeStart(header,decoder){const fields=this.decodeFields(header,decoder);const process=this.model.getOrCreateProcess(fields.processId);if(process.hasOwnProperty('has_ended')){throw new Error('Process clash detected.');}
process.name=fields.imageFileName;return true;},decodeEnd(header,decoder){const fields=this.decodeFields(header,decoder);const process=this.model.getOrCreateProcess(fields.processId);process.has_ended=true;return true;},decodeDCStart(header,decoder){const fields=this.decodeFields(header,decoder);const process=this.model.getOrCreateProcess(fields.processId);if(process.hasOwnProperty('has_ended')){throw new Error('Process clash detected.');}
process.name=fields.imageFileName;return true;},decodeDCEnd(header,decoder){const fields=this.decodeFields(header,decoder);const process=this.model.getOrCreateProcess(fields.processId);process.has_ended=true;return true;},decodeDefunct(header,decoder){const fields=this.decodeFields(header,decoder);return true;}};Parser.register(ProcessParser);return{ProcessParser,};});'use strict';tr.exportTo('tr.e.importer.etw',function(){const Parser=tr.e.importer.etw.Parser;const guid='3D6FA8D1-FE05-11D0-9DDA-00C04FD7BA7C';const kThreadStartOpcode=1;const kThreadEndOpcode=2;const kThreadDCStartOpcode=3;const kThreadDCEndOpcode=4;const kThreadCSwitchOpcode=36;function ThreadParser(importer){Parser.call(this,importer);importer.registerEventHandler(guid,kThreadStartOpcode,ThreadParser.prototype.decodeStart.bind(this));importer.registerEventHandler(guid,kThreadEndOpcode,ThreadParser.prototype.decodeEnd.bind(this));importer.registerEventHandler(guid,kThreadDCStartOpcode,ThreadParser.prototype.decodeDCStart.bind(this));importer.registerEventHandler(guid,kThreadDCEndOpcode,ThreadParser.prototype.decodeDCEnd.bind(this));importer.registerEventHandler(guid,kThreadCSwitchOpcode,ThreadParser.prototype.decodeCSwitch.bind(this));}
-ThreadParser.prototype={__proto__:Parser.prototype,decodeFields(header,decoder){if(header.version>3){throw new Error('Incompatible Thread event version.');}
+ThreadParser.prototype={__proto__:Parser.prototype,decodeFields(header,decoder){if(header.version>3){throw new Error('Incompatible Thread event version '+
+header.version+'.');}
const processId=decoder.decodeUInt32();const threadId=decoder.decodeUInt32();let stackBase;let stackLimit;let userStackBase;let userStackLimit;let affinity;let startAddr;let win32StartAddr;let tebBase;let subProcessTag;let basePriority;let pagePriority;let ioPriority;let threadFlags;let waitMode;if(header.version===1){if(header.opcode===kThreadStartOpcode||header.opcode===kThreadDCStartOpcode){stackBase=decoder.decodeUInteger(header.is64);stackLimit=decoder.decodeUInteger(header.is64);userStackBase=decoder.decodeUInteger(header.is64);userStackLimit=decoder.decodeUInteger(header.is64);startAddr=decoder.decodeUInteger(header.is64);win32StartAddr=decoder.decodeUInteger(header.is64);waitMode=decoder.decodeInt8();decoder.skip(3);}}else{stackBase=decoder.decodeUInteger(header.is64);stackLimit=decoder.decodeUInteger(header.is64);userStackBase=decoder.decodeUInteger(header.is64);userStackLimit=decoder.decodeUInteger(header.is64);if(header.version===2){startAddr=decoder.decodeUInteger(header.is64);}else{affinity=decoder.decodeUInteger(header.is64);}
win32StartAddr=decoder.decodeUInteger(header.is64);tebBase=decoder.decodeUInteger(header.is64);subProcessTag=decoder.decodeUInt32();if(header.version===3){basePriority=decoder.decodeUInt8();pagePriority=decoder.decodeUInt8();ioPriority=decoder.decodeUInt8();threadFlags=decoder.decodeUInt8();}}
-return{processId,threadId,stackBase,stackLimit,userStackBase,userStackLimit,affinity,startAddr,win32StartAddr,tebBase,subProcessTag,waitMode,basePriority,pagePriority,ioPriority,threadFlags};},decodeCSwitchFields(header,decoder){if(header.version!==2){throw new Error('Incompatible Thread event version.');}
+return{processId,threadId,stackBase,stackLimit,userStackBase,userStackLimit,affinity,startAddr,win32StartAddr,tebBase,subProcessTag,waitMode,basePriority,pagePriority,ioPriority,threadFlags};},decodeCSwitchFields(header,decoder){if(header.version<2||header.version>4){throw new Error('Incompatible cswitch event version '+
+header.version+'.');}
const newThreadId=decoder.decodeUInt32();const oldThreadId=decoder.decodeUInt32();const newThreadPriority=decoder.decodeInt8();const oldThreadPriority=decoder.decodeInt8();const previousCState=decoder.decodeUInt8();const spareByte=decoder.decodeInt8();const oldThreadWaitReason=decoder.decodeInt8();const oldThreadWaitMode=decoder.decodeInt8();const oldThreadState=decoder.decodeInt8();const oldThreadWaitIdealProcessor=decoder.decodeInt8();const newThreadWaitTime=decoder.decodeUInt32();const reserved=decoder.decodeUInt32();return{newThreadId,oldThreadId,newThreadPriority,oldThreadPriority,previousCState,spareByte,oldThreadWaitReason,oldThreadWaitMode,oldThreadState,oldThreadWaitIdealProcessor,newThreadWaitTime,reserved};},decodeStart(header,decoder){const fields=this.decodeFields(header,decoder);this.importer.createThreadIfNeeded(fields.processId,fields.threadId);return true;},decodeEnd(header,decoder){const fields=this.decodeFields(header,decoder);this.importer.removeThreadIfPresent(fields.threadId);return true;},decodeDCStart(header,decoder){const fields=this.decodeFields(header,decoder);this.importer.createThreadIfNeeded(fields.processId,fields.threadId);return true;},decodeDCEnd(header,decoder){const fields=this.decodeFields(header,decoder);this.importer.removeThreadIfPresent(fields.threadId);return true;},decodeCSwitch(header,decoder){const fields=this.decodeCSwitchFields(header,decoder);const cpu=this.importer.getOrCreateCpu(header.cpu);const newThread=this.importer.getThreadFromWindowsTid(fields.newThreadId);let newThreadName;if(newThread&&newThread.userFriendlyName){newThreadName=newThread.userFriendlyName;}else{const newProcessId=this.importer.getPidFromWindowsTid(fields.newThreadId);const newProcess=this.model.getProcess(newProcessId);let newProcessName;if(newProcess){newProcessName=newProcess.name;}else{newProcessName='Unknown process';}
newThreadName=newProcessName+' (tid '+fields.newThreadId+')';}
cpu.switchActiveThread(header.timestamp,{},fields.newThreadId,newThreadName,fields);return true;}};Parser.register(ThreadParser);return{ThreadParser,};});'use strict';tr.exportTo('tr.b',function(){function max(a,b){if(a===undefined)return b;if(b===undefined)return a;return Math.max(a,b);}
@@ -4662,20 +4948,23 @@ function forcePendingRAFTasksToRun(frameBeginTime){if(!rafScheduled)return;proce
function forceAllPendingTasksToRunForTest(){if(!rafScheduled&&!idleWorkScheduled)return;processRequests(true,0);}
function timeout(ms){return new Promise(resolve=>window.setTimeout(resolve,ms));}
function idle(){return new Promise(resolve=>requestIdleCallback(resolve));}
-return{animationFrame,forceAllPendingTasksToRunForTest,forcePendingRAFTasksToRun,idle,onAnimationFrameError,requestAnimationFrame,requestAnimationFrameInThisFrameIfPossible,requestIdleCallback,requestPreAnimationFrame,timeout,};});'use strict';tr.exportTo('tr.b',function(){class Mark{constructor(groupName,functionName){if(tr.isHeadless)return;this.groupName_=groupName;this.functionName_=functionName;const guid=tr.b.GUID.allocateSimple();this.measureName_=`${groupName} ${functionName}`;this.startMarkName_=`${this.measureName} ${guid} start`;this.endMarkName_=`${this.measureName} ${guid} end`;window.performance.mark(this.startMarkName_);}
+return{animationFrame,forceAllPendingTasksToRunForTest,forcePendingRAFTasksToRun,idle,onAnimationFrameError,requestAnimationFrame,requestAnimationFrameInThisFrameIfPossible,requestIdleCallback,requestPreAnimationFrame,timeout,};});'use strict';tr.exportTo('tr.b',function(){class Mark{constructor(groupName,functionName,opt_timestamp){if(tr.isHeadless)return;this.groupName_=groupName;this.functionName_=functionName;const guid=tr.b.GUID.allocateSimple();this.measureName_=`${groupName} ${functionName}`;if(opt_timestamp){this.startMark_={startTime:opt_timestamp};}else{this.startMarkName_=`${this.measureName} ${guid} start`;}
+this.endMark_=undefined;this.endMarkName_=`${this.measureName} ${guid} end`;window.performance.mark(this.startMarkName_);}
get groupName(){return this.groupName_;}
get functionName(){return this.functionName_;}
get measureName(){return this.measureName_;}
-get startMark(){return tr.b.getOnlyElement(window.performance.getEntriesByName(this.startMarkName_));}
-get endMark(){return tr.b.getOnlyElement(window.performance.getEntriesByName(this.endMarkName_));}
+get startMark(){return this.startMark_||tr.b.getOnlyElement(window.performance.getEntriesByName(this.startMarkName_));}
+get endMark(){return this.endMark_||tr.b.getOnlyElement(window.performance.getEntriesByName(this.endMarkName_));}
get durationMs(){return this.endMark.startTime-this.startMark.startTime;}
-end(){if(tr.isHeadless)return;window.performance.mark(this.endMarkName_);window.performance.measure(this.measureName_,this.startMarkName_,this.endMarkName_);if(!(window.ga instanceof Function))return;ga('send',{hitType:'event',eventCategory:this.groupName,eventAction:this.functionName,eventValue:this.durationMs,});}}
-class Timing{static mark(groupName,functionName){return new Mark(groupName,functionName);}
+end(opt_timestamp){if(tr.isHeadless)return;if(opt_timestamp){this.endMark_={startTime:opt_timestamp};}else{window.performance.mark(this.endMarkName_);}
+if(!this.startMark_&&!this.endMark_){window.performance.measure(this.measureName_,this.startMarkName_,this.endMarkName_);}else if(Timing.logVoidMarks&&!(window.ga instanceof Function)){console.log('void mark',this.groupName,this.functionName,this.durationMs);}
+if(!(window.ga instanceof Function))return;ga('send',{hitType:'event',eventCategory:this.groupName,eventAction:this.functionName,eventValue:this.durationMs,});}}
+class Timing{static mark(groupName,functionName,opt_timestamp){return new Mark(groupName,functionName,opt_timestamp);}
static instant(groupName,functionName,opt_value){const valueString=opt_value===undefined?'':' '+opt_value;if(console&&console.timeStamp){console.timeStamp(`${groupName} ${functionName}${valueString}`);}
if(window&&window.ga instanceof Function){ga('send',{hitType:'event',eventCategory:groupName,eventAction:functionName,eventValue:opt_value,});}}
static getCurrentTimeMs(){try{return performance.now();}catch(error){}
return 0;}}
-return{Timing,};});'use strict';tr.exportTo('tr.b',function(){const Timing=tr.b.Timing;function Task(runCb,thisArg){if(runCb!==undefined&&thisArg===undefined&&runCb.prototype!==undefined){throw new Error('Almost certainly you meant to pass a bound callback '+'or thisArg.');}
+Timing.logVoidMarks=false;return{Timing,};});'use strict';tr.exportTo('tr.b',function(){const Timing=tr.b.Timing;function Task(runCb,thisArg){if(runCb!==undefined&&thisArg===undefined&&runCb.prototype!==undefined){throw new Error('Almost certainly you meant to pass a bound callback '+'or thisArg.');}
this.runCb_=runCb;this.thisArg_=thisArg;this.afterTask_=undefined;this.subTasks_=[];this.updatesUi_=false;}
Task.prototype={get name(){return this.runCb_.name;},set updatesUi(value){this.updatesUi_=value;},subTask(cb,thisArg){if(cb instanceof Task){this.subTasks_.push(cb);}else{this.subTasks_.push(new Task(cb,thisArg));}
return this.subTasks_[this.subTasks_.length-1];},run(){if(this.runCb_!==undefined)this.runCb_.call(this.thisArg_,this);const subTasks=this.subTasks_;this.subTasks_=undefined;if(!subTasks.length)return this.afterTask_;for(let i=1;i<subTasks.length;i++){subTasks[i-1].afterTask_=subTasks[i];}
@@ -4698,7 +4987,8 @@ if(this.modelDomainId_){throw new Error('Cannot add new clock sync markers after
const marker=new ClockSyncMarker(domainId,startTs,opt_endTs);if(!this.markersBySyncId_.has(syncId)){this.markersBySyncId_.set(syncId,[marker]);return;}
const markers=this.markersBySyncId_.get(syncId);if(markers.length===2){throw new Error('Clock sync with ID "'+syncId+'" is already '+'complete - cannot add a third clock sync marker to it.');}
if(markers[0].domainId===domainId){throw new Error('A clock domain cannot sync with itself.');}
-markers.push(marker);this.onSyncCompleted_(markers[0],marker);},get markersBySyncId(){return this.markersBySyncId_;},get domainsSeen(){return this.domainsSeen_;},getModelTimeTransformer(domainId){this.onDomainSeen_(domainId);if(!this.modelDomainId_){this.selectModelDomainId_();}
+markers.push(marker);this.onSyncCompleted_(markers[0],marker);},get completeSyncIds(){const completeSyncIds=[];for(const[syncId,markers]of this.markersBySyncId){if(markers.length===2)completeSyncIds.push(syncId);}
+return completeSyncIds;},get markersBySyncId(){return this.markersBySyncId_;},get domainsSeen(){return this.domainsSeen_;},getModelTimeTransformer(domainId){this.onDomainSeen_(domainId);if(!this.modelDomainId_){this.selectModelDomainId_();}
return this.getTimeTransformerRaw_(domainId,this.modelDomainId_).fn;},getTimeTransformerError(fromDomainId,toDomainId){this.onDomainSeen_(fromDomainId);this.onDomainSeen_(toDomainId);return this.getTimeTransformerRaw_(fromDomainId,toDomainId).error;},getTimeTransformerRaw_(fromDomainId,toDomainId){const transformer=this.getTransformerBetween_(fromDomainId,toDomainId);if(!transformer){throw new Error('No clock sync markers exist pairing clock domain "'+
fromDomainId+'" '+'with target clock domain "'+
toDomainId+'".');}
@@ -4788,14 +5078,15 @@ this.parentContainer.samples.forEach(function(sample){if(this.start<=sample.star
function getSliceHi(s){return s.end;}
function SliceGroup(parentContainer,opt_sliceConstructor,opt_name){tr.model.EventContainer.call(this);this.parentContainer_=parentContainer;const sliceConstructor=opt_sliceConstructor||ThreadSlice;this.sliceConstructor=sliceConstructor;this.sliceConstructorSubTypes=this.sliceConstructor.subTypes;if(!this.sliceConstructorSubTypes){throw new Error('opt_sliceConstructor must have a subtype registry.');}
this.openPartialSlices_=[];this.slices=[];this.topLevelSlices=[];this.haveTopLevelSlicesBeenBuilt=false;this.name_=opt_name;if(this.model===undefined){throw new Error('SliceGroup must have model defined.');}}
-SliceGroup.prototype={__proto__:tr.model.EventContainer.prototype,get parentContainer(){return this.parentContainer_;},get model(){return this.parentContainer_.model;},get stableId(){return this.parentContainer_.stableId+'.SliceGroup';},getSettingsKey(){if(!this.name_)return undefined;const parentKey=this.parentContainer_.getSettingsKey();if(!parentKey)return undefined;return parentKey+'.'+this.name;},get length(){return this.slices.length;},pushSlice(slice){this.haveTopLevelSlicesBeenBuilt=false;slice.parentContainer=this.parentContainer_;this.slices.push(slice);return slice;},pushSlices(slices){this.haveTopLevelSlicesBeenBuilt=false;slices.forEach(function(slice){slice.parentContainer=this.parentContainer_;this.slices.push(slice);},this);},beginSlice(category,title,ts,opt_args,opt_tts,opt_argsStripped,opt_colorId){if(this.openPartialSlices_.length){const prevSlice=this.openPartialSlices_[this.openPartialSlices_.length-1];if(ts<prevSlice.start){throw new Error('Slices must be added in increasing timestamp order');}}
-const colorId=opt_colorId||ColorScheme.getColorIdForGeneralPurposeString(title);const sliceConstructorSubTypes=this.sliceConstructorSubTypes;const sliceType=sliceConstructorSubTypes.getConstructor(category,title);const slice=new sliceType(category,title,colorId,ts,opt_args?opt_args:{},null,opt_tts,undefined,opt_argsStripped);this.openPartialSlices_.push(slice);slice.didNotFinish=true;this.pushSlice(slice);return slice;},isTimestampValidForBeginOrEnd(ts){if(!this.openPartialSlices_.length)return true;const top=this.openPartialSlices_[this.openPartialSlices_.length-1];return ts>=top.start;},get openSliceCount(){return this.openPartialSlices_.length;},get mostRecentlyOpenedPartialSlice(){if(!this.openPartialSlices_.length)return undefined;return this.openPartialSlices_[this.openPartialSlices_.length-1];},endSlice(ts,opt_tts,opt_colorId){if(!this.openSliceCount){throw new Error('endSlice called without an open slice');}
+SliceGroup.prototype={__proto__:tr.model.EventContainer.prototype,get parentContainer(){return this.parentContainer_;},get model(){return this.parentContainer_.model;},get stableId(){return this.parentContainer_.stableId+'.SliceGroup';},getSettingsKey(){if(!this.name_)return undefined;const parentKey=this.parentContainer_.getSettingsKey();if(!parentKey)return undefined;return parentKey+'.'+this.name;},get length(){return this.slices.length;},pushSlice(slice){this.haveTopLevelSlicesBeenBuilt=false;slice.parentContainer=this.parentContainer_;this.slices.push(slice);return slice;},pushSlices(slices){this.haveTopLevelSlicesBeenBuilt=false;slices.forEach(function(slice){slice.parentContainer=this.parentContainer_;this.slices.push(slice);},this);},beginSlice(category,title,ts,opt_args,opt_tts,opt_argsStripped,opt_colorId,opt_bindId){const colorId=opt_colorId||ColorScheme.getColorIdForGeneralPurposeString(title);const sliceConstructorSubTypes=this.sliceConstructorSubTypes;const sliceType=sliceConstructorSubTypes.getConstructor(category,title);const slice=new sliceType(category,title,colorId,ts,opt_args?opt_args:{},null,opt_tts,undefined,opt_argsStripped,opt_bindId);this.openPartialSlices_.push(slice);slice.didNotFinish=true;this.pushSlice(slice);return slice;},isTimestampValidForBeginOrEnd(ts){if(!this.openPartialSlices_.length)return true;const top=this.openPartialSlices_[this.openPartialSlices_.length-1];return ts>=top.start;},get openSliceCount(){return this.openPartialSlices_.length;},get mostRecentlyOpenedPartialSlice(){if(!this.openPartialSlices_.length)return undefined;return this.openPartialSlices_[this.openPartialSlices_.length-1];},endSlice(ts,opt_tts,opt_colorId){if(!this.openSliceCount){throw new Error('endSlice called without an open slice');}
const slice=this.openPartialSlices_[this.openSliceCount-1];this.openPartialSlices_.splice(this.openSliceCount-1,1);if(ts<slice.start){throw new Error('Slice '+slice.title+' end time is before its start.');}
slice.duration=ts-slice.start;slice.didNotFinish=false;slice.colorId=opt_colorId||slice.colorId;if(opt_tts&&slice.cpuStart!==undefined){slice.cpuDuration=opt_tts-slice.cpuStart;}
return slice;},pushCompleteSlice(category,title,ts,duration,tts,cpuDuration,opt_args,opt_argsStripped,opt_colorId,opt_bindId){const colorId=opt_colorId||ColorScheme.getColorIdForGeneralPurposeString(title);const sliceConstructorSubTypes=this.sliceConstructorSubTypes;const sliceType=sliceConstructorSubTypes.getConstructor(category,title);const slice=new sliceType(category,title,colorId,ts,opt_args?opt_args:{},duration,tts,cpuDuration,opt_argsStripped,opt_bindId);if(duration===undefined){slice.didNotFinish=true;}
this.pushSlice(slice);return slice;},autoCloseOpenSlices(){this.updateBounds();const maxTimestamp=this.bounds.max;for(let sI=0;sI<this.slices.length;sI++){const slice=this.slices[sI];if(slice.didNotFinish){slice.duration=maxTimestamp-slice.start;}}
this.openPartialSlices_=[];},shiftTimestampsForward(amount){for(let sI=0;sI<this.slices.length;sI++){const slice=this.slices[sI];slice.start=(slice.start+amount);}},updateBounds(){this.bounds.reset();for(let i=0;i<this.slices.length;i++){this.bounds.addValue(this.slices[i].start);this.bounds.addValue(this.slices[i].end);}},copySlice(slice){const sliceConstructorSubTypes=this.sliceConstructorSubTypes;const sliceType=sliceConstructorSubTypes.getConstructor(slice.category,slice.title);const newSlice=new sliceType(slice.category,slice.title,slice.colorId,slice.start,slice.args,slice.duration,slice.cpuStart,slice.cpuDuration);newSlice.didNotFinish=slice.didNotFinish;return newSlice;},*findTopmostSlicesInThisContainer(eventPredicate,opt_this){if(!this.haveTopLevelSlicesBeenBuilt){throw new Error('Nope');}
-for(const s of this.topLevelSlices){yield*s.findTopmostSlicesRelativeToThisSlice(eventPredicate);}},*childEvents(){yield*this.slices;},*childEventContainers(){},getSlicesOfName(title){const slices=[];for(let i=0;i<this.slices.length;i++){if(this.slices[i].title===title){slices.push(this.slices[i]);}}
+for(const s of this.topLevelSlices){yield*s.findTopmostSlicesRelativeToThisSlice(eventPredicate);}},*childEvents(){yield*this.slices;},*childEventContainers(){},*getDescendantEventsInSortedRanges(ranges,opt_containerPredicate){if(ranges.length===0||(opt_containerPredicate!==undefined&&!opt_containerPredicate(this))){return;}
+let rangeIndex=0;let range=ranges[rangeIndex];for(const event of this.childEvents()){while(event.start>range.max){rangeIndex++;if(rangeIndex>=ranges.length)return;range=ranges[rangeIndex];}
+if(event.end>=range.min)yield event;}},getSlicesOfName(title){const slices=[];for(let i=0;i<this.slices.length;i++){if(this.slices[i].title===title){slices.push(this.slices[i]);}}
return slices;},iterSlicesInTimeRange(callback,start,end){const ret=[];tr.b.iterateOverIntersectingIntervals(this.topLevelSlices,function(s){return s.start;},function(s){return s.duration;},start,end,function(topLevelSlice){callback(topLevelSlice);for(const slice of topLevelSlice.enumerateAllDescendents()){callback(slice);}});return ret;},findFirstSlice(){if(!this.haveTopLevelSlicesBeenBuilt){throw new Error('Nope');}
if(0===this.slices.length)return undefined;return this.slices[0];},findSliceAtTs(ts){if(!this.haveTopLevelSlicesBeenBuilt)throw new Error('Nope');let i=tr.b.findIndexInSortedClosedIntervals(this.topLevelSlices,getSliceLo,getSliceHi,ts);if(i===-1||i===this.topLevelSlices.length){return undefined;}
let curSlice=this.topLevelSlices[i];while(true){i=tr.b.findIndexInSortedClosedIntervals(curSlice.subSlices,getSliceLo,getSliceHi,ts);if(i===-1||i===curSlice.subSlices.length){return curSlice;}
@@ -4839,9 +5130,8 @@ if(this.samples_&&this.samples_.length){this.bounds.addValue(this.samples_[0].st
for(let i=0;i<this.kernelSliceGroup.length;i++){categoriesDict[this.kernelSliceGroup.slices[i].category]=true;}
for(let i=0;i<this.asyncSliceGroup.length;i++){categoriesDict[this.asyncSliceGroup.slices[i].category]=true;}
if(this.samples_){for(let i=0;i<this.samples_.length;i++){categoriesDict[this.samples_[i].category]=true;}}},autoCloseOpenSlices(){this.sliceGroup.autoCloseOpenSlices();this.asyncSliceGroup.autoCloseOpenSlices();this.kernelSliceGroup.autoCloseOpenSlices();},mergeKernelWithUserland(){if(this.kernelSliceGroup.length>0){const newSlices=SliceGroup.merge(this.sliceGroup,this.kernelSliceGroup);this.sliceGroup.slices=newSlices.slices;this.kernelSliceGroup=new SliceGroup(this);this.updateBounds();}},createSubSlices(){this.sliceGroup.createSubSlices();this.samples_=this.parent.model.samples.filter(sample=>sample.thread===this);},get userFriendlyName(){return this.name||this.tid;},get userFriendlyDetails(){return'tid: '+this.tid+
-(this.name?', name: '+this.name:'');},getSettingsKey(){if(!this.name)return undefined;const parentKey=this.parent.getSettingsKey();if(!parentKey)return undefined;return parentKey+'.'+this.name;},getProcess(){return this.parent;},indexOfTimeSlice(timeSlice){const i=tr.b.findLowIndexInSortedArray(this.timeSlices,function(slice){return slice.start;},timeSlice.start);if(this.timeSlices[i]!==timeSlice)return undefined;return i;},getCpuStatsForRange(range){const stats={};stats.total=0;if(!this.timeSlices)return stats;function addStatsForSlice(threadTimeSlice){const freqRange=tr.b.math.Range.fromExplicitRange(threadTimeSlice.start,threadTimeSlice.end);const intersection=freqRange.findIntersection(range);if(threadTimeSlice.schedulingState===tr.model.SCHEDULING_STATE.RUNNING){const cpu=threadTimeSlice.cpuOnWhichThreadWasRunning;if(!(cpu.cpuNumber in stats)){stats[cpu.cpuNumber]=0;}
-stats[cpu.cpuNumber]+=intersection.duration;stats.total+=intersection.duration;}}
-tr.b.iterateOverIntersectingIntervals(this.timeSlices,function(x){return x.start;},function(x){return x.end;},range.min,range.max,addStatsForSlice);return stats;},getSchedulingStatsForRange(start,end){const stats={};if(!this.timeSlices)return stats;function addStatsForSlice(threadTimeSlice){const overlapStart=Math.max(threadTimeSlice.start,start);const overlapEnd=Math.min(threadTimeSlice.end,end);const schedulingState=threadTimeSlice.schedulingState;if(!(schedulingState in stats))stats[schedulingState]=0;stats[schedulingState]+=overlapEnd-overlapStart;}
+(this.name?', name: '+this.name:'');},getSettingsKey(){if(!this.name)return undefined;const parentKey=this.parent.getSettingsKey();if(!parentKey)return undefined;return parentKey+'.'+this.name;},getProcess(){return this.parent;},indexOfTimeSlice(timeSlice){const i=tr.b.findLowIndexInSortedArray(this.timeSlices,function(slice){return slice.start;},timeSlice.start);if(this.timeSlices[i]!==timeSlice)return undefined;return i;},sumOverToplevelSlicesInRange(range,func){let sum=0;tr.b.iterateOverIntersectingIntervals(this.sliceGroup.topLevelSlices,slice=>slice.start,slice=>slice.end,range.min,range.max,slice=>{let fractionOfSliceInsideRangeOfInterest=1;if(slice.duration>0){const intersection=range.findIntersection(slice.range);fractionOfSliceInsideRangeOfInterest=intersection.duration/slice.duration;}
+sum+=func(slice)*fractionOfSliceInsideRangeOfInterest;});return sum;},getCpuTimeForRange(range){return this.sumOverToplevelSlicesInRange(range,slice=>slice.cpuDuration||0);},getNumToplevelSlicesForRange(range){return this.sumOverToplevelSlicesInRange(range,slice=>1);},getSchedulingStatsForRange(start,end){const stats={};if(!this.timeSlices)return stats;function addStatsForSlice(threadTimeSlice){const overlapStart=Math.max(threadTimeSlice.start,start);const overlapEnd=Math.min(threadTimeSlice.end,end);const schedulingState=threadTimeSlice.schedulingState;if(!(schedulingState in stats))stats[schedulingState]=0;stats[schedulingState]+=overlapEnd-overlapStart;}
tr.b.iterateOverIntersectingIntervals(this.timeSlices,function(x){return x.start;},function(x){return x.end;},start,end,addStatsForSlice);return stats;},get samples(){return this.samples_;},get type(){const re=/^[^0-9|\/]+/;const matches=re.exec(this.name);if(matches&&matches[0])return matches[0];throw new Error('Could not determine thread type for thread name '+
this.name);}};Thread.compare=function(x,y){let tmp=x.parent.compareTo(y.parent);if(tmp)return tmp;tmp=x.sortIndex-y.sortIndex;if(tmp)return tmp;if(x.name!==undefined){if(y.name!==undefined){tmp=x.name.localeCompare(y.name);}else{tmp=-1;}}else if(y.name!==undefined){tmp=1;}
if(tmp)return tmp;return x.tid-y.tid;};return{Thread,};});'use strict';tr.exportTo('tr.model',function(){const Thread=tr.model.Thread;const Counter=tr.model.Counter;function ProcessBase(model){if(!model){throw new Error('Must provide a model');}
@@ -4901,7 +5191,7 @@ const MemoryAllocatorDumpInfoType={PROVIDED_SIZE_LESS_THAN_AGGREGATED_CHILDREN:0
const SIZE_NUMERIC_NAME=tr.model.MemoryAllocatorDump.SIZE_NUMERIC_NAME;const EFFECTIVE_SIZE_NUMERIC_NAME=tr.model.MemoryAllocatorDump.EFFECTIVE_SIZE_NUMERIC_NAME;const MemoryAllocatorDumpInfoType=tr.model.MemoryAllocatorDumpInfoType;const PROVIDED_SIZE_LESS_THAN_AGGREGATED_CHILDREN=MemoryAllocatorDumpInfoType.PROVIDED_SIZE_LESS_THAN_AGGREGATED_CHILDREN;const PROVIDED_SIZE_LESS_THAN_LARGEST_OWNER=MemoryAllocatorDumpInfoType.PROVIDED_SIZE_LESS_THAN_LARGEST_OWNER;function getSize(dump){const numeric=dump.numerics[SIZE_NUMERIC_NAME];if(numeric===undefined)return 0;return numeric.value;}
function hasSize(dump){return dump.numerics[SIZE_NUMERIC_NAME]!==undefined;}
function optional(value,defaultValue){if(value===undefined)return defaultValue;return value;}
-GlobalMemoryDump.prototype={__proto__:tr.model.ContainerMemoryDump.prototype,get userFriendlyName(){return'Global memory dump at '+
+GlobalMemoryDump.prototype={__proto__:tr.model.ContainerMemoryDump.prototype,get stableId(){return'memory.'+this.model.globalMemoryDumps.indexOf(this);},get userFriendlyName(){return'Global memory dump at '+
tr.b.Unit.byName.timeStampInMs.format(this.start);},get containerName(){return'global space';},finalizeGraph(){this.removeWeakDumps();this.setUpTracingOverheadOwnership();this.aggregateNumerics();this.calculateSizes();this.calculateEffectiveSizes();this.discountTracingOverheadFromVmRegions();this.forceRebuildingMemoryAllocatorDumpByFullNameIndices();},removeWeakDumps(){this.traverseAllocatorDumpsInDepthFirstPreOrder(function(dump){if(dump.weak)return;if((dump.owns!==undefined&&dump.owns.target.weak)||(dump.parent!==undefined&&dump.parent.weak)){dump.weak=true;}});function removeWeakDumpsFromListRecursively(dumps){tr.b.inPlaceFilter(dumps,function(dump){if(dump.weak){return false;}
removeWeakDumpsFromListRecursively(dump.children);tr.b.inPlaceFilter(dump.ownedBy,function(ownershipLink){return!ownershipLink.source.weak;});return true;});}
this.iterateContainerDumps(function(containerDump){const memoryAllocatorDumps=containerDump.memoryAllocatorDumps;if(memoryAllocatorDumps!==undefined){removeWeakDumpsFromListRecursively(memoryAllocatorDumps);}});},calculateSizes(){this.traverseAllocatorDumpsInDepthFirstPostOrder(this.calculateMemoryAllocatorDumpSize_.bind(this));},calculateMemoryAllocatorDumpSize_(dump){let shouldDefineSize=false;function getDependencySize(dependencyDump){const numeric=dependencyDump.numerics[SIZE_NUMERIC_NAME];if(numeric===undefined)return 0;shouldDefineSize=true;return numeric.value;}
@@ -4937,12 +5227,13 @@ openDumps.add(dump);dump.ownedBy.forEach(function(ownershipLink){visit.call(this
this.iterateAllRootAllocatorDumps(visit);},traverseAllocatorDumpsInDepthFirstPreOrder(fn){const visitedDumps=new WeakSet();function visit(dump){if(visitedDumps.has(dump))return;if(dump.owns!==undefined&&!visitedDumps.has(dump.owns.target)){return;}
if(dump.parent!==undefined&&!visitedDumps.has(dump.parent)){return;}
fn.call(this,dump);visitedDumps.add(dump);dump.ownedBy.forEach(function(ownershipLink){visit.call(this,ownershipLink.source);},this);dump.children.forEach(visit,this);}
-this.iterateAllRootAllocatorDumps(visit);}};tr.model.EventRegistry.register(GlobalMemoryDump,{name:'globalMemoryDump',pluralName:'globalMemoryDumps'});return{GlobalMemoryDump,};});'use strict';tr.exportTo('tr.model',function(){const InstantEventType={GLOBAL:1,PROCESS:2};function InstantEvent(category,title,colorId,start,args){tr.model.TimedEvent.call(this,start);this.category=category||'';this.title=title;this.colorId=colorId;this.args=args;this.type=undefined;}
-InstantEvent.prototype={__proto__:tr.model.TimedEvent.prototype};function GlobalInstantEvent(category,title,colorId,start,args){InstantEvent.apply(this,arguments);this.type=InstantEventType.GLOBAL;}
+this.iterateAllRootAllocatorDumps(visit);}};tr.model.EventRegistry.register(GlobalMemoryDump,{name:'globalMemoryDump',pluralName:'globalMemoryDumps'});return{GlobalMemoryDump,};});'use strict';tr.exportTo('tr.model',function(){const InstantEventType={GLOBAL:1,PROCESS:2};function InstantEvent(category,title,colorId,start,args,parent){tr.model.TimedEvent.call(this,start);this.category=category||'';this.title=title;this.colorId=colorId;this.args=args;this.parent_=parent;this.type=undefined;}
+InstantEvent.prototype={__proto__:tr.model.TimedEvent.prototype,};function GlobalInstantEvent(category,title,colorId,start,args,parent){InstantEvent.apply(this,arguments);this.type=InstantEventType.GLOBAL;}
GlobalInstantEvent.prototype={__proto__:InstantEvent.prototype,get userFriendlyName(){return'Global instant event '+this.title+' @ '+
-tr.b.Unit.byName.timeStampInMs.format(start);}};function ProcessInstantEvent(category,title,colorId,start,args){InstantEvent.apply(this,arguments);this.type=InstantEventType.PROCESS;}
+tr.b.Unit.byName.timeStampInMs.format(start);},get stableId(){return'instant.'+this.parent_.instantEvents.indexOf(this);},};function ProcessInstantEvent(category,title,colorId,start,args,parent){InstantEvent.apply(this,arguments);this.type=InstantEventType.PROCESS;}
ProcessInstantEvent.prototype={__proto__:InstantEvent.prototype,get userFriendlyName(){return'Process-level instant event '+this.title+' @ '+
-tr.b.Unit.byName.timeStampInMs.format(start);}};tr.model.EventRegistry.register(InstantEvent,{name:'instantEvent',pluralName:'instantEvents'});return{GlobalInstantEvent,ProcessInstantEvent,InstantEventType,InstantEvent,};});'use strict';tr.exportTo('tr.model',function(){const Cpu=tr.model.Cpu;const ProcessBase=tr.model.ProcessBase;function Kernel(model){ProcessBase.call(this,model);this.cpus={};this.softwareMeasuredCpuCount_=undefined;}
+tr.b.Unit.byName.timeStampInMs.format(start);},get stableId(){return this.parent_.stableId+'.instant.'+
+this.parent_.instantEvents.indexOf(this);},};tr.model.EventRegistry.register(InstantEvent,{name:'instantEvent',pluralName:'instantEvents'});return{GlobalInstantEvent,ProcessInstantEvent,InstantEventType,InstantEvent,};});'use strict';tr.exportTo('tr.model',function(){const Cpu=tr.model.Cpu;const ProcessBase=tr.model.ProcessBase;function Kernel(model){ProcessBase.call(this,model);this.cpus={};this.softwareMeasuredCpuCount_=undefined;}
Kernel.compare=function(x,y){return 0;};Kernel.prototype={__proto__:ProcessBase.prototype,compareTo(that){return Kernel.compare(this,that);},get userFriendlyName(){return'Kernel';},get userFriendlyDetails(){return'Kernel';},get stableId(){return'Kernel';},getOrCreateCpu(cpuNumber){if(!this.cpus[cpuNumber]){this.cpus[cpuNumber]=new Cpu(this,cpuNumber);}
return this.cpus[cpuNumber];},get softwareMeasuredCpuCount(){return this.softwareMeasuredCpuCount_;},set softwareMeasuredCpuCount(softwareMeasuredCpuCount){if(this.softwareMeasuredCpuCount_!==undefined&&this.softwareMeasuredCpuCount_!==softwareMeasuredCpuCount){throw new Error('Cannot change the softwareMeasuredCpuCount once it is set');}
this.softwareMeasuredCpuCount_=softwareMeasuredCpuCount;},get bestGuessAtCpuCount(){const realCpuCount=Object.keys(this.cpus).length;if(realCpuCount!==0){return realCpuCount;}
@@ -4975,9 +5266,23 @@ matchedChild.addRegionRecursively_(region,true);},buildTree_(){const cachedRegio
if(this.regions_!==undefined&&this.regions_.length!==0){throw new Error('Internal error: Classification node should have no regions');}
if(this.isLeafNode){return;}
this.regions_=undefined;this.children_=this.rule_.children.map(function(childRule){const child=new VMRegionClassificationNode(childRule);child.buildChildNodesRecursively_();return child;});},addStatsFromRegion_(region){this.hasRegions=true;const regionSizeInBytes=region.sizeInBytes;if(regionSizeInBytes!==undefined){this.sizeInBytes=(this.sizeInBytes||0)+regionSizeInBytes;}
-const thisByteStats=this.byteStats;const regionByteStats=region.byteStats;for(const byteStatName in regionByteStats){const regionByteStatValue=regionByteStats[byteStatName];if(regionByteStatValue===undefined)continue;thisByteStats[byteStatName]=(thisByteStats[byteStatName]||0)+regionByteStatValue;}}};return{VMRegion,VMRegionClassificationNode,};});'use strict';tr.exportTo('tr.model',function(){const DISCOUNTED_ALLOCATOR_NAMES=['winheap','malloc'];const TRACING_OVERHEAD_PATH=['allocated_objects','tracing_overhead'];const SIZE_NUMERIC_NAME=tr.model.MemoryAllocatorDump.SIZE_NUMERIC_NAME;const RESIDENT_SIZE_NUMERIC_NAME=tr.model.MemoryAllocatorDump.RESIDENT_SIZE_NUMERIC_NAME;function getSizeNumericValue(dump,sizeNumericName){const sizeNumeric=dump.numerics[sizeNumericName];if(sizeNumeric===undefined)return 0;return sizeNumeric.value;}
+const thisByteStats=this.byteStats;const regionByteStats=region.byteStats;for(const byteStatName in regionByteStats){const regionByteStatValue=regionByteStats[byteStatName];if(regionByteStatValue===undefined)continue;thisByteStats[byteStatName]=(thisByteStats[byteStatName]||0)+regionByteStatValue;}
+if(region.mappedFile.includes('/base.odex')||region.mappedFile.includes('/base.vdex')){if(region.byteStats.proportionalResident!==undefined){thisByteStats.javaBasePss=(thisByteStats.javaBasePss||0)+
+region.byteStats.proportionalResident;}
+if(region.byteStats.privateCleanResident!==undefined){thisByteStats.javaBaseCleanResident=(thisByteStats.javaBaseCleanResident||0)+
+region.byteStats.privateCleanResident;}
+if(region.byteStats.sharedCleanResident!==undefined){thisByteStats.javaBaseCleanResident=(thisByteStats.javaBaseCleanResident||0)+
+region.byteStats.sharedCleanResident;}}
+const textProtectionFlags=(VMRegion.PROTECTION_FLAG_READ|VMRegion.PROTECTION_FLAG_EXECUTE);if((region.protectionFlags===textProtectionFlags)&&(region.mappedFile.includes('/base.apk')||region.mappedFile.includes('/libchrome.so'))){if(regionSizeInBytes!==undefined){this.nativeLibrarySizeInBytes=(this.nativeLibrarySizeInBytes||0)+regionSizeInBytes;}
+if(region.byteStats.privateCleanResident!==undefined){thisByteStats.nativeLibraryPrivateCleanResident=(thisByteStats.nativeLibraryPrivateCleanResident||0)+
+region.byteStats.privateCleanResident;}
+if(region.byteStats.sharedCleanResident!==undefined){thisByteStats.nativeLibrarySharedCleanResident=(thisByteStats.nativeLibrarySharedCleanResident||0)+
+region.byteStats.sharedCleanResident;}
+if(region.byteStats.proportionalResident!==undefined){thisByteStats.nativeLibraryProportionalResident=(thisByteStats.nativeLibraryProportionalResident||0)+
+region.byteStats.proportionalResident;}}}};return{VMRegion,VMRegionClassificationNode,};});'use strict';tr.exportTo('tr.model',function(){const DISCOUNTED_ALLOCATOR_NAMES=['winheap','malloc'];const TRACING_OVERHEAD_PATH=['allocated_objects','tracing_overhead'];const SIZE_NUMERIC_NAME=tr.model.MemoryAllocatorDump.SIZE_NUMERIC_NAME;const RESIDENT_SIZE_NUMERIC_NAME=tr.model.MemoryAllocatorDump.RESIDENT_SIZE_NUMERIC_NAME;function getSizeNumericValue(dump,sizeNumericName){const sizeNumeric=dump.numerics[sizeNumericName];if(sizeNumeric===undefined)return 0;return sizeNumeric.value;}
function ProcessMemoryDump(globalMemoryDump,process,start){tr.model.ContainerMemoryDump.call(this,start);this.process=process;this.globalMemoryDump=globalMemoryDump;this.totals=undefined;this.vmRegions=undefined;this.heapDumps=undefined;this.tracingOverheadOwnershipSetUp_=false;this.tracingOverheadDiscountedFromVmRegions_=false;}
-ProcessMemoryDump.prototype={__proto__:tr.model.ContainerMemoryDump.prototype,get userFriendlyName(){return'Process memory dump at '+
+ProcessMemoryDump.prototype={__proto__:tr.model.ContainerMemoryDump.prototype,get stableId(){return this.process.stableId+'.memory.'+
+this.process.memoryDumps.indexOf(this);},get userFriendlyName(){return'Process memory dump at '+
tr.b.Unit.byName.timeStampInMs.format(this.start);},get containerName(){return this.process.userFriendlyName;},get processMemoryDumps(){const dumps={};dumps[this.process.pid]=this;return dumps;},get hasOwnVmRegions(){return this.vmRegions!==undefined;},setUpTracingOverheadOwnership(opt_model){if(this.tracingOverheadOwnershipSetUp_)return;this.tracingOverheadOwnershipSetUp_=true;const tracingDump=this.getMemoryAllocatorDumpByFullName('tracing');if(tracingDump===undefined||tracingDump.owns!==undefined){return;}
if(tracingDump.owns!==undefined)return;const hasDiscountedFromAllocatorDumps=DISCOUNTED_ALLOCATOR_NAMES.some(function(allocatorName){const allocatorDump=this.getMemoryAllocatorDumpByFullName(allocatorName);if(allocatorDump===undefined){return false;}
let nextPathIndex=0;let currentDump=allocatorDump;let currentFullName=allocatorName;for(;nextPathIndex<TRACING_OVERHEAD_PATH.length;nextPathIndex++){const childFullName=currentFullName+'/'+
@@ -5016,11 +5321,7 @@ return result;},get sourceInfo(){return this.sourceInfo_;},set parentFrame(paren
this.parentFrame_=parentFrame;if(this.parentFrame_){this.parentFrame_.addChild(this);}},addChild(child){this.children.push(child);},removeChild(child){const i=this.children.indexOf(child.id);if(i===-1){throw new Error('omg');}
this.children.splice(i,1);},removeAllChildren(){for(let i=0;i<this.children.length;i++){this.children[i].parentFrame_=undefined;}
this.children.splice(0,this.children.length);},get stackTrace(){const stack=[this];let cur=this.parentFrame;while(cur){stack.push(cur);cur=cur.parentFrame;}
-return stack;},getUserFriendlyStackTrace(){return this.stackTrace.map(function(x){return x.title;});}};return{StackFrame,};});'use strict';tr.exportTo('tr.model.um',function(){class Segment extends tr.model.TimedEvent{constructor(start,duration){super(start);this.duration=duration;this.expectations_=[];}
-get expectations(){return this.expectations_;}
-clone(){const clone=new Segment(this.start,this.duration);clone.expectations.push(...this.expectations);return clone;}
-addSegment(other){this.duration+=other.duration;this.expectations.push(...other.expectations);}}
-return{Segment,};});'use strict';tr.exportTo('tr.model.um',function(){class UserModel extends tr.model.EventContainer{constructor(parentModel){super();this.parentModel_=parentModel;this.expectations_=new tr.model.EventSet();this.segments_=[];}
+return stack;},getUserFriendlyStackTrace(){return this.stackTrace.map(function(x){return x.title;});}};return{StackFrame,};});'use strict';tr.exportTo('tr.model.um',function(){class UserModel extends tr.model.EventContainer{constructor(parentModel){super();this.parentModel_=parentModel;this.expectations_=new tr.model.EventSet();this.segments_=[];}
get stableId(){return'UserModel';}
get parentModel(){return this.parentModel_;}
sortExpectations(){this.expectations_.sortEvents((x,y)=>(x.start-y.start));}
@@ -5077,7 +5378,7 @@ const sid=this.decodeBytes(4*subAuthorityCount);return{pSid,attributes,sid};},de
EtwImporter.canImport=function(events){if(!events.hasOwnProperty('name')||!events.hasOwnProperty('content')||events.name!=='ETW'){return false;}
return true;};EtwImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'EtwImporter';},get model(){return this.model_;},createThreadIfNeeded(pid,tid){this.tidsToPid_[tid]=pid;},removeThreadIfPresent(tid){this.tidsToPid_[tid]=undefined;},getPidFromWindowsTid(tid){if(tid===0)return 0;const pid=this.tidsToPid_[tid];if(pid===undefined){return 0;}
return pid;},getThreadFromWindowsTid(tid){const pid=this.getPidFromWindowsTid(tid);const process=this.model_.getProcess(pid);if(!process)return undefined;return process.getThread(tid);},getOrCreateCpu(cpuNumber){const cpu=this.model_.kernel.getOrCreateCpu(cpuNumber);return cpu;},importEvents(){this.events_.content.forEach(this.parseInfo.bind(this));if(this.walltime_===undefined||this.ticks_===undefined){throw Error('Cannot find clock sync information in the system trace.');}
-if(this.is64bit_===undefined){throw Error('Cannot determine pointer size of the system trace.');}
+if(this.is64bit_===undefined){throw Error('Cannot determine pointer size of the system trace.'+'Consider deselecting "System tracing" or disabling the "Paging '+'Executive" feature of Windows');}
this.events_.content.forEach(this.parseEvent.bind(this));},importTimestamp(timestamp){const ts=parseInt(timestamp,16);return(ts-this.walltime_+this.ticks_)/1000.;},parseInfo(event){if(event.hasOwnProperty('guid')&&event.hasOwnProperty('walltime')&&event.hasOwnProperty('tick')&&event.guid==='ClockSync'){this.walltime_=parseInt(event.walltime,16);this.ticks_=parseInt(event.tick,16);}
if(this.is64bit_===undefined&&event.hasOwnProperty('guid')&&event.hasOwnProperty('op')&&event.hasOwnProperty('ver')&&event.hasOwnProperty('payload')&&event.guid===kThreadGuid&&event.op===kThreadDCStartOpcode){const decodedSize=tr.b.Base64.getDecodedBufferLength(event.payload);if(event.ver===1){if(decodedSize>=52){this.is64bit_=true;}else{this.is64bit_=false;}}else if(event.ver===2){if(decodedSize>=64){this.is64bit_=true;}else{this.is64bit_=false;}}else if(event.ver===3){if(decodedSize>=60){this.is64bit_=true;}else{this.is64bit_=false;}}}
return true;},parseEvent(event){if(!event.hasOwnProperty('guid')||!event.hasOwnProperty('op')||!event.hasOwnProperty('ver')||!event.hasOwnProperty('cpu')||!event.hasOwnProperty('ts')||!event.hasOwnProperty('payload')){return false;}
@@ -5093,7 +5394,7 @@ readUntilDelimiter(delim){throw new Error('Not implemented');}
readNumBytes(opt_size){throw new Error('Not implemented');}
rewind(){throw new Error('Not implemented');}
substream(offset,opt_length,opt_headerSize){throw new Error('Not implemented');}}
-return{TraceStream,};});'use strict';tr.exportTo('tr.e.importer.fuchsia',function(){const IMPORT_PRIORITY=0;const IDLE_THREAD_THRESHOLD=6444000000;class FuchsiaImporter extends tr.importer.Importer{constructor(model,eventData){super(model,eventData);this.importPriority=IMPORT_PRIORITY;this.model_=model;this.events_=eventData.events;this.parsers_=[];this.threadInfo_=new Map();this.processNames_=new Map();}
+return{TraceStream,};});'use strict';tr.exportTo('tr.e.importer.fuchsia',function(){const IMPORT_PRIORITY=0;const IDLE_THREAD_THRESHOLD=6444000000;const ZX_THREAD_STATE_NEW=0;const ZX_THREAD_STATE_RUNNING=1;const ZX_THREAD_STATE_SUSPENDED=2;const ZX_THREAD_STATE_BLOCKED=3;const ZX_THREAD_STATE_DYING=4;const ZX_THREAD_STATE_DEAD=5;class FuchsiaImporter extends tr.importer.Importer{constructor(model,eventData){super(model,eventData);this.importPriority=IMPORT_PRIORITY;this.model_=model;this.events_=eventData.events;this.parsers_=[];this.threadInfo_=new Map();this.processNames_=new Map();this.threadStates_=new Map();}
static canImport(eventData){if(eventData instanceof tr.b.TraceStream){if(eventData.isBinary)return false;eventData=eventData.header;}
if(eventData instanceof Object&&eventData.type==='fuchsia'){return true;}
return false;}
@@ -5101,13 +5402,22 @@ get importerName(){return'FuchsiaImporter';}
get model(){return this.model_;}
importClockSyncMarkers(){}
finalizeImport(){}
-processContextSwitchEvent_(event){let tid=event.in.tid;let threadName=tid.toString();let procName='';if(this.threadInfo_.has(tid)){const threadInfo=this.threadInfo_.get(tid);threadName=threadInfo.name;const pid=threadInfo.pid;if(this.processNames_.has(pid)){procName=this.processNames_.get(pid)+':';}}
-const name=procName+threadName;if(tid>IDLE_THREAD_THRESHOLD){tid=undefined;}
-const cpu=this.model_.kernel.getOrCreateCpu(event.cpu);cpu.switchActiveThread(tr.b.Unit.timestampFromUs(event.ts),{},tid,name,tid);}
+isIdleThread(prio,tid){if(prio===undefined){return tid>IDLE_THREAD_THRESHOLD;}
+return prio===0;}
+recordThreadState_(tid,timestamp,state,prio){if(this.isIdleThread(prio,tid)){return;}
+const states=this.threadStates_.has(tid)?this.threadStates_.get(tid):[];states.push({'ts':timestamp,state});this.threadStates_.set(tid,states);}
+processContextSwitchEvent_(event){let tid=event.in.tid;let threadName=tid.toString();let procName='';const prio=event.in.prio;if(this.threadInfo_.has(tid)){const threadInfo=this.threadInfo_.get(tid);threadName=threadInfo.name;const pid=threadInfo.pid;if(this.processNames_.has(pid)){procName=this.processNames_.get(pid)+':';}}
+const name=procName+threadName;if(this.isIdleThread(prio,tid)){tid=undefined;}
+const cpu=this.model_.kernel.getOrCreateCpu(event.cpu);const timestamp=tr.b.Unit.timestampFromUs(event.ts);cpu.switchActiveThread(timestamp,{},tid,name,tid);const SCHEDULING_STATE=tr.model.SCHEDULING_STATE;this.recordThreadState_(tid,timestamp,SCHEDULING_STATE.RUNNING,prio);let outState=SCHEDULING_STATE.UNKNOWN;switch(event.out.state){case ZX_THREAD_STATE_NEW:outState=SCHEDULING_STATE.RUNNABLE;break;case ZX_THREAD_STATE_RUNNING:outState=SCHEDULING_STATE.RUNNABLE;break;case ZX_THREAD_STATE_BLOCKED:outState=SCHEDULING_STATE.SLEEPING;break;case ZX_THREAD_STATE_SUSPENDED:outState=SCHEDULING_STATE.STOPPED;break;case ZX_THREAD_STATE_DEAD:outState=SCHEDULING_STATE.TASK_DEAD;break;}
+this.recordThreadState_(event.out.tid,timestamp,outState,event.out.prio);}
processProcessInfoEvent_(event){const process=this.model_.getOrCreateProcess(event.pid);process.name=event.name;this.processNames_.set(event.pid,event.name);if('sort_index'in event){process.sortIndex=event.sort_index;}}
processThreadInfoEvent_(event){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);thread.name=event.name;this.threadInfo_.set(event.tid,{'name':event.name,'pid':event.pid});if('sort_index'in event){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);thread.sortIndex=event.sort_index;}}
processEvent_(event){switch(event.ph){case'k':this.processContextSwitchEvent_(event);break;case'p':this.processProcessInfoEvent_(event);break;case't':this.processThreadInfoEvent_(event);break;}}
-importEvents(){for(const event of this.events_){this.processEvent_(event);}}}
+postProcessStates_(){for(const[tid,states]of this.threadStates_){if(!this.threadInfo_.has(tid)){continue;}
+const pid=this.threadInfo_.get(tid).pid;const thread=this.model_.getOrCreateProcess(pid).getOrCreateThread(tid);const slices=[];for(let i=0;i<states.length-1;i++){slices.push(new tr.model.ThreadTimeSlice(thread,states[i].state,'',states[i].ts,{},states[i+1].ts-states[i].ts));}
+thread.timeSlices=slices;}}
+importEvents(){for(const event of this.events_){this.processEvent_(event);}
+this.postProcessStates_();}}
tr.importer.Importer.register(FuchsiaImporter);return{FuchsiaImporter,IMPORT_PRIORITY,};});'use strict';tr.exportTo('tr.b',function(){const MAX_FUNCTION_ARGS_COUNT=Math.pow(2,15)-1;class InMemoryTraceStream extends tr.b.TraceStream{constructor(buffer,isBinary,opt_headerSize){super();if(!buffer instanceof Uint8Array){throw new Error('buffer should be a Uint8Array');}
const headerSize=opt_headerSize||tr.b.TraceStream.HEADER_SIZE;this.data_=buffer;this.isBinary_=isBinary;this.header_=InMemoryTraceStream.uint8ArrayToString_(this.data_.subarray(0,headerSize));this.cursor_=0;}
get isBinary(){return this.isBinary_;}
@@ -5478,7 +5788,9 @@ TraceCodeMap.prototype={addEntry(addressHex,size,name,scriptId){const entry=new
return bank;}};function TraceCodeBank(){this.entries_=[];}
TraceCodeBank.prototype={removeEntry(address){if(this.entries_.length===0)return undefined;const index=tr.b.findLowIndexInSortedArray(this.entries_,function(entry){return entry.address;},address);const entry=this.entries_[index];if(!entry||entry.address!==address)return undefined;this.entries_.splice(index,1);return entry;},lookupEntry(address){const index=tr.b.findFirstTrueIndexInSortedArray(this.entries_,e=>(address<e.address))-1;const entry=this.entries_[index];return entry&&address<entry.address+entry.size?entry:undefined;},addEntry(newEntry){if(this.entries_.length===0){this.entries_.push(newEntry);}
const endAddress=newEntry.address+newEntry.size;const lastIndex=tr.b.findLowIndexInSortedArray(this.entries_,function(entry){return entry.address;},endAddress);let index;for(index=lastIndex-1;index>=0;--index){const entry=this.entries_[index];const entryEndAddress=entry.address+entry.size;if(entryEndAddress<=newEntry.address)break;}
-++index;this.entries_.splice(index,lastIndex-index,newEntry);}};return{TraceCodeMap,};});'use strict';tr.exportTo('tr.importer',function(){function ContextProcessor(model){this.model_=model;this.activeContexts_=[];this.stackPerType_={};this.contextCache_={};this.contextSetCache_={};this.cachedEntryForActiveContexts_=undefined;this.seenSnapshots_={};}
+++index;this.entries_.splice(index,lastIndex-index,newEntry);}};return{TraceCodeMap,};});'use strict';tr.exportTo('tr.e.measure',function(){const AsyncSlice=tr.model.AsyncSlice;const MEASURE_NAME_REGEX=/([^\/:]+):(.*?)(?:\/([A-Za-z0-9+/]+=?=?))?$/;function MeasureAsyncSlice(){this.groupTitle_='Ungrouped Measure';const matched=MEASURE_NAME_REGEX.exec(arguments[1]);if(matched!==null){arguments[1]=matched[2];this.groupTitle_=matched[1];}
+AsyncSlice.apply(this,arguments);}
+MeasureAsyncSlice.prototype={__proto__:AsyncSlice.prototype,get viewSubGroupTitle(){return this.groupTitle_;},get title(){return this.title_;},set title(title){this.title_=title;}};AsyncSlice.subTypes.register(MeasureAsyncSlice,{categoryParts:['blink.user_timing']});return{MEASURE_NAME_REGEX,MeasureAsyncSlice,};});'use strict';tr.exportTo('tr.importer',function(){function ContextProcessor(model){this.model_=model;this.activeContexts_=[];this.stackPerType_={};this.contextCache_={};this.contextSetCache_={};this.cachedEntryForActiveContexts_=undefined;this.seenSnapshots_={};}
ContextProcessor.prototype={enterContext(contextType,scopedId){const newActiveContexts=[this.getOrCreateContext_(contextType,scopedId),];for(const oldContext of this.activeContexts_){if(oldContext.type===contextType){this.pushContext_(oldContext);}else{newActiveContexts.push(oldContext);}}
this.activeContexts_=newActiveContexts;this.cachedEntryForActiveContexts_=undefined;},leaveContext(contextType,scopedId){this.leaveContextImpl_(context=>context.type===contextType&&context.snapshot.scope===scopedId.scope&&context.snapshot.idRef===scopedId.id);},destroyContext(scopedId){for(const stack of Object.values(this.stackPerType_)){let newLength=0;for(let i=0;i<stack.length;++i){if(stack[i].snapshot.scope!==scopedId.scope||stack[i].snapshot.idRef!==scopedId.id){stack[newLength++]=stack[i];}}
stack.length=newLength;}
@@ -5520,9 +5832,9 @@ this.scope=scope;this.id=id;this.pid=pid;}
ScopedId.prototype={toString(){const pidStr=this.pid===undefined?'':'pid: '+this.pid+', ';return'{'+pidStr+'scope: '+this.scope+', id: '+this.id+'}';},toStringWithDelimiter(delim){return(this.pid===undefined?'':this.pid)+delim+
this.scope+delim+this.id;}};return{ScopedId,};});'use strict';tr.exportTo('tr.ui.annotations',function(){function XMarkerAnnotationView(viewport,annotation){this.viewport_=viewport;this.annotation_=annotation;}
XMarkerAnnotationView.prototype={__proto__:tr.ui.annotations.AnnotationView.prototype,draw(ctx){const dt=this.viewport_.currentDisplayTransform;const viewX=dt.xWorldToView(this.annotation_.timestamp);ctx.beginPath();tr.ui.b.drawLine(ctx,viewX,0,viewX,ctx.canvas.height);ctx.strokeStyle=this.annotation_.strokeStyle;ctx.stroke();}};return{XMarkerAnnotationView,};});'use strict';tr.exportTo('tr.model',function(){function XMarkerAnnotation(timestamp){tr.model.Annotation.apply(this,arguments);this.timestamp=timestamp;this.strokeStyle='rgba(0, 0, 255, 0.5)';}
-XMarkerAnnotation.fromDict=function(dict){return new XMarkerAnnotation(dict.args.timestamp);};XMarkerAnnotation.prototype={__proto__:tr.model.Annotation.prototype,toDict(){return{typeName:'xmarker',args:{timestamp:this.timestamp}};},createView_(viewport){return new tr.ui.annotations.XMarkerAnnotationView(viewport,this);}};tr.model.Annotation.register(XMarkerAnnotation,{typeName:'xmarker'});return{XMarkerAnnotation,};});'use strict';tr.exportTo('tr.e.importer',function(){const Base64=tr.b.Base64;const deepCopy=tr.b.deepCopy;const ColorScheme=tr.b.ColorScheme;const HeapDumpTraceEventImporter=tr.e.importer.HeapDumpTraceEventImporter;const LegacyHeapDumpTraceEventImporter=tr.e.importer.LegacyHeapDumpTraceEventImporter;const StreamingEventExpander=tr.e.importer.StreamingEventExpander;const ProfilingDictionaryReader=tr.e.importer.ProfilingDictionaryReader;function getEventColor(event,opt_customName){if(event.cname){return ColorScheme.getColorIdForReservedName(event.cname);}else if(opt_customName||event.name){return ColorScheme.getColorIdForGeneralPurposeString(opt_customName||event.name);}}
+XMarkerAnnotation.fromDict=function(dict){return new XMarkerAnnotation(dict.args.timestamp);};XMarkerAnnotation.prototype={__proto__:tr.model.Annotation.prototype,toDict(){return{typeName:'xmarker',args:{timestamp:this.timestamp}};},createView_(viewport){return new tr.ui.annotations.XMarkerAnnotationView(viewport,this);}};tr.model.Annotation.register(XMarkerAnnotation,{typeName:'xmarker'});return{XMarkerAnnotation,};});'use strict';tr.exportTo('tr.e.importer',function(){const Base64=tr.b.Base64;const deepCopy=tr.b.deepCopy;const ColorScheme=tr.b.ColorScheme;const HeapDumpTraceEventImporter=tr.e.importer.HeapDumpTraceEventImporter;const LegacyHeapDumpTraceEventImporter=tr.e.importer.LegacyHeapDumpTraceEventImporter;const StreamingEventExpander=tr.e.importer.StreamingEventExpander;const ProfilingDictionaryReader=tr.e.importer.ProfilingDictionaryReader;const MEASURE_NAME_REGEX=tr.e.measure.MEASURE_NAME_REGEX;function getEventColor(event,opt_customName){if(event.cname){return ColorScheme.getColorIdForReservedName(event.cname);}else if(opt_customName||event.name){return ColorScheme.getColorIdForGeneralPurposeString(opt_customName||event.name);}}
function isLegacyChromeClockSyncEvent(event){return event.name!==undefined&&event.name.startsWith(LEGACY_CHROME_CLOCK_SYNC_EVENT_NAME_PREFIX)&&((event.ph==='S')||(event.ph==='F'));}
-const PRODUCER='producer';const CONSUMER='consumer';const STEP='step';const BACKGROUND=tr.model.ContainerMemoryDump.LevelOfDetail.BACKGROUND;const LIGHT=tr.model.ContainerMemoryDump.LevelOfDetail.LIGHT;const DETAILED=tr.model.ContainerMemoryDump.LevelOfDetail.DETAILED;const MEMORY_DUMP_LEVEL_OF_DETAIL_ORDER=[undefined,BACKGROUND,LIGHT,DETAILED];const GLOBAL_MEMORY_ALLOCATOR_DUMP_PREFIX='global/';const LEGACY_CHROME_CLOCK_SYNC_EVENT_NAME_PREFIX='ClockSyncEvent.';const BYTE_STAT_NAME_MAP={'pc':'privateCleanResident','pd':'privateDirtyResident','sc':'sharedCleanResident','sd':'sharedDirtyResident','pss':'proportionalResident','sw':'swapped'};const WEAK_MEMORY_ALLOCATOR_DUMP_FLAG=1<<0;const OBJECT_TYPE_NAME_PATTERNS=[{prefix:'const char *WTF::getStringWithTypeName() [T = ',suffix:']'},{prefix:'const char* WTF::getStringWithTypeName() [with T = ',suffix:']'},{prefix:'const char *__cdecl WTF::getStringWithTypeName<',suffix:'>(void)'}];const SUBTRACE_FIELDS=new Set(['powerTraceAsString','systemTraceEvents',]);const NON_METADATA_FIELDS=new Set(['displayTimeUnit','samples','stackFrames','traceAnnotations','traceEvents',...SUBTRACE_FIELDS]);function TraceEventImporter(model,eventData){this.hasEvents_=undefined;this.importPriority=1;this.model_=model;this.events_=undefined;this.sampleEvents_=undefined;this.stackFrameEvents_=undefined;this.stackFrameTree_=new tr.model.ProfileTree();this.subtraces_=[];this.eventsWereFromString_=false;this.softwareMeasuredCpuCount_=undefined;this.allAsyncEvents_=[];this.allFlowEvents_=[];this.allObjectEvents_=[];this.contextProcessorPerThread={};this.traceEventSampleStackFramesByName_={};this.v8ProcessCodeMaps_={};this.v8ProcessRootStackFrame_={};this.v8SamplingData_=[];this.profileTrees_=new Map();this.profileInfo_=new Map();this.legacyChromeClockSyncStartEvent_=undefined;this.legacyChromeClockSyncFinishEvent_=undefined;this.allMemoryDumpEvents_={};this.heapProfileExpander=new ProfilingDictionaryReader();this.objectTypeNameMap_={};this.clockDomainId_=tr.model.ClockDomainId.UNKNOWN_CHROME_LEGACY;this.toModelTime_=undefined;if(typeof(eventData)==='string'||eventData instanceof String){eventData=eventData.trim();if(eventData[0]==='['){eventData=eventData.replace(/\s*,\s*$/,'');if(eventData[eventData.length-1]!==']'){eventData=eventData+']';}}
+const PRODUCER='producer';const CONSUMER='consumer';const STEP='step';const BACKGROUND=tr.model.ContainerMemoryDump.LevelOfDetail.BACKGROUND;const LIGHT=tr.model.ContainerMemoryDump.LevelOfDetail.LIGHT;const DETAILED=tr.model.ContainerMemoryDump.LevelOfDetail.DETAILED;const MEMORY_DUMP_LEVEL_OF_DETAIL_ORDER=[undefined,BACKGROUND,LIGHT,DETAILED];const GLOBAL_MEMORY_ALLOCATOR_DUMP_PREFIX='global/';const LEGACY_CHROME_CLOCK_SYNC_EVENT_NAME_PREFIX='ClockSyncEvent.';const BYTE_STAT_NAME_MAP={'pc':'privateCleanResident','pd':'privateDirtyResident','sc':'sharedCleanResident','sd':'sharedDirtyResident','pss':'proportionalResident','sw':'swapped'};const WEAK_MEMORY_ALLOCATOR_DUMP_FLAG=1<<0;const OBJECT_TYPE_NAME_PATTERNS=[{prefix:'const char *WTF::getStringWithTypeName() [T = ',suffix:']'},{prefix:'const char* WTF::getStringWithTypeName() [with T = ',suffix:']'},{prefix:'const char *__cdecl WTF::getStringWithTypeName<',suffix:'>(void)'}];const SUBTRACE_FIELDS=new Set(['powerTraceAsString','systemTraceEvents','androidProcessDump',]);const NON_METADATA_FIELDS=new Set(['displayTimeUnit','samples','stackFrames','traceAnnotations','traceEvents',...SUBTRACE_FIELDS]);function TraceEventImporter(model,eventData){this.hasEvents_=undefined;this.importPriority=1;this.model_=model;this.events_=undefined;this.sampleEvents_=undefined;this.stackFrameEvents_=undefined;this.stackFrameTree_=new tr.model.ProfileTree();this.subtraces_=[];this.eventsWereFromString_=false;this.softwareMeasuredCpuCount_=undefined;this.allAsyncEvents_=[];this.allFlowEvents_=[];this.allObjectEvents_=[];this.contextProcessorPerThread={};this.traceEventSampleStackFramesByName_={};this.v8ProcessCodeMaps_={};this.v8ProcessRootStackFrame_={};this.v8SamplingData_=[];this.profileTrees_=new Map();this.profileInfo_=new Map();this.legacyChromeClockSyncStartEvent_=undefined;this.legacyChromeClockSyncFinishEvent_=undefined;this.allMemoryDumpEvents_={};this.heapProfileExpander=new ProfilingDictionaryReader();this.objectTypeNameMap_={};this.clockDomainId_=tr.model.ClockDomainId.UNKNOWN_CHROME_LEGACY;this.toModelTime_=undefined;if(typeof(eventData)==='string'||eventData instanceof String){eventData=eventData.trim();if(eventData[0]==='['){eventData=eventData.replace(/\s*,\s*$/,'');if(eventData[eventData.length-1]!==']'){eventData=eventData+']';}}
this.events_=JSON.parse(eventData);this.eventsWereFromString_=true;}else{this.events_=eventData;}
if(this.events_.traceEvents){const container=this.events_;this.events_=this.events_.traceEvents;for(const subtraceField of SUBTRACE_FIELDS){if(container[subtraceField]){this.storeSubtrace_(container[subtraceField]);}}
this.storeSamples_(container.samples);this.storeStackFrames_(container.stackFrames);this.storeDisplayTimeUnit_(container.displayTimeUnit);this.storeTraceAnnotations_(container.traceAnnotations);this.storeMetadata_(container);}else if(this.events_ instanceof tr.b.TraceStream){const parser=oboe().node('{cat ph}',function(e){return oboe.drop;}).node('!.powerTraceAsString',this.storeSubtrace_.bind(this)).node('!.systemTraceEvents',this.storeSubtrace_.bind(this)).node('!.samples',this.storeSamples_.bind(this)).node('!.stackFrames',this.storeStackFrames_.bind(this)).node('!.displayTimeUnit',this.storeDisplayTimeUnit_.bind(this)).node('!.traceAnnotations',this.storeTraceAnnotations_.bind(this)).done(this.storeMetadata_.bind(this));this.events_.rewind();while(this.events_.hasData){parser.write(this.events_.readNumBytes());}
@@ -5540,9 +5852,9 @@ const ctr=this.model_.getOrCreateProcess(event.pid).getOrCreateCounter(event.cat
if(ctr.numSeries===0){this.model_.importWarning({type:'counter_parse_error',message:'Expected counter '+event.name+' to have at least one argument to use as a value.'});delete ctr.parent.counters[ctr.name];return;}}
const ts=this.toModelTimeFromUs_(event.ts);ctr.series.forEach(function(series){const val=event.args[series.name]?event.args[series.name]:0;series.addCounterSample(ts,val);});},processObjectEvent(event){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);this.allObjectEvents_.push({sequenceNumber:this.allObjectEvents_.length,event,thread});if(thread.guid in this.contextProcessorPerThread){const processor=this.contextProcessorPerThread[thread.guid];const scopedId=TraceEventImporter.scopedIdForEvent_(event);if(event.ph==='D'){processor.destroyContext(scopedId);}
processor.invalidateContextCacheForSnapshot(scopedId);}},processContextEvent(event){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);if(!(thread.guid in this.contextProcessorPerThread)){this.contextProcessorPerThread[thread.guid]=new tr.importer.ContextProcessor(this.model_);}
-const scopedId=TraceEventImporter.scopedIdForEvent_(event);const contextType=event.name;const processor=this.contextProcessorPerThread[thread.guid];if(event.ph==='('){processor.enterContext(contextType,scopedId);}else if(event.ph===')'){processor.leaveContext(contextType,scopedId);}else{this.model_.importWarning({type:'unknown_context_phase',message:'Unknown context event phase: '+event.ph+'.'});}},setContextsFromThread_(thread,slice){if(thread.guid in this.contextProcessorPerThread){slice.contexts=this.contextProcessorPerThread[thread.guid].activeContexts;}},processDurationEvent(event){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);const ts=this.toModelTimeFromUs_(event.ts);if(!thread.sliceGroup.isTimestampValidForBeginOrEnd(ts)){this.model_.importWarning({type:'duration_parse_error',message:'Timestamps are moving backward.'});return;}
-if(event.ph==='B'){const slice=thread.sliceGroup.beginSlice(event.cat,event.name,this.toModelTimeFromUs_(event.ts),this.deepCopyIfNeeded_(event.args),this.toModelTimeFromUs_(event.tts),event.argsStripped,getEventColor(event));slice.startStackFrame=this.getStackFrameForEvent_(event);this.setContextsFromThread_(thread,slice);}else if(event.ph==='I'||event.ph==='i'||event.ph==='R'){if(event.s!==undefined&&event.s!=='t'){throw new Error('This should never happen');}
-thread.sliceGroup.beginSlice(event.cat,event.name,this.toModelTimeFromUs_(event.ts),this.deepCopyIfNeeded_(event.args),this.toModelTimeFromUs_(event.tts),event.argsStripped,getEventColor(event));const slice=thread.sliceGroup.endSlice(this.toModelTimeFromUs_(event.ts),this.toModelTimeFromUs_(event.tts));slice.startStackFrame=this.getStackFrameForEvent_(event);slice.endStackFrame=undefined;}else{if(!thread.sliceGroup.openSliceCount){this.model_.importWarning({type:'duration_parse_error',message:'E phase event without a matching B phase event.'});return;}
+const scopedId=TraceEventImporter.scopedIdForEvent_(event);const contextType=event.name;const processor=this.contextProcessorPerThread[thread.guid];if(event.ph==='('){processor.enterContext(contextType,scopedId);}else if(event.ph===')'){processor.leaveContext(contextType,scopedId);}else{this.model_.importWarning({type:'unknown_context_phase',message:'Unknown context event phase: '+event.ph+'.'});}},setContextsFromThread_(thread,slice){if(thread.guid in this.contextProcessorPerThread){slice.contexts=this.contextProcessorPerThread[thread.guid].activeContexts;}},processDurationEvent(event){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);const ts=this.toModelTimeFromUs_(event.ts);if(event.dur===0&&!thread.sliceGroup.isTimestampValidForBeginOrEnd(ts)){this.model_.importWarning({type:'duration_parse_error',message:'Timestamps are moving backward.'});return;}
+if(event.ph==='B'){const slice=thread.sliceGroup.beginSlice(event.cat,event.name,this.toModelTimeFromUs_(event.ts),this.deepCopyIfNeeded_(event.args),this.toModelTimeFromUs_(event.tts),event.argsStripped,getEventColor(event),event.bind_id);slice.startStackFrame=this.getStackFrameForEvent_(event);this.setContextsFromThread_(thread,slice);}else if(event.ph==='I'||event.ph==='i'||event.ph==='R'){if(event.s!==undefined&&event.s!=='t'){throw new Error('This should never happen');}
+thread.sliceGroup.beginSlice(event.cat,event.name,this.toModelTimeFromUs_(event.ts),this.deepCopyIfNeeded_(event.args),this.toModelTimeFromUs_(event.tts),event.argsStripped,getEventColor(event),event.bind_id);const slice=thread.sliceGroup.endSlice(this.toModelTimeFromUs_(event.ts),this.toModelTimeFromUs_(event.tts));slice.startStackFrame=this.getStackFrameForEvent_(event);slice.endStackFrame=undefined;}else{if(!thread.sliceGroup.openSliceCount){this.model_.importWarning({type:'duration_parse_error',message:'E phase event without a matching B phase event.'});return;}
const slice=thread.sliceGroup.endSlice(this.toModelTimeFromUs_(event.ts),this.toModelTimeFromUs_(event.tts),getEventColor(event));if(event.name&&slice.title!==event.name){this.model_.importWarning({type:'title_match_error',message:'Titles do not match. Title is '+
slice.title+' in openSlice, and is '+
event.name+' in endSlice'});}
@@ -5555,9 +5867,8 @@ if(event.argsStripped)return;if(event.name==='process_name'){const process=this.
this.softwareMeasuredCpuCount_=n;}else if(event.name==='stackFrames'){const stackFrames=event.args.stackFrames;if(stackFrames===undefined){this.model_.importWarning({type:'metadata_parse_error',message:'No stack frames found in a \''+event.name+'\' metadata event'});}else{this.importStackFrames_(stackFrames,'p'+event.pid+':');}}else if(event.name==='typeNames'){const objectTypeNameMap=event.args.typeNames;if(objectTypeNameMap===undefined){this.model_.importWarning({type:'metadata_parse_error',message:'No mapping from object type IDs to names found in a \''+
event.name+'\' metadata event'});}else{this.importObjectTypeNameMap_(objectTypeNameMap,event.pid);}}else if(event.name==='TraceConfig'){this.model_.metadata.push({name:'TraceConfig',value:event.args.value});}else{this.model_.importWarning({type:'metadata_parse_error',message:'Unrecognized metadata name: '+event.name});}},processInstantEvent(event){if(event.name==='JitCodeAdded'||event.name==='JitCodeMoved'){this.v8SamplingData_.push(event);return;}
if(event.s==='t'||event.s===undefined){this.processDurationEvent(event);return;}
-let constructor;switch(event.s){case'g':constructor=tr.model.GlobalInstantEvent;break;case'p':constructor=tr.model.ProcessInstantEvent;break;default:this.model_.importWarning({type:'instant_parse_error',message:'I phase event with unknown "s" field value.'});return;}
-const instantEvent=new constructor(event.cat,event.name,getEventColor(event),this.toModelTimeFromUs_(event.ts),this.deepCopyIfNeeded_(event.args));switch(instantEvent.type){case tr.model.InstantEventType.GLOBAL:this.model_.instantEvents.push(instantEvent);break;case tr.model.InstantEventType.PROCESS:{const process=this.model_.getOrCreateProcess(event.pid);process.instantEvents.push(instantEvent);break;}
-default:throw new Error('Unknown instant event type: '+event.s);}},getOrCreateProfileTree_(sampleType,id){if(!this.profileTrees_.has(sampleType)){this.profileTrees_.set(sampleType,new Map());}
+let constructor;let parent;switch(event.s){case'g':constructor=tr.model.GlobalInstantEvent;parent=this.model_;break;case'p':constructor=tr.model.ProcessInstantEvent;parent=this.model_.getOrCreateProcess(event.pid);break;default:this.model_.importWarning({type:'instant_parse_error',message:'I phase event with unknown "s" field value.'});return;}
+const instantEvent=new constructor(event.cat,event.name,getEventColor(event),this.toModelTimeFromUs_(event.ts),this.deepCopyIfNeeded_(event.args),parent);parent.instantEvents.push(instantEvent);},getOrCreateProfileTree_(sampleType,id){if(!this.profileTrees_.has(sampleType)){this.profileTrees_.set(sampleType,new Map());}
const profileTreeMap=this.profileTrees_.get(sampleType);if(profileTreeMap.has(id)){return profileTreeMap.get(id);}
const profileTree=new tr.model.ProfileTree();profileTreeMap.set(id,profileTree);const info=this.profileInfo_.get(id);if(info!==undefined){profileTree.startTime=info.startTime;profileTree.pid=info.pid;profileTree.tid=info.tid;}
return profileTree;},processSample(event){if(event.args===undefined||event.args.data===undefined){return;}
@@ -5623,7 +5934,8 @@ const leafNode=this.stackFrameTree_.getNode('g'+event.sf);const sample=new tr.mo
if(event.cat===undefined){this.model_.importWarning({type:'async_slice_parse_error',message:'Nestable async events (ph: b, e, or n) require a '+'cat parameter.'});continue;}
if(event.name===undefined){this.model_.importWarning({type:'async_slice_parse_error',message:'Nestable async events (ph: b, e, or n) require a '+'name parameter.'});continue;}
const id=TraceEventImporter.scopedIdForEvent_(event);if(id===undefined){this.model_.importWarning({type:'async_slice_parse_error',message:'Nestable async events (ph: b, e, or n) require an '+'id parameter.'});continue;}
-if(event.cat==='blink.user_timing'){const matched=/([^\/:]+):([^\/:]+)\/?(.*)/.exec(event.name);if(matched!==null){const key=matched[1]+':'+event.cat;event.args=JSON.parse(Base64.atob(matched[3])||'{}');if(nestableMeasureAsyncEventsByKey[key]===undefined){nestableMeasureAsyncEventsByKey[key]=[];}
+if(event.cat==='blink.user_timing'){const matched=MEASURE_NAME_REGEX.exec(event.name);if(matched!==null){const key=matched[1]+':'+event.cat;try{event.args=JSON.parse(Base64.atob(matched[3])||'{}');}catch(e){}
+if(nestableMeasureAsyncEventsByKey[key]===undefined){nestableMeasureAsyncEventsByKey[key]=[];}
nestableMeasureAsyncEventsByKey[key].push(asyncEventState);continue;}}
const key=event.cat+':'+id.toStringWithDelimiter(':');if(nestableAsyncEventsByKey[key]===undefined){nestableAsyncEventsByKey[key]=[];}
nestableAsyncEventsByKey[key].push(asyncEventState);}
@@ -5684,13 +5996,13 @@ flowStatus[event.bind_id]=true;}else{if(!processFlowConsumer(flowIdToEvent,slice
flowStatus[event.bind_id]=false;if(event.flowPhase===STEP){if(!processFlowProducer(flowIdToEvent,flowStatus,event,slice)){continue;}
flowStatus[event.bind_id]=true;}}
continue;}
-let flowEvent;if(event.ph==='s'){if(flowIdToEvent[event.id]){this.model_.importWarning({type:'flow_slice_start_error',message:'event id '+event.id+' already seen when '+'encountering start of flow event.'});continue;}
+const fullFlowId=JSON.stringify({id:event.id,cat:event.cat,name:event.name});let flowEvent;if(event.ph==='s'){if(flowIdToEvent[fullFlowId]){this.model_.importWarning({type:'flow_slice_start_error',message:'event id '+event.id+' already seen when '+'encountering start of flow event.'});continue;}
flowEvent=createFlowEvent(thread,event);if(!flowEvent){this.model_.importWarning({type:'flow_slice_start_error',message:'event id '+event.id+' does not start '+'at an actual slice, so cannot be created.'});continue;}
-flowIdToEvent[event.id]=flowEvent;}else if(event.ph==='t'||event.ph==='f'){flowEvent=flowIdToEvent[event.id];if(flowEvent===undefined){this.model_.importWarning({type:'flow_slice_ordering_error',message:'Found flow phase '+event.ph+' for id: '+event.id+' but no flow start found.'});continue;}
+flowIdToEvent[fullFlowId]=flowEvent;}else if(event.ph==='t'||event.ph==='f'){flowEvent=flowIdToEvent[fullFlowId];if(flowEvent===undefined){this.model_.importWarning({type:'flow_slice_ordering_error',message:'Found flow phase '+event.ph+' for id: '+event.id+' but no flow start found.'});continue;}
let bindToParent=event.ph==='t';if(event.ph==='f'){if(event.bp===undefined){if(event.cat.indexOf('input')>-1){bindToParent=true;}else if(event.cat.indexOf('ipc.flow')>-1){bindToParent=true;}}else{if(event.bp!=='e'){this.model_.importWarning({type:'flow_slice_bind_point_error',message:'Flow event with invalid binding point (event.bp).'});continue;}
bindToParent=true;}}
const ok=finishFlowEventWith(flowEvent,thread,event,refGuid,bindToParent);if(ok){this.model_.flowEvents.push(flowEvent);}else{this.model_.importWarning({type:'flow_slice_end_error',message:'event id '+event.id+' does not end '+'at an actual slice, so cannot be created.'});}
-flowIdToEvent[event.id]=undefined;if(ok&&event.ph==='t'){flowEvent=createFlowEvent(thread,event);flowIdToEvent[event.id]=flowEvent;}}}},createExplicitObjects_(){if(this.allObjectEvents_.length===0)return;const processEvent=function(objectEventState){const event=objectEventState.event;const scopedId=TraceEventImporter.scopedIdForEvent_(event);const thread=objectEventState.thread;if(event.name===undefined){this.model_.importWarning({type:'object_parse_error',message:'While processing '+JSON.stringify(event)+': '+'Object events require an name parameter.'});}
+flowIdToEvent[fullFlowId]=undefined;if(ok&&event.ph==='t'){flowEvent=createFlowEvent(thread,event);flowIdToEvent[fullFlowId]=flowEvent;}}}},createExplicitObjects_(){if(this.allObjectEvents_.length===0)return;const processEvent=function(objectEventState){const event=objectEventState.event;const scopedId=TraceEventImporter.scopedIdForEvent_(event);const thread=objectEventState.thread;if(event.name===undefined){this.model_.importWarning({type:'object_parse_error',message:'While processing '+JSON.stringify(event)+': '+'Object events require an name parameter.'});}
if(scopedId===undefined||scopedId.id===undefined){this.model_.importWarning({type:'object_parse_error',message:'While processing '+JSON.stringify(event)+': '+'Object events require an id parameter.'});}
const process=thread.parent;const ts=this.toModelTimeFromUs_(event.ts);let instance;if(event.ph==='N'){try{instance=process.objects.idWasCreated(scopedId,event.cat,event.name,ts);}catch(e){this.model_.importWarning({type:'object_parse_error',message:'While processing create of '+
scopedId+' at ts='+ts+': '+e});return;}}else if(event.ph==='O'){if(event.args.snapshot===undefined){this.model_.importWarning({type:'object_parse_error',message:'While processing '+scopedId+' at ts='+ts+': '+'Snapshots must have args: {snapshot: ...}'});return;}
@@ -5781,9 +6093,7 @@ const importance=rawEdge.importance;const edge=new tr.model.MemoryAllocatorDumpL
sourceDump.owns.target.fullName+').'});}else{sourceDump.owns=edge;targetDump.ownedBy.push(edge);}
break;case'retention':sourceDump.retains.push(edge);targetDump.retainedBy.push(edge);break;default:this.model_.importWarning({type:'memory_dump_parse_error',message:'Invalid edge type: '+rawEdge.type+' (PID='+pid+', dump ID='+dumpId+', source='+sourceGuid+', target='+targetGuid+', importance='+importance+').'});}}}}},toModelTimeFromUs_(ts){if(!this.toModelTime_){this.toModelTime_=this.model_.clockSyncManager.getModelTimeTransformer(this.clockDomainId_);}
return this.toModelTime_(tr.b.Unit.timestampFromUs(ts));},maybeToModelTimeFromUs_(ts){if(ts===undefined){return undefined;}
-return this.toModelTimeFromUs_(ts);}};tr.importer.Importer.register(TraceEventImporter);return{TraceEventImporter,};});'use strict';tr.exportTo('tr.e.measure',function(){const AsyncSlice=tr.model.AsyncSlice;function MeasureAsyncSlice(){this.groupTitle_='Ungrouped Measure';const matched=/([^\/:]+):([^\/:]+)\/?(.*)/.exec(arguments[1]);if(matched!==null){arguments[1]=matched[2];this.groupTitle_=matched[1];}
-AsyncSlice.apply(this,arguments);}
-MeasureAsyncSlice.prototype={__proto__:AsyncSlice.prototype,get viewSubGroupTitle(){return this.groupTitle_;},get title(){return this.title_;},set title(title){this.title_=title;}};AsyncSlice.subTypes.register(MeasureAsyncSlice,{categoryParts:['blink.user_timing']});return{MeasureAsyncSlice,};});'use strict';tr.exportTo('tr.e.net',function(){const AsyncSlice=tr.model.AsyncSlice;function NetAsyncSlice(){AsyncSlice.apply(this,arguments);this.url_=undefined;this.byteCount_=undefined;this.isTitleComputed_=false;this.isUrlComputed_=false;}
+return this.toModelTimeFromUs_(ts);}};tr.importer.Importer.register(TraceEventImporter);return{TraceEventImporter,};});'use strict';tr.exportTo('tr.e.net',function(){const AsyncSlice=tr.model.AsyncSlice;function NetAsyncSlice(){AsyncSlice.apply(this,arguments);this.url_=undefined;this.byteCount_=undefined;this.isTitleComputed_=false;this.isUrlComputed_=false;}
NetAsyncSlice.prototype={__proto__:AsyncSlice.prototype,get viewSubGroupTitle(){return'NetLog';},get title(){if(this.isTitleComputed_||!this.isTopLevel){return this.title_;}
if(this.url!==undefined&&this.url.length>0){this.title_=this.url;}else if(this.args!==undefined&&this.args.source_type!==undefined){this.title_=this.args.source_type;}
this.isTitleComputed_=true;return this.title_;},set title(title){this.title_=title;},get url(){if(this.isUrlComputed_){return this.url_;}
@@ -5812,7 +6122,7 @@ ctr.series.forEach(function(series){series.addCounterSample(ts,value);});break;}
case'S':{const ppid=parseInt(eventData[1]);const name=eventData[2];const cookie=parseInt(eventData[3]);const args=parseArgs(eventData[4]);let category=eventData[5];if(category===undefined)category='android';const thread=this.model_.getOrCreateProcess(ppid).getOrCreateThread(pid);thread.name=eventBase.threadName;this.ppids_[pid]=ppid;this.openAsyncSlice(thread,category,name,cookie,ts,args);break;}
case'F':{const ppid=parseInt(eventData[1]);const name=eventData[2];const cookie=parseInt(eventData[3]);const args=parseArgs(eventData[4]);let category=eventData[5];if(category===undefined)category='android';const thread=this.model_.getOrCreateProcess(ppid).getOrCreateThread(pid);thread.name=eventBase.threadName;this.ppids_[pid]=ppid;this.closeAsyncSlice(thread,category,name,cookie,ts,args);break;}
default:return false;}
-return true;}};Parser.register(AndroidParser);return{AndroidParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;const binderTransRE=new RegExp('transaction=(\\d+) dest_node=(\\d+) '+'dest_proc=(\\d+) dest_thread=(\\d+) '+'reply=(\\d+) flags=(0x[0-9a-fA-F]+) '+'code=(0x[0-9a-fA-F]+)');const binderTransReceivedRE=/transaction=(\d+)/;function isBinderThread(name){return(name.indexOf('Binder')>-1);}
+return true;}};Parser.register(AndroidParser);return{AndroidParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;const binderTransRE=new RegExp('transaction=(\\d+) dest_node=(\\d+) '+'dest_proc=(\\d+) dest_thread=(\\d+) '+'reply=(\\d+) flags=(0x[0-9a-fA-F]+) '+'code=(0x[0-9a-fA-F]+)');const binderAllocRE=new RegExp('transaction=(\\d+) data_size=(\\d+) '+'offsets_size=(\\d+)');const binderTransReceivedRE=/transaction=(\d+)/;function isBinderThread(name){return(name.indexOf('Binder')>-1);}
const TF_ONE_WAY=0x01;const TF_ROOT_OBJECT=0x04;const TF_STATUS_CODE=0x08;const TF_ACCEPT_FDS=0x10;const NO_FLAGS=0;function binderFlagsToHuman(num){const flag=parseInt(num,16);let str='';if(flag&TF_ONE_WAY){str+='this is a one-way call: async, no return; ';}
if(flag&TF_ROOT_OBJECT){str+='contents are the components root object; ';}
if(flag&TF_STATUS_CODE){str+='contents are a 32-bit status code; ';}
@@ -5827,7 +6137,7 @@ function generateBinderArgsForSlice(trans,cThreadName){return{'Transaction Id':t
binderFlagsToHuman(trans.flags),'Code':trans.code+' '+
binderCodeToHuman(trans.code),'Calling PID':trans.calling_pid,'Calling tgid':trans.calling_kthread.thread.parent.pid};}
function BinderTransaction(events,callingPid,callingTs,callingKthread){this.transaction_key=parseInt(events[1]);this.dest_node=parseInt(events[2]);this.dest_proc=parseInt(events[3]);this.dest_thread=parseInt(events[4]);this.is_reply_transaction=parseInt(events[5])===1?true:false;this.expect_reply=((this.is_reply_transaction===false)&&(parseInt(events[6],16)&TF_ONE_WAY)===0);this.flags=events[6];this.code=events[7];this.calling_pid=callingPid;this.calling_ts=callingTs;this.calling_kthread=callingKthread;}
-function BinderParser(importer){Parser.call(this,importer);importer.registerEventHandler('binder_locked',BinderParser.prototype.binderLocked.bind(this));importer.registerEventHandler('binder_unlock',BinderParser.prototype.binderUnlock.bind(this));importer.registerEventHandler('binder_lock',BinderParser.prototype.binderLock.bind(this));importer.registerEventHandler('binder_transaction',BinderParser.prototype.binderTransaction.bind(this));importer.registerEventHandler('binder_transaction_received',BinderParser.prototype.binderTransactionReceived.bind(this));this.model_=importer.model;this.kthreadlookup={};this.importer_=importer;this.transWaitingRecv={};this.syncTransWaitingCompletion={};this.recursiveSyncTransWaitingCompletion_ByPID={};this.receivedTransWaitingConversion={};}
+function BinderParser(importer){Parser.call(this,importer);importer.registerEventHandler('binder_locked',BinderParser.prototype.binderLocked.bind(this));importer.registerEventHandler('binder_unlock',BinderParser.prototype.binderUnlock.bind(this));importer.registerEventHandler('binder_lock',BinderParser.prototype.binderLock.bind(this));importer.registerEventHandler('binder_transaction',BinderParser.prototype.binderTransaction.bind(this));importer.registerEventHandler('binder_transaction_received',BinderParser.prototype.binderTransactionReceived.bind(this));importer.registerEventHandler('binder_transaction_alloc_buf',BinderParser.prototype.binderTransactionAllocBuf.bind(this));this.model_=importer.model;this.kthreadlookup={};this.importer_=importer;this.transWaitingRecv={};this.syncTransWaitingCompletion={};this.recursiveSyncTransWaitingCompletion_ByPID={};this.receivedTransWaitingConversion={};}
BinderParser.prototype={__proto__:Parser.prototype,binderLock(eventName,cpuNumber,pid,ts,eventBase){const tgid=parseInt(eventBase.tgid);if(isNaN(tgid))return false;this.doNameMappings(pid,tgid,eventName.threadName);const kthread=this.importer_.getOrCreateBinderKernelThread(eventBase.threadName,tgid,pid);kthread.binderAttemptLockTS=ts;kthread.binderOpenTsA=ts;return true;},binderLocked(eventName,cpuNumber,pid,ts,eventBase){const tgid=parseInt(eventBase.tgid);if(isNaN(tgid))return false;const binderThread=isBinderThread(eventBase.threadName);const name=eventBase.threadName;const kthread=this.importer_.getOrCreateBinderKernelThread(eventBase.threadName,tgid,pid);this.doNameMappings(pid,tgid,name);const rthread=kthread.thread;kthread.binderLockAquiredTS=ts;if(kthread.binderAttemptLockTS===undefined)return false;const args=this.generateArgsForSlice(tgid,pid,name,kthread);rthread.sliceGroup.pushCompleteSlice('binder','binder lock waiting',kthread.binderAttemptLockTS,ts-kthread.binderAttemptLockTS,0,0,args);kthread.binderAttemptLockTS=undefined;return true;},binderUnlock(eventName,cpuNumber,pid,ts,eventBase){const tgid=parseInt(eventBase.tgid);if(isNaN(tgid))return false;const kthread=this.importer_.getOrCreateBinderKernelThread(eventBase.threadName,tgid,pid);if(kthread.binderLockAquiredTS===undefined)return false;const args=this.generateArgsForSlice(tgid,pid,eventBase.threadName,kthread);kthread.thread.sliceGroup.pushCompleteSlice('binder','binder lock held',kthread.binderLockAquiredTS,ts-kthread.binderLockAquiredTS,0,0,args);kthread.binderLockAquiredTS=undefined;return true;},binderTransaction(eventName,cpuNumber,pid,ts,eventBase){const event=binderTransRE.exec(eventBase.details);if(event===undefined)return false;const tgid=parseInt(eventBase.tgid);if(isNaN(tgid))return false;this.doNameMappings(pid,tgid,eventBase.threadName);const kthread=this.importer_.getOrCreateBinderKernelThread(eventBase.threadName,tgid,pid);const trans=new BinderTransaction(event,pid,ts,kthread);const args=generateBinderArgsForSlice(trans,eventBase.threadName);const priorReceive=this.getPriorReceiveOnPID(pid);if(priorReceive!==false){return this.modelPriorReceive(priorReceive,ts,pid,tgid,kthread,trans,args,event);}
const recursiveTrans=this.getRecursiveTransactionNeedingCompletion(pid);if(recursiveTrans!==false){return this.modelRecursiveTransactions(recursiveTrans,ts,pid,kthread,trans,args);}
const slice=kthread.thread.sliceGroup.pushCompleteSlice('binder','',ts,.03,0,0,args);slice.colorId=ColorScheme.getColorIdForGeneralPurposeString(ts.toString());trans.slice=slice;if(trans.expect_reply){slice.title='binder transaction';}else{slice.title='binder transaction async';}
@@ -5836,15 +6146,16 @@ for(let i=1;i<syncSlice.inFlowEvents.length;i++){syncSlice.inFlowEvents[i].durat
return true;}
const trForRecv=this.getTransactionWaitingForRecv(transactionkey);if(trForRecv!==false){if(!trForRecv.expect_reply){const args=generateBinderArgsForSlice(trForRecv,eventBase.threadName);const slice=kthread.thread.sliceGroup.pushCompleteSlice('binder','binder Async recv',ts,.03,0,0,args);const fakeEvent=[0,0,0,0,0,0,0];const fakeTrans=new BinderTransaction(fakeEvent,pid,ts,kthread);const flow=this.generateFlow(trForRecv.slice,slice,trForRecv,fakeTrans);this.model_.flowEvents.push(flow);trForRecv.slice.title='binder transaction async';trForRecv.slice.duration=.03;return true;}
trForRecv.slice.title='binder transaction';this.setCurrentReceiveOnPID(pid,[ts,trForRecv]);return true;}
-return false;},modelRecursiveTransactions(recursiveTrans,ts,pid,kthread,trans,args){const recursiveSlice=recursiveTrans[1].slice;const origSlice=recursiveTrans[0].slice;recursiveSlice.duration=ts-recursiveSlice.start;trans.slice=recursiveSlice;if(trans.is_reply_transaction){origSlice.duration=ts-origSlice.start;this.addSyncTransNeedingCompletion(trans.transaction_key,recursiveTrans);if(isReplyToOrigin(recursiveTrans[0],trans)){this.removeRecursiveTransaction(pid);}}else{const slice=kthread.thread.sliceGroup.pushCompleteSlice('binder','',ts,.03,0,0,args);trans.slice=slice;this.addTransactionWaitingForRecv(trans.transaction_key,trans);}
-return true;},modelPriorReceive(priorReceive,ts,pid,tgid,kthread,trans,args,event){const calleeSlice=priorReceive[1].slice;const calleeTrans=priorReceive[1];const recvTs=priorReceive[0];let slice=kthread.thread.sliceGroup.pushCompleteSlice('binder','',recvTs,ts-recvTs,0,0,args);const flow=this.generateFlow(calleeSlice,slice,calleeTrans,trans);this.model_.flowEvents.push(flow);trans.slice=slice;if(trans.is_reply_transaction){slice.title='binder reply';this.addSyncTransNeedingCompletion(trans.transaction_key,[calleeTrans,trans]);}else{slice.title='binder reply';const trans1=new BinderTransaction(event,pid,ts,kthread);slice=kthread.thread.sliceGroup.pushCompleteSlice('binder','binder transaction',recvTs,(ts-recvTs),0,0,args);if(!trans.expect_reply){slice.title='binder transaction async';slice.duration=.03;}else{}
+return false;},binderTransactionAllocBuf(eventName,cpuNumber,pid,ts,eventBase){const event=binderAllocRE.exec(eventBase.details);if(event===null)return false;const tgid=parseInt(eventBase.tgid);if(isNaN(tgid))return false;const transactionkey=parseInt(event[1]);const kthread=this.importer_.getOrCreateBinderKernelThread(eventBase.threadName,tgid,pid);const trans=this.peekTransactionWaitingForRecv(transactionkey);if(trans&&trans.slice){trans.slice.args['Data Size']=parseInt(event[2]);trans.slice.args['Offsets Size']=parseInt(event[3]);return true;}
+return false;},modelRecursiveTransactions(recursiveTrans,ts,pid,kthread,trans,args){const recursiveSlice=recursiveTrans[1].slice;const origSlice=recursiveTrans[0].slice;recursiveSlice.duration=ts-recursiveSlice.start;recursiveSlice.args=args;trans.slice=recursiveSlice;if(trans.is_reply_transaction){origSlice.duration=ts-origSlice.start;this.addSyncTransNeedingCompletion(trans.transaction_key,recursiveTrans);if(isReplyToOrigin(recursiveTrans[0],trans)){this.removeRecursiveTransaction(pid);}}else{const slice=kthread.thread.sliceGroup.pushCompleteSlice('binder','',ts,.03,0,0,args);trans.slice=slice;this.addTransactionWaitingForRecv(trans.transaction_key,trans);}
+return true;},modelPriorReceive(priorReceive,ts,pid,tgid,kthread,trans,args,event){const calleeSlice=priorReceive[1].slice;const calleeTrans=priorReceive[1];const recvTs=priorReceive[0];let slice=kthread.thread.sliceGroup.pushCompleteSlice('binder','',recvTs,ts-recvTs,0,0);const flow=this.generateFlow(calleeSlice,slice,calleeTrans,trans);this.model_.flowEvents.push(flow);trans.slice=slice;if(trans.is_reply_transaction){slice.title='binder reply';slice.args=args;this.addSyncTransNeedingCompletion(trans.transaction_key,[calleeTrans,trans]);}else{slice.title='binder reply';const trans1=new BinderTransaction(event,pid,ts,kthread);slice=kthread.thread.sliceGroup.pushCompleteSlice('binder','binder transaction',recvTs,(ts-recvTs),0,0,args);if(!trans.expect_reply){slice.title='binder transaction async';slice.duration=.03;}else{}
trans1.slice=slice;this.addRecursiveSyncTransNeedingCompletion(pid,[calleeTrans,trans]);this.addTransactionWaitingForRecv(trans.transaction_key,trans1);}
return true;},getRecursiveTransactionNeedingCompletion(pid){if(this.recursiveSyncTransWaitingCompletion_ByPID[pid]===undefined){return false;}
const len=this.recursiveSyncTransWaitingCompletion_ByPID[pid].length;if(len===0)return false;return this.recursiveSyncTransWaitingCompletion_ByPID[pid][len-1];},addRecursiveSyncTransNeedingCompletion(pid,tuple){if(this.recursiveSyncTransWaitingCompletion_ByPID[pid]===undefined){this.recursiveSyncTransWaitingCompletion_ByPID[pid]=[];}
this.recursiveSyncTransWaitingCompletion_ByPID[pid].push(tuple);},removeRecursiveTransaction(pid){const len=this.recursiveSyncTransWaitingCompletion_ByPID[pid].length;if(len===0){delete this.recursiveSyncTransWaitingCompletion_ByPID[pid];return;}
this.recursiveSyncTransWaitingCompletion_ByPID[pid].splice(len-1,1);},setCurrentReceiveOnPID(pid,tuple){if(this.receivedTransWaitingConversion[pid]===undefined){this.receivedTransWaitingConversion[pid]=[];}
this.receivedTransWaitingConversion[pid].push(tuple);},getPriorReceiveOnPID(pid){if(this.receivedTransWaitingConversion[pid]===undefined){return false;}
-const len=this.receivedTransWaitingConversion[pid].length;if(len===0)return false;return this.receivedTransWaitingConversion[pid].splice(len-1,1)[0];},addSyncTransNeedingCompletion(transactionkey,tuple){const dict=this.syncTransWaitingCompletion;dict[transactionkey]=tuple;},getSyncTransNeedsCompletion(transactionkey){const ret=this.syncTransWaitingCompletion[transactionkey];if(ret===undefined)return false;delete this.syncTransWaitingCompletion[transactionkey];return ret;},getTransactionWaitingForRecv(transactionkey){const ret=this.transWaitingRecv[transactionkey];if(ret===undefined)return false;delete this.transWaitingRecv[transactionkey];return ret;},addTransactionWaitingForRecv(transactionkey,transaction){this.transWaitingRecv[transactionkey]=transaction;},generateFlow(from,to,fromTrans,toTrans){const title='Transaction from : '+
+const len=this.receivedTransWaitingConversion[pid].length;if(len===0)return false;return this.receivedTransWaitingConversion[pid].splice(len-1,1)[0];},addSyncTransNeedingCompletion(transactionkey,tuple){const dict=this.syncTransWaitingCompletion;dict[transactionkey]=tuple;},getSyncTransNeedsCompletion(transactionkey){const ret=this.syncTransWaitingCompletion[transactionkey];if(ret===undefined)return false;delete this.syncTransWaitingCompletion[transactionkey];return ret;},getTransactionWaitingForRecv(transactionkey){const ret=this.transWaitingRecv[transactionkey];if(ret===undefined)return false;delete this.transWaitingRecv[transactionkey];return ret;},peekTransactionWaitingForRecv(transactionkey){const ret=this.transWaitingRecv[transactionkey];if(ret===undefined)return false;return ret;},addTransactionWaitingForRecv(transactionkey,transaction){this.transWaitingRecv[transactionkey]=transaction;},generateFlow(from,to,fromTrans,toTrans){const title='Transaction from : '+
this.pid2name(fromTrans.calling_pid)+' From PID: '+fromTrans.calling_pid+' to pid: '+
toTrans.calling_pid+' Thread Name: '+this.pid2name(toTrans.calling_pid);const ts=from.start;const flow=new tr.model.FlowEvent('binder','binder',title,1,ts,[]);flow.startSlice=from;flow.endSlice=to;flow.start=from.start;flow.duration=to.start-ts;from.outFlowEvents.push(flow);to.inFlowEvents.push(flow);return flow;},generateArgsForSlice(tgid,pid,name,kthread){return{'Thread Name':name,pid,'gid':tgid};},pid2name(pid){return this.kthreadlookup[pid];},doNameMappings(pid,tgid,name){this.registerPidName(pid,name);this.registerPidName(tgid,name);},registerPidName(pid,name){if(this.pid2name(pid)===undefined){this.kthreadlookup[pid]=name;}}};Parser.register(BinderParser);return{BinderParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function BusParser(importer){Parser.call(this,importer);importer.registerEventHandler('memory_bus_usage',BusParser.prototype.traceMarkWriteBusEvent.bind(this));this.model_=importer.model_;this.ppids_={};}
BusParser.prototype={__proto__:Parser.prototype,traceMarkWriteBusEvent(eventName,cpuNumber,pid,ts,eventBase,threadName){const re=new RegExp('bus=(\\S+) rw_bytes=(\\d+) r_bytes=(\\d+) '+'w_bytes=(\\d+) cycles=(\\d+) ns=(\\d+)');const event=re.exec(eventBase.details);const name=event[1];const rwBytes=parseInt(event[2]);const rBytes=parseInt(event[3]);const wBytes=parseInt(event[4]);const cycles=parseInt(event[5]);const ns=parseInt(event[6]);const sec=tr.b.convertUnit(ns,tr.b.UnitPrefixScale.METRIC.NANO,tr.b.UnitPrefixScale.METRIC.NONE);const readBandwidthInBps=rBytes/sec;const readBandwidthInMiBps=tr.b.convertUnit(readBandwidthInBps,tr.b.UnitPrefixScale.BINARY.NONE,tr.b.UnitPrefixScale.BINARY.MEBI);const writeBandwidthInBps=wBytes/sec;const writeBandwidthInMiBps=tr.b.convertUnit(writeBandwidthInBps,tr.b.UnitPrefixScale.BINARY.NONE,tr.b.UnitPrefixScale.BINARY.MEBI);let ctr=this.model_.kernel.getOrCreateCounter(null,'bus '+name+' read');if(ctr.numSeries===0){ctr.addSeries(new tr.model.CounterSeries('value',ColorScheme.getColorIdForGeneralPurposeString(ctr.name+'.'+'value')));}
@@ -5862,7 +6173,20 @@ if(event[4]==='F'){action+=' fua';}
if(event[5]==='A'){action+=' ahead';}
if(event[6]==='S'){action+=' sync';}
if(event[7]==='M'){action+=' meta';}
-const device=event[1];const sector=parseInt(event[8]);const numSectors=parseInt(event[9]);const key=device+'-'+sector+'-'+numSectors;this.openAsyncSlice(ts,'block',eventBase.threadName,eventBase.pid,key,action);return true;},blockRqCompleteEvent(eventName,cpuNumber,pid,ts,eventBase){const event=new RegExp('(\\d+,\\d+) (F)?([DWRN])(F)?(A)?(S)?(M)? '+'\\(.*\\) (\\d+) \\+ (\\d+) \\[(.*)\\]').exec(eventBase.details);if(!event)return false;const device=event[1];const sector=parseInt(event[8]);const numSectors=parseInt(event[9]);const error=parseInt(event[10]);const key=device+'-'+sector+'-'+numSectors;this.closeAsyncSlice(ts,'block',eventBase.threadName,eventBase.pid,key,{device,sector,numSectors,error});return true;}};Parser.register(DiskParser);return{DiskParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function DrmParser(importer){Parser.call(this,importer);importer.registerEventHandler('drm_vblank_event',DrmParser.prototype.vblankEvent.bind(this));}
+const device=event[1];const sector=parseInt(event[8]);const numSectors=parseInt(event[9]);const key=device+'-'+sector+'-'+numSectors;this.openAsyncSlice(ts,'block',eventBase.threadName,eventBase.pid,key,action);return true;},blockRqCompleteEvent(eventName,cpuNumber,pid,ts,eventBase){const event=new RegExp('(\\d+,\\d+) (F)?([DWRN])(F)?(A)?(S)?(M)? '+'\\(.*\\) (\\d+) \\+ (\\d+) \\[(.*)\\]').exec(eventBase.details);if(!event)return false;const device=event[1];const sector=parseInt(event[8]);const numSectors=parseInt(event[9]);const error=parseInt(event[10]);const key=device+'-'+sector+'-'+numSectors;this.closeAsyncSlice(ts,'block',eventBase.threadName,eventBase.pid,key,{device,sector,numSectors,error});return true;}};Parser.register(DiskParser);return{DiskParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function DmaFenceParser(importer){Parser.call(this,importer);this.model_=importer.model_;importer.registerEventHandler('dma_fence_init',DmaFenceParser.prototype.initEvent.bind(this));importer.registerEventHandler('dma_fence_emit',DmaFenceParser.prototype.initEvent.bind(this));importer.registerEventHandler('dma_fence_destroy',DmaFenceParser.prototype.fenceDestroyEvent.bind(this));importer.registerEventHandler('dma_fence_enable_signal',DmaFenceParser.prototype.fenceEnableSignalEvent.bind(this));importer.registerEventHandler('dma_fence_signaled',DmaFenceParser.prototype.fenceSignaledEvent.bind(this));importer.registerEventHandler('dma_fence_wait_start',DmaFenceParser.prototype.fenceWaitEvent.bind(this));importer.registerEventHandler('dma_fence_wait_end',DmaFenceParser.prototype.fenceWaitEvent.bind(this));importer.registerEventHandler('fence_init',DmaFenceParser.prototype.initEvent.bind(this));importer.registerEventHandler('fence_emit',DmaFenceParser.prototype.initEvent.bind(this));importer.registerEventHandler('fence_destroy',DmaFenceParser.prototype.fenceDestroyEvent.bind(this));importer.registerEventHandler('fence_enable_signal',DmaFenceParser.prototype.fenceEnableSignalEvent.bind(this));importer.registerEventHandler('fence_signaled',DmaFenceParser.prototype.fenceSignaledEvent.bind(this));importer.registerEventHandler('fence_wait_start',DmaFenceParser.prototype.fenceWaitEvent.bind(this));importer.registerEventHandler('fence_wait_end',DmaFenceParser.prototype.fenceWaitEvent.bind(this));this.model_=importer.model_;}
+const fenceRE=/driver=(\S+) timeline=(\S+) context=(\d+) seqno=(\d+)/;DmaFenceParser.prototype={__proto__:Parser.prototype,initEvent(eventName,cpuNumber,pid,ts,eventBase){const event=fenceRE.exec(eventBase.details);if(!event)return false;if(eventBase.tgid===undefined){return false;}
+const thread=this.importer.getOrCreatePseudoThread(event[2]);thread.lastActiveTs=ts;return true;},fenceDestroyEvent(eventName,cpuNumber,pid,ts,eventBase){const event=fenceRE.exec(eventBase.details);if(!event)return false;if(eventBase.tgid===undefined){return false;}
+const thread=this.importer.getOrCreatePseudoThread(event[2]);const name='fence_destroy('+event[4]+')';const colorName='fence('+event[4]+')';if(thread.lastActiveTs!==undefined){const duration=ts-thread.lastActiveTs;const slice=new tr.model.ThreadSlice('',name,ColorScheme.getColorIdForGeneralPurposeString(colorName),thread.lastActiveTs,{driver:event[1],context:event[3]},duration);thread.thread.sliceGroup.pushSlice(slice);}
+if(thread.thread.sliceGroup.openSliceCount>0){thread.thread.sliceGroup.endSlice(ts);}
+thread.lastActiveTs=ts;},fenceEnableSignalEvent(eventName,cpuNumber,pid,ts,eventBase){const event=fenceRE.exec(eventBase.details);if(!event)return false;if(eventBase.tgid===undefined){return false;}
+const thread=this.importer.getOrCreatePseudoThread(event[2]);const name='fence_enable('+event[4]+')';const colorName='fence('+event[4]+')';if(thread.lastActiveTs!==undefined){const duration=ts-thread.lastActiveTs;const slice=new tr.model.ThreadSlice('',name,ColorScheme.getColorIdForGeneralPurposeString(colorName),thread.lastActiveTs,{driver:event[1],context:event[3]},duration);thread.thread.sliceGroup.pushSlice(slice);}
+if(thread.thread.sliceGroup.openSliceCount>0){thread.thread.sliceGroup.endSlice(ts);}
+thread.lastActiveTs=ts;},fenceSignaledEvent(eventName,cpuNumber,pid,ts,eventBase){const event=fenceRE.exec(eventBase.details);if(!event)return false;if(eventBase.tgid===undefined){return false;}
+const thread=this.importer.getOrCreatePseudoThread(event[2]);const name='fence_signal('+event[4]+')';const colorName='fence('+event[4]+')';if(thread.lastActiveTs!==undefined){const duration=ts-thread.lastActiveTs;const slice=new tr.model.ThreadSlice('',name,ColorScheme.getColorIdForGeneralPurposeString(colorName),thread.lastActiveTs,{driver:event[1],context:event[3]},duration);thread.thread.sliceGroup.pushSlice(slice);}
+if(thread.thread.sliceGroup.openSliceCount>0){thread.thread.sliceGroup.endSlice(ts);}
+thread.lastActiveTs=ts;return true;},fenceWaitEvent(eventName,cpuNumber,pid,ts,eventBase){if(eventBase.tgid===undefined)return false;const event=fenceRE.exec(eventBase.details);if(!event)return false;const tgid=parseInt(eventBase.tgid);const thread=this.model_.getOrCreateProcess(tgid).getOrCreateThread(pid);thread.name=eventBase.threadName;const slices=thread.kernelSliceGroup;if(!slices.isTimestampValidForBeginOrEnd(ts)){this.model_.importWarning({type:'parse_error',message:'Timestamps are moving backward.'});return false;}
+const name='dma_fence_wait("'+event[2]+'")';if(eventName.endsWith('start')){const slice=slices.beginSlice(null,name,ts,{driver:event[1],context:event[3],seqno:event[4],});}else{if(slices.openSliceCount>0){slices.endSlice(ts);}}
+return true;},};Parser.register(DmaFenceParser);return{DmaFenceParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function DrmParser(importer){Parser.call(this,importer);importer.registerEventHandler('drm_vblank_event',DrmParser.prototype.vblankEvent.bind(this));}
DrmParser.prototype={__proto__:Parser.prototype,drmVblankSlice(ts,eventName,args){const kthread=this.importer.getOrCreatePseudoThread('drm_vblank');kthread.openSlice=eventName;const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),ts,args,0);kthread.thread.sliceGroup.pushSlice(slice);},vblankEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/crtc=(\d+), seq=(\d+)/.exec(eventBase.details);if(!event)return false;const crtc=parseInt(event[1]);const seq=parseInt(event[2]);this.drmVblankSlice(ts,'vblank:'+crtc,{crtc,seq});return true;}};Parser.register(DrmParser);return{DrmParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function ExynosParser(importer){Parser.call(this,importer);importer.registerEventHandler('exynos_busfreq_target_int',ExynosParser.prototype.busfreqTargetIntEvent.bind(this));importer.registerEventHandler('exynos_busfreq_target_mif',ExynosParser.prototype.busfreqTargetMifEvent.bind(this));importer.registerEventHandler('exynos_page_flip_state',ExynosParser.prototype.pageFlipStateEvent.bind(this));}
ExynosParser.prototype={__proto__:Parser.prototype,exynosBusfreqSample(name,ts,frequency){const targetCpu=this.importer.getOrCreateCpu(0);const counter=targetCpu.getOrCreateCounter('',name);if(counter.numSeries===0){counter.addSeries(new tr.model.CounterSeries('frequency',ColorScheme.getColorIdForGeneralPurposeString(counter.name+'.'+'frequency')));}
counter.series.forEach(function(series){series.addCounterSample(ts,frequency);});},busfreqTargetIntEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/frequency=(\d+)/.exec(eventBase.details);if(!event)return false;this.exynosBusfreqSample('INT Frequency',ts,parseInt(event[1]));return true;},busfreqTargetMifEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/frequency=(\d+)/.exec(eventBase.details);if(!event)return false;this.exynosBusfreqSample('MIF Frequency',ts,parseInt(event[1]));return true;},exynosPageFlipStateOpenSlice(ts,pipe,fb,state){const kthread=this.importer.getOrCreatePseudoThread('exynos_flip_state (pipe:'+pipe+', fb:'+fb+')');kthread.openSliceTS=ts;kthread.openSlice=state;},exynosPageFlipStateCloseSlice(ts,pipe,fb,args){const kthread=this.importer.getOrCreatePseudoThread('exynos_flip_state (pipe:'+pipe+', fb:'+fb+')');if(kthread.openSlice){const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),kthread.openSliceTS,args,ts-kthread.openSliceTS);kthread.thread.sliceGroup.pushSlice(slice);}
@@ -5879,7 +6203,10 @@ pushLastSliceIfNeeded(thread,event[1],ts);thread.lastEntryTitle=undefined;thread
Parser.register(I2cParser);return{I2cParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function I915Parser(importer){Parser.call(this,importer);importer.registerEventHandler('i915_gem_object_create',I915Parser.prototype.gemObjectCreateEvent.bind(this));importer.registerEventHandler('i915_gem_object_bind',I915Parser.prototype.gemObjectBindEvent.bind(this));importer.registerEventHandler('i915_gem_object_unbind',I915Parser.prototype.gemObjectBindEvent.bind(this));importer.registerEventHandler('i915_gem_object_change_domain',I915Parser.prototype.gemObjectChangeDomainEvent.bind(this));importer.registerEventHandler('i915_gem_object_pread',I915Parser.prototype.gemObjectPreadWriteEvent.bind(this));importer.registerEventHandler('i915_gem_object_pwrite',I915Parser.prototype.gemObjectPreadWriteEvent.bind(this));importer.registerEventHandler('i915_gem_object_fault',I915Parser.prototype.gemObjectFaultEvent.bind(this));importer.registerEventHandler('i915_gem_object_clflush',I915Parser.prototype.gemObjectDestroyEvent.bind(this));importer.registerEventHandler('i915_gem_object_destroy',I915Parser.prototype.gemObjectDestroyEvent.bind(this));importer.registerEventHandler('i915_gem_ring_dispatch',I915Parser.prototype.gemRingDispatchEvent.bind(this));importer.registerEventHandler('i915_gem_ring_flush',I915Parser.prototype.gemRingFlushEvent.bind(this));importer.registerEventHandler('i915_gem_request',I915Parser.prototype.gemRequestEvent.bind(this));importer.registerEventHandler('i915_gem_request_add',I915Parser.prototype.gemRequestEvent.bind(this));importer.registerEventHandler('i915_gem_request_complete',I915Parser.prototype.gemRequestEvent.bind(this));importer.registerEventHandler('i915_gem_request_retire',I915Parser.prototype.gemRequestEvent.bind(this));importer.registerEventHandler('i915_gem_request_wait_begin',I915Parser.prototype.gemRequestEvent.bind(this));importer.registerEventHandler('i915_gem_request_wait_end',I915Parser.prototype.gemRequestEvent.bind(this));importer.registerEventHandler('i915_gem_ring_wait_begin',I915Parser.prototype.gemRingWaitEvent.bind(this));importer.registerEventHandler('i915_gem_ring_wait_end',I915Parser.prototype.gemRingWaitEvent.bind(this));importer.registerEventHandler('i915_reg_rw',I915Parser.prototype.regRWEvent.bind(this));importer.registerEventHandler('i915_flip_request',I915Parser.prototype.flipEvent.bind(this));importer.registerEventHandler('i915_flip_complete',I915Parser.prototype.flipEvent.bind(this));importer.registerEventHandler('intel_gpu_freq_change',I915Parser.prototype.gpuFrequency.bind(this));}
I915Parser.prototype={__proto__:Parser.prototype,i915FlipOpenSlice(ts,obj,plane){const kthread=this.importer.getOrCreatePseudoThread('i915_flip');kthread.openSliceTS=ts;kthread.openSlice='flip:'+obj+'/'+plane;},i915FlipCloseSlice(ts,args){const kthread=this.importer.getOrCreatePseudoThread('i915_flip');if(kthread.openSlice){const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),kthread.openSliceTS,args,ts-kthread.openSliceTS);kthread.thread.sliceGroup.pushSlice(slice);}
kthread.openSlice=undefined;},i915GemObjectSlice(ts,eventName,obj,args){const kthread=this.importer.getOrCreatePseudoThread('i915_gem');kthread.openSlice=eventName+':'+obj;const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),ts,args,0);kthread.thread.sliceGroup.pushSlice(slice);},i915GemRingSlice(ts,eventName,dev,ring,args){const kthread=this.importer.getOrCreatePseudoThread('i915_gem_ring');kthread.openSlice=eventName+':'+dev+'.'+ring;const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),ts,args,0);kthread.thread.sliceGroup.pushSlice(slice);},i915RegSlice(ts,eventName,reg,args){const kthread=this.importer.getOrCreatePseudoThread('i915_reg');kthread.openSlice=eventName+':'+reg;const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),ts,args,0);kthread.thread.sliceGroup.pushSlice(slice);},i915FreqChangeSlice(ts,eventName,args){const kthread=this.importer.getOrCreatePseudoThread('i915_gpu_freq');kthread.openSlice=eventName;const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),ts,args,0);kthread.thread.sliceGroup.pushSlice(slice);},gemObjectCreateEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/obj=(\w+), size=(\d+)/.exec(eventBase.details);if(!event)return false;const obj=event[1];const size=parseInt(event[2]);this.i915GemObjectSlice(ts,eventName,obj,{obj,size});return true;},gemObjectBindEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/obj=(\w+), offset=(\w+), size=(\d+)/.exec(eventBase.details);if(!event)return false;const obj=event[1];const offset=event[2];const size=parseInt(event[3]);this.i915ObjectGemSlice(ts,eventName+':'+obj,{obj,offset,size});return true;},gemObjectChangeDomainEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/obj=(\w+), read=(\w+=>\w+), write=(\w+=>\w+)/.exec(eventBase.details);if(!event)return false;const obj=event[1];const read=event[2];const write=event[3];this.i915GemObjectSlice(ts,eventName,obj,{obj,read,write});return true;},gemObjectPreadWriteEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/obj=(\w+), offset=(\d+), len=(\d+)/.exec(eventBase.details);if(!event)return false;const obj=event[1];const offset=parseInt(event[2]);const len=parseInt(event[3]);this.i915GemObjectSlice(ts,eventName,obj,{obj,offset,len});return true;},gemObjectFaultEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/obj=(\w+), (\w+) index=(\d+)/.exec(eventBase.details);if(!event)return false;const obj=event[1];const type=event[2];const index=parseInt(event[3]);this.i915GemObjectSlice(ts,eventName,obj,{obj,type,index});return true;},gemObjectDestroyEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/obj=(\w+)/.exec(eventBase.details);if(!event)return false;const obj=event[1];this.i915GemObjectSlice(ts,eventName,obj,{obj});return true;},gemRingDispatchEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev=(\d+), ring=(\d+), seqno=(\d+)/.exec(eventBase.details);if(!event)return false;const dev=parseInt(event[1]);const ring=parseInt(event[2]);const seqno=parseInt(event[3]);this.i915GemRingSlice(ts,eventName,dev,ring,{dev,ring,seqno});return true;},gemRingFlushEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev=(\d+), ring=(\w+), invalidate=(\w+), flush=(\w+)/.exec(eventBase.details);if(!event)return false;const dev=parseInt(event[1]);const ring=parseInt(event[2]);const invalidate=event[3];const flush=event[4];this.i915GemRingSlice(ts,eventName,dev,ring,{dev,ring,invalidate,flush});return true;},gemRequestEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev=(\d+), ring=(\d+), seqno=(\d+)/.exec(eventBase.details);if(!event)return false;const dev=parseInt(event[1]);const ring=parseInt(event[2]);const seqno=parseInt(event[3]);this.i915GemRingSlice(ts,eventName,dev,ring,{dev,ring,seqno});return true;},gemRingWaitEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev=(\d+), ring=(\d+)/.exec(eventBase.details);if(!event)return false;const dev=parseInt(event[1]);const ring=parseInt(event[2]);this.i915GemRingSlice(ts,eventName,dev,ring,{dev,ring});return true;},regRWEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/(\w+) reg=(\w+), len=(\d+), val=(\(\w+, \w+\))/.exec(eventBase.details);if(!event)return false;const rw=event[1];const reg=event[2];const len=event[3];const data=event[3];this.i915RegSlice(ts,rw,reg,{rw,reg,len,data});return true;},flipEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/plane=(\d+), obj=(\w+)/.exec(eventBase.details);if(!event)return false;const plane=parseInt(event[1]);const obj=event[2];if(eventName==='i915_flip_request'){this.i915FlipOpenSlice(ts,obj,plane);}else{this.i915FlipCloseSlice(ts,{obj,plane});}
-return true;},gpuFrequency(eventName,cpuNumver,pid,ts,eventBase){const event=/new_freq=(\d+)/.exec(eventBase.details);if(!event)return false;const freq=parseInt(event[1]);this.i915FreqChangeSlice(ts,eventName,{freq});return true;}};Parser.register(I915Parser);return{I915Parser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function IrqParser(importer){Parser.call(this,importer);importer.registerEventHandler('irq_handler_entry',IrqParser.prototype.irqHandlerEntryEvent.bind(this));importer.registerEventHandler('irq_handler_exit',IrqParser.prototype.irqHandlerExitEvent.bind(this));importer.registerEventHandler('softirq_raise',IrqParser.prototype.softirqRaiseEvent.bind(this));importer.registerEventHandler('softirq_entry',IrqParser.prototype.softirqEntryEvent.bind(this));importer.registerEventHandler('softirq_exit',IrqParser.prototype.softirqExitEvent.bind(this));importer.registerEventHandler('ipi_entry',IrqParser.prototype.ipiEntryEvent.bind(this));importer.registerEventHandler('ipi_exit',IrqParser.prototype.ipiExitEvent.bind(this));importer.registerEventHandler('preempt_disable',IrqParser.prototype.preemptStartEvent.bind(this));importer.registerEventHandler('preempt_enable',IrqParser.prototype.preemptEndEvent.bind(this));importer.registerEventHandler('irq_disable',IrqParser.prototype.irqoffStartEvent.bind(this));importer.registerEventHandler('irq_enable',IrqParser.prototype.irqoffEndEvent.bind(this));}
+return true;},gpuFrequency(eventName,cpuNumver,pid,ts,eventBase){const event=/new_freq=(\d+)/.exec(eventBase.details);if(!event)return false;const freq=parseInt(event[1]);this.i915FreqChangeSlice(ts,eventName,{freq});return true;}};Parser.register(I915Parser);return{I915Parser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function IonHeapParser(importer){Parser.call(this,importer);importer.registerEventHandler('ion_heap_shrink',IonHeapParser.prototype.traceIonHeapShrink.bind(this));importer.registerEventHandler('ion_heap_grow',IonHeapParser.prototype.traceIonHeapGrow.bind(this));this.model_=importer.model_;}
+const TestExports={};const ionHeapRE=new RegExp('heap_name=(\\S+), len=(\\d+), total_allocated=(\\d+)');TestExports.ionHeapRE=ionHeapRE;IonHeapParser.prototype={__proto__:Parser.prototype,traceIonHeapShrink(eventName,cpuNumber,pid,ts,eventBase,threadName){const event=ionHeapRE.exec(eventBase.details);if(!event)return false;const name=event[1];const len=parseInt(event[2]);const totalAllocated=parseInt(event[3]);const ionHeap=totalAllocated+len;const ctr=this.model_.kernel.getOrCreateCounter(null,name+' ion heap');if(ctr.numSeries===0){ctr.addSeries(new tr.model.CounterSeries('value',ColorScheme.getColorIdForGeneralPurposeString(ctr.name+'.'+'value')));}
+ctr.series.forEach(function(series){series.addCounterSample(ts,ionHeap);});return true;},traceIonHeapGrow(eventName,cpuNumber,pid,ts,eventBase,threadName){const event=ionHeapRE.exec(eventBase.details);if(!event)return false;const name=event[1];const len=parseInt(event[2]);const totalAllocated=parseInt(event[3]);const ionHeap=totalAllocated+len;const ctr=this.model_.kernel.getOrCreateCounter(null,name+' ion heap');if(ctr.numSeries===0){ctr.addSeries(new tr.model.CounterSeries('value',ColorScheme.getColorIdForGeneralPurposeString(ctr.name+'.'+'value')));}
+ctr.series.forEach(function(series){series.addCounterSample(ts,ionHeap);});return true;}};Parser.register(IonHeapParser);return{IonHeapParser,_IonHeapParserTestExports:TestExports};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function IrqParser(importer){Parser.call(this,importer);importer.registerEventHandler('irq_handler_entry',IrqParser.prototype.irqHandlerEntryEvent.bind(this));importer.registerEventHandler('irq_handler_exit',IrqParser.prototype.irqHandlerExitEvent.bind(this));importer.registerEventHandler('softirq_raise',IrqParser.prototype.softirqRaiseEvent.bind(this));importer.registerEventHandler('softirq_entry',IrqParser.prototype.softirqEntryEvent.bind(this));importer.registerEventHandler('softirq_exit',IrqParser.prototype.softirqExitEvent.bind(this));importer.registerEventHandler('ipi_entry',IrqParser.prototype.ipiEntryEvent.bind(this));importer.registerEventHandler('ipi_exit',IrqParser.prototype.ipiExitEvent.bind(this));importer.registerEventHandler('preempt_disable',IrqParser.prototype.preemptStartEvent.bind(this));importer.registerEventHandler('preempt_enable',IrqParser.prototype.preemptEndEvent.bind(this));importer.registerEventHandler('irq_disable',IrqParser.prototype.irqoffStartEvent.bind(this));importer.registerEventHandler('irq_enable',IrqParser.prototype.irqoffEndEvent.bind(this));}
const irqHandlerEntryRE=/irq=(\d+) name=(.+)/;const irqHandlerExitRE=/irq=(\d+) ret=(.+)/;const softirqRE=/vec=(\d+) \[action=(.+)\]/;const ipiHandlerExitRE=/\((.+)\)/;const preemptirqRE=/caller=(.+) parent=(.+)/;IrqParser.prototype={__proto__:Parser.prototype,irqHandlerEntryEvent(eventName,cpuNumber,pid,ts,eventBase){const event=irqHandlerEntryRE.exec(eventBase.details);if(!event)return false;const irq=parseInt(event[1]);const name=event[2];const thread=this.importer.getOrCreatePseudoThread('irqs cpu '+cpuNumber);thread.lastEntryTs=ts;thread.irqName=name;return true;},irqHandlerExitEvent(eventName,cpuNumber,pid,ts,eventBase){const event=irqHandlerExitRE.exec(eventBase.details);if(!event)return false;const irq=parseInt(event[1]);const ret=event[2];const thread=this.importer.getOrCreatePseudoThread('irqs cpu '+cpuNumber);if(thread.lastEntryTs!==undefined){const duration=ts-thread.lastEntryTs;const slice=new tr.model.ThreadSlice('','IRQ ('+thread.irqName+')',ColorScheme.getColorIdForGeneralPurposeString(event[1]),thread.lastEntryTs,{ret},duration);thread.thread.sliceGroup.pushSlice(slice);}
thread.lastEntryTs=undefined;thread.irqName=undefined;return true;},softirqRaiseEvent(eventName,cpuNumber,pid,ts,eventBase){return true;},softirqEntryEvent(eventName,cpuNumber,pid,ts,eventBase){const event=softirqRE.exec(eventBase.details);if(!event)return false;const action=event[2];const thread=this.importer.getOrCreatePseudoThread('softirq cpu '+cpuNumber);thread.lastEntryTs=ts;return true;},softirqExitEvent(eventName,cpuNumber,pid,ts,eventBase){const event=softirqRE.exec(eventBase.details);if(!event)return false;const vec=parseInt(event[1]);const action=event[2];const thread=this.importer.getOrCreatePseudoThread('softirq cpu '+cpuNumber);if(thread.lastEntryTs!==undefined){const duration=ts-thread.lastEntryTs;const slice=new tr.model.ThreadSlice('',action,ColorScheme.getColorIdForGeneralPurposeString(event[1]),thread.lastEntryTs,{vec},duration);thread.thread.sliceGroup.pushSlice(slice);}
thread.lastEntryTs=undefined;return true;},ipiEntryEvent(eventName,cpuNumber,pid,ts,eventBase){const thread=this.importer.getOrCreatePseudoThread('irqs cpu '+cpuNumber);thread.lastEntryTs=ts;return true;},ipiExitEvent(eventName,cpuNumber,pid,ts,eventBase){const event=ipiHandlerExitRE.exec(eventBase.details);if(!event)return false;const ipiName=event[1];const thread=this.importer.getOrCreatePseudoThread('irqs cpu '+cpuNumber);if(thread.lastEntryTs!==undefined){const duration=ts-thread.lastEntryTs;const slice=new tr.model.ThreadSlice('','IPI ('+ipiName+')',ColorScheme.getColorIdForGeneralPurposeString(ipiName),thread.lastEntryTs,{},duration);thread.thread.sliceGroup.pushSlice(slice);}
@@ -5892,12 +6219,17 @@ const slice=slices.beginSlice(null,name,ts,{});return true;},traceKernelFuncRetu
const tgid=parseInt(eventBase.tgid);const thread=this.model_.getOrCreateProcess(tgid).getOrCreateThread(pid);thread.name=eventBase.threadName;const slices=thread.kernelSliceGroup;if(!slices.isTimestampValidForBeginOrEnd(ts)){this.model_.importWarning({type:'parse_error',message:'Timestamps are moving backward.'});return false;}
if(slices.openSliceCount>0){slices.endSlice(ts);}
return true;}};LinuxPerfParser.register(KernelFuncParser);return{KernelFuncParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function MaliParser(importer){Parser.call(this,importer);importer.registerEventHandler('mali_dvfs_event',MaliParser.prototype.dvfsEventEvent.bind(this));importer.registerEventHandler('mali_dvfs_set_clock',MaliParser.prototype.dvfsSetClockEvent.bind(this));importer.registerEventHandler('mali_dvfs_set_voltage',MaliParser.prototype.dvfsSetVoltageEvent.bind(this));this.addJMCounter('mali_hwc_MESSAGES_SENT','Messages Sent');this.addJMCounter('mali_hwc_MESSAGES_RECEIVED','Messages Received');this.addJMCycles('mali_hwc_GPU_ACTIVE','GPU Active');this.addJMCycles('mali_hwc_IRQ_ACTIVE','IRQ Active');for(let i=0;i<7;i++){const jobStr='JS'+i;const jobHWCStr='mali_hwc_'+jobStr;this.addJMCounter(jobHWCStr+'_JOBS',jobStr+' Jobs');this.addJMCounter(jobHWCStr+'_TASKS',jobStr+' Tasks');this.addJMCycles(jobHWCStr+'_ACTIVE',jobStr+' Active');this.addJMCycles(jobHWCStr+'_WAIT_READ',jobStr+' Wait Read');this.addJMCycles(jobHWCStr+'_WAIT_ISSUE',jobStr+' Wait Issue');this.addJMCycles(jobHWCStr+'_WAIT_DEPEND',jobStr+' Wait Depend');this.addJMCycles(jobHWCStr+'_WAIT_FINISH',jobStr+' Wait Finish');}
-this.addTilerCounter('mali_hwc_TRIANGLES','Triangles');this.addTilerCounter('mali_hwc_QUADS','Quads');this.addTilerCounter('mali_hwc_POLYGONS','Polygons');this.addTilerCounter('mali_hwc_POINTS','Points');this.addTilerCounter('mali_hwc_LINES','Lines');this.addTilerCounter('mali_hwc_VCACHE_HIT','VCache Hit');this.addTilerCounter('mali_hwc_VCACHE_MISS','VCache Miss');this.addTilerCounter('mali_hwc_FRONT_FACING','Front Facing');this.addTilerCounter('mali_hwc_BACK_FACING','Back Facing');this.addTilerCounter('mali_hwc_PRIM_VISIBLE','Prim Visible');this.addTilerCounter('mali_hwc_PRIM_CULLED','Prim Culled');this.addTilerCounter('mali_hwc_PRIM_CLIPPED','Prim Clipped');this.addTilerCounter('mali_hwc_WRBUF_HIT','Wrbuf Hit');this.addTilerCounter('mali_hwc_WRBUF_MISS','Wrbuf Miss');this.addTilerCounter('mali_hwc_WRBUF_LINE','Wrbuf Line');this.addTilerCounter('mali_hwc_WRBUF_PARTIAL','Wrbuf Partial');this.addTilerCounter('mali_hwc_WRBUF_STALL','Wrbuf Stall');this.addTilerCycles('mali_hwc_ACTIVE','Tiler Active');this.addTilerCycles('mali_hwc_INDEX_WAIT','Index Wait');this.addTilerCycles('mali_hwc_INDEX_RANGE_WAIT','Index Range Wait');this.addTilerCycles('mali_hwc_VERTEX_WAIT','Vertex Wait');this.addTilerCycles('mali_hwc_PCACHE_WAIT','Pcache Wait');this.addTilerCycles('mali_hwc_WRBUF_WAIT','Wrbuf Wait');this.addTilerCycles('mali_hwc_BUS_READ','Bus Read');this.addTilerCycles('mali_hwc_BUS_WRITE','Bus Write');this.addTilerCycles('mali_hwc_TILER_UTLB_STALL','Tiler UTLB Stall');this.addTilerCycles('mali_hwc_TILER_UTLB_HIT','Tiler UTLB Hit');this.addFragCycles('mali_hwc_FRAG_ACTIVE','Active');this.addFragCounter('mali_hwc_FRAG_PRIMATIVES','Primitives');this.addFragCounter('mali_hwc_FRAG_PRIMATIVES_DROPPED','Primitives Dropped');this.addFragCycles('mali_hwc_FRAG_CYCLE_DESC','Descriptor Processing');this.addFragCycles('mali_hwc_FRAG_CYCLES_PLR','PLR Processing??');this.addFragCycles('mali_hwc_FRAG_CYCLES_VERT','Vertex Processing');this.addFragCycles('mali_hwc_FRAG_CYCLES_TRISETUP','Triangle Setup');this.addFragCycles('mali_hwc_FRAG_CYCLES_RAST','Rasterization???');this.addFragCounter('mali_hwc_FRAG_THREADS','Threads');this.addFragCounter('mali_hwc_FRAG_DUMMY_THREADS','Dummy Threads');this.addFragCounter('mali_hwc_FRAG_QUADS_RAST','Quads Rast');this.addFragCounter('mali_hwc_FRAG_QUADS_EZS_TEST','Quads EZS Test');this.addFragCounter('mali_hwc_FRAG_QUADS_EZS_KILLED','Quads EZS Killed');this.addFragCounter('mali_hwc_FRAG_QUADS_LZS_TEST','Quads LZS Test');this.addFragCounter('mali_hwc_FRAG_QUADS_LZS_KILLED','Quads LZS Killed');this.addFragCycles('mali_hwc_FRAG_CYCLE_NO_TILE','No Tiles');this.addFragCounter('mali_hwc_FRAG_NUM_TILES','Tiles');this.addFragCounter('mali_hwc_FRAG_TRANS_ELIM','Transactions Eliminated');this.addComputeCycles('mali_hwc_COMPUTE_ACTIVE','Active');this.addComputeCounter('mali_hwc_COMPUTE_TASKS','Tasks');this.addComputeCounter('mali_hwc_COMPUTE_THREADS','Threads Started');this.addComputeCycles('mali_hwc_COMPUTE_CYCLES_DESC','Waiting for Descriptors');this.addTripipeCycles('mali_hwc_TRIPIPE_ACTIVE','Active');this.addArithCounter('mali_hwc_ARITH_WORDS','Instructions (/Pipes)');this.addArithCycles('mali_hwc_ARITH_CYCLES_REG','Reg scheduling stalls (/Pipes)');this.addArithCycles('mali_hwc_ARITH_CYCLES_L0','L0 cache miss stalls (/Pipes)');this.addArithCounter('mali_hwc_ARITH_FRAG_DEPEND','Frag dep check failures (/Pipes)');this.addLSCounter('mali_hwc_LS_WORDS','Instruction Words Completed');this.addLSCounter('mali_hwc_LS_ISSUES','Full Pipeline Issues');this.addLSCounter('mali_hwc_LS_RESTARTS','Restarts (unpairable insts)');this.addLSCounter('mali_hwc_LS_REISSUES_MISS','Pipeline reissue (cache miss/uTLB)');this.addLSCounter('mali_hwc_LS_REISSUES_VD','Pipeline reissue (varying data)');this.addLSCounter('mali_hwc_LS_REISSUE_ATTRIB_MISS','Pipeline reissue (attribute cache miss)');this.addLSCounter('mali_hwc_LS_REISSUE_NO_WB','Writeback not used');this.addTexCounter('mali_hwc_TEX_WORDS','Words');this.addTexCounter('mali_hwc_TEX_BUBBLES','Bubbles');this.addTexCounter('mali_hwc_TEX_WORDS_L0','Words L0');this.addTexCounter('mali_hwc_TEX_WORDS_DESC','Words Desc');this.addTexCounter('mali_hwc_TEX_THREADS','Threads');this.addTexCounter('mali_hwc_TEX_RECIRC_FMISS','Recirc due to Full Miss');this.addTexCounter('mali_hwc_TEX_RECIRC_DESC','Recirc due to Desc Miss');this.addTexCounter('mali_hwc_TEX_RECIRC_MULTI','Recirc due to Multipass');this.addTexCounter('mali_hwc_TEX_RECIRC_PMISS','Recirc due to Partial Cache Miss');this.addTexCounter('mali_hwc_TEX_RECIRC_CONF','Recirc due to Cache Conflict');this.addLSCCounter('mali_hwc_LSC_READ_HITS','Read Hits');this.addLSCCounter('mali_hwc_LSC_READ_MISSES','Read Misses');this.addLSCCounter('mali_hwc_LSC_WRITE_HITS','Write Hits');this.addLSCCounter('mali_hwc_LSC_WRITE_MISSES','Write Misses');this.addLSCCounter('mali_hwc_LSC_ATOMIC_HITS','Atomic Hits');this.addLSCCounter('mali_hwc_LSC_ATOMIC_MISSES','Atomic Misses');this.addLSCCounter('mali_hwc_LSC_LINE_FETCHES','Line Fetches');this.addLSCCounter('mali_hwc_LSC_DIRTY_LINE','Dirty Lines');this.addLSCCounter('mali_hwc_LSC_SNOOPS','Snoops');this.addAXICounter('mali_hwc_AXI_TLB_STALL','Address channel stall');this.addAXICounter('mali_hwc_AXI_TLB_MISS','Cache Miss');this.addAXICounter('mali_hwc_AXI_TLB_TRANSACTION','Transactions');this.addAXICounter('mali_hwc_LS_TLB_MISS','LS Cache Miss');this.addAXICounter('mali_hwc_LS_TLB_HIT','LS Cache Hit');this.addAXICounter('mali_hwc_AXI_BEATS_READ','Read Beats');this.addAXICounter('mali_hwc_AXI_BEATS_WRITE','Write Beats');this.addMMUCounter('mali_hwc_MMU_TABLE_WALK','Page Table Walks');this.addMMUCounter('mali_hwc_MMU_REPLAY_MISS','Cache Miss from Replay Buffer');this.addMMUCounter('mali_hwc_MMU_REPLAY_FULL','Replay Buffer Full');this.addMMUCounter('mali_hwc_MMU_NEW_MISS','Cache Miss on New Request');this.addMMUCounter('mali_hwc_MMU_HIT','Cache Hit');this.addMMUCycles('mali_hwc_UTLB_STALL','UTLB Stalled');this.addMMUCycles('mali_hwc_UTLB_REPLAY_MISS','UTLB Replay Miss');this.addMMUCycles('mali_hwc_UTLB_REPLAY_FULL','UTLB Replay Full');this.addMMUCycles('mali_hwc_UTLB_NEW_MISS','UTLB New Miss');this.addMMUCycles('mali_hwc_UTLB_HIT','UTLB Hit');this.addL2Counter('mali_hwc_L2_READ_BEATS','Read Beats');this.addL2Counter('mali_hwc_L2_WRITE_BEATS','Write Beats');this.addL2Counter('mali_hwc_L2_ANY_LOOKUP','Any Lookup');this.addL2Counter('mali_hwc_L2_READ_LOOKUP','Read Lookup');this.addL2Counter('mali_hwc_L2_SREAD_LOOKUP','Shareable Read Lookup');this.addL2Counter('mali_hwc_L2_READ_REPLAY','Read Replayed');this.addL2Counter('mali_hwc_L2_READ_SNOOP','Read Snoop');this.addL2Counter('mali_hwc_L2_READ_HIT','Read Cache Hit');this.addL2Counter('mali_hwc_L2_CLEAN_MISS','CleanUnique Miss');this.addL2Counter('mali_hwc_L2_WRITE_LOOKUP','Write Lookup');this.addL2Counter('mali_hwc_L2_SWRITE_LOOKUP','Shareable Write Lookup');this.addL2Counter('mali_hwc_L2_WRITE_REPLAY','Write Replayed');this.addL2Counter('mali_hwc_L2_WRITE_SNOOP','Write Snoop');this.addL2Counter('mali_hwc_L2_WRITE_HIT','Write Cache Hit');this.addL2Counter('mali_hwc_L2_EXT_READ_FULL','ExtRD with BIU Full');this.addL2Counter('mali_hwc_L2_EXT_READ_HALF','ExtRD with BIU >1/2 Full');this.addL2Counter('mali_hwc_L2_EXT_WRITE_FULL','ExtWR with BIU Full');this.addL2Counter('mali_hwc_L2_EXT_WRITE_HALF','ExtWR with BIU >1/2 Full');this.addL2Counter('mali_hwc_L2_EXT_READ','External Read (ExtRD)');this.addL2Counter('mali_hwc_L2_EXT_READ_LINE','ExtRD (linefill)');this.addL2Counter('mali_hwc_L2_EXT_WRITE','External Write (ExtWR)');this.addL2Counter('mali_hwc_L2_EXT_WRITE_LINE','ExtWR (linefill)');this.addL2Counter('mali_hwc_L2_EXT_WRITE_SMALL','ExtWR (burst size <64B)');this.addL2Counter('mali_hwc_L2_EXT_BARRIER','External Barrier');this.addL2Counter('mali_hwc_L2_EXT_AR_STALL','Address Read stalls');this.addL2Counter('mali_hwc_L2_EXT_R_BUF_FULL','Response Buffer full stalls');this.addL2Counter('mali_hwc_L2_EXT_RD_BUF_FULL','Read Data Buffer full stalls');this.addL2Counter('mali_hwc_L2_EXT_R_RAW','RAW hazard stalls');this.addL2Counter('mali_hwc_L2_EXT_W_STALL','Write Data stalls');this.addL2Counter('mali_hwc_L2_EXT_W_BUF_FULL','Write Data Buffer full');this.addL2Counter('mali_hwc_L2_EXT_R_W_HAZARD','WAW or WAR hazard stalls');this.addL2Counter('mali_hwc_L2_TAG_HAZARD','Tag hazard replays');this.addL2Cycles('mali_hwc_L2_SNOOP_FULL','Snoop buffer full');this.addL2Cycles('mali_hwc_L2_REPLAY_FULL','Replay buffer full');importer.registerEventHandler('tracing_mark_write:mali_driver',MaliParser.prototype.maliDDKEvent.bind(this));this.model_=importer.model_;}
+this.addTilerCounter('mali_hwc_TRIANGLES','Triangles');this.addTilerCounter('mali_hwc_QUADS','Quads');this.addTilerCounter('mali_hwc_POLYGONS','Polygons');this.addTilerCounter('mali_hwc_POINTS','Points');this.addTilerCounter('mali_hwc_LINES','Lines');this.addTilerCounter('mali_hwc_VCACHE_HIT','VCache Hit');this.addTilerCounter('mali_hwc_VCACHE_MISS','VCache Miss');this.addTilerCounter('mali_hwc_FRONT_FACING','Front Facing');this.addTilerCounter('mali_hwc_BACK_FACING','Back Facing');this.addTilerCounter('mali_hwc_PRIM_VISIBLE','Prim Visible');this.addTilerCounter('mali_hwc_PRIM_CULLED','Prim Culled');this.addTilerCounter('mali_hwc_PRIM_CLIPPED','Prim Clipped');this.addTilerCounter('mali_hwc_WRBUF_HIT','Wrbuf Hit');this.addTilerCounter('mali_hwc_WRBUF_MISS','Wrbuf Miss');this.addTilerCounter('mali_hwc_WRBUF_LINE','Wrbuf Line');this.addTilerCounter('mali_hwc_WRBUF_PARTIAL','Wrbuf Partial');this.addTilerCounter('mali_hwc_WRBUF_STALL','Wrbuf Stall');this.addTilerCycles('mali_hwc_ACTIVE','Tiler Active');this.addTilerCycles('mali_hwc_INDEX_WAIT','Index Wait');this.addTilerCycles('mali_hwc_INDEX_RANGE_WAIT','Index Range Wait');this.addTilerCycles('mali_hwc_VERTEX_WAIT','Vertex Wait');this.addTilerCycles('mali_hwc_PCACHE_WAIT','Pcache Wait');this.addTilerCycles('mali_hwc_WRBUF_WAIT','Wrbuf Wait');this.addTilerCycles('mali_hwc_BUS_READ','Bus Read');this.addTilerCycles('mali_hwc_BUS_WRITE','Bus Write');this.addTilerCycles('mali_hwc_TILER_UTLB_STALL','Tiler UTLB Stall');this.addTilerCycles('mali_hwc_TILER_UTLB_HIT','Tiler UTLB Hit');this.addFragCycles('mali_hwc_FRAG_ACTIVE','Active');this.addFragCounter('mali_hwc_FRAG_PRIMATIVES','Primitives');this.addFragCounter('mali_hwc_FRAG_PRIMATIVES_DROPPED','Primitives Dropped');this.addFragCycles('mali_hwc_FRAG_CYCLE_DESC','Descriptor Processing');this.addFragCycles('mali_hwc_FRAG_CYCLES_PLR','PLR Processing??');this.addFragCycles('mali_hwc_FRAG_CYCLES_VERT','Vertex Processing');this.addFragCycles('mali_hwc_FRAG_CYCLES_TRISETUP','Triangle Setup');this.addFragCycles('mali_hwc_FRAG_CYCLES_RAST','Rasterization???');this.addFragCounter('mali_hwc_FRAG_THREADS','Threads');this.addFragCounter('mali_hwc_FRAG_DUMMY_THREADS','Dummy Threads');this.addFragCounter('mali_hwc_FRAG_QUADS_RAST','Quads Rast');this.addFragCounter('mali_hwc_FRAG_QUADS_EZS_TEST','Quads EZS Test');this.addFragCounter('mali_hwc_FRAG_QUADS_EZS_KILLED','Quads EZS Killed');this.addFragCounter('mali_hwc_FRAG_QUADS_LZS_TEST','Quads LZS Test');this.addFragCounter('mali_hwc_FRAG_QUADS_LZS_KILLED','Quads LZS Killed');this.addFragCycles('mali_hwc_FRAG_CYCLE_NO_TILE','No Tiles');this.addFragCounter('mali_hwc_FRAG_NUM_TILES','Tiles');this.addFragCounter('mali_hwc_FRAG_TRANS_ELIM','Transactions Eliminated');this.addComputeCycles('mali_hwc_COMPUTE_ACTIVE','Active');this.addComputeCounter('mali_hwc_COMPUTE_TASKS','Tasks');this.addComputeCounter('mali_hwc_COMPUTE_THREADS','Threads Started');this.addComputeCycles('mali_hwc_COMPUTE_CYCLES_DESC','Waiting for Descriptors');this.addTripipeCycles('mali_hwc_TRIPIPE_ACTIVE','Active');this.addArithCounter('mali_hwc_ARITH_WORDS','Instructions (/Pipes)');this.addArithCycles('mali_hwc_ARITH_CYCLES_REG','Reg scheduling stalls (/Pipes)');this.addArithCycles('mali_hwc_ARITH_CYCLES_L0','L0 cache miss stalls (/Pipes)');this.addArithCounter('mali_hwc_ARITH_FRAG_DEPEND','Frag dep check failures (/Pipes)');this.addLSCounter('mali_hwc_LS_WORDS','Instruction Words Completed');this.addLSCounter('mali_hwc_LS_ISSUES','Full Pipeline Issues');this.addLSCounter('mali_hwc_LS_RESTARTS','Restarts (unpairable insts)');this.addLSCounter('mali_hwc_LS_REISSUES_MISS','Pipeline reissue (cache miss/uTLB)');this.addLSCounter('mali_hwc_LS_REISSUES_VD','Pipeline reissue (varying data)');this.addLSCounter('mali_hwc_LS_REISSUE_ATTRIB_MISS','Pipeline reissue (attribute cache miss)');this.addLSCounter('mali_hwc_LS_REISSUE_NO_WB','Writeback not used');this.addTexCounter('mali_hwc_TEX_WORDS','Words');this.addTexCounter('mali_hwc_TEX_BUBBLES','Bubbles');this.addTexCounter('mali_hwc_TEX_WORDS_L0','Words L0');this.addTexCounter('mali_hwc_TEX_WORDS_DESC','Words Desc');this.addTexCounter('mali_hwc_TEX_THREADS','Threads');this.addTexCounter('mali_hwc_TEX_RECIRC_FMISS','Recirc due to Full Miss');this.addTexCounter('mali_hwc_TEX_RECIRC_DESC','Recirc due to Desc Miss');this.addTexCounter('mali_hwc_TEX_RECIRC_MULTI','Recirc due to Multipass');this.addTexCounter('mali_hwc_TEX_RECIRC_PMISS','Recirc due to Partial Cache Miss');this.addTexCounter('mali_hwc_TEX_RECIRC_CONF','Recirc due to Cache Conflict');this.addLSCCounter('mali_hwc_LSC_READ_HITS','Read Hits');this.addLSCCounter('mali_hwc_LSC_READ_MISSES','Read Misses');this.addLSCCounter('mali_hwc_LSC_WRITE_HITS','Write Hits');this.addLSCCounter('mali_hwc_LSC_WRITE_MISSES','Write Misses');this.addLSCCounter('mali_hwc_LSC_ATOMIC_HITS','Atomic Hits');this.addLSCCounter('mali_hwc_LSC_ATOMIC_MISSES','Atomic Misses');this.addLSCCounter('mali_hwc_LSC_LINE_FETCHES','Line Fetches');this.addLSCCounter('mali_hwc_LSC_DIRTY_LINE','Dirty Lines');this.addLSCCounter('mali_hwc_LSC_SNOOPS','Snoops');this.addAXICounter('mali_hwc_AXI_TLB_STALL','Address channel stall');this.addAXICounter('mali_hwc_AXI_TLB_MISS','Cache Miss');this.addAXICounter('mali_hwc_AXI_TLB_TRANSACTION','Transactions');this.addAXICounter('mali_hwc_LS_TLB_MISS','LS Cache Miss');this.addAXICounter('mali_hwc_LS_TLB_HIT','LS Cache Hit');this.addAXICounter('mali_hwc_AXI_BEATS_READ','Read Beats');this.addAXICounter('mali_hwc_AXI_BEATS_WRITE','Write Beats');this.addMMUCounter('mali_hwc_MMU_TABLE_WALK','Page Table Walks');this.addMMUCounter('mali_hwc_MMU_REPLAY_MISS','Cache Miss from Replay Buffer');this.addMMUCounter('mali_hwc_MMU_REPLAY_FULL','Replay Buffer Full');this.addMMUCounter('mali_hwc_MMU_NEW_MISS','Cache Miss on New Request');this.addMMUCounter('mali_hwc_MMU_HIT','Cache Hit');this.addMMUCycles('mali_hwc_UTLB_STALL','UTLB Stalled');this.addMMUCycles('mali_hwc_UTLB_REPLAY_MISS','UTLB Replay Miss');this.addMMUCycles('mali_hwc_UTLB_REPLAY_FULL','UTLB Replay Full');this.addMMUCycles('mali_hwc_UTLB_NEW_MISS','UTLB New Miss');this.addMMUCycles('mali_hwc_UTLB_HIT','UTLB Hit');this.addL2Counter('mali_hwc_L2_READ_BEATS','Read Beats');this.addL2Counter('mali_hwc_L2_WRITE_BEATS','Write Beats');this.addL2Counter('mali_hwc_L2_ANY_LOOKUP','Any Lookup');this.addL2Counter('mali_hwc_L2_READ_LOOKUP','Read Lookup');this.addL2Counter('mali_hwc_L2_SREAD_LOOKUP','Shareable Read Lookup');this.addL2Counter('mali_hwc_L2_READ_REPLAY','Read Replayed');this.addL2Counter('mali_hwc_L2_READ_SNOOP','Read Snoop');this.addL2Counter('mali_hwc_L2_READ_HIT','Read Cache Hit');this.addL2Counter('mali_hwc_L2_CLEAN_MISS','CleanUnique Miss');this.addL2Counter('mali_hwc_L2_WRITE_LOOKUP','Write Lookup');this.addL2Counter('mali_hwc_L2_SWRITE_LOOKUP','Shareable Write Lookup');this.addL2Counter('mali_hwc_L2_WRITE_REPLAY','Write Replayed');this.addL2Counter('mali_hwc_L2_WRITE_SNOOP','Write Snoop');this.addL2Counter('mali_hwc_L2_WRITE_HIT','Write Cache Hit');this.addL2Counter('mali_hwc_L2_EXT_READ_FULL','ExtRD with BIU Full');this.addL2Counter('mali_hwc_L2_EXT_READ_HALF','ExtRD with BIU >1/2 Full');this.addL2Counter('mali_hwc_L2_EXT_WRITE_FULL','ExtWR with BIU Full');this.addL2Counter('mali_hwc_L2_EXT_WRITE_HALF','ExtWR with BIU >1/2 Full');this.addL2Counter('mali_hwc_L2_EXT_READ','External Read (ExtRD)');this.addL2Counter('mali_hwc_L2_EXT_READ_LINE','ExtRD (linefill)');this.addL2Counter('mali_hwc_L2_EXT_WRITE','External Write (ExtWR)');this.addL2Counter('mali_hwc_L2_EXT_WRITE_LINE','ExtWR (linefill)');this.addL2Counter('mali_hwc_L2_EXT_WRITE_SMALL','ExtWR (burst size <64B)');this.addL2Counter('mali_hwc_L2_EXT_BARRIER','External Barrier');this.addL2Counter('mali_hwc_L2_EXT_AR_STALL','Address Read stalls');this.addL2Counter('mali_hwc_L2_EXT_R_BUF_FULL','Response Buffer full stalls');this.addL2Counter('mali_hwc_L2_EXT_RD_BUF_FULL','Read Data Buffer full stalls');this.addL2Counter('mali_hwc_L2_EXT_R_RAW','RAW hazard stalls');this.addL2Counter('mali_hwc_L2_EXT_W_STALL','Write Data stalls');this.addL2Counter('mali_hwc_L2_EXT_W_BUF_FULL','Write Data Buffer full');this.addL2Counter('mali_hwc_L2_EXT_R_W_HAZARD','WAW or WAR hazard stalls');this.addL2Counter('mali_hwc_L2_TAG_HAZARD','Tag hazard replays');this.addL2Cycles('mali_hwc_L2_SNOOP_FULL','Snoop buffer full');this.addL2Cycles('mali_hwc_L2_REPLAY_FULL','Replay buffer full');importer.registerEventHandler('tracing_mark_write:mali_driver',MaliParser.prototype.maliDDKEvent.bind(this));importer.registerEventHandler('mali_job_systrace_event_start',MaliParser.prototype.maliJobEvent.bind(this));importer.registerEventHandler('mali_job_systrace_event_stop',MaliParser.prototype.maliJobEvent.bind(this));this.model_=importer.model_;this.deferredJobs_={};}
MaliParser.prototype={__proto__:Parser.prototype,maliDDKOpenSlice(pid,tid,ts,func,blockinfo){const thread=this.importer.model_.getOrCreateProcess(pid).getOrCreateThread(tid);const funcArgs=/^([\w\d_]*)(?:\(\))?:?\s*(.*)$/.exec(func);thread.sliceGroup.beginSlice('gpu-driver',funcArgs[1],ts,{'args':funcArgs[2],blockinfo});},maliDDKCloseSlice(pid,tid,ts,args,blockinfo){const thread=this.importer.model_.getOrCreateProcess(pid).getOrCreateThread(tid);if(!thread.sliceGroup.openSliceCount){return;}
thread.sliceGroup.endSlice(ts);},autoDetectLineRE(line){const lineREWithThread=/^\s*\(([\w\-]*)\)\s*(\w+):\s*([\w\\\/\.\-]*@\d*):?\s*(.*)$/;if(lineREWithThread.test(line)){return lineREWithThread;}
const lineRENoThread=/^s*()(\w+):\s*([\w\\\/.\-]*):?\s*(.*)$/;if(lineRENoThread.test(line)){return lineRENoThread;}
return null;},lineRE:null,maliDDKEvent(eventName,cpuNumber,pid,ts,eventBase){if(this.lineRE===null){this.lineRE=this.autoDetectLineRE(eventBase.details);if(this.lineRE===null)return false;}
const maliEvent=this.lineRE.exec(eventBase.details);const tid=(maliEvent[1]===''?'mali':maliEvent[1]);switch(maliEvent[2]){case'cros_trace_print_enter':this.maliDDKOpenSlice(pid,tid,ts,maliEvent[4],maliEvent[3]);break;case'cros_trace_print_exit':this.maliDDKCloseSlice(pid,tid,ts,[],maliEvent[3]);}
+return true;},maliJobEvent(eventName,cpuNumber,pid,ts,eventBase){const jobEventRE=/^.*tracing_mark_write: (S|F)\|(\d+)\|(\w+)-job\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|([a-z0-9]+)\|(\d+)$/;const jobEvent=jobEventRE.exec(eventBase.details);if(!jobEvent){this.model_.importWarning({type:'parse_error',args:'unexpected mali_job_systrace_event_* event syntax'});return;}
+const jobType=jobEvent[3];const jobId=jobEvent[4];const thread=this.importer.model_.getOrCreateProcess(0).getOrCreateThread('mali:'+jobType);switch(jobEvent[1]){case'S':{const args={ctx:jobEvent[9],pid:parseInt(jobEvent[2],10),dep0:parseInt(jobEvent[5],10),dep1:parseInt(jobEvent[7],10)};if(thread.sliceGroup.openSliceCount){if(!(jobType in this.deferredJobs_)){this.deferredJobs_[jobType]=[];}
+this.deferredJobs_[jobType].push({id:jobId,args});}else{thread.sliceGroup.beginSlice(null,jobId,ts,args);}}break;case'F':{if(!thread.sliceGroup.openSliceCount){return;}
+if(thread.sliceGroup.mostRecentlyOpenedPartialSlice.title!==jobId){this.model_.importWarning({type:'invalid event nesting',message:'non-sequential jobs in same mali job slot'});}
+thread.sliceGroup.endSlice(ts);const deferredJobs=this.deferredJobs_[jobType];if(deferredJobs&&deferredJobs.length){const job=deferredJobs.shift();thread.sliceGroup.beginSlice(null,job.id,ts,job.args);}}break;}
return true;},dvfsSample(counterName,seriesName,ts,s){const value=parseInt(s);const counter=this.model_.kernel.getOrCreateCounter('DVFS',counterName);if(counter.numSeries===0){counter.addSeries(new tr.model.CounterSeries(seriesName,ColorScheme.getColorIdForGeneralPurposeString(counter.name)));}
counter.series.forEach(function(series){series.addCounterSample(ts,value);});},dvfsEventEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/utilization=(\d+)/.exec(eventBase.details);if(!event)return false;this.dvfsSample('DVFS Utilization','utilization',ts,event[1]);return true;},dvfsSetClockEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/frequency=(\d+)/.exec(eventBase.details);if(!event)return false;this.dvfsSample('DVFS Frequency','frequency',ts,event[1]);return true;},dvfsSetVoltageEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/voltage=(\d+)/.exec(eventBase.details);if(!event)return false;this.dvfsSample('DVFS Voltage','voltage',ts,event[1]);return true;},hwcSample(cat,counterName,seriesName,ts,eventBase){const event=/val=(\d+)/.exec(eventBase.details);if(!event)return false;const value=parseInt(event[1]);const counter=this.model_.kernel.getOrCreateCounter(cat,counterName);if(counter.numSeries===0){counter.addSeries(new tr.model.CounterSeries(seriesName,ColorScheme.getColorIdForGeneralPurposeString(counter.name)));}
counter.series.forEach(function(series){series.addCounterSample(ts,value);});return true;},jmSample(ctrName,seriesName,ts,eventBase){return this.hwcSample('mali:jm','JM: '+ctrName,seriesName,ts,eventBase);},addJMCounter(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.jmSample(hwcTitle,'count',ts,eventBase);}
@@ -5932,8 +6264,12 @@ powerCounter.series.forEach(function(series){series.addCounterSample(ts,powerSta
powerCounter.series.forEach(function(series){if(series.name==='Min Frequency'){series.addCounterSample(ts,minFreq);}
if(series.name==='Max Frequency'){series.addCounterSample(ts,maxFreq);}});},powerStartEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/type=(\d+) state=(\d) cpu_id=(\d+)/.exec(eventBase.details);if(!event)return false;const targetCpuNumber=parseInt(event[3]);const cpuState=parseInt(event[2]);this.cpuStateSlice(ts,targetCpuNumber,event[1],cpuState);return true;},powerFrequencyEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/type=(\d+) state=(\d+) cpu_id=(\d+)/.exec(eventBase.details);if(!event)return false;const targetCpuNumber=parseInt(event[3]);const powerState=parseInt(event[2]);this.cpuFrequencySlice(ts,targetCpuNumber,powerState);return true;},cpuFrequencyEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/state=(\d+) cpu_id=(\d+)/.exec(eventBase.details);if(!event)return false;const targetCpuNumber=parseInt(event[2]);const powerState=parseInt(event[1]);this.cpuFrequencySlice(ts,targetCpuNumber,powerState);return true;},cpuFrequencyLimitsEvent(eventName,cpu,pid,ts,eventBase){const event=/min=(\d+) max=(\d+) cpu_id=(\d+)/.exec(eventBase.details);if(!event)return false;const targetCpuNumber=parseInt(event[3]);const minFreq=parseInt(event[1]);const maxFreq=parseInt(event[2]);this.cpuFrequencyLimitsSlice(ts,targetCpuNumber,minFreq,maxFreq);return true;},cpuIdleEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/state=(\d+) cpu_id=(\d+)/.exec(eventBase.details);if(!event)return false;const targetCpuNumber=parseInt(event[2]);const cpuState=parseInt(event[1]);this.cpuIdleSlice(ts,targetCpuNumber,cpuState);return true;}};Parser.register(PowerParser);return{PowerParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function RegulatorParser(importer){Parser.call(this,importer);importer.registerEventHandler('regulator_enable',RegulatorParser.prototype.regulatorEnableEvent.bind(this));importer.registerEventHandler('regulator_enable_delay',RegulatorParser.prototype.regulatorEnableDelayEvent.bind(this));importer.registerEventHandler('regulator_enable_complete',RegulatorParser.prototype.regulatorEnableCompleteEvent.bind(this));importer.registerEventHandler('regulator_disable',RegulatorParser.prototype.regulatorDisableEvent.bind(this));importer.registerEventHandler('regulator_disable_complete',RegulatorParser.prototype.regulatorDisableCompleteEvent.bind(this));importer.registerEventHandler('regulator_set_voltage',RegulatorParser.prototype.regulatorSetVoltageEvent.bind(this));importer.registerEventHandler('regulator_set_voltage_complete',RegulatorParser.prototype.regulatorSetVoltageCompleteEvent.bind(this));this.model_=importer.model_;}
const regulatorEnableRE=/name=(.+)/;const regulatorDisableRE=/name=(.+)/;const regulatorSetVoltageCompleteRE=/name=(\S+), val=(\d+)/;RegulatorParser.prototype={__proto__:Parser.prototype,getCtr_(ctrName,valueName){const ctr=this.model_.kernel.getOrCreateCounter(null,'vreg '+ctrName+' '+valueName);if(ctr.series[0]===undefined){ctr.addSeries(new tr.model.CounterSeries(valueName,ColorScheme.getColorIdForGeneralPurposeString(ctrName+'.'+valueName)));}
-return ctr;},regulatorEnableEvent(eventName,cpuNum,pid,ts,eventBase){const event=regulatorEnableRE.exec(eventBase.details);if(!event)return false;const name=event[1];const ctr=this.getCtr_(name,'enabled');ctr.series[0].addCounterSample(ts,1);return true;},regulatorEnableDelayEvent(eventName,cpuNum,pid,ts,eventBase){return true;},regulatorEnableCompleteEvent(eventName,cpuNum,pid,ts,eventBase){return true;},regulatorDisableEvent(eventName,cpuNum,pid,ts,eventBase){const event=regulatorDisableRE.exec(eventBase.details);if(!event)return false;const name=event[1];const ctr=this.getCtr_(name,'enabled');ctr.series[0].addCounterSample(ts,0);return true;},regulatorDisableCompleteEvent(eventName,cpuNum,pid,ts,eventBase){return true;},regulatorSetVoltageEvent(eventName,cpuNum,pid,ts,eventBase){return true;},regulatorSetVoltageCompleteEvent(eventName,cpuNum,pid,ts,eventBase){const event=regulatorSetVoltageCompleteRE.exec(eventBase.details);if(!event)return false;const name=event[1];const voltage=parseInt(event[2]);const ctr=this.getCtr_(name,'voltage');ctr.series[0].addCounterSample(ts,voltage);return true;}};Parser.register(RegulatorParser);return{RegulatorParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const Parser=tr.e.importer.linux_perf.Parser;function SchedParser(importer){Parser.call(this,importer);importer.registerEventHandler('sched_switch',SchedParser.prototype.schedSwitchEvent.bind(this));importer.registerEventHandler('sched_wakeup',SchedParser.prototype.schedWakeupEvent.bind(this));importer.registerEventHandler('sched_blocked_reason',SchedParser.prototype.schedBlockedEvent.bind(this));importer.registerEventHandler('sched_cpu_hotplug',SchedParser.prototype.schedCpuHotplugEvent.bind(this));}
-const TestExports={};const schedSwitchRE=new RegExp('prev_comm=(.+) prev_pid=(\\d+) prev_prio=(\\d+) '+'prev_state=(\\S\\+?|\\S\\|\\S) ==> '+'next_comm=(.+) next_pid=(\\d+) next_prio=(\\d+)');const schedBlockedRE=new RegExp('pid=(\\d+) iowait=(\\d) caller=(.+)');TestExports.schedSwitchRE=schedSwitchRE;const schedWakeupRE=/comm=(.+) pid=(\d+) prio=(\d+)(?: success=\d+)? target_cpu=(\d+)/;TestExports.schedWakeupRE=schedWakeupRE;SchedParser.prototype={__proto__:Parser.prototype,schedSwitchEvent(eventName,cpuNumber,pid,ts,eventBase){const event=schedSwitchRE.exec(eventBase.details);if(!event)return false;const prevState=event[4];const nextComm=event[5];const nextPid=parseInt(event[6]);const nextPrio=parseInt(event[7]);if(eventBase.tgid!==undefined){const tgid=parseInt(eventBase.tgid);const process=this.importer.model_.getOrCreateProcess(tgid);if(!process.getThread(pid)){const thread=process.getOrCreateThread(pid);thread.name=eventBase.threadName;}}
+return ctr;},regulatorEnableEvent(eventName,cpuNum,pid,ts,eventBase){const event=regulatorEnableRE.exec(eventBase.details);if(!event)return false;const name=event[1];const ctr=this.getCtr_(name,'enabled');ctr.series[0].addCounterSample(ts,1);return true;},regulatorEnableDelayEvent(eventName,cpuNum,pid,ts,eventBase){return true;},regulatorEnableCompleteEvent(eventName,cpuNum,pid,ts,eventBase){return true;},regulatorDisableEvent(eventName,cpuNum,pid,ts,eventBase){const event=regulatorDisableRE.exec(eventBase.details);if(!event)return false;const name=event[1];const ctr=this.getCtr_(name,'enabled');ctr.series[0].addCounterSample(ts,0);return true;},regulatorDisableCompleteEvent(eventName,cpuNum,pid,ts,eventBase){return true;},regulatorSetVoltageEvent(eventName,cpuNum,pid,ts,eventBase){return true;},regulatorSetVoltageCompleteEvent(eventName,cpuNum,pid,ts,eventBase){const event=regulatorSetVoltageCompleteRE.exec(eventBase.details);if(!event)return false;const name=event[1];const voltage=parseInt(event[2]);const ctr=this.getCtr_(name,'voltage');ctr.series[0].addCounterSample(ts,voltage);return true;}};Parser.register(RegulatorParser);return{RegulatorParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const Parser=tr.e.importer.linux_perf.Parser;function RssParser(importer){Parser.call(this,importer);importer.registerEventHandler('rss_stat',RssParser.prototype.rssStat.bind(this));}
+const TestExports={};const rssStatRE=new RegExp('member=(\\d+) size=(\\d+)');TestExports.rssStatRE=rssStatRE;const unknownThreadName='<...>';RssParser.prototype={__proto__:Parser.prototype,rssStat(eventName,cpuNumber,pid,ts,eventBase){const event=rssStatRE.exec(eventBase.details);if(!event)return false;const member=parseInt(event[1]);const size=parseInt(event[2]);if(eventBase.tgid===undefined){return false;}
+const tgid=parseInt(eventBase.tgid);const process=this.importer.model_.getOrCreateProcess(tgid);let subTitle='';if(member===0){subTitle=' (file pages)';}else if(member===1){subTitle=' (anon)';}
+const rssCounter=process.getOrCreateCounter('RSS','RSS '+member+subTitle);if(rssCounter.numSeries===0){rssCounter.addSeries(new tr.model.CounterSeries('RSS',tr.b.ColorScheme.getColorIdForGeneralPurposeString(rssCounter.name)));}
+rssCounter.series.forEach(function(series){series.addCounterSample(ts,size);});return true;},};Parser.register(RssParser);return{RssParser,_RssParserTestExports:TestExports};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const Parser=tr.e.importer.linux_perf.Parser;function SchedParser(importer){Parser.call(this,importer);importer.registerEventHandler('sched_switch',SchedParser.prototype.schedSwitchEvent.bind(this));importer.registerEventHandler('sched_wakeup',SchedParser.prototype.schedWakeupEvent.bind(this));importer.registerEventHandler('sched_blocked_reason',SchedParser.prototype.schedBlockedEvent.bind(this));importer.registerEventHandler('sched_cpu_hotplug',SchedParser.prototype.schedCpuHotplugEvent.bind(this));}
+const TestExports={};const schedSwitchRE=new RegExp('prev_comm=(.+) prev_pid=(\\d+) prev_prio=(\\d+) '+'prev_state=(\\S\\+?|\\S\\|\\S) ==> '+'next_comm=(.+) next_pid=(\\d+) next_prio=(\\d+)');const schedBlockedRE=new RegExp('pid=(\\d+) iowait=(\\d) caller=(.+)');TestExports.schedSwitchRE=schedSwitchRE;const schedWakeupRE=/comm=(.+) pid=(\d+) prio=(\d+)(?: success=\d+)? target_cpu=(\d+)/;TestExports.schedWakeupRE=schedWakeupRE;const unknownThreadName='<...>';SchedParser.prototype={__proto__:Parser.prototype,schedSwitchEvent(eventName,cpuNumber,pid,ts,eventBase){const event=schedSwitchRE.exec(eventBase.details);if(!event)return false;const prevState=event[4];const nextComm=event[5];const nextPid=parseInt(event[6]);const nextPrio=parseInt(event[7]);if(eventBase.tgid!==undefined){const tgid=parseInt(eventBase.tgid);const process=this.importer.model_.getOrCreateProcess(tgid);const storedThread=process.getThread(pid);if(!storedThread){const thread=process.getOrCreateThread(pid);thread.name=eventBase.threadName;}else if(storedThread.name===unknownThreadName){storedThread.name=eventBase.threadName;}}
const nextThread=this.importer.threadsByLinuxPid[nextPid];let nextName;if(nextThread){nextName=nextThread.userFriendlyName;}else{nextName=nextComm;}
const cpu=this.importer.getOrCreateCpu(cpuNumber);cpu.switchActiveThread(ts,{stateWhenDescheduled:prevState},nextPid,nextName,{comm:nextComm,tid:nextPid,prio:nextPrio});return true;},schedWakeupEvent(eventName,cpuNumber,pid,ts,eventBase){const event=schedWakeupRE.exec(eventBase.details);if(!event)return false;const fromPid=pid;const comm=event[1];pid=parseInt(event[2]);const prio=parseInt(event[3]);this.importer.markPidRunnable(ts,pid,comm,prio,fromPid);return true;},schedCpuHotplugEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/cpu (\d+) (.+) error=(\d+)/.exec(eventBase.details);if(!event)return false;cpuNumber=event[1];const state=event[2];const targetCpu=this.importer.getOrCreateCpu(cpuNumber);const powerCounter=targetCpu.getOrCreateCounter('','Cpu Hotplug');if(powerCounter.numSeries===0){powerCounter.addSeries(new tr.model.CounterSeries('State',tr.b.ColorScheme.getColorIdForGeneralPurposeString(powerCounter.name+'.'+'State')));}
powerCounter.series.forEach(function(series){if(series.name==='State'){series.addCounterSample(ts,state.localeCompare('offline')?0:1);}});return true;},schedBlockedEvent(eventName,cpuNumber,pid,ts,eventBase){const event=schedBlockedRE.exec(eventBase.details);if(!event)return false;pid=parseInt(event[1]);const iowait=parseInt(event[2]);const caller=event[3];this.importer.addPidBlockedReason(ts,pid,iowait,caller);return true;}};Parser.register(SchedParser);return{SchedParser,_SchedParserTestExports:TestExports};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function SyncParser(importer){Parser.call(this,importer);importer.registerEventHandler('sync_timeline',SyncParser.prototype.timelineEvent.bind(this));importer.registerEventHandler('sync_wait',SyncParser.prototype.syncWaitEvent.bind(this));importer.registerEventHandler('sync_pt',SyncParser.prototype.syncPtEvent.bind(this));this.model_=importer.model_;}
@@ -5954,8 +6290,8 @@ function stripSuffix(str,suffix){if(!endsWith(str,suffix))return str;return str.
let events=[];if(produceResult){for(let i=0;i<rawEvents.length;i++){let event=rawEvents[i];event=stripSuffix(event,'\\n\\');events.push(event);}}else{events=[rawEvents[rawEvents.length-1]];}
const oldLastEvent=events[events.length-1];const newLastEvent=stripSuffix(oldLastEvent,'\\n";');if(newLastEvent===oldLastEvent)return failure;events[events.length-1]=newLastEvent;return{ok:true,lines:produceResult?events:undefined,eventsBeginAtLine};};FTraceImporter._extractEventsFromSystraceMultiHTML=function(incomingEvents,produceResult){const failure={ok:false};if(produceResult===undefined)produceResult=true;const header=incomingEvents instanceof tr.b.TraceStream?incomingEvents.header:incomingEvents;if(!(new RegExp('^<!DOCTYPE HTML>','i').test(header)))return failure;const r=new tr.importer.SimpleLineReader(incomingEvents);let events=[];let eventsBeginAtLine;while(!/^# tracer:/.test(events)){if(!r.advanceToLineMatching(/^ <script class="trace-data" type="application\/text">$/)){return failure;}
eventsBeginAtLine=r.curLineNumber+1;r.beginSavingLines();if(!r.advanceToLineMatching(/^ <\/script>$/))return failure;events=r.endSavingLinesAndGetResult();events=events.slice(1,events.length-1);}
-if(!r.advanceToLineMatching(/^<\/body>$/))return failure;if(!r.advanceToLineMatching(/^<\/html>$/))return failure;return{ok:true,lines:produceResult?events:undefined,eventsBeginAtLine,};};FTraceImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'FTraceImporter';},get model(){return this.model_;},importClockSyncMarkers(){this.lazyInit_();this.forEachLine_(function(text,eventBase,cpuNumber,pid,ts){const eventName=eventBase.eventName;if(eventName!=='tracing_mark_write'&&eventName!=='0')return;if(traceEventClockSyncRE.exec(eventBase.details)||genericClockSyncRE.exec(eventBase.details)){this.traceClockSyncEvent_(eventName,cpuNumber,pid,ts,eventBase);}else if(realTimeClockSyncRE.exec(eventBase.details)){const match=realTimeClockSyncRE.exec(eventBase.details);this.model_.realtime_to_monotonic_offset_ms=ts-match[1];}}.bind(this));},importEvents(){const modelTimeTransformer=this.model_.clockSyncManager.getModelTimeTransformer(this.clockDomainId_);this.importCpuData_(modelTimeTransformer);this.buildMapFromLinuxPidsToThreads_();this.buildPerThreadCpuSlicesFromCpuState_();},registerEventHandler(eventName,handler){this.eventHandlers_[eventName]=handler;},getOrCreateCpu(cpuNumber){return this.model_.kernel.getOrCreateCpu(cpuNumber);},getOrCreateKernelThread(kernelThreadName,pid,tid){if(!this.kernelThreadStates_[kernelThreadName]){const thread=this.model_.getOrCreateProcess(pid).getOrCreateThread(tid);thread.name=kernelThreadName;this.kernelThreadStates_[kernelThreadName]={pid,thread,openSlice:undefined,openSliceTS:undefined};this.threadsByLinuxPid[pid]=thread;}
-return this.kernelThreadStates_[kernelThreadName];},getOrCreateBinderKernelThread(kernelThreadName,pid,tid){const key=kernelThreadName+pid+tid;if(!this.kernelThreadStates_[key]){const thread=this.model_.getOrCreateProcess(pid).getOrCreateThread(tid);thread.name=kernelThreadName;this.kernelThreadStates_[key]={pid,thread,openSlice:undefined,openSliceTS:undefined};this.threadsByLinuxPid[pid]=thread;}
+if(!r.advanceToLineMatching(/^<\/body>$/))return failure;if(!r.advanceToLineMatching(/^<\/html>$/))return failure;return{ok:true,lines:produceResult?events:undefined,eventsBeginAtLine,};};FTraceImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'FTraceImporter';},get model(){return this.model_;},importClockSyncMarkers(){this.lazyInit_();this.forEachLine_(function(text,eventBase,cpuNumber,pid,ts){const eventName=eventBase.eventName;if(eventName!=='tracing_mark_write'&&eventName!=='0')return;if(traceEventClockSyncRE.exec(eventBase.details)||genericClockSyncRE.exec(eventBase.details)){this.traceClockSyncEvent_(eventName,cpuNumber,pid,ts,eventBase);}else if(realTimeClockSyncRE.exec(eventBase.details)){const match=realTimeClockSyncRE.exec(eventBase.details);this.model_.realtime_to_monotonic_offset_ms=ts-match[1];}}.bind(this));},importEvents(){if(this.lines_.length===0)return;const modelTimeTransformer=this.model_.clockSyncManager.getModelTimeTransformer(this.clockDomainId_);this.importCpuData_(modelTimeTransformer);this.buildMapFromLinuxPidsToThreads_();this.buildPerThreadCpuSlicesFromCpuState_();},registerEventHandler(eventName,handler){this.eventHandlers_[eventName]=handler;},getOrCreateCpu(cpuNumber){return this.model_.kernel.getOrCreateCpu(cpuNumber);},getOrCreateKernelThread(kernelThreadName,pid,tid){if(!this.kernelThreadStates_[kernelThreadName]){const thread=this.model_.getOrCreateProcess(pid).getOrCreateThread(tid);thread.name=kernelThreadName;this.kernelThreadStates_[kernelThreadName]={pid,thread,openSlice:undefined,openSliceTS:undefined};this.threadsByLinuxPid[tid]=thread;}
+return this.kernelThreadStates_[kernelThreadName];},getOrCreateBinderKernelThread(kernelThreadName,pid,tid){const key=kernelThreadName+pid+tid;if(!this.kernelThreadStates_[key]){const thread=this.model_.getOrCreateProcess(pid).getOrCreateThread(tid);thread.name=kernelThreadName;this.kernelThreadStates_[key]={pid,thread,openSlice:undefined,openSliceTS:undefined};this.threadsByLinuxPid[tid]=thread;}
return this.kernelThreadStates_[key];},getOrCreatePseudoThread(threadName){let thread=this.kernelThreadStates_[threadName];if(!thread){thread=this.getOrCreateKernelThread(threadName,pseudoKernelPID,this.pseudoThreadCounter);this.pseudoThreadCounter++;}
return thread;},markPidRunnable(ts,pid,comm,prio,fromPid){this.wakeups_.push({ts,tid:pid,fromTid:fromPid});},addPidBlockedReason(ts,pid,iowait,caller){this.blockedReasons_.push({ts,tid:pid,iowait,caller});},buildMapFromLinuxPidsToThreads_(){this.threadsByLinuxPid={};this.model_.getAllThreads().forEach(function(thread){this.threadsByLinuxPid[thread.tid]=thread;}.bind(this));},buildPerThreadCpuSlicesFromCpuState_(){const SCHEDULING_STATE=tr.model.SCHEDULING_STATE;for(const cpuNumber in this.model_.kernel.cpus){const cpu=this.model_.kernel.cpus[cpuNumber];for(let i=0;i<cpu.slices.length;i++){const cpuSlice=cpu.slices[i];const thread=this.threadsByLinuxPid[cpuSlice.args.tid];if(!thread)continue;cpuSlice.threadThatWasRunning=thread;if(!thread.tempCpuSlices){thread.tempCpuSlices=[];}
thread.tempCpuSlices.push(cpuSlice);}}
@@ -6071,12 +6407,13 @@ throw new Error('Invalid titles in combineInitiatorTypes');}
ProtoExpectation.prototype={get isValid(){return this.end>this.start;},containsTypeNames(typeNames){return this.associatedEvents.some(x=>typeNames.indexOf(x.typeName)>=0);},containsSliceTitle(title){return this.associatedEvents.some(x=>title===x.title);},createInteractionRecord(model){if(this.type!==ProtoExpectation.IGNORED_TYPE&&!this.isValid){model.importWarning({type:'ProtoExpectation',message:'Please file a bug with this trace. '+this.debug(),showToUser:true});return undefined;}
const duration=this.end-this.start;let ir=undefined;switch(this.type){case ProtoExpectation.RESPONSE_TYPE:ir=new tr.model.um.ResponseExpectation(model,this.initiatorType,this.start,duration,this.isAnimationBegin);break;case ProtoExpectation.ANIMATION_TYPE:ir=new tr.model.um.AnimationExpectation(model,this.initiatorType,this.start,duration);break;}
if(!ir)return undefined;ir.sourceEvents.addEventSet(this.associatedEvents);function pushAssociatedEvents(event){ir.associatedEvents.push(event);if(event.associatedEvents){ir.associatedEvents.addEventSet(event.associatedEvents);}}
-this.associatedEvents.forEach(function(event){pushAssociatedEvents(event);if(event.subSlices){event.subSlices.forEach(pushAssociatedEvents);}});return ir;},merge(other){this.initiatorType=combineInitiatorTypes(this.initiatorType,other.initiatorType);this.associatedEvents.addEventSet(other.associatedEvents);this.start=Math.min(this.start,other.start);this.end=Math.max(this.end,other.end);if(other.isAnimationBegin){this.isAnimationBegin=true;}},pushEvent(event){this.start=Math.min(this.start,event.start);this.end=Math.max(this.end,event.end);this.associatedEvents.push(event);},pushSample(sample){this.start=Math.min(this.start,sample.timestamp);this.end=Math.max(this.end,sample.timestamp);this.associatedEvents.push(sample);},containsTimestampInclusive(timestamp){return(this.start<=timestamp)&&(timestamp<=this.end);},intersects(other){return(other.start<this.end)&&(other.end>this.start);},isNear(event,threshold){return(this.end+threshold)>event.start;},debug(){let debugString=this.type+'(';debugString+=parseInt(this.start)+' ';debugString+=parseInt(this.end);this.associatedEvents.forEach(function(event){debugString+=' '+event.typeName;});return debugString+')';}};return{ProtoExpectation,};});'use strict';tr.exportTo('tr.importer',function(){const ProtoExpectation=tr.importer.ProtoExpectation;const INITIATOR_TYPE=tr.model.um.INITIATOR_TYPE;const INPUT_TYPE=tr.e.cc.INPUT_EVENT_TYPE_NAMES;const KEYBOARD_TYPE_NAMES=[INPUT_TYPE.CHAR,INPUT_TYPE.KEY_DOWN_RAW,INPUT_TYPE.KEY_DOWN,INPUT_TYPE.KEY_UP];const MOUSE_RESPONSE_TYPE_NAMES=[INPUT_TYPE.CLICK,INPUT_TYPE.CONTEXT_MENU];const MOUSE_WHEEL_TYPE_NAMES=[INPUT_TYPE.MOUSE_WHEEL];const MOUSE_DRAG_TYPE_NAMES=[INPUT_TYPE.MOUSE_DOWN,INPUT_TYPE.MOUSE_MOVE,INPUT_TYPE.MOUSE_UP];const TAP_TYPE_NAMES=[INPUT_TYPE.TAP,INPUT_TYPE.TAP_CANCEL,INPUT_TYPE.TAP_DOWN];const PINCH_TYPE_NAMES=[INPUT_TYPE.PINCH_BEGIN,INPUT_TYPE.PINCH_END,INPUT_TYPE.PINCH_UPDATE];const FLING_TYPE_NAMES=[INPUT_TYPE.FLING_CANCEL,INPUT_TYPE.FLING_START];const TOUCH_TYPE_NAMES=[INPUT_TYPE.TOUCH_END,INPUT_TYPE.TOUCH_MOVE,INPUT_TYPE.TOUCH_START];const SCROLL_TYPE_NAMES=[INPUT_TYPE.SCROLL_BEGIN,INPUT_TYPE.SCROLL_END,INPUT_TYPE.SCROLL_UPDATE];const ALL_HANDLED_TYPE_NAMES=[].concat(KEYBOARD_TYPE_NAMES,MOUSE_RESPONSE_TYPE_NAMES,MOUSE_WHEEL_TYPE_NAMES,MOUSE_DRAG_TYPE_NAMES,PINCH_TYPE_NAMES,TAP_TYPE_NAMES,FLING_TYPE_NAMES,TOUCH_TYPE_NAMES,SCROLL_TYPE_NAMES);const RENDERER_FLING_TITLE='InputHandlerProxy::HandleGestureFling::started';const PLAYBACK_EVENT_TITLE='VideoPlayback';const CSS_ANIMATION_TITLE='Animation';const VR_COUNTER_NAMES=['gpu.WebVR FPS','gpu.WebVR frame time (ms)','gpu.WebVR pose prediction (ms)',];const VR_EVENT_NAMES=['VrShellGl::AcquireFrame','VrShellGl::DrawFrame','VrShellGl::DrawSubmitFrameWhenReady','VrShellGl::DrawUiView','VrShellGl::UpdateController',];const VR_RESPONSE_MS=500;const INPUT_MERGE_THRESHOLD_MS=200;const ANIMATION_MERGE_THRESHOLD_MS=32;const MOUSE_WHEEL_THRESHOLD_MS=40;const MOUSE_MOVE_THRESHOLD_MS=40;function compareEvents(x,y){if(x.start!==y.start){return x.start-y.start;}
+this.associatedEvents.forEach(function(event){pushAssociatedEvents(event);if(event.subSlices){event.subSlices.forEach(pushAssociatedEvents);}});return ir;},merge(other){this.initiatorType=combineInitiatorTypes(this.initiatorType,other.initiatorType);this.associatedEvents.addEventSet(other.associatedEvents);this.start=Math.min(this.start,other.start);this.end=Math.max(this.end,other.end);if(other.isAnimationBegin){this.isAnimationBegin=true;}},pushEvent(event){this.start=Math.min(this.start,event.start);this.end=Math.max(this.end,event.end);this.associatedEvents.push(event);},pushSample(sample){this.start=Math.min(this.start,sample.timestamp);this.end=Math.max(this.end,sample.timestamp);this.associatedEvents.push(sample);},containsTimestampInclusive(timestamp){return(this.start<=timestamp)&&(timestamp<=this.end);},intersects(other){return(other.start<this.end)&&(other.end>this.start);},isNear(event,threshold){return(this.end+threshold)>event.start;},debug(){let debugString=this.type+'(';debugString+=parseInt(this.start)+' ';debugString+=parseInt(this.end);this.associatedEvents.forEach(function(event){debugString+=' '+event.typeName;});return debugString+')';}};return{ProtoExpectation,};});'use strict';tr.exportTo('tr.importer',function(){const ProtoExpectation=tr.importer.ProtoExpectation;const INITIATOR_TYPE=tr.model.um.INITIATOR_TYPE;const INPUT_TYPE=tr.e.cc.INPUT_EVENT_TYPE_NAMES;const KEYBOARD_TYPE_NAMES=[INPUT_TYPE.CHAR,INPUT_TYPE.KEY_DOWN_RAW,INPUT_TYPE.KEY_DOWN,INPUT_TYPE.KEY_UP];const MOUSE_RESPONSE_TYPE_NAMES=[INPUT_TYPE.CLICK,INPUT_TYPE.CONTEXT_MENU];const MOUSE_WHEEL_TYPE_NAMES=[INPUT_TYPE.MOUSE_WHEEL];const MOUSE_DRAG_TYPE_NAMES=[INPUT_TYPE.MOUSE_DOWN,INPUT_TYPE.MOUSE_MOVE,INPUT_TYPE.MOUSE_UP];const TAP_TYPE_NAMES=[INPUT_TYPE.TAP,INPUT_TYPE.TAP_CANCEL,INPUT_TYPE.TAP_DOWN];const PINCH_TYPE_NAMES=[INPUT_TYPE.PINCH_BEGIN,INPUT_TYPE.PINCH_END,INPUT_TYPE.PINCH_UPDATE];const FLING_TYPE_NAMES=[INPUT_TYPE.FLING_CANCEL,INPUT_TYPE.FLING_START];const TOUCH_TYPE_NAMES=[INPUT_TYPE.TOUCH_END,INPUT_TYPE.TOUCH_MOVE,INPUT_TYPE.TOUCH_START];const SCROLL_TYPE_NAMES=[INPUT_TYPE.SCROLL_BEGIN,INPUT_TYPE.SCROLL_END,INPUT_TYPE.SCROLL_UPDATE];const ALL_HANDLED_TYPE_NAMES=[].concat(KEYBOARD_TYPE_NAMES,MOUSE_RESPONSE_TYPE_NAMES,MOUSE_WHEEL_TYPE_NAMES,MOUSE_DRAG_TYPE_NAMES,PINCH_TYPE_NAMES,TAP_TYPE_NAMES,FLING_TYPE_NAMES,TOUCH_TYPE_NAMES,SCROLL_TYPE_NAMES);const RENDERER_FLING_TITLE='InputHandlerProxy::HandleGestureFling::started';const PLAYBACK_EVENT_TITLE='VideoPlayback';const CSS_ANIMATION_TITLE='Animation';const VR_COUNTER_NAMES=['gpu.WebVR FPS','gpu.WebVR frame time (ms)','gpu.WebVR pose prediction (ms)','gpu.WebXR FPS',];const VR_EXPECTATION_EVENTS={'Vr.AcquireGvrFrame':{'histogramName':'acquire_frame','description':'Duration acquire a frame from GVR','hasCpuTime':true,},'Vr.DrawFrame':{'histogramName':'draw_frame','description':'Duration to render one frame','hasCpuTime':true,},'Vr.PostSubmitDrawOnGpu':{'histogramName':'post_submit_draw_on_gpu','description':'Duration to draw a frame on GPU post submit to '+'GVR. Note this duration may include time spent on '+'reprojection','hasCpuTime':false,},'Vr.ProcessControllerInput':{'histogramName':'update_controller','description':'Duration to query input from the controller','hasCpuTime':true,},'Vr.ProcessControllerInputForWebXr':{'histogramName':'update_controller_webxr','description':'Duration to query input from the controller for WebXR','hasCpuTime':true,},'Vr.SubmitFrameNow':{'histogramName':'submit_frame','description':'Duration to submit a frame to GVR','hasCpuTime':true,}};const WEBXR_INSTANT_EVENTS={'WebXR frame time (ms)':{'javascript':{'histogramName':'webxr_frame_time_javascript','description':'WebXR frame time spent on JavaScript',},'rendering':{'histogramName':'webxr_frame_time_rendering','description':'WebXR frame time spent on rendering'}},'WebXR pose prediction':{'milliseconds':{'histogramName':'webxr_pose_prediction','description':'WebXR pose prediction in ms',},},};const XR_DEVICE_SERVICE_PROCESS='Service: xr_device_service';function isXrDeviceServiceProcess(process){if(process.name===XR_DEVICE_SERVICE_PROCESS)return true;return false;}
+const VR_RESPONSE_MS=1000;const INPUT_MERGE_THRESHOLD_MS=200;const ANIMATION_MERGE_THRESHOLD_MS=32;const MOUSE_WHEEL_THRESHOLD_MS=40;const MOUSE_MOVE_THRESHOLD_MS=40;function compareEvents(x,y){if(x.start!==y.start){return x.start-y.start;}
if(x.end!==y.end){return x.end-y.end;}
if(x.guid&&y.guid){return x.guid-y.guid;}
return 0;}
function forEventTypesIn(events,typeNames,cb,opt_this){events.forEach(function(event){if(typeNames.indexOf(event.typeName)>=0){cb.call(opt_this,event);}});}
-function causedFrame(event){return event.associatedEvents.some(x=>x.title===tr.model.helpers.IMPL_RENDERING_STATS);}
+function causedFrame(event){return event.associatedEvents.some(isImplFrameEvent);}
function getSortedFrameEventsByProcess(modelHelper){const frameEventsByPid={};for(const[pid,rendererHelper]of
Object.entries(modelHelper.rendererHelpers)){frameEventsByPid[pid]=rendererHelper.getFrameEventsInRange(tr.model.helpers.IMPL_FRAMETIME_TYPE,modelHelper.model.bounds);}
return frameEventsByPid;}
@@ -6128,9 +6465,10 @@ return protoExpectations;}
function handleVrAnimations(modelHelper,sortedInputEvents,warn){const events=[];const processes=[];if(typeof modelHelper.gpuHelper!=='undefined'){processes.push(modelHelper.gpuHelper.process);}
for(const helper of Object.values(modelHelper.rendererHelpers)){processes.push(helper.process);}
for(const helper of Object.values(modelHelper.browserHelpers)){processes.push(helper.process);}
+for(const service of modelHelper.model.getAllProcesses(isXrDeviceServiceProcess)){processes.push(service);}
let vrCounterStart=Number.MAX_SAFE_INTEGER;let vrEventStart=Number.MAX_SAFE_INTEGER;for(const proc of processes){for(const[counterName,counterSeries]of
Object.entries(proc.counters)){if(VR_COUNTER_NAMES.includes(counterName)){for(const series of counterSeries.series){for(const sample of series.samples){events.push(sample);vrCounterStart=Math.min(vrCounterStart,sample.timestamp);}}}}
-for(const thread of Object.values(proc.threads)){for(const container of thread.childEventContainers()){for(const slice of container.slices){if(VR_EVENT_NAMES.includes(slice.title)){events.push(slice);vrEventStart=Math.min(vrEventStart,slice.start);}}}}}
+for(const thread of Object.values(proc.threads)){for(const container of thread.childEventContainers()){for(const slice of container.slices){if(slice.title in VR_EXPECTATION_EVENTS||slice.title in WEBXR_INSTANT_EVENTS){events.push(slice);vrEventStart=Math.min(vrEventStart,slice.start);}}}}}
if(events.length===0){return[];}
events.sort(function(x,y){if(x.range.min!==y.range.min){return x.range.min-y.range.min;}
return x.guid-y.guid;});vrCounterStart=(vrCounterStart===Number.MAX_SAFE_INTEGER)?0:vrCounterStart;vrEventStart=(vrEventStart===Number.MAX_SAFE_INTEGER)?0:vrEventStart;const vrAnimationStart=Math.max(vrCounterStart,vrEventStart)+
@@ -6159,7 +6497,8 @@ function fixResponseAnimationStarts(protoExpectations){protoExpectations.forEach
protoExpectations.forEach(function(rpe){if(rpe.type!==ProtoExpectation.RESPONSE_TYPE){return;}
if(!ape.containsTimestampInclusive(rpe.end)){return;}
if(ape.containsTimestampInclusive(rpe.start)){return;}
-ape.start=rpe.end;});});return protoExpectations;}
+ape.start=rpe.end;if(ape.associatedEvents!==undefined){ape.associatedEvents=ape.associatedEvents.filter(e=>(!isImplFrameEvent(e)||e.start>=ape.start));}});});return protoExpectations;}
+function isImplFrameEvent(event){return event.title===tr.model.helpers.IMPL_RENDERING_STATS;}
function fixTapResponseTouchAnimations(protoExpectations){function isTapResponse(pe){return(pe.type===ProtoExpectation.RESPONSE_TYPE)&&pe.containsTypeNames([INPUT_TYPE.TAP]);}
function isTouchAnimation(pe){return(pe.type===ProtoExpectation.ANIMATION_TYPE)&&pe.containsTypeNames([INPUT_TYPE.TOUCH_MOVE])&&!pe.containsTypeNames([INPUT_TYPE.SCROLL_UPDATE,INPUT_TYPE.PINCH_UPDATE]);}
const newPEs=[];while(protoExpectations.length){const pe=protoExpectations.shift();newPEs.push(pe);const peIsTapResponse=isTapResponse(pe);const peIsTouchAnimation=isTouchAnimation(pe);if(!peIsTapResponse&&!peIsTouchAnimation){continue;}
@@ -6171,11 +6510,11 @@ if(frameEvents.length===0&&!(pe.initiatorType===INITIATOR_TYPE.WEBGL||pe.initiat
pe.associatedEvents.addEventSet(frameEvents);newPEs.push(pe);}
return newPEs;}
function checkAllInputEventsHandled(modelHelper,sortedInputEvents,protoExpectations,warn){const handledEvents=[];protoExpectations.forEach(function(protoExpectation){protoExpectation.associatedEvents.forEach(function(event){if((event.title===CSS_ANIMATION_TITLE)&&(event.subSlices.length>0)){return;}
-if((handledEvents.indexOf(event)>=0)&&(event.title!==tr.model.helpers.IMPL_RENDERING_STATS)){warn({type:'UserModelBuilder',message:`double-handled event: ${event.typeName} @ ${event.start}`,showToUser:false,});return;}
+if((handledEvents.indexOf(event)>=0)&&(!isImplFrameEvent(event))){warn({type:'UserModelBuilder',message:`double-handled event: ${event.typeName} @ ${event.start}`,showToUser:false,});return;}
handledEvents.push(event);});});sortedInputEvents.forEach(function(event){if(handledEvents.indexOf(event)<0){warn({type:'UserModelBuilder',message:`double-handled event: ${event.typeName} @ ${event.start}`,showToUser:false,});}});}
function findInputExpectations(modelHelper){let warning;function warn(w){if(warning)return;warning=w;}
const sortedInputEvents=getSortedInputEvents(modelHelper);let protoExpectations=findProtoExpectations(modelHelper,sortedInputEvents,warn);protoExpectations=postProcessProtoExpectations(modelHelper,protoExpectations);checkAllInputEventsHandled(modelHelper,sortedInputEvents,protoExpectations,warn);if(warning)modelHelper.model.importWarning(warning);const expectations=[];protoExpectations.forEach(function(protoExpectation){const ir=protoExpectation.createInteractionRecord(modelHelper.model);if(ir){expectations.push(ir);}});return expectations;}
-return{findInputExpectations,compareEvents,CSS_ANIMATION_TITLE,};});'use strict';tr.exportTo('tr.b',function(){class FixedColorScheme{constructor(namesToColors){this.namesToColors_=namesToColors;}
+return{findInputExpectations,compareEvents,CSS_ANIMATION_TITLE,VR_EXPECTATION_EVENTS,WEBXR_INSTANT_EVENTS,};});'use strict';tr.exportTo('tr.b',function(){class FixedColorScheme{constructor(namesToColors){this.namesToColors_=namesToColors;}
static fromNames(names){const namesToColors=new Map();const generator=new tr.b.SinebowColorGenerator();for(const name of names){namesToColors.set(name,generator.colorForKey(name));}
return new FixedColorScheme(namesToColors);}
getColor(name){const color=this.namesToColors_.get(name);if(color===undefined)throw new Error('Unknown color: '+name);return color;}}
@@ -6194,18 +6533,25 @@ function makeKeyUniqueAndSet(map,key,value){let uniqueKey=key;let nextIndex=2;wh
map.set(uniqueKey,value);}
function skipDumpsThatDoNotIntersectRange(dumps,opt_range){if(!opt_range)return dumps;return dumps.filter(d=>opt_range.intersectsExplicitRangeInclusive(d.start,d.end));}
function hasCategoryAndName(event,category,title){return event.title===title&&event.category&&tr.b.getCategoryParts(event.category).includes(category);}
-return{hasCategoryAndName,filterExpectationsByRange,perceptualBlend,splitGlobalDumpsByBrowserName};});'use strict';tr.exportTo('tr.e.chrome',function(){class EventFinderUtils{static hasCategoryAndName(event,category,title){return event.title===title&&event.category&&tr.b.getCategoryParts(event.category).includes(category);}
-static getSortedMainThreadEventsByFrame(rendererHelper,eventTitle,eventCategory){const eventsByFrame=new Map();for(const ev of rendererHelper.mainThread.sliceGroup.childEvents()){if(rendererHelper.isTelemetryInternalEvent(ev))continue;if(!this.hasCategoryAndName(ev,eventCategory,eventTitle)){continue;}
-const frameIdRef=ev.args.frame;if(frameIdRef===undefined)continue;if(!eventsByFrame.has(frameIdRef)){eventsByFrame.set(frameIdRef,[]);}
+return{hasCategoryAndName,filterExpectationsByRange,perceptualBlend,splitGlobalDumpsByBrowserName};});'use strict';tr.exportTo('tr.e.chrome',function(){const CHROME_INTERNAL_URLS=['','about:blank','data:text/html,pluginplaceholderdata','chrome-error://chromewebdata/'];const SCHEDULER_TOP_LEVEL_TASK_TITLE='ThreadControllerImpl::RunTask';const SCHEDULER_TOP_LEVEL_TASKS=new Set([SCHEDULER_TOP_LEVEL_TASK_TITLE,'ThreadControllerImpl::DoWork','TaskQueueManager::ProcessTaskFromWorkQueue']);class EventFinderUtils{static hasCategoryAndName(event,category,title){return event.title===title&&event.category&&tr.b.getCategoryParts(event.category).includes(category);}
+static*getMainThreadEvents(rendererHelper,eventTitle,eventCategory){if(!rendererHelper.mainThread)return;for(const ev of rendererHelper.mainThread.sliceGroup.childEvents()){if(rendererHelper.isTelemetryInternalEvent(ev))continue;if(!this.hasCategoryAndName(ev,eventCategory,eventTitle)){continue;}
+yield ev;}}
+static getNetworkEventsInRange(process,range){const networkEvents=[];for(const thread of Object.values(process.threads)){const threadHelper=new tr.model.helpers.ChromeThreadHelper(thread);const events=threadHelper.getNetworkEvents();for(const event of events){if(range.intersectsExplicitRangeInclusive(event.start,event.end)){networkEvents.push(event);}}}
+return networkEvents;}
+static getSortedMainThreadEventsByFrame(rendererHelper,eventTitle,eventCategory){const eventsByFrame=new Map();const events=this.getMainThreadEvents(rendererHelper,eventTitle,eventCategory);for(const ev of events){const frameIdRef=ev.args.frame;if(frameIdRef===undefined)continue;if(!eventsByFrame.has(frameIdRef)){eventsByFrame.set(frameIdRef,[]);}
eventsByFrame.get(frameIdRef).push(ev);}
return eventsByFrame;}
+static getSortedMainThreadEventsByNavId(rendererHelper,eventTitle,eventCategory){const eventsByNavId=new Map();const events=this.getMainThreadEvents(rendererHelper,eventTitle,eventCategory);for(const ev of events){if(ev.args.data===undefined)continue;const navIdRef=ev.args.data.navigationId;if(navIdRef===undefined)continue;eventsByNavId.set(navIdRef,ev);}
+return eventsByNavId;}
static findLastEventStartingOnOrBeforeTimestamp(sortedEvents,timestamp){const firstIndexAfterTimestamp=tr.b.findFirstTrueIndexInSortedArray(sortedEvents,e=>e.start>timestamp);if(firstIndexAfterTimestamp===0)return undefined;return sortedEvents[firstIndexAfterTimestamp-1];}
static findLastEventStartingBeforeTimestamp(sortedEvents,timestamp){const firstIndexAfterTimestamp=tr.b.findFirstTrueIndexInSortedArray(sortedEvents,e=>e.start>=timestamp);if(firstIndexAfterTimestamp===0)return undefined;return sortedEvents[firstIndexAfterTimestamp-1];}
static findNextEventStartingOnOrAfterTimestamp(sortedEvents,timestamp){const firstIndexOnOrAfterTimestamp=tr.b.findFirstTrueIndexInSortedArray(sortedEvents,e=>e.start>=timestamp);if(firstIndexOnOrAfterTimestamp===sortedEvents.length){return undefined;}
return sortedEvents[firstIndexOnOrAfterTimestamp];}
static findNextEventStartingAfterTimestamp(sortedEvents,timestamp){const firstIndexOnOrAfterTimestamp=tr.b.findFirstTrueIndexInSortedArray(sortedEvents,e=>e.start>timestamp);if(firstIndexOnOrAfterTimestamp===sortedEvents.length){return undefined;}
-return sortedEvents[firstIndexOnOrAfterTimestamp];}}
-return{EventFinderUtils,};});'use strict';tr.exportTo('tr.e.chrome',function(){const TIME_TO_INTERACTIVE_WINDOW_SIZE_MS=5000;const ACTIVE_REQUEST_TOLERANCE=2;const FCI_MIN_CLUSTER_SEPARATION_MS=1000;const TASK_CLUSTER_HEAVINESS_THRESHOLD_MS=250;const ENDPOINT_TYPES={LONG_TASK_START:'LONG_TASK_START',LONG_TASK_END:'LONG_TASK_END',REQUEST_START:'REQUEST_START',REQUEST_END:'REQUEST_END'};function getEndpoints_(events,startType,endType){const endpoints=[];for(const event of events){endpoints.push({time:event.start,type:startType});endpoints.push({time:event.end,type:endType});}
+return sortedEvents[firstIndexOnOrAfterTimestamp];}
+static findToplevelSchedulerTasks(mainThread){const tasks=[];for(const task of mainThread.findTopmostSlices(slice=>slice.category==='toplevel'&&SCHEDULER_TOP_LEVEL_TASKS.has(slice.title))){tasks.push(task);}
+return tasks;}}
+return{EventFinderUtils,CHROME_INTERNAL_URLS,SCHEDULER_TOP_LEVEL_TASK_TITLE,};});'use strict';tr.exportTo('tr.e.chrome',function(){const TIME_TO_INTERACTIVE_WINDOW_SIZE_MS=5000;const ACTIVE_REQUEST_TOLERANCE=2;const FCI_MIN_CLUSTER_SEPARATION_MS=1000;const TASK_CLUSTER_HEAVINESS_THRESHOLD_MS=250;const ENDPOINT_TYPES={LONG_TASK_START:'LONG_TASK_START',LONG_TASK_END:'LONG_TASK_END',REQUEST_START:'REQUEST_START',REQUEST_END:'REQUEST_END'};function getEndpoints_(events,startType,endType){const endpoints=[];for(const event of events){endpoints.push({time:event.start,type:startType});endpoints.push({time:event.end,type:endType});}
return endpoints;}
function reachedTTIQuiscence_(timestamp,networkQuietWindowStart,mainThreadQuietWindowStart){if(networkQuietWindowStart===undefined||mainThreadQuietWindowStart===undefined){return false;}
const mainThreadQuietForLongEnough=timestamp-mainThreadQuietWindowStart>=TIME_TO_INTERACTIVE_WINDOW_SIZE_MS;const networkQuietForLongEnough=timestamp-networkQuietWindowStart>=TIME_TO_INTERACTIVE_WINDOW_SIZE_MS;return mainThreadQuietForLongEnough&&networkQuietForLongEnough;}
@@ -6234,22 +6580,22 @@ return Math.max(fiCandidate,domContentLoadedEnd);}
return{findInteractiveTime,findFirstCpuIdleTime,requiredFCIWindowSizeMs,findFCITaskClusters,};});'use strict';tr.exportTo('tr.model.um',function(){const LOAD_SUBTYPE_NAMES={SUCCESSFUL:'Successful',FAILED:'Failed',};const DOES_LOAD_SUBTYPE_NAME_EXIST={};for(const key in LOAD_SUBTYPE_NAMES){DOES_LOAD_SUBTYPE_NAME_EXIST[LOAD_SUBTYPE_NAMES[key]]=true;}
function LoadExpectation(parentModel,initiatorTitle,start,duration,renderer,navigationStart,fmpEvent,dclEndEvent,cpuIdleTime,timeToInteractive,url,frameId){if(!DOES_LOAD_SUBTYPE_NAME_EXIST[initiatorTitle]){throw new Error(initiatorTitle+' is not in LOAD_SUBTYPE_NAMES');}
tr.model.um.UserExpectation.call(this,parentModel,initiatorTitle,start,duration);this.renderProcess=renderer;this.renderMainThread=undefined;this.routingId=undefined;this.parentRoutingId=undefined;this.loadFinishedEvent=undefined;this.navigationStart=navigationStart;this.fmpEvent=fmpEvent;this.domContentLoadedEndEvent=dclEndEvent;this.firstCpuIdleTime=cpuIdleTime;this.timeToInteractive=timeToInteractive;this.url=url;this.frameId=frameId;}
-LoadExpectation.prototype={__proto__:tr.model.um.UserExpectation.prototype,constructor:LoadExpectation};tr.model.um.UserExpectation.subTypes.register(LoadExpectation,{stageTitle:'Load',colorId:tr.b.ColorScheme.getColorIdForReservedName('rail_load')});return{LOAD_SUBTYPE_NAMES,LoadExpectation,};});'use strict';tr.exportTo('tr.importer',function(){const LONG_TASK_THRESHOLD_MS=50;const TOP_LEVEL_TASK_TITLES=['TaskQueueManager::ProcessTaskFromWorkQueue','ThreadControllerImpl::DoWork',];function getNetworkEventsInRange(process,range){const networkEvents=[];for(const thread of Object.values(process.threads)){const threadHelper=new tr.model.helpers.ChromeThreadHelper(thread);const events=threadHelper.getNetworkEvents();for(const event of events){if(range.intersectsExplicitRangeInclusive(event.start,event.end)){networkEvents.push(event);}}}
-return networkEvents;}
-function findFrameLoaderSnapshotAt(rendererHelper,frameIdRef,ts){const objects=rendererHelper.process.objects;const frameLoaderInstances=objects.instancesByTypeName_.FrameLoader;if(frameLoaderInstances===undefined)return undefined;let snapshot;for(const instance of frameLoaderInstances){if(!instance.isAliveAt(ts))continue;const maybeSnapshot=instance.getSnapshotAt(ts);if(frameIdRef!==maybeSnapshot.args.frame.id_ref)continue;snapshot=maybeSnapshot;}
+LoadExpectation.prototype={__proto__:tr.model.um.UserExpectation.prototype,constructor:LoadExpectation};tr.model.um.UserExpectation.subTypes.register(LoadExpectation,{stageTitle:'Load',colorId:tr.b.ColorScheme.getColorIdForReservedName('rail_load')});return{LOAD_SUBTYPE_NAMES,LoadExpectation,};});'use strict';tr.exportTo('tr.importer',function(){const LONG_TASK_THRESHOLD_MS=50;const IGNORE_URLS=['','about:blank',];function findFrameLoaderSnapshotAt(rendererHelper,frameIdRef,ts){const objects=rendererHelper.process.objects;const frameLoaderInstances=objects.instancesByTypeName_.FrameLoader;if(frameLoaderInstances===undefined)return undefined;let snapshot;for(const instance of frameLoaderInstances){if(!instance.isAliveAt(ts))continue;const maybeSnapshot=instance.getSnapshotAt(ts);if(frameIdRef!==maybeSnapshot.args.frame.id_ref)continue;snapshot=maybeSnapshot;}
return snapshot;}
function findFirstMeaningfulPaintCandidates(rendererHelper){const candidatesForFrameId={};for(const ev of rendererHelper.process.getDescendantEvents()){if(!tr.e.chrome.EventFinderUtils.hasCategoryAndName(ev,'loading','firstMeaningfulPaintCandidate')){continue;}
if(rendererHelper.isTelemetryInternalEvent(ev))continue;const frameIdRef=ev.args.frame;if(frameIdRef===undefined)continue;let list=candidatesForFrameId[frameIdRef];if(list===undefined){candidatesForFrameId[frameIdRef]=list=[];}
list.push(ev);}
return candidatesForFrameId;}
function computeInteractivityMetricSample_(rendererHelper,navigationStart,fmpEvent,domContentLoadedEndEvent,searchWindowEnd){if(domContentLoadedEndEvent===undefined||fmpEvent===undefined){return{interactiveTime:undefined,firstCpuIdleTime:undefined};}
-const firstMeaningfulPaintTime=fmpEvent.start;const mainThreadTasks=[];for(const title of TOP_LEVEL_TASK_TITLES){mainThreadTasks.push(...rendererHelper.mainThread.findTopmostSlicesNamed(title));}
-const longTasks=mainThreadTasks.filter(task=>task.duration>=LONG_TASK_THRESHOLD_MS);const longTasksInWindow=longTasks.filter(task=>task.range.intersectsExplicitRangeInclusive(firstMeaningfulPaintTime,searchWindowEnd));const resourceLoadEvents=getNetworkEventsInRange(rendererHelper.process,tr.b.math.Range.fromExplicitRange(navigationStart.start,searchWindowEnd));const firstCpuIdleTime=tr.e.chrome.findFirstCpuIdleTime(firstMeaningfulPaintTime,searchWindowEnd,domContentLoadedEndEvent.start,longTasksInWindow);const interactiveTime=tr.e.chrome.findInteractiveTime(firstMeaningfulPaintTime,searchWindowEnd,domContentLoadedEndEvent.start,longTasksInWindow,resourceLoadEvents);return{interactiveTime,firstCpuIdleTime};}
-function constructLoadingExpectation_(rendererHelper,frameToDomContentLoadedEndEvents,navigationStart,fmpEvent,nextNavigationStart,url,frameId){const searchWindowEnd=nextNavigationStart!==undefined?nextNavigationStart.start:rendererHelper.modelHelper.chromeBounds.max;const dclTimesForFrame=frameToDomContentLoadedEndEvents.get(frameId)||[];const dclSearchRange=tr.b.math.Range.fromExplicitRange(navigationStart.start,searchWindowEnd);const dclTimesInWindow=dclSearchRange.filterArray(dclTimesForFrame,event=>event.start);let domContentLoadedEndEvent=undefined;if(dclTimesInWindow.length!==0){domContentLoadedEndEvent=dclTimesInWindow[dclTimesInWindow.length-1];}
+const firstMeaningfulPaintTime=fmpEvent.start;const mainThreadTasks=tr.e.chrome.EventFinderUtils.findToplevelSchedulerTasks(rendererHelper.mainThread);const longTasks=mainThreadTasks.filter(task=>task.duration>=LONG_TASK_THRESHOLD_MS);const longTasksInWindow=longTasks.filter(task=>task.range.intersectsExplicitRangeInclusive(firstMeaningfulPaintTime,searchWindowEnd));const resourceLoadEvents=tr.e.chrome.EventFinderUtils.getNetworkEventsInRange(rendererHelper.process,tr.b.math.Range.fromExplicitRange(navigationStart.start,searchWindowEnd));const firstCpuIdleTime=tr.e.chrome.findFirstCpuIdleTime(firstMeaningfulPaintTime,searchWindowEnd,domContentLoadedEndEvent.start,longTasksInWindow);const interactiveTime=resourceLoadEvents.length>0?tr.e.chrome.findInteractiveTime(firstMeaningfulPaintTime,searchWindowEnd,domContentLoadedEndEvent.start,longTasksInWindow,resourceLoadEvents):undefined;return{interactiveTime,firstCpuIdleTime};}
+function constructLoadingExpectation_(rendererHelper,frameToDomContentLoadedEndEvents,navigationStart,fmpEvent,searchWindowEnd,url,frameId){const dclTimesForFrame=frameToDomContentLoadedEndEvents.get(frameId)||[];const dclSearchRange=tr.b.math.Range.fromExplicitRange(navigationStart.start,searchWindowEnd);const dclTimesInWindow=dclSearchRange.filterArray(dclTimesForFrame,event=>event.start);let domContentLoadedEndEvent=undefined;if(dclTimesInWindow.length!==0){domContentLoadedEndEvent=dclTimesInWindow[dclTimesInWindow.length-1];}
const{interactiveTime,firstCpuIdleTime}=computeInteractivityMetricSample_(rendererHelper,navigationStart,fmpEvent,domContentLoadedEndEvent,searchWindowEnd);const duration=(interactiveTime===undefined)?searchWindowEnd-navigationStart.start:interactiveTime-navigationStart.start;return new tr.model.um.LoadExpectation(rendererHelper.modelHelper.model,tr.model.um.LOAD_SUBTYPE_NAMES.SUCCESSFUL,navigationStart.start,duration,rendererHelper.process,navigationStart,fmpEvent,domContentLoadedEndEvent,firstCpuIdleTime,interactiveTime,url,frameId);}
-function collectLoadExpectationsForRenderer(rendererHelper){const samples=[];const frameToNavStartEvents=tr.e.chrome.EventFinderUtils.getSortedMainThreadEventsByFrame(rendererHelper,'navigationStart','blink.user_timing');const frameToDomContentLoadedEndEvents=tr.e.chrome.EventFinderUtils.getSortedMainThreadEventsByFrame(rendererHelper,'domContentLoadedEventEnd','blink.user_timing');function addSamples(frameIdRef,navigationStart,fmpMarkerEvent,nextNavigationStart){const timestamp=fmpMarkerEvent===undefined?navigationStart.start:fmpMarkerEvent.start;const snapshot=findFrameLoaderSnapshotAt(rendererHelper,frameIdRef,timestamp);if(!snapshot||!snapshot.args.isLoadingMainFrame)return;const url=snapshot.args.documentLoaderURL;samples.push(constructLoadingExpectation_(rendererHelper,frameToDomContentLoadedEndEvents,navigationStart,fmpMarkerEvent,nextNavigationStart,url,frameIdRef));}
-const candidatesForFrameId=findFirstMeaningfulPaintCandidates(rendererHelper);for(const[frameIdRef,navStartEvents]of frameToNavStartEvents){const fmpCandidateList=candidatesForFrameId[frameIdRef]||[];for(let index=0;index<navStartEvents.length-1;index++){const currNavigation=navStartEvents[index];const nextNavigation=navStartEvents[index+1];const fmpCandidate=tr.e.chrome.EventFinderUtils.findLastEventStartingBeforeTimestamp(fmpCandidateList,nextNavigation.start);if(fmpCandidate!==undefined&&currNavigation.start<=fmpCandidate.start){addSamples(frameIdRef,currNavigation,fmpCandidate,nextNavigation);}else{addSamples(frameIdRef,currNavigation,undefined,nextNavigation);}}
-addSamples(frameIdRef,navStartEvents[navStartEvents.length-1],fmpCandidateList[fmpCandidateList.length-1],undefined);}
+function collectLoadExpectationsForRenderer(rendererHelper){const samples=[];const frameToNavStartEvents=tr.e.chrome.EventFinderUtils.getSortedMainThreadEventsByFrame(rendererHelper,'navigationStart','blink.user_timing');const frameToDomContentLoadedEndEvents=tr.e.chrome.EventFinderUtils.getSortedMainThreadEventsByFrame(rendererHelper,'domContentLoadedEventEnd','blink.user_timing');function addSamples(frameIdRef,navigationStart,fmpCandidateEvents,searchWindowEnd,url){let fmpMarkerEvent=tr.e.chrome.EventFinderUtils.findLastEventStartingOnOrBeforeTimestamp(fmpCandidateEvents,searchWindowEnd);if(fmpMarkerEvent!==undefined&&navigationStart.start>fmpMarkerEvent.start){fmpMarkerEvent=undefined;}
+samples.push(constructLoadingExpectation_(rendererHelper,frameToDomContentLoadedEndEvents,navigationStart,fmpMarkerEvent,searchWindowEnd,url,frameIdRef));}
+const candidatesForFrameId=findFirstMeaningfulPaintCandidates(rendererHelper);for(const[frameIdRef,navStartEvents]of frameToNavStartEvents){const fmpCandidateEvents=candidatesForFrameId[frameIdRef]||[];let prevNavigation={navigationEvent:undefined,url:undefined};for(let index=0;index<navStartEvents.length;index++){const currNavigation=navStartEvents[index];let url;let isLoadingMainFrame=false;if(currNavigation.args.data){url=currNavigation.args.data.documentLoaderURL;isLoadingMainFrame=currNavigation.args.data.isLoadingMainFrame;}else{const snapshot=findFrameLoaderSnapshotAt(rendererHelper,frameIdRef,currNavigation.start);if(snapshot){url=snapshot.args.documentLoaderURL;isLoadingMainFrame=snapshot.args.isLoadingMainFrame;}}
+if(!isLoadingMainFrame)continue;if(url===undefined||IGNORE_URLS.includes(url))continue;if(prevNavigation.navigationEvent!==undefined){addSamples(frameIdRef,prevNavigation.navigationEvent,fmpCandidateEvents,currNavigation.start,prevNavigation.url);}
+prevNavigation={navigationEvent:currNavigation,url};}
+if(prevNavigation.navigationEvent!==undefined){addSamples(frameIdRef,prevNavigation.navigationEvent,fmpCandidateEvents,rendererHelper.modelHelper.chromeBounds.max,prevNavigation.url);}}
return samples;}
function findLoadExpectations(modelHelper){const loads=[];const chromeHelper=modelHelper.model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);for(const pid in chromeHelper.rendererHelpers){const rendererHelper=chromeHelper.rendererHelpers[pid];if(rendererHelper.isChromeTracingUI)continue;loads.push.apply(loads,collectLoadExpectationsForRenderer(rendererHelper));}
return loads;}
@@ -6304,7 +6650,7 @@ return false;}
return{decorate,define,elementIsChildOf,};});'use strict';tr.exportTo('tr.b.math',function(){function Rect(){this.x=0;this.y=0;this.width=0;this.height=0;}
Rect.fromXYWH=function(x,y,w,h){const rect=new Rect();rect.x=x;rect.y=y;rect.width=w;rect.height=h;return rect;};Rect.fromArray=function(ary){if(ary.length!==4){throw new Error('ary.length must be 4');}
const rect=new Rect();rect.x=ary[0];rect.y=ary[1];rect.width=ary[2];rect.height=ary[3];return rect;};Rect.prototype={__proto__:Object.prototype,get left(){return this.x;},get top(){return this.y;},get right(){return this.x+this.width;},get bottom(){return this.y+this.height;},toString(){return'Rect('+this.x+', '+this.y+', '+
-this.width+', '+this.height+')';},toArray(){return[this.x,this.y,this.width,this.height];},clone(){const rect=new Rect();rect.x=this.x;rect.y=this.y;rect.width=this.width;rect.height=this.height;return rect;},enlarge(pad){const rect=new Rect();this.enlargeFast(rect,pad);return rect;},enlargeFast(out,pad){out.x=this.x-pad;out.y=this.y-pad;out.width=this.width+2*pad;out.height=this.height+2*pad;return out;},size(){return{width:this.width,height:this.height};},scale(s){const rect=new Rect();this.scaleFast(rect,s);return rect;},scaleSize(s){return Rect.fromXYWH(this.x,this.y,this.width*s,this.height*s);},scaleFast(out,s){out.x=this.x*s;out.y=this.y*s;out.width=this.width*s;out.height=this.height*s;return out;},translate(v){const rect=new Rect();this.translateFast(rect,v);return rect;},translateFast(out,v){out.x=this.x+v[0];out.y=this.x+v[1];out.width=this.width;out.height=this.height;return out;},asUVRectInside(containingRect){const rect=new Rect();rect.x=(this.x-containingRect.x)/containingRect.width;rect.y=(this.y-containingRect.y)/containingRect.height;rect.width=this.width/containingRect.width;rect.height=this.height/containingRect.height;return rect;},intersects(that){let ok=true;ok&=this.x<that.right;ok&=this.right>that.x;ok&=this.y<that.bottom;ok&=this.bottom>that.y;return ok;},equalTo(rect){return rect&&(this.x===rect.x)&&(this.y===rect.y)&&(this.width===rect.width)&&(this.height===rect.height);}};return{Rect,};});'use strict';tr.exportTo('tr.ui.b',function(){function instantiateTemplate(selector,doc){doc=doc||document;const el=Polymer.dom(doc).querySelector(selector);if(!el){throw new Error('Element not found');}
+this.width+', '+this.height+')';},toArray(){return[this.x,this.y,this.width,this.height];},clone(){const rect=new Rect();rect.x=this.x;rect.y=this.y;rect.width=this.width;rect.height=this.height;return rect;},enlarge(pad){const rect=new Rect();this.enlargeFast(rect,pad);return rect;},enlargeFast(out,pad){out.x=this.x-pad;out.y=this.y-pad;out.width=this.width+2*pad;out.height=this.height+2*pad;return out;},size(){return{width:this.width,height:this.height};},scale(s){const rect=new Rect();this.scaleFast(rect,s);return rect;},scaleSize(s){return Rect.fromXYWH(this.x,this.y,this.width*s,this.height*s);},scaleFast(out,s){out.x=this.x*s;out.y=this.y*s;out.width=this.width*s;out.height=this.height*s;return out;},translate(v){const rect=new Rect();this.translateFast(rect,v);return rect;},translateFast(out,v){out.x=this.x+v[0];out.y=this.x+v[1];out.width=this.width;out.height=this.height;return out;},asUVRectInside(containingRect){const rect=new Rect();rect.x=(this.x-containingRect.x)/containingRect.width;rect.y=(this.y-containingRect.y)/containingRect.height;rect.width=this.width/containingRect.width;rect.height=this.height/containingRect.height;return rect;},intersects(that){let ok=true;ok&=this.x<that.right;ok&=this.right>that.x;ok&=this.y<that.bottom;ok&=this.bottom>that.y;return ok;},equalTo(rect){return rect&&(this.x===rect.x)&&(this.y===rect.y)&&(this.width===rect.width)&&(this.height===rect.height);}};return{Rect,};});'use strict';tr.exportTo('tr.ui.b',function(){function instantiateTemplate(selector,doc){doc=doc||document;const el=Polymer.dom(doc).querySelector(selector);if(!el){throw new Error('Element not found: '+selector);}
return doc.importNode(el.content,true);}
function windowRectForElement(element){const position=[element.offsetLeft,element.offsetTop];const size=[element.offsetWidth,element.offsetHeight];let node=element.offsetParent;while(node){position[0]+=node.offsetLeft;position[1]+=node.offsetTop;node=node.offsetParent;}
return tr.b.math.Rect.fromXYWH(position[0],position[1],size[0],size[1]);}
@@ -6369,6 +6715,7 @@ if(opTimings[iteration].cmd_times.length!==ops.length){return ops;}}
for(let opIndex=0;opIndex<ops.length;opIndex++){let min=Number.MAX_VALUE;for(let i=0;i<OPS_TIMING_ITERATIONS;i++){min=Math.min(min,opTimings[i].cmd_times[opIndex]);}
ops[opIndex].cmd_time=min;}
return ops;},rasterize(params,rasterCompleteCallback){if(!PictureSnapshot.CanRasterize()||!PictureSnapshot.CanGetOps()){rasterCompleteCallback(new tr.e.cc.PictureAsImageData(this,tr.e.cc.PictureSnapshot.HowToEnablePictureDebugging()));return;}
+if(!this.layerRect_.width||!this.layerRect_.height){rasterCompleteCallback(new tr.e.cc.PictureAsImageData(this,null));return;}
const raster=window.chrome.skiaBenchmarking.rasterize({skp64:this.skp64_,params:{layer_rect:this.layerRect_.toArray()}},{stop:params.stopIndex===undefined?-1:params.stopIndex,overdraw:!!params.showOverdraw,params:{}});if(raster){const canvas=document.createElement('canvas');const ctx=canvas.getContext('2d');canvas.width=raster.width;canvas.height=raster.height;const imageData=ctx.createImageData(raster.width,raster.height);imageData.data.set(new Uint8ClampedArray(raster.data));rasterCompleteCallback(new tr.e.cc.PictureAsImageData(this,imageData));}else{const error='Failed to rasterize picture. '+'Your recording may be from an old Chrome version. '+'The SkPicture format is not backward compatible.';rasterCompleteCallback(new tr.e.cc.PictureAsImageData(this,error));}}};function LayeredPicture(pictures){this.guid_=tr.b.GUID.allocateSimple();this.pictures_=pictures;this.layerRect_=undefined;}
LayeredPicture.prototype={__proto__:Picture.prototype,get canSave(){return false;},get typeName(){return'cc::LayeredPicture';},get layerRect(){if(this.layerRect_!==undefined){return this.layerRect_;}
this.layerRect_={x:0,y:0,width:0,height:0};for(let i=0;i<this.pictures_.length;++i){const rect=this.pictures_[i].layerRect;this.layerRect_.x=Math.min(this.layerRect_.x,rect.x);this.layerRect_.y=Math.min(this.layerRect_.y,rect.y);this.layerRect_.width=Math.max(this.layerRect_.width,rect.x+rect.width);this.layerRect_.height=Math.max(this.layerRect_.height,rect.y+rect.height);}
@@ -6389,12 +6736,12 @@ if(!window.chrome.skiaBenchmarking.getOpTimings){return false;}
return true;};PictureSnapshot.CanGetInfo=function(){if(!PictureSnapshot.HasSkiaBenchmarking()){return false;}
if(!window.chrome.skiaBenchmarking.getInfo){return false;}
return true;};PictureSnapshot.HowToEnablePictureDebugging=function(){if(tr.isHeadless){return'Pictures only work in chrome';}
-const usualReason=['For pictures to show up, you need to have Chrome running with ','--enable-skia-benchmarking. Please restart chrome with this flag ','and try again.'].join('');if(!tr.isExported('global.chrome.skiaBenchmarking')){return usualReason;}
-if(!global.chrome.skiaBenchmarking.rasterize){return'Your chrome is old';}
-if(!global.chrome.skiaBenchmarking.getOps){return'Your chrome is old: skiaBenchmarking.getOps not found';}
-if(!global.chrome.skiaBenchmarking.getOpTimings){return'Your chrome is old: skiaBenchmarking.getOpTimings not found';}
-if(!global.chrome.skiaBenchmarking.getInfo){return'Your chrome is old: skiaBenchmarking.getInfo not found';}
-return'Rasterizing is on';};PictureSnapshot.prototype={__proto__:ObjectSnapshot.prototype,preInitialize(){tr.e.cc.preInitializeObject(this);this.rasterResult_=undefined;},initialize(){if(this.args.alias){this.args=this.args.alias.args;}
+const usualReason=['For pictures to show up, the Chrome browser displaying the trace ','needs to be running with --enable-skia-benchmarking. Please restart ','chrome with this flag and try loading the trace again.'].join('');if(!PictureSnapshot.HasSkiaBenchmarking()){return usualReason;}
+if(!PictureSnapshot.CanRasterize()){return'Your chrome is old: chrome.skipBenchmarking.rasterize not found';}
+if(!PictureSnapshot.CanGetOps()){return'Your chrome is old: chrome.skiaBenchmarking.getOps not found';}
+if(!PictureSnapshot.CanGetOpTimings()){return'Your chrome is old: '+'chrome.skiaBenchmarking.getOpTimings not found';}
+if(!PictureSnapshot.CanGetInfo()){return'Your chrome is old: chrome.skiaBenchmarking.getInfo not found';}
+return undefined;};PictureSnapshot.CanDebugPicture=function(){return PictureSnapshot.HowToEnablePictureDebugging()===undefined;};PictureSnapshot.prototype={__proto__:ObjectSnapshot.prototype,preInitialize(){tr.e.cc.preInitializeObject(this);this.rasterResult_=undefined;},initialize(){if(this.args.alias){this.args=this.args.alias.args;}
if(!this.args.params.layerRect){throw new Error('Missing layer rect');}
this.layerRect_=this.args.params.layerRect;this.picture_=new Picture(this.args.skp64,this.args.params.layerRect);},set picture(picture){this.picture_=picture;},get canSave(){return this.picture_.canSave;},get layerRect(){return this.layerRect_?this.layerRect_:this.picture_.layerRect;},get guid(){return this.picture_.guid;},getBase64SkpData(){return this.picture_.getBase64SkpData();},getOps(){return this.picture_.getOps();},getOpTimings(){return this.picture_.getOpTimings();},tagOpsWithTimings(ops){return this.picture_.tagOpsWithTimings(ops);},rasterize(params,rasterCompleteCallback){this.picture_.rasterize(params,rasterCompleteCallback);}};ObjectSnapshot.subTypes.register(PictureSnapshot,{typeNames:['cc::Picture']});return{PictureSnapshot,Picture,LayeredPicture,};});'use strict';tr.exportTo('tr.e.cc',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;function DisplayItemList(skp64,layerRect){tr.e.cc.Picture.apply(this,arguments);}
DisplayItemList.prototype={__proto__:tr.e.cc.Picture.prototype};function DisplayItemListSnapshot(){tr.e.cc.PictureSnapshot.apply(this,arguments);}
@@ -6411,7 +6758,7 @@ const r=new Region();for(let i=0;i<array.length;i+=4){r.rects.push(tr.b.math.Rec
return r;};Region.fromArrayOrUndefined=function(array){if(array===undefined)return new Region();return Region.fromArray(array);};Region.prototype={__proto__:Region.prototype,rectIntersects(r){for(let i=0;i<this.rects.length;i++){if(this.rects[i].intersects(r))return true;}
return false;},addRect(r){this.rects.push(r);}};return{Region,};});'use strict';tr.exportTo('tr.e.cc',function(){function TileCoverageRect(rect,tile){this.geometryRect=rect;this.tile=tile;}
return{TileCoverageRect,};});'use strict';tr.exportTo('tr.e.cc',function(){const constants=tr.e.cc.constants;const ObjectSnapshot=tr.model.ObjectSnapshot;function LayerImplSnapshot(){ObjectSnapshot.apply(this,arguments);}
-LayerImplSnapshot.prototype={__proto__:ObjectSnapshot.prototype,preInitialize(){tr.e.cc.preInitializeObject(this);this.layerTreeImpl_=undefined;this.parentLayer=undefined;},initialize(){this.invalidation=new tr.e.cc.Region();this.annotatedInvalidation=new tr.e.cc.Region();this.unrecordedRegion=new tr.e.cc.Region();this.pictures=[];tr.e.cc.moveRequiredFieldsFromArgsToToplevel(this,['layerId','layerQuad']);tr.e.cc.moveOptionalFieldsFromArgsToToplevel(this,['children','maskLayer','replicaLayer','idealContentsScale','geometryContentsScale','layoutRects','usingGpuRasterization']);this.gpuMemoryUsageInBytes=this.args.gpuMemoryUsage;this.bounds=tr.b.math.Rect.fromXYWH(0,0,this.args.bounds.width,this.args.bounds.height);if(this.args.animationBounds){this.animationBoundsRect=tr.b.math.Rect.fromXYWH(this.args.animationBounds[0],this.args.animationBounds[1],this.args.animationBounds[3],this.args.animationBounds[4]);}
+LayerImplSnapshot.prototype={__proto__:ObjectSnapshot.prototype,preInitialize(){tr.e.cc.preInitializeObject(this);this.layerTreeImpl_=undefined;this.parentLayer=undefined;},initialize(){this.invalidation=new tr.e.cc.Region();this.unrecordedRegion=new tr.e.cc.Region();this.pictures=[];tr.e.cc.moveRequiredFieldsFromArgsToToplevel(this,['layerId','layerQuad']);tr.e.cc.moveOptionalFieldsFromArgsToToplevel(this,['children','maskLayer','replicaLayer','idealContentsScale','geometryContentsScale','layoutRects','usingGpuRasterization']);this.gpuMemoryUsageInBytes=this.args.gpuMemoryUsage;this.bounds=tr.b.math.Rect.fromXYWH(0,0,this.args.bounds.width,this.args.bounds.height);if(this.args.animationBounds){this.animationBoundsRect=tr.b.math.Rect.fromXYWH(this.args.animationBounds[0],this.args.animationBounds[1],this.args.animationBounds[3],this.args.animationBounds[4]);}
if(this.children){for(let i=0;i<this.children.length;i++){this.children[i].parentLayer=this;}}
if(this.maskLayer){this.maskLayer.parentLayer=this;}
if(this.replicaLayer){this.replicaLayer.parentLayer=this;}
@@ -6422,10 +6769,11 @@ if(this.parentLayer){return this.parentLayer.layerTreeImpl;}
return undefined;},set layerTreeImpl(layerTreeImpl){this.layerTreeImpl_=layerTreeImpl;},get activeLayer(){if(this.layerTreeImpl.whichTree===constants.ACTIVE_TREE){return this;}
const activeTree=this.layerTreeImpl.layerTreeHostImpl.activeTree;return activeTree.findLayerWithId(this.layerId);},get pendingLayer(){if(this.layerTreeImpl.whichTree===constants.PENDING_TREE){return this;}
const pendingTree=this.layerTreeImpl.layerTreeHostImpl.pendingTree;return pendingTree.findLayerWithId(this.layerId);}};function PictureLayerImplSnapshot(){LayerImplSnapshot.apply(this,arguments);}
-PictureLayerImplSnapshot.prototype={__proto__:LayerImplSnapshot.prototype,initialize(){LayerImplSnapshot.prototype.initialize.call(this);if(this.args.invalidation){this.invalidation=tr.e.cc.Region.fromArray(this.args.invalidation);delete this.args.invalidation;}
-if(this.args.annotatedInvalidationRects){this.annotatedInvalidation=new tr.e.cc.Region();for(let i=0;i<this.args.annotatedInvalidationRects.length;++i){const annotatedRect=this.args.annotatedInvalidationRects[i];const rect=annotatedRect.geometryRect;rect.reason=annotatedRect.reason;this.annotatedInvalidation.addRect(rect);}
-delete this.args.annotatedInvalidationRects;}
-if(this.args.unrecordedRegion){this.unrecordedRegion=tr.e.cc.Region.fromArray(this.args.unrecordedRegion);delete this.args.unrecordedRegion;}
+PictureLayerImplSnapshot.prototype={__proto__:LayerImplSnapshot.prototype,initialize(){LayerImplSnapshot.prototype.initialize.call(this);if(this.args.debugInfo){for(const i in this.args.debugInfo){this.args[i]=this.args.debugInfo[i];}
+delete this.args.debugInfo;}
+if(this.args.annotatedInvalidationRects){this.invalidation=new tr.e.cc.Region();for(const annotatedRect of this.args.annotatedInvalidationRects){const rect=annotatedRect.geometryRect;rect.reason=annotatedRect.reason;rect.client=annotatedRect.client;this.invalidation.addRect(rect);}
+delete this.args.annotatedInvalidationRects;}else if(this.args.invalidation){this.invalidation=tr.e.cc.Region.fromArray(this.args.invalidation);}
+delete this.args.invalidation;if(this.args.unrecordedRegion){this.unrecordedRegion=tr.e.cc.Region.fromArray(this.args.unrecordedRegion);delete this.args.unrecordedRegion;}
if(this.args.pictures){this.pictures=this.args.pictures;this.pictures.sort(function(a,b){return a.ts-b.ts;});}
this.tileCoverageRects=[];if(this.args.coverageTiles){for(let i=0;i<this.args.coverageTiles.length;++i){const rect=this.args.coverageTiles[i].geometryRect.scale(this.idealContentsScale);const tile=this.args.coverageTiles[i].tile;this.tileCoverageRects.push(new tr.e.cc.TileCoverageRect(rect,tile));}
delete this.args.coverageTiles;}}};ObjectSnapshot.subTypes.register(PictureLayerImplSnapshot,{typeName:'cc::PictureLayerImpl'});ObjectSnapshot.subTypes.register(LayerImplSnapshot,{typeNames:['cc::LayerImpl','cc::DelegatedRendererLayerImpl','cc::HeadsUpDisplayLayerImpl','cc::IOSurfaceLayerImpl','cc::NinePatchLayerImpl','cc::PictureImageLayerImpl','cc::ScrollbarLayerImpl','cc::SolidColorLayerImpl','cc::SolidColorScrollbarLayerImpl','cc::SurfaceLayerImpl','cc::TextureLayerImpl','cc::TiledLayerImpl','cc::VideoLayerImpl','cc::PaintedScrollbarLayerImpl','ClankPatchLayer','TabBorderLayer','CounterLayer']});return{LayerImplSnapshot,PictureLayerImplSnapshot,};});'use strict';tr.exportTo('tr.e.cc',function(){const constants=tr.e.cc.constants;const ObjectSnapshot=tr.model.ObjectSnapshot;function LayerTreeImplSnapshot(){ObjectSnapshot.apply(this,arguments);}
@@ -6475,19 +6823,16 @@ if(selection===undefined){selection=new EventSet();}
this.selection_=selection;},get findMatches(){return this.findMatches_;},set findMatches(findMatches){if(this.appliedToModel_){throw new Error('Cannot mutate this state right now');}
if(findMatches===undefined){findMatches=new EventSet();}
this.findMatches_=findMatches;},get analysisViewRelatedEvents(){return this.analysisViewRelatedEvents_;},set analysisViewRelatedEvents(analysisViewRelatedEvents){if(this.appliedToModel_){throw new Error('Cannot mutate this state right now');}
-if(analysisViewRelatedEvents===undefined){analysisViewRelatedEvents=new EventSet();}
+if(!(analysisViewRelatedEvents instanceof EventSet)){analysisViewRelatedEvents=new EventSet();}
this.analysisViewRelatedEvents_=analysisViewRelatedEvents;},get analysisLinkHoveredEvents(){return this.analysisLinkHoveredEvents_;},set analysisLinkHoveredEvents(analysisLinkHoveredEvents){if(this.appliedToModel_){throw new Error('Cannot mutate this state right now');}
-if(analysisLinkHoveredEvents===undefined){analysisLinkHoveredEvents=new EventSet();}
-this.analysisLinkHoveredEvents_=analysisLinkHoveredEvents;},get isAppliedToModel(){return this.appliedToModel_!==undefined;},get viewSpecificBrushingStates(){return this.viewSpecificBrushingStates_;},set viewSpecificBrushingStates(viewSpecificBrushingStates){this.viewSpecificBrushingStates_=viewSpecificBrushingStates;},get dimmedEvents_(){const dimmedEvents=new EventSet();dimmedEvents.addEventSet(this.findMatches);dimmedEvents.addEventSet(this.analysisViewRelatedEvents_);return dimmedEvents;},get brightenedEvents_(){const brightenedEvents=new EventSet();brightenedEvents.addEventSet(this.selection_);brightenedEvents.addEventSet(this.analysisLinkHoveredEvents_);return brightenedEvents;},applyToEventSelectionStates(model){this.appliedToModel_=model;const dimmedEvents=this.dimmedEvents_;if(model){const newDefaultState=(dimmedEvents.length?SelectionState.DIMMED0:SelectionState.NONE);const currentDefaultState=tr.b.getFirstElement(model.getDescendantEvents()).selectionState;if(currentDefaultState!==newDefaultState){for(const e of model.getDescendantEvents()){e.selectionState=newDefaultState;}}}
-let score;for(const e of dimmedEvents){score=0;if(this.findMatches_.contains(e)){score++;}
-if(this.analysisViewRelatedEvents_.contains(e)){score++;}
-e.selectionState=SelectionState.getFromDimmingLevel(score);}
-for(const e of this.brightenedEvents_){score=0;if(this.selection_.contains(e)){score++;}
-if(this.analysisLinkHoveredEvents_.contains(e)){score++;}
-e.selectionState=SelectionState.getFromBrighteningLevel(score);}},transferModelOwnershipToClone(that){if(!this.appliedToModel_){throw new Error('Not applied');}
+if(!(analysisLinkHoveredEvents instanceof EventSet)){analysisLinkHoveredEvents=new EventSet();}
+this.analysisLinkHoveredEvents_=analysisLinkHoveredEvents;},get isAppliedToModel(){return this.appliedToModel_!==undefined;},get viewSpecificBrushingStates(){return this.viewSpecificBrushingStates_;},set viewSpecificBrushingStates(viewSpecificBrushingStates){this.viewSpecificBrushingStates_=viewSpecificBrushingStates;},get defaultState_(){const standoutEventExists=(this.analysisLinkHoveredEvents_.length>0||this.analysisViewRelatedEvents_.length>0||this.findMatches_.length>0);return(standoutEventExists?SelectionState.DIMMED0:SelectionState.NONE);},get brightenedEvents_(){const brightenedEvents=new EventSet();brightenedEvents.addEventSet(this.findMatches);brightenedEvents.addEventSet(this.analysisViewRelatedEvents_);brightenedEvents.addEventSet(this.selection_);brightenedEvents.addEventSet(this.analysisLinkHoveredEvents_);return brightenedEvents;},applyToEventSelectionStates(model){this.appliedToModel_=model;if(model){const newDefaultState=this.defaultState_;const currentDefaultState=tr.b.getFirstElement(model.getDescendantEvents()).selectionState;if(currentDefaultState!==newDefaultState){for(const e of model.getDescendantEvents()){e.selectionState=newDefaultState;}}}
+let level;for(const e of this.brightenedEvents_){level=0;if(this.analysisViewRelatedEvents_.contains(e)||this.findMatches_.contains(e)){level++;}
+if(this.analysisLinkHoveredEvents_.contains(e)){level++;}
+if(this.selection_.contains(e)){level++;}
+e.selectionState=SelectionState.getFromBrighteningLevel(level);}},transferModelOwnershipToClone(that){if(!this.appliedToModel_){throw new Error('Not applied');}
that.appliedToModel_=this.appliedToModel_;this.appliedToModel_=undefined;},unapplyFromEventSelectionStates(){if(!this.appliedToModel_){throw new Error('Not applied');}
-const model=this.appliedToModel_;this.appliedToModel_=undefined;const dimmedEvents=this.dimmedEvents_;const defaultState=(dimmedEvents.length?SelectionState.DIMMED0:SelectionState.NONE);for(const e of this.brightenedEvents_){e.selectionState=defaultState;}
-for(const e of dimmedEvents){e.selectionState=defaultState;}
+const model=this.appliedToModel_;this.appliedToModel_=undefined;const defaultState=this.defaultState_;for(const e of this.brightenedEvents_){e.selectionState=defaultState;}
return defaultState;}};return{BrushingState,};});'use strict';tr.exportTo('tr.ui.b',function(){function Animation(){}
Animation.prototype={canTakeOverFor(existingAnimation){throw new Error('Not implemented');},takeOverFor(existingAnimation,newStartTimestamp,target){throw new Error('Not implemented');},start(timestamp,target){throw new Error('Not implemented');},didStopEarly(timestamp,target,willBeTakenOverByAnotherAnimation){},tick(timestamp,target){throw new Error('Not implemented');}};return{Animation,};});'use strict';tr.exportTo('tr.ui.b',function(){function AnimationController(){tr.b.EventTarget.call(this);this.target_=undefined;this.activeAnimation_=undefined;this.tickScheduled_=false;}
AnimationController.prototype={__proto__:tr.b.EventTarget.prototype,get target(){return this.target_;},set target(target){if(this.activeAnimation_){throw new Error('Cannot change target while animation is running.');}
@@ -6775,6 +7120,9 @@ merge(other){const result=new RunningStatistics();result.count_=this.count_+othe
(this.count*other.count*deltaMean*deltaMean/result.count);if(this.meanlogs_===undefined||other.meanlogs_===undefined){result.meanlogs_=undefined;}else{result.meanlogs_=(this.count*this.meanlogs_+
other.count*other.meanlogs_)/result.count;}}
return result;}
+truncate(unit){this.max_=unit.truncate(this.max_);if(this.meanlogs_!==undefined){const formatted=unit.format(this.geometricMean);let lo=1;let hi=16;while(lo<hi-1){const digits=parseInt((lo+hi)/2);const test=tr.b.math.truncate(this.meanlogs_,digits);if(formatted===unit.format(Math.exp(test))){hi=digits;}else{lo=digits;}}
+const test=tr.b.math.truncate(this.meanlogs_,lo);if(formatted===unit.format(Math.exp(test))){this.meanlogs_=test;}else{this.meanlogs_=tr.b.math.truncate(this.meanlogs_,hi);}}
+this.mean_=unit.truncate(this.mean_);this.min_=unit.truncate(this.min_);this.sum_=unit.truncate(this.sum_);this.variance_=unit.truncate(this.variance_);}
asDict(){if(!this.count){return[];}
return[this.count_,this.max_,this.meanlogs_,this.mean_,this.min_,this.sum_,this.variance_,];}
static fromDict(dict){const result=new RunningStatistics();if(dict.length!==7){return result;}
@@ -6794,9 +7142,16 @@ asDict(){const result={type:this.constructor.name};if(this.guid_!==undefined){re
this.asDictInto_(result);return result;}
asDictInto_(d){throw new Error('Abstract virtual method: subclasses must override '+'this method if they override canAddDiagnostic');}
static fromDict(d){const typeInfo=Diagnostic.findTypeInfoWithName(d.type);if(!typeInfo){throw new Error('Unrecognized diagnostic type: '+d.type);}
-const diagnostic=typeInfo.constructor.fromDict(d);if(d.guid!==undefined)diagnostic.guid=d.guid;return diagnostic;}}
-const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);options.defaultMetadata={};options.mandatoryBaseClass=Diagnostic;tr.b.decorateExtensionRegistry(Diagnostic,options);Diagnostic.addEventListener('will-register',function(e){const constructor=e.typeInfo.constructor;if(!(constructor.fromDict instanceof Function)||(constructor.fromDict===Diagnostic.fromDict)||(constructor.fromDict.length!==1)){throw new Error('Diagnostics must define fromDict(d)');}});return{Diagnostic,};});'use strict';tr.exportTo('tr.v.d',function(){class Breakdown extends tr.v.d.Diagnostic{constructor(){super();this.values_=new Map();this.colorScheme=undefined;}
+const diagnostic=typeInfo.constructor.fromDict(d);if(d.guid!==undefined)diagnostic.guid=d.guid;return diagnostic;}
+static deserialize(type,d,deserializer){const typeInfo=Diagnostic.findTypeInfoWithName(type);if(!typeInfo){throw new Error('Unrecognized diagnostic type: '+type);}
+return typeInfo.constructor.deserialize(d,deserializer);}}
+const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);options.defaultMetadata={};options.mandatoryBaseClass=Diagnostic;tr.b.decorateExtensionRegistry(Diagnostic,options);Diagnostic.addEventListener('will-register',function(e){const constructor=e.typeInfo.constructor;if(!(constructor.deserialize instanceof Function)||(constructor.deserialize===Diagnostic.deserialize)||(constructor.deserialize.length!==2)){throw new Error(`Please define ${constructor.name}.deserialize(data, deserializer)`);}
+if(!(constructor.fromDict instanceof Function)||(constructor.fromDict===Diagnostic.fromDict)||(constructor.fromDict.length!==1)){throw new Error(`Please define ${constructor.name}.fromDict(d)`);}
+if(!(constructor.prototype.serialize instanceof Function)||(constructor.prototype.serialize===Diagnostic.prototype.serialize)||(constructor.prototype.serialize.length!==1)){throw new Error(`Please define ${constructor.name}.serialize(serializer)`);}});return{Diagnostic,};});'use strict';tr.exportTo('tr.v.d',function(){class Breakdown extends tr.v.d.Diagnostic{constructor(){super();this.values_=new Map();this.colorScheme='';}
+truncate(unit){for(const[name,value]of this){this.values_.set(name,unit.truncate(value));}}
clone(){const clone=new Breakdown();clone.colorScheme=this.colorScheme;clone.addDiagnostic(this);return clone;}
+equals(other){if(this.colorScheme!==other.colorScheme)return false;if(this.values_.size!==other.values_.size)return false;for(const[k,v]of this){if(v!==other.get(k))return false;}
+return true;}
canAddDiagnostic(otherDiagnostic){return((otherDiagnostic instanceof Breakdown)&&(otherDiagnostic.colorScheme===this.colorScheme));}
addDiagnostic(otherDiagnostic){for(const[name,value]of otherDiagnostic){this.set(name,this.get(name)+value);}
return this;}
@@ -6804,15 +7159,20 @@ set(name,value){if(typeof name!=='string'||typeof value!=='number'){throw new Er
this.values_.set(name,value);}
get(name){return this.values_.get(name)||0;}*[Symbol.iterator](){for(const pair of this.values_){yield pair;}}
get size(){return this.values_.size;}
+serialize(serializer){const keys=[...this.values_.keys()];keys.sort();return[serializer.getOrAllocateId(this.colorScheme),serializer.getOrAllocateId(keys.map(k=>serializer.getOrAllocateId(k))),...keys.map(k=>this.get(k)),];}
asDictInto_(d){d.values={};for(const[name,value]of this){d.values[name]=tr.b.numberToJson(value);}
if(this.colorScheme){d.colorScheme=this.colorScheme;}}
static fromEntries(entries){const breakdown=new Breakdown();for(const[name,value]of entries){breakdown.set(name,value);}
return breakdown;}
+static deserialize(data,deserializer){const breakdown=new Breakdown();breakdown.colorScheme=deserializer.getObject(data[0]);const keys=deserializer.getObject(data[1]);for(let i=0;i<keys.length;++i){breakdown.set(deserializer.getObject(keys[i]),tr.b.numberFromJson(data[i+2]));}
+return breakdown;}
static fromDict(d){const breakdown=new Breakdown();for(const[name,value]of Object.entries(d.values)){breakdown.set(name,tr.b.numberFromJson(value));}
if(d.colorScheme){breakdown.colorScheme=d.colorScheme;}
return breakdown;}}
tr.v.d.Diagnostic.register(Breakdown,{elementName:'tr-v-ui-breakdown-span'});return{Breakdown,};});'use strict';tr.exportTo('tr.v.d',function(){class CollectedRelatedEventSet extends tr.v.d.Diagnostic{constructor(){super();this.eventSetsByCanonicalUrl_=new Map();}
asDictInto_(d){d.events={};for(const[canonicalUrl,eventSet]of this){d.events[canonicalUrl]=[];for(const event of eventSet){d.events[canonicalUrl].push({stableId:event.stableId,title:event.title,start:event.start,duration:event.duration});}}}
+static deserialize(events,deserializer){return CollectedRelatedEventSet.fromDict({events});}
+serialize(serializer){const d={};this.asDictInto(d);return d.events;}
static fromDict(d){const result=new CollectedRelatedEventSet();for(const[canonicalUrl,events]of Object.entries(d.events)){result.eventSetsByCanonicalUrl_.set(canonicalUrl,events.map(e=>new tr.v.d.EventRef(e)));}
return result;}
get size(){return this.eventSetsByCanonicalUrl_.size;}
@@ -6824,6 +7184,8 @@ addDiagnostic(otherDiagnostic){if(otherDiagnostic instanceof tr.v.d.CollectedRel
return;}
if(!otherDiagnostic.canonicalUrl)return;this.addEventSetForCanonicalUrl(otherDiagnostic.canonicalUrl,otherDiagnostic);}}
tr.v.d.Diagnostic.register(CollectedRelatedEventSet,{elementName:'tr-v-ui-collected-related-event-set-span'});return{CollectedRelatedEventSet,};});'use strict';tr.exportTo('tr.v.d',function(){class DateRange extends tr.v.d.Diagnostic{constructor(ms){super();this.range_=new tr.b.math.Range();this.range_.addValue(ms);}
+get minTimestamp(){return this.range_.min;}
+get maxTimestamp(){return this.range_.max;}
get minDate(){return new Date(this.range_.min);}
get maxDate(){return new Date(this.range_.max);}
get durationMs(){return this.range_.duration;}
@@ -6832,118 +7194,87 @@ equals(other){if(!(other instanceof DateRange))return false;return this.range_.e
canAddDiagnostic(otherDiagnostic){return otherDiagnostic instanceof DateRange;}
addDiagnostic(other){this.range_.addRange(other.range_);}
toString(){const minDate=tr.b.formatDate(this.minDate);if(this.durationMs===0)return minDate;const maxDate=tr.b.formatDate(this.maxDate);return`${minDate} - ${maxDate}`;}
+serialize(serializer){if(this.durationMs===0)return this.range_.min;return[this.range_.min,this.range_.max];}
asDictInto_(d){d.min=this.range_.min;if(this.durationMs===0)return;d.max=this.range_.max;}
+static deserialize(data,deserializer){if(data instanceof Array){const dr=new DateRange(data[0]);dr.range_.addValue(data[1]);return dr;}
+return new DateRange(data);}
static fromDict(d){const dateRange=new DateRange(d.min);if(d.max!==undefined)dateRange.range_.addValue(d.max);return dateRange;}}
tr.v.d.Diagnostic.register(DateRange,{elementName:'tr-v-ui-date-range-span'});return{DateRange,};});'use strict';tr.exportTo('tr.v.d',function(){class DiagnosticRef{constructor(guid){this.guid=guid;}
asDict(){return this.guid;}
asDictOrReference(){return this.asDict();}}
-return{DiagnosticRef,};});'use strict';tr.exportTo('tr.v.d',function(){function stableStringify(obj){let replacer;if(!(obj instanceof Array))replacer=Object.keys(obj).sort();return JSON.stringify(obj,replacer);}
-class GenericSet extends tr.v.d.Diagnostic{constructor(values){super();this.values_=new Set(values);}
+return{DiagnosticRef,};});'use strict';tr.exportTo('tr.v.d',function(){function stableStringify(obj){let replacer;if(!(obj instanceof Array)&&obj!==null){replacer=Object.keys(obj).sort();}
+return JSON.stringify(obj,replacer);}
+class GenericSet extends tr.v.d.Diagnostic{constructor(values){super();if(typeof values[Symbol.iterator]!=='function'){throw new Error('GenericSet must be constructed from an interable.');}
+this.values_=new Set(values);this.has_objects_=false;for(const value of values){if(typeof value==='object'){this.has_objects_=true;}}}
get size(){return this.values_.size;}
get length(){return this.values_.size;}*[Symbol.iterator](){for(const value of this.values_){yield value;}}
has(value){if(typeof value!=='object')return this.values_.has(value);const json=JSON.stringify(value);for(const x of this){if(typeof x!=='object')continue;if(json===JSON.stringify(x))return true;}
return false;}
equals(other){if(!(other instanceof GenericSet))return false;if(this.size!==other.size)return false;for(const value of this){if(!other.has(value))return false;}
return true;}
+get hashKey(){if(this.has_objects_)return undefined;if(this.hash_key_!==undefined){return this.hash_key_;}
+let key='';for(const value of Array.from(this.values_.values()).sort()){key+=value;}
+this.hash_key_=key;return key;}
+serialize(serializer){const i=[...this].map(x=>serializer.getOrAllocateId(x));return(i.length===1)?i[0]:i;}
asDictInto_(d){d.values=Array.from(this);}
+static deserialize(data,deserializer){if(!(data instanceof Array)){data=[data];}
+return new GenericSet(data.map(datum=>deserializer.getObject(datum)));}
static fromDict(d){return new GenericSet(d.values);}
clone(){return new GenericSet(this.values_);}
canAddDiagnostic(otherDiagnostic){return otherDiagnostic instanceof GenericSet;}
addDiagnostic(otherDiagnostic){const jsons=new Set();for(const value of this){if(typeof value!=='object')continue;jsons.add(stableStringify(value));}
-for(const value of otherDiagnostic){if(typeof value==='object'&&jsons.has(stableStringify(value))){continue;}
+for(const value of otherDiagnostic){if(typeof value==='object'){if(jsons.has(stableStringify(value))){continue;}
+this.has_objects_=true;}
this.values_.add(value);}}}
-tr.v.d.Diagnostic.register(GenericSet,{elementName:'tr-v-ui-generic-set-span'});return{GenericSet,};});'use strict';tr.exportTo('tr.v.d',function(){class GroupingPath extends tr.v.d.Diagnostic{constructor(groupingPath){super();this.groupingPath_=groupingPath;}
-clone(){return new GroupingPath(Array.from(this.groupingPath_));}
-addToHistogram(hist){hist.diagnostics.set(tr.v.d.RESERVED_NAMES.GROUPING_PATH,this);}
-static getFromHistogram(hist){return hist.diagnostics.get(tr.v.d.RESERVED_NAMES.GROUPING_PATH);}
-equals(other){return 0===tr.b.compareArrays(this.groupingPath_,other.groupingPath_,(x,y)=>x.localeCompare(y));}
-asDictInto_(d){d.groupingPath=this.groupingPath_;}
-static fromDict(d){return new GroupingPath(d.groupingPath);}}
-tr.v.d.Diagnostic.register(GroupingPath);return{GroupingPath,};});'use strict';tr.exportTo('tr.v.d',function(){class EventRef{constructor(event){this.stableId=event.stableId;this.title=event.title;this.start=event.start;this.duration=event.duration;this.end=this.start+this.duration;this.guid=tr.b.GUID.allocateSimple();}}
+tr.v.d.Diagnostic.register(GenericSet,{elementName:'tr-v-ui-generic-set-span'});return{GenericSet,};});'use strict';tr.exportTo('tr.v.d',function(){class EventRef{constructor(event){this.stableId=event.stableId;this.title=event.title;this.start=event.start;this.duration=event.duration;this.end=this.start+this.duration;this.guid=tr.b.GUID.allocateSimple();}}
return{EventRef,};});'use strict';tr.exportTo('tr.v.d',function(){class RelatedEventSet extends tr.v.d.Diagnostic{constructor(opt_events){super();this.eventsByStableId_=new Map();this.canonicalUrl_=undefined;if(opt_events){if(opt_events instanceof tr.model.EventSet||opt_events instanceof Array){for(const event of opt_events){this.add(event);}}else{this.add(opt_events);}}}
clone(){const clone=new tr.v.d.CollectedRelatedEventSet();clone.addDiagnostic(this);return clone;}
+equals(other){if(this.length!==other.length)return false;for(const event of this){if(!other.has(event))return false;}
+return true;}
add(event){this.eventsByStableId_.set(event.stableId,event);}
has(event){return this.eventsByStableId_.has(event.stableId);}
get length(){return this.eventsByStableId_.size;}*[Symbol.iterator](){for(const event of this.eventsByStableId_.values()){yield event;}}
get canonicalUrl(){return this.canonicalUrl_;}
resolve(model,opt_required){for(const[stableId,value]of this.eventsByStableId_){if(!(value instanceof tr.v.d.EventRef))continue;const event=model.getEventByStableId(stableId);if(event instanceof tr.model.Event){this.eventsByStableId_.set(stableId,event);}else if(opt_required){throw new Error('Unable to find Event '+stableId);}}}
-asDictInto_(d){d.events=[];for(const event of this){d.events.push({stableId:event.stableId,title:event.title,start:event.start,duration:event.duration});}}
+serialize(serializer){return[...this].map(event=>[event.stableId,serializer.getOrAllocateId(event.title),event.start,event.duration,]);}
+asDictInto_(d){d.events=[];for(const event of this){d.events.push({stableId:event.stableId,title:event.title,start:tr.b.Unit.byName.timeStampInMs.truncate(event.start),duration:tr.b.Unit.byName.timeDurationInMs.truncate(event.duration),});}}
+static deserialize(data,deserializer){return new RelatedEventSet(data.map(event=>new tr.v.d.EventRef({stableId:event[0],title:deserializer.getObject(event[1]),start:event[2],duration:event[3],})));}
static fromDict(d){return new RelatedEventSet(d.events.map(event=>new tr.v.d.EventRef(event)));}}
-tr.v.d.Diagnostic.register(RelatedEventSet,{elementName:'tr-v-ui-related-event-set-span'});return{RelatedEventSet,};});'use strict';tr.exportTo('tr.v.d',function(){function HistogramRef(guid){this.guid=guid;}
-return{HistogramRef};});'use strict';tr.exportTo('tr.v.d',function(){class RelatedHistogramMap extends tr.v.d.Diagnostic{constructor(){super();this.histogramsByName_=new Map();}
-canAddDiagnostic(otherDiagnostic){return otherDiagnostic instanceof RelatedHistogramMap;}
-addDiagnostic(otherDiagnostic){}
-mergeRelationships(otherDiagnostic,parentHist,otherParentHist){const parentGroupingPath=tr.v.d.GroupingPath.getFromHistogram(parentHist);for(const[name,otherRelatedHist]of otherDiagnostic){const mergedTo=otherRelatedHist.diagnostics.get(tr.v.d.RESERVED_NAMES.MERGED_TO);if(mergedTo===undefined)continue;for(const relatedHist of mergedTo.histogramsByName_.values()){const relatedGroupingPath=tr.v.d.GroupingPath.getFromHistogram(relatedHist);if(relatedGroupingPath===undefined)continue;if(!parentGroupingPath.equals(relatedGroupingPath))continue;this.set(name,relatedHist);}}}
-get(name){return this.histogramsByName_.get(name);}
-set(name,hist){if(!(hist instanceof tr.v.Histogram)&&!(hist instanceof tr.v.d.HistogramRef)){throw new Error('Must be instanceof Histogram or HistogramRef: '+
-hist);}
-this.histogramsByName_.set(name,hist);}
-add(hist){this.set(hist.name,hist);}
-get length(){return this.histogramsByName_.size;}*[Symbol.iterator](){for(const pair of this.histogramsByName_){yield pair;}}
-resolve(histograms,opt_required){for(const[name,value]of this){if(!(value instanceof tr.v.d.HistogramRef))continue;const guid=value.guid;const hist=histograms.lookupHistogram(guid);if(hist instanceof tr.v.Histogram){this.histogramsByName_.set(name,hist);}else if(opt_required){throw new Error('Unable to find Histogram '+guid);}}}
-asDictInto_(d){d.values={};for(const[name,hist]of this){d.values[name]=hist.guid;}}
-static fromDict(d){const map=new RelatedHistogramMap();for(const[name,guid]of Object.entries(d.values)){map.set(name,new tr.v.d.HistogramRef(guid));}
-return map;}}
-tr.v.d.Diagnostic.register(RelatedHistogramMap,{elementName:'tr-v-ui-related-histogram-map-span'});return{RelatedHistogramMap,};});'use strict';tr.exportTo('tr.v.d',function(){const COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER='ChromeUserFriendlyCategory';class RelatedHistogramBreakdown extends tr.v.d.RelatedHistogramMap{constructor(){super();this.colorScheme=undefined;}
-clone(){const clone=new RelatedHistogramBreakdown();clone.colorScheme=this.colorScheme;return clone;}
-canAddDiagnostic(otherDiagnostic){return otherDiagnostic instanceof RelatedHistogramBreakdown&&otherDiagnostic.colorScheme===this.colorScheme;}
-set(name,hist){if(!(hist instanceof tr.v.d.HistogramRef)){if(!(hist instanceof tr.v.Histogram)){throw new Error('RelatedHistogramBreakdown can only contain Histograms');}
-if((this.length>0)&&(hist.unit!==tr.b.getFirstElement(this)[1].unit)){throw new Error('Units mismatch',tr.b.getFirstElement(this)[1].unit,hist.unit);}}
-tr.v.d.RelatedHistogramMap.prototype.set.call(this,name,hist);}
-asDictInto_(d){tr.v.d.RelatedHistogramMap.prototype.asDictInto_.call(this,d);if(this.colorScheme)d.colorScheme=this.colorScheme;}
-static fromDict(d){const diagnostic=new RelatedHistogramBreakdown();for(const[name,guid]of Object.entries(d.values)){diagnostic.set(name,new tr.v.d.HistogramRef(guid));}
-if(d.colorScheme)diagnostic.colorScheme=d.colorScheme;return diagnostic;}
-static buildFromEvents(histograms,namePrefix,events,categoryForEvent,unit,opt_sampleForEvent,opt_binBoundaries,opt_this){const sampleForEvent=opt_sampleForEvent||((event)=>event.cpuSelfTime);const diagnostic=new RelatedHistogramBreakdown();for(const event of events){const sample=sampleForEvent.call(opt_this,event);if(sample===undefined)continue;const eventCategory=categoryForEvent.call(opt_this,event);let hist=diagnostic.get(eventCategory);if(hist===undefined){hist=new tr.v.Histogram(namePrefix+eventCategory,unit,opt_binBoundaries);histograms.addHistogram(hist);diagnostic.set(eventCategory,hist);}
-hist.addSample(sample,{relatedEvents:new tr.v.d.RelatedEventSet([event])});}
-return diagnostic;}}
-tr.v.d.Diagnostic.register(RelatedHistogramBreakdown,{elementName:'tr-v-ui-breakdown-span'});return{COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER,RelatedHistogramBreakdown,};});'use strict';tr.exportTo('tr.v.d',function(){class RelatedNameMap extends tr.v.d.Diagnostic{constructor(opt_info){super();this.map_=new Map();}
+tr.v.d.Diagnostic.register(RelatedEventSet,{elementName:'tr-v-ui-related-event-set-span'});return{RelatedEventSet,};});'use strict';tr.exportTo('tr.v.d',function(){class RelatedNameMap extends tr.v.d.Diagnostic{constructor(opt_info){super();this.map_=new Map();if(opt_info){for(const[key,name]of Object.entries(opt_info)){this.set(key,name);}}}
clone(){const clone=new RelatedNameMap();clone.addDiagnostic(this);return clone;}
equals(other){if(!(other instanceof RelatedNameMap))return false;const keys1=new Set(this.map_.keys());const keys2=new Set(other.map_.keys());if(!tr.b.setsEqual(keys1,keys2))return false;for(const[key,name]of this){if(name!==other.get(key))return false;}
return true;}
canAddDiagnostic(otherDiagnostic){return otherDiagnostic instanceof RelatedNameMap;}
addDiagnostic(otherDiagnostic){for(const[key,name]of otherDiagnostic){const existing=this.get(key);if(existing===undefined){this.set(key,name);}else if(existing!==name){throw new Error('Histogram names differ: '+`"${existing}" != "${name}"`);}}}
+serialize(serializer){const keys=[...this.map_.keys()];keys.sort();const names=keys.map(k=>serializer.getOrAllocateId(this.get(k)));const keysId=serializer.getOrAllocateId(keys.map(k=>serializer.getOrAllocateId(k)));return[keysId,...names];}
asDictInto_(d){d.names={};for(const[key,name]of this)d.names[key]=name;}
set(key,name){this.map_.set(key,name);}
get(key){return this.map_.get(key);}*[Symbol.iterator](){for(const pair of this.map_)yield pair;}*values(){for(const value of this.map_.values())yield value;}
static fromEntries(entries){const names=new RelatedNameMap();for(const[key,name]of entries){names.set(key,name);}
return names;}
+static deserialize(data,deserializer){const names=new RelatedNameMap();const keys=deserializer.getObject(data[0]);for(let i=0;i<keys.length;++i){names.set(deserializer.getObject(keys[i]),deserializer.getObject(data[i+1]));}
+return names;}
static fromDict(d){return RelatedNameMap.fromEntries(Object.entries(d.names||{}));}}
tr.v.d.Diagnostic.register(RelatedNameMap,{elementName:'tr-v-ui-related-name-map-span',});return{RelatedNameMap,};});'use strict';tr.exportTo('tr.v.d',function(){class Scalar extends tr.v.d.Diagnostic{constructor(value){super();if(!(value instanceof tr.b.Scalar)){throw new Error('expected Scalar');}
this.value=value;}
clone(){return new Scalar(this.value);}
+serialize(serializer){return this.value.asDict();}
asDictInto_(d){d.value=this.value.asDict();}
+static deserialize(value,deserializer){return Scalar.fromDict({value});}
static fromDict(d){return new Scalar(tr.b.Scalar.fromDict(d.value));}}
-tr.v.d.Diagnostic.register(Scalar,{elementName:'tr-v-ui-scalar-diagnostic-span'});return{Scalar,};});'use strict';tr.exportTo('tr.v.d',function(){class TagMap extends tr.v.d.Diagnostic{constructor(opt_info){super();this.tagsToStoryNames_=new Map();if(opt_info){for(const[tag,storyDisplayNames]of Object.entries(opt_info.tagsToStoryNames||{})){this.tagsToStoryNames.set(tag,new Set(storyDisplayNames));}}}
-clone(){const clone=new TagMap();clone.addDiagnostic(this);return clone;}
-addToHistogram(hist){hist.diagnostics.set(tr.v.d.RESERVED_NAMES.TAG_MAP,this);}
-equals(other){if(!(other instanceof TagMap))return false;const keys1=new Set(this.tagsToStoryNames.keys());const keys2=new Set(other.tagsToStoryNames.keys());if(!tr.b.setsEqual(keys1,keys2)){return false;}
-for(const key of keys1){if(!tr.b.setsEqual(this.tagsToStoryNames.get(key),other.tagsToStoryNames.get(key))){return false;}}
-return true;}
-canAddDiagnostic(otherDiagnostic){return otherDiagnostic instanceof TagMap;}
-addDiagnostic(otherDiagnostic){for(const[name,storyDisplayNames]of
-otherDiagnostic.tagsToStoryNames){if(!this.tagsToStoryNames.has(name)){this.tagsToStoryNames.set(name,new Set());}
-for(const t of storyDisplayNames){this.tagsToStoryNames.get(name).add(t);}}
-return this;}
-asDictInto_(d){d.tagsToStoryNames={};for(const[name,value]of this.tagsToStoryNames){d.tagsToStoryNames[name]=Array.from(value);}}
-get tagsToStoryNames(){return this.tagsToStoryNames_;}
-static fromDict(d){const info=new TagMap();for(const[name,values]of
-Object.entries(d.tagsToStoryNames||{})){info.tagsToStoryNames.set(name,new Set(values));}
-return info;}}
-tr.v.d.Diagnostic.register(TagMap,{elementName:'tr-v-ui-tag-map-span'});return{TagMap,};});'use strict';tr.exportTo('tr.v.d',function(){class UnmergeableDiagnosticSet extends tr.v.d.Diagnostic{constructor(diagnostics){super();this._diagnostics=diagnostics;}
+tr.v.d.Diagnostic.register(Scalar,{elementName:'tr-v-ui-scalar-diagnostic-span'});return{Scalar,};});'use strict';tr.exportTo('tr.v.d',function(){class UnmergeableDiagnosticSet extends tr.v.d.Diagnostic{constructor(diagnostics){super();this._diagnostics=diagnostics;}
clone(){const clone=new tr.v.d.UnmergeableDiagnosticSet();clone.addDiagnostic(this);return clone;}
canAddDiagnostic(otherDiagnostic){return true;}
addDiagnostic(otherDiagnostic){if(otherDiagnostic instanceof UnmergeableDiagnosticSet){for(const subOtherDiagnostic of otherDiagnostic){const clone=subOtherDiagnostic.clone();this.addDiagnostic(clone);}
return;}
for(let i=0;i<this._diagnostics.length;++i){if(this._diagnostics[i].canAddDiagnostic(otherDiagnostic)){this._diagnostics[i].addDiagnostic(otherDiagnostic);return;}}
const clone=otherDiagnostic.clone();this._diagnostics.push(clone);}
-mergeRelationships(otherDiagnostic,parentHist,otherParentHist){if(otherDiagnostic instanceof UnmergeableDiagnosticSet){for(const subDiagnostic of otherDiagnostic){this.mergeRelationships(subDiagnostic,parentHist,otherParentHist);}
-return;}
-for(const subDiagnostic of this){if(!(subDiagnostic instanceof tr.v.d.RelatedHistogramMap)&&!(subDiagnostic instanceof tr.v.d.RelatedHistogramBreakdown)){continue;}
-subDiagnostic.mergeRelationships(otherDiagnostic,parentHist,otherParentHist);}}
get length(){return this._diagnostics.length;}*[Symbol.iterator](){for(const diagnostic of this._diagnostics)yield diagnostic;}
asDictInto_(d){d.diagnostics=this._diagnostics.map(d=>d.asDictOrReference());}
+static deserialize(data,deserializer){return new UnmergeableDiagnosticSet(d.map(i=>deserializer.getDiagnostic(i).diagnostic));}
+serialize(serializer){return this._diagnostics.map(d=>serializer.getOrAllocateDiagnosticId('',d));}
static fromDict(d){return new UnmergeableDiagnosticSet(d.diagnostics.map(d=>((typeof d==='string')?new tr.v.d.DiagnosticRef(d):tr.v.d.Diagnostic.fromDict(d))));}}
-tr.v.d.Diagnostic.register(UnmergeableDiagnosticSet,{elementName:'tr-v-ui-unmergeable-diagnostic-set-span'});return{UnmergeableDiagnosticSet,};});'use strict';tr.exportTo('tr.v.d',function(){const RESERVED_INFOS={ANGLE_REVISIONS:{name:'angleRevisions',type:tr.v.d.GenericSet},ARCHITECTURES:{name:'architectures',type:tr.v.d.GenericSet},BENCHMARKS:{name:'benchmarks',type:tr.v.d.GenericSet},BENCHMARK_START:{name:'benchmarkStart',type:tr.v.d.DateRange},BENCHMARK_DESCRIPTIONS:{name:'benchmarkDescriptions',type:tr.v.d.GenericSet},BOTS:{name:'bots',type:tr.v.d.GenericSet},BUG_COMPONENTS:{name:'bugComponents',type:tr.v.d.GenericSet},BUILDS:{name:'builds',type:tr.v.d.GenericSet},CATAPULT_REVISIONS:{name:'catapultRevisions',type:tr.v.d.GenericSet},CHROMIUM_COMMIT_POSITIONS:{name:'chromiumCommitPositions',type:tr.v.d.GenericSet},CHROMIUM_REVISIONS:{name:'chromiumRevisions',type:tr.v.d.GenericSet},DEVICE_IDS:{name:'deviceIds',type:tr.v.d.GenericSet},GPUS:{name:'gpus',type:tr.v.d.GenericSet},GROUPING_PATH:{name:'groupingPath',type:tr.v.d.GroupingPath},IS_REFERENCE_BUILD:{name:'isReferenceBuild',type:tr.v.d.GenericSet},LABELS:{name:'labels',type:tr.v.d.GenericSet},LOG_URLS:{name:'logUrls',type:tr.v.d.GenericSet},MASTERS:{name:'masters',type:tr.v.d.GenericSet},MEMORY_AMOUNTS:{name:'memoryAmounts',type:tr.v.d.GenericSet},MERGED_FROM:{name:'mergedFrom',type:tr.v.d.RelatedHistogramMap},MERGED_TO:{name:'mergedTo',type:tr.v.d.RelatedHistogramMap},OS_NAMES:{name:'osNames',type:tr.v.d.GenericSet},OS_VERSIONS:{name:'osVersions',type:tr.v.d.GenericSet},OWNERS:{name:'owners',type:tr.v.d.GenericSet},PRODUCT_VERSIONS:{name:'productVersions',type:tr.v.d.GenericSet},RELATED_NAMES:{name:'relatedNames',type:tr.v.d.GenericSet},SKIA_REVISIONS:{name:'skiaRevisions',type:tr.v.d.GenericSet},STORIES:{name:'stories',type:tr.v.d.GenericSet},STORYSET_REPEATS:{name:'storysetRepeats',type:tr.v.d.GenericSet},STORY_TAGS:{name:'storyTags',type:tr.v.d.GenericSet},TAG_MAP:{name:'tagmap',type:tr.v.d.TagMap},TRACE_START:{name:'traceStart',type:tr.v.d.DateRange},TRACE_URLS:{name:'traceUrls',type:tr.v.d.GenericSet},V8_COMMIT_POSITIONS:{name:'v8CommitPositions',type:tr.v.d.DateRange},V8_REVISIONS:{name:'v8Revisions',type:tr.v.d.GenericSet},WEBRTC_REVISIONS:{name:'webrtcRevisions',type:tr.v.d.GenericSet},};const RESERVED_NAMES={};const RESERVED_NAMES_TO_TYPES=new Map();for(const[codename,info]of Object.entries(RESERVED_INFOS)){RESERVED_NAMES[codename]=info.name;if(RESERVED_NAMES_TO_TYPES.has(info.name)){throw new Error(`Duplicate reserved name "${info.name}"`);}
+tr.v.d.Diagnostic.register(UnmergeableDiagnosticSet,{elementName:'tr-v-ui-unmergeable-diagnostic-set-span'});return{UnmergeableDiagnosticSet,};});'use strict';tr.exportTo('tr.v.d',function(){const RESERVED_INFOS={ANGLE_REVISIONS:{name:'angleRevisions',type:tr.v.d.GenericSet},ARCHITECTURES:{name:'architectures',type:tr.v.d.GenericSet},BENCHMARKS:{name:'benchmarks',type:tr.v.d.GenericSet},BENCHMARK_START:{name:'benchmarkStart',type:tr.v.d.DateRange},BENCHMARK_DESCRIPTIONS:{name:'benchmarkDescriptions',type:tr.v.d.GenericSet},BOTS:{name:'bots',type:tr.v.d.GenericSet},BUG_COMPONENTS:{name:'bugComponents',type:tr.v.d.GenericSet},BUILDS:{name:'builds',type:tr.v.d.GenericSet},CATAPULT_REVISIONS:{name:'catapultRevisions',type:tr.v.d.GenericSet},CHROMIUM_COMMIT_POSITIONS:{name:'chromiumCommitPositions',type:tr.v.d.GenericSet},CHROMIUM_REVISIONS:{name:'chromiumRevisions',type:tr.v.d.GenericSet},DESCRIPTION:{name:'description',type:tr.v.d.GenericSet},DEVICE_IDS:{name:'deviceIds',type:tr.v.d.GenericSet},DOCUMENTATION_URLS:{name:'documentationUrls',type:tr.v.d.GenericSet},FUCHSIA_GARNET_REVISIONS:{name:'fuchsiaGarnetRevisions',type:tr.v.d.GenericSet},FUCHSIA_PERIDOT_REVISIONS:{name:'fuchsiaPeridotRevisions',type:tr.v.d.GenericSet},FUCHSIA_TOPAZ_REVISIONS:{name:'fuchsiaTopazRevisions',type:tr.v.d.GenericSet},FUCHSIA_ZIRCON_REVISIONS:{name:'fuchsiaZirconRevisions',type:tr.v.d.GenericSet},GPUS:{name:'gpus',type:tr.v.d.GenericSet},IS_REFERENCE_BUILD:{name:'isReferenceBuild',type:tr.v.d.GenericSet},LABELS:{name:'labels',type:tr.v.d.GenericSet},LOG_URLS:{name:'logUrls',type:tr.v.d.GenericSet},MASTERS:{name:'masters',type:tr.v.d.GenericSet},MEMORY_AMOUNTS:{name:'memoryAmounts',type:tr.v.d.GenericSet},OS_NAMES:{name:'osNames',type:tr.v.d.GenericSet},OS_VERSIONS:{name:'osVersions',type:tr.v.d.GenericSet},OWNERS:{name:'owners',type:tr.v.d.GenericSet},POINT_ID:{name:'pointId',type:tr.v.d.GenericSet},PRODUCT_VERSIONS:{name:'productVersions',type:tr.v.d.GenericSet},REVISION_TIMESTAMPS:{name:'revisionTimestamps',type:tr.v.d.DateRange},SKIA_REVISIONS:{name:'skiaRevisions',type:tr.v.d.GenericSet},STATISTICS_NAMES:{name:'statisticsNames',type:tr.v.d.GenericSet},STORIES:{name:'stories',type:tr.v.d.GenericSet},STORYSET_REPEATS:{name:'storysetRepeats',type:tr.v.d.GenericSet},STORY_TAGS:{name:'storyTags',type:tr.v.d.GenericSet},SUMMARY_KEYS:{name:'summaryKeys',type:tr.v.d.GenericSet},TEST_PATH:{name:'testPath',type:tr.v.d.GenericSet},TRACE_START:{name:'traceStart',type:tr.v.d.DateRange},TRACE_URLS:{name:'traceUrls',type:tr.v.d.GenericSet},V8_COMMIT_POSITIONS:{name:'v8CommitPositions',type:tr.v.d.DateRange},V8_REVISIONS:{name:'v8Revisions',type:tr.v.d.GenericSet},WEBRTC_REVISIONS:{name:'webrtcRevisions',type:tr.v.d.GenericSet},};const RESERVED_NAMES={};const RESERVED_NAMES_TO_TYPES=new Map();for(const[codename,info]of Object.entries(RESERVED_INFOS)){RESERVED_NAMES[codename]=info.name;if(RESERVED_NAMES_TO_TYPES.has(info.name)){throw new Error(`Duplicate reserved name "${info.name}"`);}
RESERVED_NAMES_TO_TYPES.set(info.name,info.type);}
const RESERVED_NAMES_SET=new Set(Object.values(RESERVED_NAMES));return{RESERVED_INFOS,RESERVED_NAMES,RESERVED_NAMES_SET,RESERVED_NAMES_TO_TYPES,};});'use strict';tr.exportTo('tr.v.d',function(){class DiagnosticMap extends Map{constructor(opt_allowReservedNames){super();if(opt_allowReservedNames===undefined){opt_allowReservedNames=true;}
this.allowReservedNames_=opt_allowReservedNames;}
@@ -6952,23 +7283,22 @@ if(!(diagnostic instanceof tr.v.d.Diagnostic)&&!(diagnostic instanceof tr.v.d.Di
if(!this.allowReservedNames_&&tr.v.d.RESERVED_NAMES_SET.has(name)&&!(diagnostic instanceof tr.v.d.UnmergeableDiagnosticSet)&&!(diagnostic instanceof tr.v.d.DiagnosticRef)){const type=tr.v.d.RESERVED_NAMES_TO_TYPES.get(name);if(type&&!(diagnostic instanceof type)){throw new Error(`Diagnostics named "${name}" must be ${type.name}, `+`not ${diagnostic.constructor.name}`);}}
Map.prototype.set.call(this,name,diagnostic);}
delete(name){if(name===undefined)throw new Error('missing name');Map.prototype.delete.call(this,name);}
-addDicts(dict){for(const[name,diagnosticDict]of Object.entries(dict)){if(typeof diagnosticDict==='string'){this.set(name,new tr.v.d.DiagnosticRef(diagnosticDict));}else{this.set(name,tr.v.d.Diagnostic.fromDict(diagnosticDict));}}}
+deserializeAdd(data,deserializer){for(const id of data){const{name,diagnostic}=deserializer.getDiagnostic(id);this.set(name,diagnostic);}}
+addDicts(dict){for(const[name,diagnosticDict]of Object.entries(dict)){if(name==='tagmap')continue;if(typeof diagnosticDict==='string'){this.set(name,new tr.v.d.DiagnosticRef(diagnosticDict));}else if(diagnosticDict.type!=='RelatedHistogramMap'&&diagnosticDict.type!=='RelatedHistogramBreakdown'&&diagnosticDict.type!=='TagMap'){this.set(name,tr.v.d.Diagnostic.fromDict(diagnosticDict));}}}
resolveSharedDiagnostics(histograms,opt_required){for(const[name,value]of this){if(!(value instanceof tr.v.d.DiagnosticRef)){continue;}
const guid=value.guid;const diagnostic=histograms.lookupDiagnostic(guid);if(diagnostic instanceof tr.v.d.Diagnostic){this.set(name,diagnostic);}else if(opt_required){throw new Error('Unable to find shared Diagnostic '+guid);}}}
+serialize(serializer){const data=[];for(const[name,diagnostic]of this){data.push(serializer.getOrAllocateDiagnosticId(name,diagnostic));}
+return data;}
asDict(){const dict={};for(const[name,diagnostic]of this){dict[name]=diagnostic.asDictOrReference();}
return dict;}
+static deserialize(data,deserializer){const diagnostics=new DiagnosticMap();diagnostics.deserializeAdd(data,deserializer);return diagnostics;}
static fromDict(d){const diagnostics=new DiagnosticMap();diagnostics.addDicts(d);return diagnostics;}
-static fromObject(obj){const diagnostics=new DiagnosticMap();if(!(obj instanceof Map))obj=Object.entries(obj);for(const[name,diagnostic]of obj){diagnostics.set(name,diagnostic);}
+static fromObject(obj){const diagnostics=new DiagnosticMap();if(!(obj instanceof Map))obj=Object.entries(obj);for(const[name,diagnostic]of obj){if(!diagnostic)continue;diagnostics.set(name,diagnostic);}
return diagnostics;}
-addDiagnostics(other){for(const[name,otherDiagnostic]of other){if(name===tr.v.d.RESERVED_NAMES.MERGED_FROM||name===tr.v.d.RESERVED_NAMES.MERGED_TO||name===tr.v.d.RESERVED_NAMES.GROUPING_PATH){continue;}
-const myDiagnostic=this.get(name);if(myDiagnostic!==undefined&&myDiagnostic.canAddDiagnostic(otherDiagnostic)){myDiagnostic.addDiagnostic(otherDiagnostic);continue;}
+addDiagnostics(other){for(const[name,otherDiagnostic]of other){const myDiagnostic=this.get(name);if(myDiagnostic!==undefined&&myDiagnostic.canAddDiagnostic(otherDiagnostic)){myDiagnostic.addDiagnostic(otherDiagnostic);continue;}
const clone=otherDiagnostic.clone();if(myDiagnostic===undefined){this.set(name,clone);continue;}
-this.set(name,new tr.v.d.UnmergeableDiagnosticSet([myDiagnostic,clone]));}}
-mergeRelationships(parentHist){for(const[name,diagnostic]of this){if(!(diagnostic instanceof tr.v.d.RelatedHistogramMap)&&!(diagnostic instanceof tr.v.d.RelatedHistogramBreakdown)&&!(diagnostic instanceof tr.v.d.UnmergeableDiagnosticSet)){continue;}
-for(const[unusedName,otherHist]of
-this.get(tr.v.d.RESERVED_NAMES.MERGED_FROM)){const otherDiagnostic=otherHist.diagnostics.get(name);if(!(otherDiagnostic instanceof tr.v.d.RelatedHistogramMap)&&!(otherDiagnostic instanceof tr.v.d.RelatedHistogramBreakdown)&&!(otherDiagnostic instanceof tr.v.d.UnmergeableDiagnosticSet)){continue;}
-diagnostic.mergeRelationships(otherDiagnostic,parentHist,otherHist);}}}}
-return{DiagnosticMap,};});'use strict';tr.exportTo('tr.v',function(){const MAX_DIAGNOSTIC_MAPS=16;const DEFAULT_SAMPLE_VALUES_PER_BIN=10;const DEFAULT_REBINNED_COUNT=40;const DEFAULT_BOUNDARIES_FOR_UNIT=new Map();const DELTA=String.fromCharCode(916);const Z_SCORE_NAME='z-score';const P_VALUE_NAME='p-value';const U_STATISTIC_NAME='U';function percentToString(percent,opt_force3){if(percent<0||percent>1){throw new Error('percent must be in [0,1]');}
+this.set(name,new tr.v.d.UnmergeableDiagnosticSet([myDiagnostic,clone]));}}}
+return{DiagnosticMap};});'use strict';tr.exportTo('tr.v',function(){const MAX_DIAGNOSTIC_MAPS=16;const DEFAULT_SAMPLE_VALUES_PER_BIN=10;const DEFAULT_REBINNED_COUNT=40;const DEFAULT_BOUNDARIES_FOR_UNIT=new Map();const DEFAULT_ITERATION_FOR_BOOTSTRAP_RESAMPLING=500;const DELTA=String.fromCharCode(916);const Z_SCORE_NAME='z-score';const P_VALUE_NAME='p-value';const U_STATISTIC_NAME='U';function percentToString(percent,opt_force3){if(percent<0||percent>1){throw new Error('percent must be in [0,1]');}
if(percent===0)return'000';if(percent===1)return'100';let str=percent.toString();if(str[1]!=='.'){throw new Error('Unexpected percent');}
str=str+'0'.repeat(Math.max(4-str.length,0));if(str.length>4){if(opt_force3){str=str.slice(0,4);}else{str=str.slice(0,4)+'_'+str.slice(4);}}
return'0'+str.slice(2);}
@@ -6978,15 +7308,20 @@ addSample(value){this.count+=1;}
addDiagnosticMap(diagnostics){tr.b.math.Statistics.uniformlySampleStream(this.diagnosticMaps,this.count,diagnostics,MAX_DIAGNOSTIC_MAPS);}
addBin(other){if(!this.range.equals(other.range)){throw new Error('Merging incompatible Histogram bins.');}
tr.b.math.Statistics.mergeSampledStreams(this.diagnosticMaps,this.count,other.diagnosticMaps,other.count,MAX_DIAGNOSTIC_MAPS);this.count+=other.count;}
+deserialize(data,deserializer){if(!(data instanceof Array)){this.count=data;return;}
+this.count=data[0];for(const sample of data.slice(1)){if(!(sample instanceof Array))continue;this.diagnosticMaps.push(tr.v.d.DiagnosticMap.deserialize(sample.slice(1),deserializer));}}
fromDict(dict){this.count=dict[0];if(dict.length>1){for(const map of dict[1]){this.diagnosticMaps.push(tr.v.d.DiagnosticMap.fromDict(map));}}}
+serialize(serializer){if(!this.diagnosticMaps.length){return this.count;}
+return[this.count,...this.diagnosticMaps.map(d=>[undefined,...d.serialize(serializer)])];}
asDict(){if(!this.diagnosticMaps.length){return[this.count];}
return[this.count,this.diagnosticMaps.map(d=>d.asDict())];}}
-const DEFAULT_SUMMARY_OPTIONS=new Map([['avg',true],['count',true],['geometricMean',false],['max',true],['min',true],['nans',false],['std',true],['sum',true],]);class Histogram{constructor(name,unit,opt_binBoundaries){let binBoundaries=opt_binBoundaries;if(!binBoundaries){const baseUnit=unit.baseUnit?unit.baseUnit:unit;binBoundaries=DEFAULT_BOUNDARIES_FOR_UNIT.get(baseUnit.unitName);}
-this.guid_=undefined;this.binBoundariesDict_=binBoundaries.asDict();this.allBins=binBoundaries.bins.slice();this.description='';const allowReservedNames=false;this.diagnostics_=new tr.v.d.DiagnosticMap(allowReservedNames);this.maxNumSampleValues_=this.defaultMaxNumSampleValues_;this.name_=name;this.nanDiagnosticMaps=[];this.numNans=0;this.running_=undefined;this.sampleValues_=[];this.shortName=undefined;this.summaryOptions=new Map(DEFAULT_SUMMARY_OPTIONS);this.summaryOptions.set('percentile',[]);this.summaryOptions.set('iprs',[]);this.unit=unit;}
-static create(name,unit,samples,opt_options){const options=opt_options||{};const hist=new Histogram(name,unit,options.binBoundaries);if(options.description)hist.description=options.description;if(options.shortName)hist.shortName=options.shortName;if(options.summaryOptions){let summaryOptions=options.summaryOptions;if(!(summaryOptions instanceof Map)){summaryOptions=Object.entries(summaryOptions);}
+const DEFAULT_SUMMARY_OPTIONS=new Map([['avg',true],['count',true],['geometricMean',false],['max',true],['min',true],['nans',false],['std',true],['sum',true],]);class Histogram{constructor(name,unit,opt_binBoundaries){if(!(unit instanceof tr.b.Unit)){throw new Error('unit must be a Unit: '+unit);}
+let binBoundaries=opt_binBoundaries;if(!binBoundaries){const baseUnit=unit.baseUnit?unit.baseUnit:unit;binBoundaries=DEFAULT_BOUNDARIES_FOR_UNIT.get(baseUnit.unitName);}
+this.binBoundariesDict_=binBoundaries.asDict();this.allBins=binBoundaries.bins.slice();this.description='';const allowReservedNames=false;this.diagnostics_=new tr.v.d.DiagnosticMap(allowReservedNames);this.maxNumSampleValues_=this.defaultMaxNumSampleValues_;this.name_=name;this.nanDiagnosticMaps=[];this.numNans=0;this.running_=undefined;this.sampleValues_=[];this.sampleMeans_=[];this.summaryOptions=new Map(DEFAULT_SUMMARY_OPTIONS);this.summaryOptions.set('percentile',[]);this.summaryOptions.set('iprs',[]);this.summaryOptions.set('ci',[]);this.unit=unit;}
+static create(name,unit,samples,opt_options){const options=opt_options||{};const hist=new Histogram(name,unit,options.binBoundaries);if(options.description)hist.description=options.description;if(options.summaryOptions){let summaryOptions=options.summaryOptions;if(!(summaryOptions instanceof Map)){summaryOptions=Object.entries(summaryOptions);}
for(const[name,value]of summaryOptions){hist.summaryOptions.set(name,value);}}
if(options.diagnostics!==undefined){let diagnostics=options.diagnostics;if(!(diagnostics instanceof Map)){diagnostics=Object.entries(diagnostics);}
-for(const[name,diagnostic]of diagnostics){hist.diagnostics.set(name,diagnostic);}}
+for(const[name,diagnostic]of diagnostics){if(!diagnostic)continue;hist.diagnostics.set(name,diagnostic);}}
if(!(samples instanceof Array))samples=[samples];for(const sample of samples){if(typeof sample==='object'){hist.addSample(sample.value,sample.diagnostics);}else{hist.addSample(sample);}}
return hist;}
get diagnostics(){return this.diagnostics_;}
@@ -6994,14 +7329,21 @@ get running(){return this.running_;}
get maxNumSampleValues(){return this.maxNumSampleValues_;}
set maxNumSampleValues(n){this.maxNumSampleValues_=n;tr.b.math.Statistics.uniformlySampleArray(this.sampleValues_,this.maxNumSampleValues_);}
get name(){return this.name_;}
-get guid(){if(this.guid_===undefined){this.guid_=tr.b.GUID.allocateUUID4();}
-return this.guid_;}
-set guid(guid){if(this.guid_!==undefined){throw new Error('Cannot reset guid');}
-this.guid_=guid;}
-static fromDict(dict){const hist=new Histogram(dict.name,tr.b.Unit.fromJSON(dict.unit),HistogramBinBoundaries.fromDict(dict.binBoundaries));hist.guid=dict.guid;if(dict.shortName){hist.shortName=dict.shortName;}
-if(dict.description){hist.description=dict.description;}
+deserializeStatistics_(){const statisticsNames=this.diagnostics.get(tr.v.d.RESERVED_NAMES.STATISTICS_NAMES);if(!statisticsNames)return;for(const statName of statisticsNames){if(statName.startsWith('pct_')){const percent=percentFromString(statName.substr(4));this.summaryOptions.get('percentile').push(percent);}else if(statName.startsWith('ipr_')){const lower=percentFromString(statName.substr(4,3));const upper=percentFromString(statName.substr(8));this.summaryOptions.get('iprs').push(tr.b.math.Range.fromExplicitRange(lower,upper));}else if(statName.startsWith('ci_')){const percent=percentFromString(statName.replace('_lower','').replace('_upper','').substr(3));if(!this.summaryOptions.get('ci').includes(percent)){this.summaryOptions.get('ci').push(percent);}}}
+for(const statName of this.summaryOptions.keys()){if(statName==='percentile'||statName==='iprs'||statName==='ci'){continue;}
+this.summaryOptions.set(statName,statisticsNames.has(statName));}}
+deserializeBin_(i,bin,deserializer){this.allBins[i]=new HistogramBin(this.allBins[i].range);this.allBins[i].deserialize(bin,deserializer);if(!(bin instanceof Array))return;for(let sample of bin.slice(1)){if(sample instanceof Array){sample=sample[0];}
+this.sampleValues_.push(sample);}}
+deserializeBins_(bins,deserializer){if(bins instanceof Array){for(let i=0;i<bins.length;++i){this.deserializeBin_(i,bins[i],deserializer);}}else{for(const[i,binData]of Object.entries(bins)){this.deserializeBin_(i,binData,deserializer);}}}
+static deserialize(data,deserializer){const[name,unit,boundaries,diagnostics,running,bins,nanBin]=data;const hist=new Histogram(deserializer.getObject(name),tr.b.Unit.fromJSON(unit),HistogramBinBoundaries.fromDict(deserializer.getObject(boundaries)));hist.diagnostics.deserializeAdd(diagnostics,deserializer);const description=hist.diagnostics.get(tr.v.d.RESERVED_NAMES.DESCRIPTION);if(description&&description.length){hist.description=[...description][0];}
+hist.deserializeStatistics_();if(running){hist.running_=tr.b.math.RunningStatistics.fromDict(running);}
+if(bins){hist.deserializeBins_(bins,deserializer);}
+if(nanBin){if(!(nanBin instanceof Array)){hist.numNans=nanBin;}else{hist.numNans=nanBin[0];for(const sample of nanBin.slice(1)){if(!(sample instanceof Array))continue;hist.nanDiagnosticMaps.push(tr.v.d.DiagnosticMap.deserialize(sample.slice(1),deserializer));}}}
+return hist;}
+static fromDict(dict){const hist=new Histogram(dict.name,tr.b.Unit.fromJSON(dict.unit),HistogramBinBoundaries.fromDict(dict.binBoundaries));if(dict.description){hist.description=dict.description;}
if(dict.diagnostics){hist.diagnostics.addDicts(dict.diagnostics);}
-if(dict.allBins){if(dict.allBins.length!==undefined){for(let i=0;i<dict.allBins.length;++i){hist.allBins[i]=new HistogramBin(hist.allBins[i].range);hist.allBins[i].fromDict(dict.allBins[i]);}}else{for(const[i,binDict]of Object.entries(dict.allBins)){hist.allBins[i]=new HistogramBin(hist.allBins[i].range);hist.allBins[i].fromDict(binDict);}}}
+if(dict.allBins){if(dict.allBins.length!==undefined){for(let i=0;i<dict.allBins.length;++i){hist.allBins[i]=new HistogramBin(hist.allBins[i].range);hist.allBins[i].fromDict(dict.allBins[i]);}}else{for(const[i,binDict]of Object.entries(dict.allBins)){if(i>=hist.allBins.length||i<0){throw new Error('Invalid index "'+i+'" out of bounds of [0..'+hist.allBins.length+')');}
+hist.allBins[i]=new HistogramBin(hist.allBins[i].range);hist.allBins[i].fromDict(binDict);}}}
if(dict.running){hist.running_=tr.b.math.RunningStatistics.fromDict(dict.running);}
if(dict.summaryOptions){if(dict.summaryOptions.iprs){dict.summaryOptions.iprs=dict.summaryOptions.iprs.map(r=>tr.b.math.Range.fromExplicitRange(r[0],r[1]));}
hist.customizeSummaryOptions(dict.summaryOptions);}
@@ -7029,28 +7371,35 @@ return bin.range.center;}
return this.allBins[this.allBins.length-1].range.min;}
getBinIndexForValue(value){const i=tr.b.findFirstTrueIndexInSortedArray(this.allBins,b=>value<b.range.max);if(0<=i&&i<this.allBins.length)return i;return this.allBins.length-1;}
getBinForValue(value){return this.allBins[this.getBinIndexForValue(value)];}
-addSample(value,opt_diagnostics){if(opt_diagnostics&&!(opt_diagnostics instanceof tr.v.d.DiagnosticMap)){opt_diagnostics=tr.v.d.DiagnosticMap.fromObject(opt_diagnostics);}
+addSample(value,opt_diagnostics){if(opt_diagnostics){if(!(opt_diagnostics instanceof tr.v.d.DiagnosticMap)){opt_diagnostics=tr.v.d.DiagnosticMap.fromObject(opt_diagnostics);}
+for(const[name,diag]of opt_diagnostics){if(diag instanceof tr.v.d.Breakdown){diag.truncate(this.unit);}}}
if(typeof(value)!=='number'||isNaN(value)){this.numNans++;if(opt_diagnostics){tr.b.math.Statistics.uniformlySampleStream(this.nanDiagnosticMaps,this.numNans,opt_diagnostics,MAX_DIAGNOSTIC_MAPS);}}else{if(this.running_===undefined){this.running_=new tr.b.math.RunningStatistics();}
-this.running_.add(value);const binIndex=this.getBinIndexForValue(value);let bin=this.allBins[binIndex];if(bin.count===0){bin=new HistogramBin(bin.range);this.allBins[binIndex]=bin;}
+this.sampleMeans_=[];this.running_.add(value);value=this.unit.truncate(value);const binIndex=this.getBinIndexForValue(value);let bin=this.allBins[binIndex];if(bin.count===0){bin=new HistogramBin(bin.range);this.allBins[binIndex]=bin;}
bin.addSample(value);if(opt_diagnostics){bin.addDiagnosticMap(opt_diagnostics);}}
tr.b.math.Statistics.uniformlySampleStream(this.sampleValues_,this.numValues+this.numNans,value,this.maxNumSampleValues);}
+resampleMean_(percent){const filteredSamples=this.sampleValues_.filter(value=>typeof(value)==='number'&&!isNaN(value));const sampleCount=filteredSamples.length;if(sampleCount===0||percent<=0.0||percent>=1.0){return[undefined,undefined];}else if(sampleCount===1){return[filteredSamples[0],filteredSamples[0]];}
+const iterations=DEFAULT_ITERATION_FOR_BOOTSTRAP_RESAMPLING;if(this.sampleMeans_.length!==iterations){this.sampleMeans_=[];for(let i=0;i<iterations;i++){let tempSum=0.0;for(let j=0;j<sampleCount;j++){tempSum+=filteredSamples[Math.floor(Math.random()*sampleCount)];}
+this.sampleMeans_.push(tempSum/sampleCount);}
+this.sampleMeans_.sort((a,b)=>a-b);}
+return[this.sampleMeans_[Math.floor((iterations-1)*(0.5-percent/2))],this.sampleMeans_[Math.ceil((iterations-1)*(0.5+percent/2))],];}
sampleValuesInto(samples){for(const sampleValue of this.sampleValues){samples.push(sampleValue);}}
canAddHistogram(other){if(this.unit!==other.unit){return false;}
if(this.binBoundariesDict_===other.binBoundariesDict_){return true;}
+if(!this.binBoundariesDict_||!other.binBoundariesDict_){return true;}
if(this.binBoundariesDict_.length!==other.binBoundariesDict_.length){return false;}
for(let i=0;i<this.binBoundariesDict_.length;++i){const slice=this.binBoundariesDict_[i];const otherSlice=other.binBoundariesDict_[i];if(slice instanceof Array){if(!(otherSlice instanceof Array)){return false;}
if(slice[0]!==otherSlice[0]||!tr.b.math.approximately(slice[1],otherSlice[1])||slice[2]!==otherSlice[2]){return false;}}else{if(otherSlice instanceof Array){return false;}
if(!tr.b.math.approximately(slice,otherSlice)){return false;}}}
return true;}
addHistogram(other){if(!this.canAddHistogram(other)){throw new Error('Merging incompatible Histograms');}
+if(!!this.binBoundariesDict_===!!other.binBoundariesDict_){for(let i=0;i<this.allBins.length;++i){let bin=this.allBins[i];if(bin.count===0){bin=new HistogramBin(bin.range);this.allBins[i]=bin;}
+bin.addBin(other.allBins[i]);}}else{const[multiBin,singleBin]=this.binBoundariesDict_?[this,other]:[other,this];for(const value of singleBin.sampleValues){if(typeof(value)!=='number'||isNaN(value)){continue;}
+const binIndex=multiBin.getBinIndexForValue(value);let bin=multiBin.allBins[binIndex];if(bin.count===0){bin=new HistogramBin(bin.range);multiBin.allBins[binIndex]=bin;}
+bin.addSample(value);}}
tr.b.math.Statistics.mergeSampledStreams(this.nanDiagnosticMaps,this.numNans,other.nanDiagnosticMaps,other.numNans,MAX_DIAGNOSTIC_MAPS);tr.b.math.Statistics.mergeSampledStreams(this.sampleValues,this.numValues+this.numNans,other.sampleValues,other.numValues+other.numNans,(this.maxNumSampleValues+other.maxNumSampleValues)/2);this.numNans+=other.numNans;if(other.running_!==undefined){if(this.running_===undefined){this.running_=new tr.b.math.RunningStatistics();}
this.running_=this.running_.merge(other.running_);}
-for(let i=0;i<this.allBins.length;++i){let bin=this.allBins[i];if(bin.count===0){bin=new HistogramBin(bin.range);this.allBins[i]=bin;}
-bin.addBin(other.allBins[i]);}
-let mergedFrom=this.diagnostics.get(tr.v.d.RESERVED_NAMES.MERGED_FROM);if(!mergedFrom){mergedFrom=new tr.v.d.RelatedHistogramMap();this.diagnostics.set(tr.v.d.RESERVED_NAMES.MERGED_FROM,mergedFrom);}
-mergedFrom.set(mergedFrom.length,other);let mergedTo=other.diagnostics.get(tr.v.d.RESERVED_NAMES.MERGED_TO);if(!mergedTo){mergedTo=new tr.v.d.RelatedHistogramMap();other.diagnostics.set(tr.v.d.RESERVED_NAMES.MERGED_TO,mergedTo);}
-mergedTo.set(mergedTo.length,this);this.diagnostics.addDiagnostics(other.diagnostics);for(const[stat,option]of other.summaryOptions){if(stat==='percentile'){const percentiles=this.summaryOptions.get(stat);for(const percent of option){if(!percentiles.includes(percent))percentiles.push(percent);}}else if(stat==='iprs'){const thisIprs=this.summaryOptions.get(stat);for(const ipr of option){let found=false;for(const thisIpr of thisIprs){found=ipr.equals(thisIpr);if(found)break;}
-if(!found)thisIprs.push(ipr);}}else if(option&&!this.summaryOptions.get(stat)){this.summaryOptions.set(stat,true);}}}
+this.sampleMeans_=[];this.diagnostics.addDiagnostics(other.diagnostics);for(const[stat,option]of other.summaryOptions){if(stat==='percentile'){const percentiles=this.summaryOptions.get(stat);for(const percent of option){if(!percentiles.includes(percent))percentiles.push(percent);}}else if(stat==='iprs'){const thisIprs=this.summaryOptions.get(stat);for(const ipr of option){let found=false;for(const thisIpr of thisIprs){found=ipr.equals(thisIpr);if(found)break;}
+if(!found)thisIprs.push(ipr);}}else if(stat==='ci'){const CIs=this.summaryOptions.get(stat);for(const CI of option){if(!CIs.includes(CI))CIs.push(CI);}}else if(option&&!this.summaryOptions.get(stat)){this.summaryOptions.set(stat,true);}}}
customizeSummaryOptions(summaryOptions){for(const[key,value]of Object.entries(summaryOptions)){this.summaryOptions.set(key,value);}}
getStatisticScalar(statName,opt_referenceHistogram,opt_mwu){if(statName==='avg'){if(typeof(this.average)!=='number')return undefined;return new tr.b.Scalar(this.unit,this.average);}
if(statName==='std'){if(typeof(this.standardDeviation)!=='number')return undefined;return new tr.b.Scalar(this.unit,this.standardDeviation);}
@@ -7059,7 +7408,10 @@ if(statName==='min'||statName==='max'||statName==='sum'){if(this.running_===unde
if(typeof(this.running_[statName])!=='number')return undefined;return new tr.b.Scalar(this.unit,this.running_[statName]);}
if(statName==='nans'){return new tr.b.Scalar(tr.b.Unit.byName.count_smallerIsBetter,this.numNans);}
if(statName==='count'){return new tr.b.Scalar(tr.b.Unit.byName.count_smallerIsBetter,this.numValues);}
-if(statName.substr(0,4)==='pct_'){const percent=percentFromString(statName.substr(4));if(this.numValues===0)return undefined;const percentile=this.getApproximatePercentile(percent);if(typeof(percentile)!=='number')return undefined;return new tr.b.Scalar(this.unit,percentile);}
+if(statName.substr(0,4)==='pct_'){if(this.numValues===0)return undefined;const percent=percentFromString(statName.substr(4));const percentile=this.getApproximatePercentile(percent);if(typeof(percentile)!=='number')return undefined;return new tr.b.Scalar(this.unit,percentile);}
+if(statName.substr(0,3)==='ci_'){const percent=percentFromString(statName.substr(3,3));const[lowCI,highCI]=this.resampleMean_(percent);if(statName.substr(7)==='lower'){if(typeof(lowCI)!=='number')return undefined;return new tr.b.Scalar(this.unit,lowCI);}else if(statName.substr(7)==='upper'){if(typeof(highCI)!=='number')return undefined;return new tr.b.Scalar(this.unit,highCI);}
+if(typeof(highCI)!=='number'||typeof(lowCI)!=='number'){return undefined;}
+return new tr.b.Scalar(this.unit,highCI-lowCI);}
if(statName.substr(0,4)==='ipr_'){let lower=percentFromString(statName.substr(4,3));let upper=percentFromString(statName.substr(8));if(lower>=upper){throw new Error('Invalid inter-percentile range: '+statName);}
lower=this.getApproximatePercentile(lower);upper=this.getApproximatePercentile(upper);const ipr=upper-lower;if(typeof(ipr)!=='number')return undefined;return new tr.b.Scalar(this.unit,ipr);}
if(!this.canCompare(opt_referenceHistogram)){throw new Error('Cannot compute '+statName+' when histograms are not comparable');}
@@ -7069,7 +7421,7 @@ if(statName===Z_SCORE_NAME){return new tr.b.Scalar(tr.b.Unit.byName['sigmaDelta'
const mwu=opt_mwu||tr.b.math.Statistics.mwu(this.sampleValues,opt_referenceHistogram.sampleValues);if(statName===P_VALUE_NAME){return new tr.b.Scalar(tr.b.Unit.byName.unitlessNumber,mwu.p);}
if(statName===U_STATISTIC_NAME){return new tr.b.Scalar(tr.b.Unit.byName.unitlessNumber,mwu.U);}
throw new Error('Unrecognized statistic name: '+statName);}
-get statisticsNames(){const statisticsNames=new Set();for(const[statName,option]of this.summaryOptions){if(statName==='percentile'){for(const pctile of option){statisticsNames.add('pct_'+tr.v.percentToString(pctile));}}else if(statName==='iprs'){for(const range of option){statisticsNames.add('ipr_'+tr.v.percentToString(range.min,true)+'_'+tr.v.percentToString(range.max,true));}}else if(option){statisticsNames.add(statName);}}
+get statisticsNames(){const statisticsNames=new Set();for(const[statName,option]of this.summaryOptions){if(statName==='percentile'){for(const pctile of option){statisticsNames.add('pct_'+tr.v.percentToString(pctile));}}else if(statName==='iprs'){for(const range of option){statisticsNames.add('ipr_'+tr.v.percentToString(range.min,true)+'_'+tr.v.percentToString(range.max,true));}}else if(statName==='ci'){for(const CIpctile of option){const CIpctStr=tr.v.percentToString(CIpctile);statisticsNames.add('ci_'+CIpctStr+'_lower');statisticsNames.add('ci_'+CIpctStr+'_upper');statisticsNames.add('ci_'+CIpctStr);}}else if(option){statisticsNames.add(statName);}}
return statisticsNames;}
canCompare(other){return other instanceof Histogram&&this.unit===other.unit&&this.numValues>0&&other.numValues>0;}
getAvailableStatisticName(statName,opt_referenceHist){if(this.canCompare(opt_referenceHist))return statName;if(statName===Z_SCORE_NAME||statName===P_VALUE_NAME||statName===U_STATISTIC_NAME){return'avg';}
@@ -7079,24 +7431,31 @@ return deltaNames.concat([Z_SCORE_NAME,P_VALUE_NAME,U_STATISTIC_NAME]);}
get statisticsScalars(){const results=new Map();for(const statName of this.statisticsNames){const scalar=this.getStatisticScalar(statName);if(scalar===undefined)continue;results.set(statName,scalar);}
return results;}
get sampleValues(){return this.sampleValues_;}
-clone(){const binBoundaries=HistogramBinBoundaries.fromDict(this.binBoundariesDict_);const hist=new Histogram(this.name,this.unit,binBoundaries);for(const[stat,option]of this.summaryOptions){if(stat==='percentile'||stat==='iprs'){hist.summaryOptions.set(stat,Array.from(option));}else{hist.summaryOptions.set(stat,option);}}
+clone(){const binBoundaries=HistogramBinBoundaries.fromDict(this.binBoundariesDict_);const hist=new Histogram(this.name,this.unit,binBoundaries);for(const[stat,option]of this.summaryOptions){if(stat==='percentile'||stat==='iprs'||stat==='ci'){hist.summaryOptions.set(stat,Array.from(option));}else{hist.summaryOptions.set(stat,option);}}
hist.addHistogram(this);return hist;}
rebin(newBoundaries){const rebinned=new tr.v.Histogram(this.name,this.unit,newBoundaries);rebinned.description=this.description;for(const sample of this.sampleValues){rebinned.addSample(sample);}
rebinned.running_=this.running_;for(const[name,diagnostic]of this.diagnostics){rebinned.diagnostics.set(name,diagnostic);}
-for(const[stat,option]of this.summaryOptions){if(stat==='percentile'){rebinned.summaryOptions.set(stat,Array.from(option));}else{rebinned.summaryOptions.set(stat,option);}}
+for(const[stat,option]of this.summaryOptions){if(stat==='percentile'||stat==='ci'){rebinned.summaryOptions.set(stat,Array.from(option));}else{rebinned.summaryOptions.set(stat,option);}}
return rebinned;}
-asDict(){const dict={};dict.name=this.name;dict.unit=this.unit.asJSON();dict.guid=this.guid;if(this.binBoundariesDict_!==undefined){dict.binBoundaries=this.binBoundariesDict_;}
-if(this.shortName){dict.shortName=this.shortName;}
+serialize(serializer){let nanBin=this.numNans;if(this.nanDiagnosticMaps.length){nanBin=[nanBin,...this.nanDiagnosticMaps.map(dm=>[undefined,...dm.serialize(serializer)])];}
+this.diagnostics.set(tr.v.d.RESERVED_NAMES.STATISTICS_NAMES,new tr.v.d.GenericSet([...this.statisticsNames].sort()));this.diagnostics.set(tr.v.d.RESERVED_NAMES.DESCRIPTION,new tr.v.d.GenericSet([this.description].sort()));return[serializer.getOrAllocateId(this.name),this.unit.asJSON2(),serializer.getOrAllocateId(this.binBoundariesDict_),this.diagnostics.serialize(serializer),this.running_?this.running_.asDict():0,this.serializeBins_(serializer),nanBin,];}
+asDict(){const dict={};dict.name=this.name;dict.unit=this.unit.asJSON();if(this.binBoundariesDict_!==undefined){dict.binBoundaries=this.binBoundariesDict_;}
if(this.description){dict.description=this.description;}
if(this.diagnostics.size){dict.diagnostics=this.diagnostics.asDict();}
if(this.maxNumSampleValues!==this.defaultMaxNumSampleValues_){dict.maxNumSampleValues=this.maxNumSampleValues;}
if(this.numNans){dict.numNans=this.numNans;}
if(this.nanDiagnosticMaps.length){dict.nanDiagnostics=this.nanDiagnosticMaps.map(dm=>dm.asDict());}
-if(this.numValues){dict.sampleValues=this.sampleValues.slice();dict.running=this.running_.asDict();dict.allBins=this.allBinsAsDict_();}
-const summaryOptions={};let anyOverriddenSummaryOptions=false;for(const[name,value]of this.summaryOptions){let option;if(name==='percentile'){if(value.length===0)continue;option=Array.from(value);}else if(name==='iprs'){if(value.length===0)continue;option=value.map(r=>[r.min,r.max]);}else if(value===DEFAULT_SUMMARY_OPTIONS.get(name)){continue;}else{option=value;}
+if(this.numValues){dict.sampleValues=this.sampleValues.slice();this.running.truncate(this.unit);dict.running=this.running_.asDict();dict.allBins=this.allBinsAsDict_();}
+const summaryOptions={};let anyOverriddenSummaryOptions=false;for(const[name,value]of this.summaryOptions){let option;if(name==='percentile'){if(value.length===0)continue;option=Array.from(value);}else if(name==='iprs'){if(value.length===0)continue;option=value.map(r=>[r.min,r.max]);}else if(name==='ci'){if(value.length===0)continue;option=Array.from(value);}else if(value===DEFAULT_SUMMARY_OPTIONS.get(name)){continue;}else{option=value;}
summaryOptions[name]=option;anyOverriddenSummaryOptions=true;}
if(anyOverriddenSummaryOptions){dict.summaryOptions=summaryOptions;}
return dict;}
+serializeBins_(serializer){const numBins=this.allBins.length;let emptyBins=0;for(let i=0;i<numBins;++i){if(this.allBins[i].count===0){++emptyBins;}}
+if(emptyBins===numBins){return 0;}
+if(emptyBins>(numBins/2)){const allBinsDict={};for(let i=0;i<numBins;++i){const bin=this.allBins[i];if(bin.count>0){allBinsDict[i]=bin.serialize(serializer);}}
+return allBinsDict;}
+const allBinsArray=[];for(let i=0;i<numBins;++i){allBinsArray.push(this.allBins[i].serialize(serializer));}
+return allBinsArray;}
allBinsAsDict_(){const numBins=this.allBins.length;let emptyBins=0;for(let i=0;i<numBins;++i){if(this.allBins[i].count===0){++emptyBins;}}
if(emptyBins===numBins){return undefined;}
if(emptyBins>(numBins/2)){const allBinsDict={};for(let i=0;i<numBins;++i){const bin=this.allBins[i];if(bin.count>0){allBinsDict[i]=bin.asDict();}}
@@ -7142,7 +7501,7 @@ addExponentialBins(nextMaxBinBoundary,binCount){if(binCount<=0){throw new Error(
if(this.range.max<=0){throw new Error('Current max bin boundary must be positive');}
if(this.range.max>=nextMaxBinBoundary){throw new Error('The last added max boundary must be greater than '+'the current max boundary boundary');}
this.binRanges_=undefined;this.bins_=undefined;this.pushBuilderSlice_([HistogramBinBoundaries.SLICE_TYPE.EXPONENTIAL,nextMaxBinBoundary,binCount]);this.range.addValue(nextMaxBinBoundary);return this;}}
-HistogramBinBoundaries.SLICE_TYPE={LINEAR:0,EXPONENTIAL:1,};HistogramBinBoundaries.SINGULAR=new HistogramBinBoundaries(Number.MAX_VALUE);DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.timeDurationInMs.unitName,HistogramBinBoundaries.createExponential(1e-3,1e6,1e2));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.timeStampInMs.unitName,HistogramBinBoundaries.createLinear(0,1e10,1e3));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.normalizedPercentage.unitName,HistogramBinBoundaries.createLinear(0,1.0,20));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.sizeInBytes.unitName,HistogramBinBoundaries.createExponential(1,1e12,1e2));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.energyInJoules.unitName,HistogramBinBoundaries.createExponential(1e-3,1e3,50));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.powerInWatts.unitName,HistogramBinBoundaries.createExponential(1e-3,1,50));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.unitlessNumber.unitName,HistogramBinBoundaries.createExponential(1e-3,1e3,50));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.count.unitName,HistogramBinBoundaries.createExponential(1,1e3,20));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.sigma.unitName,HistogramBinBoundaries.createLinear(-5,5,50));return{DEFAULT_REBINNED_COUNT,DELTA,Histogram,HistogramBinBoundaries,P_VALUE_NAME,U_STATISTIC_NAME,Z_SCORE_NAME,percentFromString,percentToString,};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-scalar-context-controller',created(){this.host_=undefined;this.groupToContext_=new Map();this.dirtyGroups_=new Set();},attached(){if(this.host_){throw new Error('Scalar context controller is already attached to a host');}
+HistogramBinBoundaries.SLICE_TYPE={LINEAR:0,EXPONENTIAL:1,};HistogramBinBoundaries.SINGULAR=new HistogramBinBoundaries(Number.MAX_VALUE);DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.timeDurationInMs.unitName,HistogramBinBoundaries.createExponential(1e-3,1e6,1e2));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.timeInMsAutoFormat.unitName,new HistogramBinBoundaries(0).addBinBoundary(1).addExponentialBins(1e3,3).addBinBoundary(tr.b.convertUnit(2,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(tr.b.convertUnit(5,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(tr.b.convertUnit(10,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(tr.b.convertUnit(30,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(tr.b.convertUnit(tr.b.UnitScale.TIME.MINUTE.value,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(2*tr.b.convertUnit(tr.b.UnitScale.TIME.MINUTE.value,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(5*tr.b.convertUnit(tr.b.UnitScale.TIME.MINUTE.value,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(10*tr.b.convertUnit(tr.b.UnitScale.TIME.MINUTE.value,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(30*tr.b.convertUnit(tr.b.UnitScale.TIME.MINUTE.value,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(tr.b.convertUnit(tr.b.UnitScale.TIME.HOUR.value,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(2*tr.b.convertUnit(tr.b.UnitScale.TIME.HOUR.value,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(6*tr.b.convertUnit(tr.b.UnitScale.TIME.HOUR.value,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(12*tr.b.convertUnit(tr.b.UnitScale.TIME.HOUR.value,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(tr.b.convertUnit(tr.b.UnitScale.TIME.DAY.value,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(tr.b.convertUnit(tr.b.UnitScale.TIME.WEEK.value,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(tr.b.convertUnit(tr.b.UnitScale.TIME.MONTH.value,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)).addBinBoundary(tr.b.convertUnit(tr.b.UnitScale.TIME.YEAR.value,tr.b.UnitScale.TIME.SEC,tr.b.UnitScale.TIME.MILLI_SEC)));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.timeStampInMs.unitName,HistogramBinBoundaries.createLinear(0,1e10,1e3));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.normalizedPercentage.unitName,HistogramBinBoundaries.createLinear(0,1.0,20));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.sizeInBytes.unitName,HistogramBinBoundaries.createExponential(1,1e12,1e2));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.energyInJoules.unitName,HistogramBinBoundaries.createExponential(1e-3,1e3,50));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.powerInWatts.unitName,HistogramBinBoundaries.createExponential(1e-3,1,50));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.unitlessNumber.unitName,HistogramBinBoundaries.createExponential(1e-3,1e3,50));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.count.unitName,HistogramBinBoundaries.createExponential(1,1e3,20));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.sigma.unitName,HistogramBinBoundaries.createLinear(-5,5,50));return{DEFAULT_REBINNED_COUNT,DELTA,Histogram,HistogramBinBoundaries,P_VALUE_NAME,U_STATISTIC_NAME,Z_SCORE_NAME,percentFromString,percentToString,};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-scalar-context-controller',created(){this.host_=undefined;this.groupToContext_=new Map();this.dirtyGroups_=new Set();},attached(){if(this.host_){throw new Error('Scalar context controller is already attached to a host');}
const host=findParentOrHost(this);if(host.__scalarContextController){throw new Error('Multiple scalar context controllers attached to this host');}
host.__scalarContextController=this;this.host_=host;},detached(){if(!this.host_){throw new Error('Scalar context controller is not attached to a host');}
if(this.host_.__scalarContextController!==this){throw new Error('Scalar context controller is not attached to its host');}
@@ -7208,10 +7567,9 @@ table.tableColumns=columns;table.tableRows=object;this.appendElementWithLabel_(l
this.appendElementsForType_(label+'[',object[0],indent,depth+1,maxDepth,object.length>1?',':']'+suffix);for(let i=1;i<object.length;i++){this.appendElementsForType_('',object[i],indent+label.length+1,depth+1,maxDepth,i<object.length-1?',':']'+suffix);}
return;},appendElementsForObject_(label,object,indent,depth,maxDepth,suffix){const keys=Object.keys(object);if(keys.length===0){this.appendSimpleText_(label,indent,'{}',suffix);return;}
this.appendElementsForType_(label+'{'+keys[0]+': ',object[keys[0]],indent,depth,maxDepth,keys.length>1?',':'}'+suffix);for(let i=1;i<keys.length;i++){this.appendElementsForType_(keys[i]+': ',object[keys[i]],indent+label.length+1,depth+1,maxDepth,i<keys.length-1?',':'}'+suffix);}},appendElementWithLabel_(label,indent,dataElement,suffix){const row=document.createElement('div');const indentSpan=document.createElement('span');indentSpan.style.whiteSpace='pre';for(let i=0;i<indent;i++){Polymer.dom(indentSpan).textContent+=' ';}
-Polymer.dom(row).appendChild(indentSpan);const labelSpan=document.createElement('span');Polymer.dom(labelSpan).textContent=label;Polymer.dom(row).appendChild(labelSpan);Polymer.dom(row).appendChild(dataElement);const suffixSpan=document.createElement('span');Polymer.dom(suffixSpan).textContent=suffix;Polymer.dom(row).appendChild(suffixSpan);row.dataElement=dataElement;Polymer.dom(this.$.content).appendChild(row);},appendSimpleText_(label,indent,text,suffix){const el=this.ownerDocument.createElement('span');Polymer.dom(el).textContent=text;this.appendElementWithLabel_(label,indent,el,suffix);return el;}});'use strict';Polymer({is:'tr-ui-a-generic-object-view-with-label',ready(){this.labelEl_=document.createElement('div');this.genericObjectView_=document.createElement('tr-ui-a-generic-object-view');Polymer.dom(this.root).appendChild(this.labelEl_);Polymer.dom(this.root).appendChild(this.genericObjectView_);},get label(){return Polymer.dom(this.labelEl_).textContent;},set label(label){Polymer.dom(this.labelEl_).textContent=label;},get object(){return this.genericObjectView_.object;},set object(object){this.genericObjectView_.object=object;}});'use strict';tr.exportTo('tr.ui.analysis',function(){const ObjectSnapshotView=tr.ui.b.define('object-snapshot-view');ObjectSnapshotView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.objectSnapshot_=undefined;},get requiresTallView(){return true;},set modelEvent(obj){this.objectSnapshot=obj;},get modelEvent(){return this.objectSnapshot;},get objectSnapshot(){return this.objectSnapshot_;},set objectSnapshot(i){this.objectSnapshot_=i;this.updateContents();},updateContents(){throw new Error('Not implemented');}};const options=new tr.b.ExtensionRegistryOptions(tr.b.TYPE_BASED_REGISTRY_MODE);options.mandatoryBaseClass=ObjectSnapshotView;options.defaultMetadata={showInstances:true,showInTrackView:true};tr.b.decorateExtensionRegistry(ObjectSnapshotView,options);return{ObjectSnapshotView,};});'use strict';Polymer({is:'tr-ui-b-drag-handle',created(){this.lastMousePos_=0;this.onMouseMove_=this.onMouseMove_.bind(this);this.onMouseUp_=this.onMouseUp_.bind(this);this.addEventListener('mousedown',this.onMouseDown_);this.target_=undefined;this.horizontal=true;this.observer_=new WebKitMutationObserver(this.didTargetMutate_.bind(this));this.targetSizesByModeKey_={};},get modeKey_(){return this.target_.className===''?'.':this.target_.className;},get target(){return this.target_;},set target(target){this.observer_.disconnect();this.target_=target;if(!this.target_)return;this.observer_.observe(this.target_,{attributes:true,attributeFilter:['class']});},get horizontal(){return this.horizontal_;},set horizontal(h){this.horizontal_=h;if(this.horizontal_){this.className='horizontal-drag-handle';}else{this.className='vertical-drag-handle';}},get vertical(){return!this.horizontal_;},set vertical(v){this.horizontal=!v;},forceMutationObserverFlush_(){const records=this.observer_.takeRecords();if(records.length){this.didTargetMutate_(records);}},didTargetMutate_(e){const modeSize=this.targetSizesByModeKey_[this.modeKey_];if(modeSize!==undefined){this.setTargetSize_(modeSize);return;}
-this.target_.style[this.targetStyleKey_]='';},get targetStyleKey_(){return this.horizontal_?'height':'width';},getTargetSize_(){const targetStyleKey=this.targetStyleKey_;if(!this.target_.style[targetStyleKey]){this.target_.style[targetStyleKey]=window.getComputedStyle(this.target_)[targetStyleKey];}
-const size=parseInt(this.target_.style[targetStyleKey]);this.targetSizesByModeKey_[this.modeKey_]=size;return size;},setTargetSize_(s){this.target_.style[this.targetStyleKey_]=s+'px';this.targetSizesByModeKey_[this.modeKey_]=s;tr.b.dispatchSimpleEvent(this,'drag-handle-resize',true,false);},applyDelta_(delta){const curSize=this.getTargetSize_();let newSize;if(this.target_===this.nextElementSibling){newSize=curSize+delta;}else{newSize=curSize-delta;}
-this.setTargetSize_(newSize);},onMouseMove_(e){const curMousePos=this.horizontal_?e.clientY:e.clientX;const delta=this.lastMousePos_-curMousePos;this.applyDelta_(delta);this.lastMousePos_=curMousePos;e.preventDefault();return true;},onMouseDown_(e){if(!this.target_)return;this.forceMutationObserverFlush_();this.lastMousePos_=this.horizontal_?e.clientY:e.clientX;document.addEventListener('mousemove',this.onMouseMove_);document.addEventListener('mouseup',this.onMouseUp_);e.preventDefault();return true;},onMouseUp_(e){document.removeEventListener('mousemove',this.onMouseMove_);document.removeEventListener('mouseup',this.onMouseUp_);e.preventDefault();}});'use strict';tr.exportTo('tr.ui.b',function(){function HotKey(dict){if(dict.eventType===undefined){throw new Error('eventType must be given');}
+Polymer.dom(row).appendChild(indentSpan);const labelSpan=document.createElement('span');Polymer.dom(labelSpan).textContent=label;Polymer.dom(row).appendChild(labelSpan);Polymer.dom(row).appendChild(dataElement);const suffixSpan=document.createElement('span');Polymer.dom(suffixSpan).textContent=suffix;Polymer.dom(row).appendChild(suffixSpan);row.dataElement=dataElement;Polymer.dom(this.$.content).appendChild(row);},appendSimpleText_(label,indent,text,suffix){const el=this.ownerDocument.createElement('span');Polymer.dom(el).textContent=text;this.appendElementWithLabel_(label,indent,el,suffix);return el;}});'use strict';Polymer({is:'tr-ui-a-generic-object-view-with-label',ready(){this.labelEl_=document.createElement('div');this.genericObjectView_=document.createElement('tr-ui-a-generic-object-view');Polymer.dom(this.root).appendChild(this.labelEl_);Polymer.dom(this.root).appendChild(this.genericObjectView_);},get label(){return Polymer.dom(this.labelEl_).textContent;},set label(label){Polymer.dom(this.labelEl_).textContent=label;},get object(){return this.genericObjectView_.object;},set object(object){this.genericObjectView_.object=object;}});'use strict';tr.exportTo('tr.ui.analysis',function(){const ObjectSnapshotView=tr.ui.b.define('object-snapshot-view');ObjectSnapshotView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.objectSnapshot_=undefined;},get requiresTallView(){return true;},set modelEvent(obj){this.objectSnapshot=obj;},get modelEvent(){return this.objectSnapshot;},get objectSnapshot(){return this.objectSnapshot_;},set objectSnapshot(i){this.objectSnapshot_=i;this.updateContents();},updateContents(){throw new Error('Not implemented');}};const options=new tr.b.ExtensionRegistryOptions(tr.b.TYPE_BASED_REGISTRY_MODE);options.mandatoryBaseClass=ObjectSnapshotView;options.defaultMetadata={showInstances:true,showInTrackView:true};tr.b.decorateExtensionRegistry(ObjectSnapshotView,options);return{ObjectSnapshotView,};});'use strict';Polymer({is:'tr-ui-b-drag-handle',created(){this.lastMousePos_=0;this.onMouseMove_=this.onMouseMove_.bind(this);this.onMouseUp_=this.onMouseUp_.bind(this);this.addEventListener('mousedown',this.onMouseDown_);this.target_=undefined;this.horizontal=true;this.observer_=new WebKitMutationObserver(this.didTargetMutate_.bind(this));this.targetSizesByModeKey_={};this.currentDraggingSize_=undefined;},get modeKey_(){return this.target_.className===''?'.':this.target_.className;},get target(){return this.target_;},set target(target){this.observer_.disconnect();this.target_=target;if(!this.target_)return;this.observer_.observe(this.target_,{attributes:true,attributeFilter:['class']});},get horizontal(){return this.horizontal_;},set horizontal(h){this.horizontal_=h;if(this.horizontal_){this.className='horizontal-drag-handle';}else{this.className='vertical-drag-handle';}},get vertical(){return!this.horizontal_;},set vertical(v){this.horizontal=!v;},forceMutationObserverFlush_(){const records=this.observer_.takeRecords();if(records.length){this.didTargetMutate_(records);}},didTargetMutate_(e){const modeSize=this.targetSizesByModeKey_[this.modeKey_];if(modeSize!==undefined){this.setTargetSize_(modeSize);return;}
+this.target_.style[this.targetStyleKey_]='';},get targetStyleKey_(){return this.horizontal_?'height':'width';},getTargetSize_(){const size=parseInt(window.getComputedStyle(this.target_)[this.targetStyleKey_]);this.targetSizesByModeKey_[this.modeKey_]=size;return size;},setTargetSize_(s){this.target_.style[this.targetStyleKey_]=s+'px';this.targetSizesByModeKey_[this.modeKey_]=this.getTargetSize_();tr.b.dispatchSimpleEvent(this,'drag-handle-resize',true,false);},applyDelta_(delta){if(this.target_===this.nextElementSibling){this.currentDraggingSize_+=delta;}else{this.currentDraggingSize_-=delta;}
+this.setTargetSize_(this.currentDraggingSize_);},onMouseMove_(e){const curMousePos=this.horizontal_?e.clientY:e.clientX;const delta=this.lastMousePos_-curMousePos;this.applyDelta_(delta);this.lastMousePos_=curMousePos;e.preventDefault();return true;},onMouseDown_(e){if(!this.target_)return;this.forceMutationObserverFlush_();this.currentDraggingSize_=this.getTargetSize_();this.lastMousePos_=this.horizontal_?e.clientY:e.clientX;document.addEventListener('mousemove',this.onMouseMove_);document.addEventListener('mouseup',this.onMouseUp_);e.preventDefault();return true;},onMouseUp_(e){document.removeEventListener('mousemove',this.onMouseMove_);document.removeEventListener('mouseup',this.onMouseUp_);e.preventDefault();this.currentDraggingSize_=undefined;}});'use strict';tr.exportTo('tr.ui.b',function(){function HotKey(dict){if(dict.eventType===undefined){throw new Error('eventType must be given');}
if(dict.keyCode===undefined&&dict.keyCodes===undefined){throw new Error('keyCode or keyCodes must be given');}
if(dict.keyCode!==undefined&&dict.keyCodes!==undefined){throw new Error('Only keyCode or keyCodes can be given');}
if(dict.callback===undefined){throw new Error('callback must be given');}
@@ -7292,7 +7650,7 @@ let didHandleKey=false;for(const[modeStr,keyCode]of Object.entries(this.modeToKe
if(didHandleKey){e.preventDefault();e.stopPropagation();return;}
this.updateAlternativeModeState_(e);},updateAlternativeModeState_(e){const shiftPressed=e.shiftKey;const spacePressed=this.spacePressed_;const cmdOrCtrlPressed=isCmdOrCtrlPressed(e);const smm=this.supportedModeMask_;let newMode;let isNewModeAnAlternativeMode=false;if(shiftPressed&&(this.modifierToModeMap_[MODIFIER.SHIFT]&smm)!==0){newMode=this.modifierToModeMap_[MODIFIER.SHIFT];isNewModeAnAlternativeMode=true;}else if(spacePressed&&(this.modifierToModeMap_[MODIFIER.SPACE]&smm)!==0){newMode=this.modifierToModeMap_[MODIFIER.SPACE];isNewModeAnAlternativeMode=true;}else if(cmdOrCtrlPressed&&(this.modifierToModeMap_[MODIFIER.CMD_OR_CTRL]&smm)!==0){newMode=this.modifierToModeMap_[MODIFIER.CMD_OR_CTRL];isNewModeAnAlternativeMode=true;}else{if(this.isInAlternativeMode_){newMode=this.modeBeforeAlternativeModeActivated_;isNewModeAnAlternativeMode=false;}else{newMode=undefined;}}
if(this.mode===newMode||newMode===undefined)return;if(isNewModeAnAlternativeMode){this.modeBeforeAlternativeModeActivated_=this.mode;}
-this.mode=newMode;},get isInAlternativeMode_(){return!!this.modeBeforeAlternativeModeActivated_;},setModifierForAlternateMode(mode,modifier){this.modifierToModeMap_[modifier]=mode;},get pos(){return{x:parseInt(this.style.left),y:parseInt(this.style.top)};},set pos(pos){pos=this.constrainPositionToBounds_(pos);this.style.left=pos.x+'px';this.style.top=pos.y+'px';if(this.settingsKey_){tr.b.Settings.set(this.settingsKey_+'.pos',this.pos);}},constrainPositionToBounds_(pos){const parent=this.offsetParent||document.body;const parentRect=tr.ui.b.windowRectForElement(parent);const top=0;const bottom=parentRect.height-this.offsetHeight;const left=0;const right=parentRect.width-this.offsetWidth;const res={};res.x=Math.max(pos.x,left);res.x=Math.min(res.x,right);res.y=Math.max(pos.y,top);res.y=Math.min(res.y,bottom);return res;},onDragHandleMouseDown_(e){e.preventDefault();e.stopImmediatePropagation();const mouseDownPos={x:e.clientX-this.offsetLeft,y:e.clientY-this.offsetTop};tr.ui.b.trackMouseMovesUntilMouseUp(function(e){const pos={};pos.x=e.clientX-mouseDownPos.x;pos.y=e.clientY-mouseDownPos.y;this.pos=pos;}.bind(this));},checkIsClick_(e){if(!this.isInteracting_||!this.isClick_)return;const deltaX=this.mousePos_.x-this.mouseDownPos_.x;const deltaY=this.mousePos_.y-this.mouseDownPos_.y;const minDist=MIN_MOUSE_SELECTION_DISTANCE;if(deltaX*deltaX+deltaY*deltaY>minDist*minDist){this.isClick_=false;}},dispatchClickEvents_(e){if(!this.isClick_)return;const modeInfo=MOUSE_SELECTOR_MODE_INFOS[MOUSE_SELECTOR_MODE.SELECTION];const eventNames=modeInfo.eventNames;let mouseEvent=this.createEvent_(eventNames.begin);mouseEvent.appendSelection=isCmdOrCtrlPressed(e);this.dispatchEvent(mouseEvent);mouseEvent=this.createEvent_(eventNames.end);this.dispatchEvent(mouseEvent);}});return{MIN_MOUSE_SELECTION_DISTANCE,MODIFIER,};});'use strict';(function(){const DETAILS_SPLIT_REGEX=/^(\S*)\s*([\S\s]*)$/;Polymer({is:'tr-ui-e-chrome-cc-display-item-list-item',created(){Polymer.dom(this).setAttribute('name','');Polymer.dom(this).setAttribute('rawDetails','');Polymer.dom(this).setAttribute('richDetails',undefined);Polymer.dom(this).setAttribute('data_',undefined);},get data(){return this.data_;},set data(data){this.data_=data;if(!data){this.name='DATA MISSING';this.rawDetails='';this.richDetails=undefined;}else if(typeof data==='string'){const match=data.match(DETAILS_SPLIT_REGEX);this.name=match[1];this.rawDetails=match[2];this.richDetails=undefined;}else{this.name=data.name;this.rawDetails='';this.richDetails=data;}},stopPropagation(e){e.stopPropagation();},_computeIf(richDetails){return richDetails&&richDetails.skp64;},_computeHref(richDetails){return'data:application/octet-stream;base64,'+richDetails.skp64;}});})();'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){function Selection(){this.selectionToSetIfClicked=undefined;}
+this.mode=newMode;},get isInAlternativeMode_(){return!!this.modeBeforeAlternativeModeActivated_;},setModifierForAlternateMode(mode,modifier){this.modifierToModeMap_[modifier]=mode;},get pos(){return{x:parseInt(this.style.left),y:parseInt(this.style.top)};},set pos(pos){pos=this.constrainPositionToBounds_(pos);this.style.left=pos.x+'px';this.style.top=pos.y+'px';if(this.settingsKey_){tr.b.Settings.set(this.settingsKey_+'.pos',this.pos);}},constrainPositionToBounds_(pos){const parent=this.offsetParent||document.body;const parentRect=tr.ui.b.windowRectForElement(parent);const top=0;const bottom=parentRect.height-this.offsetHeight;const left=0;const right=parentRect.width-this.offsetWidth;const res={};res.x=Math.max(pos.x,left);res.x=Math.min(res.x,right);res.y=Math.max(pos.y,top);res.y=Math.min(res.y,bottom);return res;},onDragHandleMouseDown_(e){e.preventDefault();e.stopImmediatePropagation();const mouseDownPos={x:e.clientX-this.offsetLeft,y:e.clientY-this.offsetTop};tr.ui.b.trackMouseMovesUntilMouseUp(function(e){const pos={};pos.x=e.clientX-mouseDownPos.x;pos.y=e.clientY-mouseDownPos.y;this.pos=pos;}.bind(this));},checkIsClick_(e){if(!this.isInteracting_||!this.isClick_)return;const deltaX=this.mousePos_.x-this.mouseDownPos_.x;const deltaY=this.mousePos_.y-this.mouseDownPos_.y;const minDist=MIN_MOUSE_SELECTION_DISTANCE;if(deltaX*deltaX+deltaY*deltaY>minDist*minDist){this.isClick_=false;}},dispatchClickEvents_(e){if(!this.isClick_)return;const modeInfo=MOUSE_SELECTOR_MODE_INFOS[MOUSE_SELECTOR_MODE.SELECTION];const eventNames=modeInfo.eventNames;let mouseEvent=this.createEvent_(eventNames.begin);mouseEvent.appendSelection=isCmdOrCtrlPressed(e);this.dispatchEvent(mouseEvent);mouseEvent=this.createEvent_(eventNames.end);this.dispatchEvent(mouseEvent);}});return{MIN_MOUSE_SELECTION_DISTANCE,MODIFIER,};});'use strict';(function(){const DETAILS_SPLIT_REGEX=/^(\S*)\s*([\S\s]*)$/;Polymer({is:'tr-ui-e-chrome-cc-display-item-list-item',created(){Polymer.dom(this).setAttribute('name','');Polymer.dom(this).setAttribute('rawDetails','');Polymer.dom(this).setAttribute('richDetails',undefined);Polymer.dom(this).setAttribute('data_',undefined);},get data(){return this.data_;},set data(data){this.data_=data;if(!data){this.name='DATA MISSING';this.rawDetails='';this.richDetails=undefined;}else if(typeof data==='string'){const match=data.match(DETAILS_SPLIT_REGEX);this.name=match[1];this.rawDetails=match[2];this.richDetails=undefined;}else{this.name=data.name;this.rawDetails='';this.richDetails=data;}},stopPropagation(e){e.stopPropagation();},_computeIfSKP(richDetails){return richDetails&&richDetails.skp64;},_computeHref(richDetails){return'data:application/octet-stream;base64,'+richDetails.skp64;}});})();'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){function Selection(){this.selectionToSetIfClicked=undefined;}
Selection.prototype={get specicifity(){throw new Error('Not implemented');},get associatedLayerId(){throw new Error('Not implemented');},get associatedRenderPassId(){throw new Error('Not implemented');},get highlightsByLayerId(){return{};},createAnalysis(){throw new Error('Not implemented');},findEquivalent(lthi){throw new Error('Not implemented');}};function RenderPassSelection(renderPass,renderPassId){if(!renderPass||(renderPassId===undefined)){throw new Error('Render pass (with id) is required');}
this.renderPass_=renderPass;this.renderPassId_=renderPassId;}
RenderPassSelection.prototype={__proto__:Selection.prototype,get specicifity(){return 1;},get associatedLayerId(){return undefined;},get associatedRenderPassId(){return this.renderPassId_;},get renderPass(){return this.renderPass_;},createAnalysis(){const dataView=document.createElement('tr-ui-a-generic-object-view-with-label');dataView.label='RenderPass '+this.renderPassId_;dataView.object=this.renderPass_.args;return dataView;},get title(){return this.renderPass_.objectInstance.typeName;}};function LayerSelection(layer){if(!layer){throw new Error('Layer is required');}
@@ -7304,7 +7662,7 @@ this.tile_.layerId;if(this.data_){analysis.object={moreInfo:this.data_,tileArgs:
return analysis;},findEquivalent(lthi){const tileInstance=this.tile_.tileInstance;if(lthi.ts<tileInstance.creationTs||lthi.ts>=tileInstance.deletionTs){return undefined;}
const tileSnapshot=tileInstance.getSnapshotAt(lthi.ts);if(!tileSnapshot)return undefined;return new TileSelection(tileSnapshot);}};function LayerRectSelection(layer,rectType,rect,opt_data){this.layer_=layer;this.rectType_=rectType;this.rect_=rect;this.data_=opt_data!==undefined?opt_data:rect;}
LayerRectSelection.prototype={__proto__:Selection.prototype,get specicifity(){return 2;},get associatedLayerId(){return this.layer_.layerId;},get highlightsByLayerId(){const highlights={};highlights[this.layer_.layerId]=[{colorKey:this.rectType_,rect:this.rect_}];return highlights;},createAnalysis(){const analysis=document.createElement('tr-ui-a-generic-object-view-with-label');analysis.label=this.rectType_+' on layer '+this.layer_.layerId;analysis.object=this.data_;return analysis;},findEquivalent(lthi){return undefined;}};function AnimationRectSelection(layer,rect){this.layer_=layer;this.rect_=rect;}
-AnimationRectSelection.prototype={__proto__:Selection.prototype,get specicifity(){return 0;},get associatedLayerId(){return this.layer_.layerId;},createAnalysis(){const analysis=document.createElement('tr-ui-a-generic-object-view-with-label');analysis.label='Animation Bounds of layer '+this.layer_.layerId;analysis.object=this.rect_;return analysis;}};return{Selection,RenderPassSelection,LayerSelection,TileSelection,LayerRectSelection,AnimationRectSelection,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const OPS_TIMING_ITERATIONS=3;const ANNOTATION='Comment';const BEGIN_ANNOTATION='BeginCommentGroup';const END_ANNOTATION='EndCommentGroup';const ANNOTATION_ID='ID: ';const ANNOTATION_CLASS='CLASS: ';const ANNOTATION_TAG='TAG: ';const constants=tr.e.cc.constants;const PictureOpsListView=tr.ui.b.define('tr-ui-e-chrome-cc-picture-ops-list-view');PictureOpsListView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.flexDirection='column';this.style.borderTop='1px solid grey';this.style.display='flex';this.opsList_=new tr.ui.b.ListView();this.opsList_.style.flexGrow=1;this.opsList_.style.flexShrink=1;this.opsList_.style.flexBasis='auto';this.opsList_.style.overflow='auto';Polymer.dom(this).appendChild(this.opsList_);this.selectedOp_=undefined;this.selectedOpIndex_=undefined;this.opsList_.addEventListener('selection-changed',this.onSelectionChanged_.bind(this));this.picture_=undefined;},get picture(){return this.picture_;},set picture(picture){this.picture_=picture;this.updateContents_();},updateContents_(){this.opsList_.clear();if(!this.picture_)return;let ops=this.picture_.getOps();if(!ops)return;ops=this.picture_.tagOpsWithTimings(ops);ops=this.opsTaggedWithAnnotations_(ops);for(let i=0;i<ops.length;i++){const op=ops[i];const item=document.createElement('div');item.opIndex=op.opIndex;Polymer.dom(item).textContent=i+') '+op.cmd_string;if(op.elementInfo.tag||op.elementInfo.id||op.elementInfo.class){const elementInfo=document.createElement('span');Polymer.dom(elementInfo).classList.add('elementInfo');elementInfo.style.color='purple';elementInfo.style.fontSize='small';elementInfo.style.fontWeight='bold';elementInfo.style.color='#777';const tag=op.elementInfo.tag?op.elementInfo.tag:'unknown';const id=op.elementInfo.id?'id='+op.elementInfo.id:undefined;const className=op.elementInfo.class?'class='+
+AnimationRectSelection.prototype={__proto__:Selection.prototype,get specicifity(){return 0;},get associatedLayerId(){return this.layer_.layerId;},createAnalysis(){const analysis=document.createElement('tr-ui-a-generic-object-view-with-label');analysis.label='Animation Bounds of layer '+this.layer_.layerId;analysis.object=this.rect_;return analysis;}};return{Selection,RenderPassSelection,LayerSelection,TileSelection,LayerRectSelection,AnimationRectSelection,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const OPS_TIMING_ITERATIONS=3;const ANNOTATION='Comment';const BEGIN_ANNOTATION='BeginCommentGroup';const END_ANNOTATION='EndCommentGroup';const ANNOTATION_ID='ID: ';const ANNOTATION_CLASS='CLASS: ';const ANNOTATION_TAG='TAG: ';const constants=tr.e.cc.constants;const PictureOpsListView=tr.ui.b.define('tr-ui-e-chrome-cc-picture-ops-list-view');PictureOpsListView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.borderTop='1px solid grey';this.style.overflow='auto';this.opsList_=new tr.ui.b.ListView();Polymer.dom(this).appendChild(this.opsList_);this.selectedOp_=undefined;this.selectedOpIndex_=undefined;this.opsList_.addEventListener('selection-changed',this.onSelectionChanged_.bind(this));this.picture_=undefined;},get picture(){return this.picture_;},set picture(picture){this.picture_=picture;this.updateContents_();},updateContents_(){this.opsList_.clear();if(!this.picture_)return;let ops=this.picture_.getOps();if(!ops)return;ops=this.picture_.tagOpsWithTimings(ops);ops=this.opsTaggedWithAnnotations_(ops);for(let i=0;i<ops.length;i++){const op=ops[i];const item=document.createElement('div');item.opIndex=op.opIndex;Polymer.dom(item).textContent=i+') '+op.cmd_string;if(op.elementInfo.tag||op.elementInfo.id||op.elementInfo.class){const elementInfo=document.createElement('span');Polymer.dom(elementInfo).classList.add('elementInfo');elementInfo.style.color='purple';elementInfo.style.fontSize='small';elementInfo.style.fontWeight='bold';elementInfo.style.color='#777';const tag=op.elementInfo.tag?op.elementInfo.tag:'unknown';const id=op.elementInfo.id?'id='+op.elementInfo.id:undefined;const className=op.elementInfo.class?'class='+
op.elementInfo.class:undefined;Polymer.dom(elementInfo).textContent='<'+tag+(id?' ':'')+
(id?id:'')+(className?' ':'')+
(className?className:'')+'>';Polymer.dom(item).appendChild(elementInfo);}
@@ -7318,8 +7676,8 @@ ANNOTATION_TAG.length).toLowerCase();}else if(info.includes(ANNOTATION_ID)){elem
ANNOTATION_ID.length);}else if(info.includes(ANNOTATION_CLASS)){elementInfo.class=info.substring(info.indexOf(ANNOTATION_CLASS)+
ANNOTATION_CLASS.length);}
annotations.push(info);});});});op.annotations=annotations;op.elementInfo=elementInfo;opsWithoutAnnotations.push(op);}}}
-return opsWithoutAnnotations;}};return{PictureOpsListView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const THIS_DOC=document.currentScript.ownerDocument;const DisplayItemDebugger=tr.ui.b.define('tr-ui-e-chrome-cc-display-item-debugger');DisplayItemDebugger.prototype={__proto__:HTMLDivElement.prototype,decorate(){const node=tr.ui.b.instantiateTemplate('#tr-ui-e-chrome-cc-display-item-debugger-template',THIS_DOC);Polymer.dom(this).appendChild(node);this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='auto';this.style.display='flex';this.pictureAsImageData_=undefined;this.zoomScaleValue_=1;this.sizeInfo_=Polymer.dom(this).querySelector('.size');this.rasterArea_=Polymer.dom(this).querySelector('raster-area');this.rasterArea_.style.flexGrow=1;this.rasterArea_.style.flexShrink=1;this.rasterArea_.style.flexBasis='auto';this.rasterArea_.style.backgroundColor='#ddd';this.rasterArea_.style.minHeight='200px';this.rasterArea_.style.minWidth='200px';this.rasterArea_.style.overflowY='auto';this.rasterArea_.style.paddingLeft='5px';this.rasterCanvas_=Polymer.dom(this.rasterArea_).querySelector('canvas');this.rasterCtx_=this.rasterCanvas_.getContext('2d');this.trackMouse_();this.displayItemInfo_=Polymer.dom(this).querySelector('display-item-info');this.displayItemInfo_.addEventListener('click',this.onDisplayItemInfoClick_.bind(this),false);this.displayItemListView_=new tr.ui.b.ListView();this.displayItemListView_.addEventListener('selection-changed',this.onDisplayItemListSelection_.bind(this));Polymer.dom(this.displayItemInfo_).appendChild(this.displayItemListView_);this.displayListFilename_=Polymer.dom(this).querySelector('.dlfilename');this.displayListExportButton_=Polymer.dom(this).querySelector('.dlexport');this.displayListExportButton_.addEventListener('click',this.onExportDisplayListClicked_.bind(this));this.skpFilename_=Polymer.dom(this).querySelector('.skpfilename');this.skpExportButton_=Polymer.dom(this).querySelector('.skpexport');this.skpExportButton_.addEventListener('click',this.onExportSkPictureClicked_.bind(this));const leftPanel=Polymer.dom(this).querySelector('left-panel');leftPanel.style.display='flex';leftPanel.style.flexDirection='column';leftPanel.style.minWidth='300px';leftPanel.style.overflowY='auto';leftPanel.children[0].paddingTop='2px';leftPanel.children[0].flexGrow=1;leftPanel.children[0].flexShrink=1;leftPanel.children[0].flexBasis='auto';leftPanel.children[0].children[0].style.borderBottom='1px solid #555';const leftPanelTitle=leftPanel.querySelector('.title');leftPanelTitle.style.fontWeight='bold';leftPanelTitle.style.marginLeft='5px';leftPanelTitle.style.marginright='5px';for(const div of leftPanel.querySelectorAll('.export')){div.style.margin='5px';}
-const middleDragHandle=document.createElement('tr-ui-b-drag-handle');middleDragHandle.style.flexGrow=0;middleDragHandle.style.flexShrink=0;middleDragHandle.style.flexBasis='auto';middleDragHandle.horizontal=false;middleDragHandle.target=leftPanel;const rightPanel=Polymer.dom(this).querySelector('right-panel');rightPanel.style.display='flex';rightPanel.style.flexGrow=1;rightPanel.style.flexShrink=1;rightPanel.style.flexBasis='auto';this.infoBar_=document.createElement('tr-ui-b-info-bar');Polymer.dom(this.rasterArea_).insertBefore(this.infoBar_,this.rasterCanvas_);Polymer.dom(this).insertBefore(middleDragHandle,rightPanel);this.picture_=undefined;this.pictureOpsListView_=new tr.ui.e.chrome.cc.PictureOpsListView();this.pictureOpsListView_.style.overflowY='auto';Polymer.dom(rightPanel).insertBefore(this.pictureOpsListView_,this.rasterArea_);this.pictureOpsListDragHandle_=document.createElement('tr-ui-b-drag-handle');this.pictureOpsListDragHandle_.horizontal=false;this.pictureOpsListDragHandle_.target=this.pictureOpsListView_;Polymer.dom(rightPanel).insertBefore(this.pictureOpsListDragHandle_,this.rasterArea_);},get picture(){return this.picture_;},set displayItemList(displayItemList){this.displayItemList_=displayItemList;this.picture=this.displayItemList_;this.displayItemListView_.clear();this.displayItemList_.items.forEach(function(item){const listItem=document.createElement('tr-ui-e-chrome-cc-display-item-list-item');listItem.data=item;Polymer.dom(this.displayItemListView_).appendChild(listItem);}.bind(this));},set picture(picture){this.picture_=picture;const showOpsList=picture&&picture!==this.displayItemList_;this.updateDrawOpsList_(showOpsList);if(picture){const size=this.getRasterCanvasSize_();this.rasterCanvas_.width=size.width;this.rasterCanvas_.height=size.height;}
+return opsWithoutAnnotations;}};return{PictureOpsListView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const THIS_DOC=document.currentScript.ownerDocument;const DisplayItemDebugger=tr.ui.b.define('tr-ui-e-chrome-cc-display-item-debugger');DisplayItemDebugger.prototype={__proto__:HTMLDivElement.prototype,decorate(){const node=tr.ui.b.instantiateTemplate('#tr-ui-e-chrome-cc-display-item-debugger-template',THIS_DOC);Polymer.dom(this).appendChild(node);this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='auto';this.style.display='flex';this.style.minWidth=0;this.pictureAsImageData_=undefined;this.zoomScaleValue_=1;this.sizeInfo_=Polymer.dom(this).querySelector('.size');this.rasterArea_=Polymer.dom(this).querySelector('raster-area');this.rasterArea_.style.flexGrow=1;this.rasterArea_.style.flexShrink=1;this.rasterArea_.style.flexBasis='auto';this.rasterArea_.style.backgroundColor='#ddd';this.rasterArea_.style.minHeight='200px';this.rasterArea_.style.minWidth='200px';this.rasterArea_.style.paddingLeft='5px';this.rasterArea_.style.display='flex';this.rasterArea_.style.flexDirection='column';this.rasterCanvas_=Polymer.dom(this.rasterArea_).querySelector('canvas');this.rasterCtx_=this.rasterCanvas_.getContext('2d');const canvasScroller=Polymer.dom(this).querySelector('canvas-scroller');canvasScroller.style.flexGrow=1;canvasScroller.style.flexShrink=1;canvasScroller.style.flexBasis='auto';canvasScroller.style.minWidth=0;canvasScroller.style.minHeight=0;canvasScroller.style.overflow='auto';this.trackMouse_();this.displayItemInfo_=Polymer.dom(this).querySelector('display-item-info');this.displayItemInfo_.addEventListener('click',this.onDisplayItemInfoClick_.bind(this),false);this.displayItemListView_=new tr.ui.b.ListView();this.displayItemListView_.addEventListener('selection-changed',this.onDisplayItemListSelection_.bind(this));Polymer.dom(this.displayItemInfo_).appendChild(this.displayItemListView_);this.displayListFilename_=Polymer.dom(this).querySelector('.dlfilename');this.displayListExportButton_=Polymer.dom(this).querySelector('.dlexport');this.displayListExportButton_.addEventListener('click',this.onExportDisplayListClicked_.bind(this));this.skpFilename_=Polymer.dom(this).querySelector('.skpfilename');this.skpExportButton_=Polymer.dom(this).querySelector('.skpexport');this.skpExportButton_.addEventListener('click',this.onExportSkPictureClicked_.bind(this));const leftPanel=Polymer.dom(this).querySelector('left-panel');leftPanel.style.flexGrow=0;leftPanel.style.flexShrink=0;leftPanel.style.flexBasis='auto';leftPanel.style.minWidth='200px';leftPanel.style.overflow='auto';leftPanel.children[0].paddingTop='2px';leftPanel.children[0].children[0].style.borderBottom='1px solid #555';const leftPanelTitle=leftPanel.querySelector('.title');leftPanelTitle.style.fontWeight='bold';leftPanelTitle.style.marginLeft='5px';leftPanelTitle.style.marginright='5px';for(const div of leftPanel.querySelectorAll('.export')){div.style.margin='5px';}
+const middleDragHandle=document.createElement('tr-ui-b-drag-handle');middleDragHandle.style.flexGrow=0;middleDragHandle.style.flexShrink=0;middleDragHandle.style.flexBasis='auto';middleDragHandle.horizontal=false;middleDragHandle.target=leftPanel;const rightPanel=Polymer.dom(this).querySelector('right-panel');rightPanel.style.display='flex';rightPanel.style.flexGrow=1;rightPanel.style.flexShrink=1;rightPanel.style.flexBasis='auto';rightPanel.style.minWidth=0;this.infoBar_=document.createElement('tr-ui-b-info-bar');Polymer.dom(this.rasterArea_).insertBefore(this.infoBar_,canvasScroller);Polymer.dom(this).insertBefore(middleDragHandle,rightPanel);this.picture_=undefined;this.pictureOpsListView_=new tr.ui.e.chrome.cc.PictureOpsListView();this.pictureOpsListView_.style.flexGrow=0;this.pictureOpsListView_.style.flexShrink=0;this.pictureOpsListView_.style.flexBasis='auto';this.pictureOpsListView_.style.overflow='auto';this.pictureOpsListView_.style.minWidth='100px';Polymer.dom(rightPanel).insertBefore(this.pictureOpsListView_,this.rasterArea_);this.pictureOpsListDragHandle_=document.createElement('tr-ui-b-drag-handle');this.pictureOpsListDragHandle_.horizontal=false;this.pictureOpsListDragHandle_.target=this.pictureOpsListView_;Polymer.dom(rightPanel).insertBefore(this.pictureOpsListDragHandle_,this.rasterArea_);},get picture(){return this.picture_;},set displayItemList(displayItemList){this.displayItemList_=displayItemList;this.picture=this.displayItemList_;this.displayItemListView_.clear();this.displayItemList_.items.forEach(function(item){const listItem=document.createElement('tr-ui-e-chrome-cc-display-item-list-item');listItem.data=item;Polymer.dom(this.displayItemListView_).appendChild(listItem);}.bind(this));},set picture(picture){this.picture_=picture;const showOpsList=picture&&picture!==this.displayItemList_;this.updateDrawOpsList_(showOpsList);if(picture){const size=this.getRasterCanvasSize_();this.rasterCanvas_.width=size.width;this.rasterCanvas_.height=size.height;}
const bounds=this.rasterArea_.getBoundingClientRect();const selectorBounds=this.mouseModeSelector_.getBoundingClientRect();this.mouseModeSelector_.pos={x:(bounds.right-selectorBounds.width-10),y:bounds.top};this.rasterize_();this.scheduleUpdateContents_();},getRasterCanvasSize_(){const style=window.getComputedStyle(this.rasterArea_);let width=parseInt(style.width);let height=parseInt(style.height);if(this.picture_){width=Math.max(width,this.picture_.layerRect.width);height=Math.max(height,this.picture_.layerRect.height);}
return{width,height};},scheduleUpdateContents_(){if(this.updateContentsPending_)return;this.updateContentsPending_=true;tr.b.requestAnimationFrameInThisFrameIfPossible(this.updateContents_.bind(this));},updateContents_(){this.updateContentsPending_=false;if(this.picture_){Polymer.dom(this.sizeInfo_).textContent='('+
this.picture_.layerRect.width+' x '+
@@ -7329,13 +7687,11 @@ this.drawPicture_();},drawPicture_(){const size=this.getRasterCanvasSize_();if(s
if(size.height!==this.rasterCanvas_.height){this.rasterCanvas_.height=size.height;}
this.rasterCtx_.clearRect(0,0,size.width,size.height);if(!this.picture_||!this.pictureAsImageData_.imageData)return;const imgCanvas=this.pictureAsImageData_.asCanvas();const w=imgCanvas.width;const h=imgCanvas.height;this.rasterCtx_.drawImage(imgCanvas,0,0,w,h,0,0,w*this.zoomScaleValue_,h*this.zoomScaleValue_);},rasterize_(){if(this.picture_){this.picture_.rasterize({showOverdraw:false},this.onRasterComplete_.bind(this));}},onRasterComplete_(pictureAsImageData){this.pictureAsImageData_=pictureAsImageData;this.scheduleUpdateContents_();},onDisplayItemListSelection_(e){const selected=this.displayItemListView_.selectedElement;if(!selected){this.picture=this.displayItemList_;return;}
const index=Array.prototype.indexOf.call(this.displayItemListView_.children,selected);const displayItem=this.displayItemList_.items[index];if(displayItem&&displayItem.skp64){this.picture=new tr.e.cc.Picture(displayItem.skp64,this.displayItemList_.layerRect);}else{this.picture=undefined;}},onDisplayItemInfoClick_(e){if(e&&e.target===this.displayItemInfo_){this.displayItemListView_.selectedElement=undefined;}},updateDrawOpsList_(showOpsList){if(showOpsList){this.pictureOpsListView_.picture=this.picture_;if(this.pictureOpsListView_.numOps>0){this.pictureOpsListView_.style.display='block';this.pictureOpsListDragHandle_.style.display='block';}}else{this.pictureOpsListView_.style.display='none';this.pictureOpsListDragHandle_.style.display='none';}},trackMouse_(){this.mouseModeSelector_=document.createElement('tr-ui-b-mouse-mode-selector');this.mouseModeSelector_.targetElement=this.rasterArea_;Polymer.dom(this.rasterArea_).appendChild(this.mouseModeSelector_);this.mouseModeSelector_.supportedModeMask=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.mode=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.defaultMode=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.settingsKey='pictureDebugger.mouseModeSelector';this.mouseModeSelector_.addEventListener('beginzoom',this.onBeginZoom_.bind(this));this.mouseModeSelector_.addEventListener('updatezoom',this.onUpdateZoom_.bind(this));this.mouseModeSelector_.addEventListener('endzoom',this.onEndZoom_.bind(this));},onBeginZoom_(e){this.isZooming_=true;this.lastMouseViewPos_=this.extractRelativeMousePosition_(e);e.preventDefault();},onUpdateZoom_(e){if(!this.isZooming_)return;const currentMouseViewPos=this.extractRelativeMousePosition_(e);this.zoomScaleValue_+=((this.lastMouseViewPos_.y-currentMouseViewPos.y)*0.001);this.zoomScaleValue_=Math.max(this.zoomScaleValue_,0.1);this.drawPicture_();this.lastMouseViewPos_=currentMouseViewPos;},onEndZoom_(e){this.lastMouseViewPos_=undefined;this.isZooming_=false;e.preventDefault();},extractRelativeMousePosition_(e){return{x:e.clientX-this.rasterArea_.offsetLeft,y:e.clientY-this.rasterArea_.offsetTop};},saveFile_(filename,rawData){if(!rawData)return;const length=rawData.length;const arrayBuffer=new ArrayBuffer(length);const uint8Array=new Uint8Array(arrayBuffer);for(let c=0;c<length;c++){uint8Array[c]=rawData.charCodeAt(c);}
-const blob=new Blob([uint8Array],{type:'application/octet-binary'});const blobUrl=window.URL.createObjectURL(blob);const link=document.createElementNS('http://www.w3.org/1999/xhtml','a');link.href=blobUrl;link.download=filename;const event=document.createEvent('MouseEvents');event.initMouseEvent('click',true,false,window,0,0,0,0,0,false,false,false,false,0,null);link.dispatchEvent(event);},onExportDisplayListClicked_(){const rawData=JSON.stringify(this.displayItemList_.items);this.saveFile_(this.displayListFilename_.value,rawData);},onExportSkPictureClicked_(){const rawData=tr.b.Base64.atob(this.picture_.getBase64SkpData());this.saveFile_(this.skpFilename_.value,rawData);}};return{DisplayItemDebugger,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const DisplayItemSnapshotView=tr.ui.b.define('tr-ui-e-chrome-cc-display-item-list-view',tr.ui.analysis.ObjectSnapshotView);DisplayItemSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){this.style.display='flex';this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='auto';this.displayItemDebugger_=new tr.ui.e.chrome.cc.DisplayItemDebugger();Polymer.dom(this).appendChild(this.displayItemDebugger_);},updateContents(){if(this.objectSnapshot_&&this.displayItemDebugger_){this.displayItemDebugger_.displayItemList=this.objectSnapshot_;}}};tr.ui.analysis.ObjectSnapshotView.register(DisplayItemSnapshotView,{typeNames:['cc::DisplayItemList'],showInstances:false});return{DisplayItemSnapshotView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const constants=tr.e.cc.constants;const RENDER_PASS_QUADS=Math.max(constants.ACTIVE_TREE,constants.PENDING_TREE)+1;const LayerPicker=tr.ui.b.define('tr-ui-e-chrome-cc-layer-picker');LayerPicker.prototype={__proto__:HTMLUnknownElement.prototype,decorate(){this.lthi_=undefined;this.controls_=document.createElement('top-controls');this.renderPassQuads_=false;this.style.display='flex';this.style.flexDirection='column';this.controls_.style.flexGrow=0;this.controls_.style.flexShrink=0;this.controls_.style.flexBasis='auto';this.controls_.style.backgroundImage='-webkit-gradient(linear, 0 0, 100% 0, from(#E5E5E5), to(#D1D1D1))';this.controls_.style.borderBottom='1px solid #8e8e8e';this.controls_.style.borderTop='1px solid white';this.controls_.style.display='inline';this.controls_.style.fontSize='14px';this.controls_.style.paddingLeft='2px';this.itemList_=new tr.ui.b.ListView();this.itemList_.style.flexGrow=1;this.itemList_.style.flexShrink=1;this.itemList_.style.flexBasis='auto';this.itemList_.style.fontFamily='monospace';this.itemList_.style.overflow='auto';Polymer.dom(this).appendChild(this.controls_);Polymer.dom(this).appendChild(this.itemList_);this.itemList_.addEventListener('selection-changed',this.onItemSelectionChanged_.bind(this));Polymer.dom(this.controls_).appendChild(tr.ui.b.createSelector(this,'whichTree','layerPicker.whichTree',constants.ACTIVE_TREE,[{label:'Active tree',value:constants.ACTIVE_TREE},{label:'Pending tree',value:constants.PENDING_TREE},{label:'Render pass quads',value:RENDER_PASS_QUADS}]));this.showPureTransformLayers_=false;const showPureTransformLayers=tr.ui.b.createCheckBox(this,'showPureTransformLayers','layerPicker.showPureTransformLayers',false,'Transform layers');Polymer.dom(showPureTransformLayers).classList.add('show-transform-layers');showPureTransformLayers.title='When checked, pure transform layers are shown';Polymer.dom(this.controls_).appendChild(showPureTransformLayers);},get lthiSnapshot(){return this.lthiSnapshot_;},set lthiSnapshot(lthiSnapshot){this.lthiSnapshot_=lthiSnapshot;this.updateContents_();},get whichTree(){return this.renderPassQuads_?constants.ACTIVE_TREE:this.whichTree_;},set whichTree(whichTree){this.whichTree_=whichTree;this.renderPassQuads_=(whichTree===RENDER_PASS_QUADS);this.updateContents_();tr.b.dispatchSimpleEvent(this,'selection-change',false);},get layerTreeImpl(){if(this.lthiSnapshot===undefined)return undefined;return this.lthiSnapshot.getTree(this.whichTree);},get isRenderPassQuads(){return this.renderPassQuads_;},get showPureTransformLayers(){return this.showPureTransformLayers_;},set showPureTransformLayers(show){if(this.showPureTransformLayers_===show)return;this.showPureTransformLayers_=show;this.updateContents_();},getRenderPassInfos_(){if(!this.lthiSnapshot_)return[];const renderPassInfo=[];if(!this.lthiSnapshot_.args.frame||!this.lthiSnapshot_.args.frame.renderPasses){return renderPassInfo;}
+const blob=new Blob([uint8Array],{type:'application/octet-binary'});const blobUrl=window.URL.createObjectURL(blob);const link=document.createElementNS('http://www.w3.org/1999/xhtml','a');link.href=blobUrl;link.download=filename;const event=document.createEvent('MouseEvents');event.initMouseEvent('click',true,false,window,0,0,0,0,0,false,false,false,false,0,null);link.dispatchEvent(event);},onExportDisplayListClicked_(){const rawData=JSON.stringify(this.displayItemList_.items);this.saveFile_(this.displayListFilename_.value,rawData);},onExportSkPictureClicked_(){const rawData=tr.b.Base64.atob(this.picture_.getBase64SkpData());this.saveFile_(this.skpFilename_.value,rawData);}};return{DisplayItemDebugger,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const DisplayItemSnapshotView=tr.ui.b.define('tr-ui-e-chrome-cc-display-item-list-view',tr.ui.analysis.ObjectSnapshotView);DisplayItemSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){this.style.display='flex';this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='auto';this.style.minWidth=0;this.displayItemDebugger_=new tr.ui.e.chrome.cc.DisplayItemDebugger();this.displayItemDebugger_.style.flexGrow=1;this.displayItemDebugger_.style.flexShrink=1;this.displayItemDebugger_.style.flexBasis='auto';this.displayItemDebugger_.style.minWidth=0;Polymer.dom(this).appendChild(this.displayItemDebugger_);},updateContents(){if(this.objectSnapshot_&&this.displayItemDebugger_){this.displayItemDebugger_.displayItemList=this.objectSnapshot_;}}};tr.ui.analysis.ObjectSnapshotView.register(DisplayItemSnapshotView,{typeNames:['cc::DisplayItemList'],showInstances:false});return{DisplayItemSnapshotView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const constants=tr.e.cc.constants;const RENDER_PASS_QUADS=Math.max(constants.ACTIVE_TREE,constants.PENDING_TREE)+1;const LayerPicker=tr.ui.b.define('tr-ui-e-chrome-cc-layer-picker');LayerPicker.prototype={__proto__:HTMLUnknownElement.prototype,decorate(){this.lthi_=undefined;this.controls_=document.createElement('top-controls');this.renderPassQuads_=false;this.style.display='flex';this.style.flexDirection='column';this.controls_.style.flexGrow=0;this.controls_.style.flexShrink=0;this.controls_.style.flexBasis='auto';this.controls_.style.backgroundImage='-webkit-gradient(linear, 0 0, 100% 0, from(#E5E5E5), to(#D1D1D1))';this.controls_.style.borderBottom='1px solid #8e8e8e';this.controls_.style.borderTop='1px solid white';this.controls_.style.display='inline';this.controls_.style.fontSize='14px';this.controls_.style.paddingLeft='2px';this.itemList_=new tr.ui.b.ListView();this.itemList_.style.flexGrow=1;this.itemList_.style.flexShrink=1;this.itemList_.style.flexBasis='auto';this.itemList_.style.fontFamily='monospace';this.itemList_.style.overflow='auto';Polymer.dom(this).appendChild(this.controls_);Polymer.dom(this).appendChild(this.itemList_);this.itemList_.addEventListener('selection-changed',this.onItemSelectionChanged_.bind(this));Polymer.dom(this.controls_).appendChild(tr.ui.b.createSelector(this,'whichTree','layerPicker.whichTree',constants.ACTIVE_TREE,[{label:'Active tree',value:constants.ACTIVE_TREE},{label:'Pending tree',value:constants.PENDING_TREE},{label:'Render pass quads',value:RENDER_PASS_QUADS}]));this.showPureTransformLayers_=false;const showPureTransformLayers=tr.ui.b.createCheckBox(this,'showPureTransformLayers','layerPicker.showPureTransformLayers',false,'Transform layers');Polymer.dom(showPureTransformLayers).classList.add('show-transform-layers');showPureTransformLayers.title='When checked, pure transform layers are shown';Polymer.dom(this.controls_).appendChild(showPureTransformLayers);},get lthiSnapshot(){return this.lthiSnapshot_;},set lthiSnapshot(lthiSnapshot){this.lthiSnapshot_=lthiSnapshot;this.updateContents_();},get whichTree(){return this.renderPassQuads_?constants.ACTIVE_TREE:this.whichTree_;},set whichTree(whichTree){this.whichTree_=whichTree;this.renderPassQuads_=(whichTree===RENDER_PASS_QUADS);this.updateContents_();tr.b.dispatchSimpleEvent(this,'selection-change',false);},get layerTreeImpl(){if(this.lthiSnapshot===undefined)return undefined;return this.lthiSnapshot.getTree(this.whichTree);},get isRenderPassQuads(){return this.renderPassQuads_;},get showPureTransformLayers(){return this.showPureTransformLayers_;},set showPureTransformLayers(show){if(this.showPureTransformLayers_===show)return;this.showPureTransformLayers_=show;this.updateContents_();},getRenderPassInfos_(){if(!this.lthiSnapshot_)return[];const renderPassInfo=[];if(!this.lthiSnapshot_.args.frame||!this.lthiSnapshot_.args.frame.renderPasses){return renderPassInfo;}
const renderPasses=this.lthiSnapshot_.args.frame.renderPasses;for(let i=0;i<renderPasses.length;++i){const info={renderPass:renderPasses[i],depth:0,id:i,name:'cc::RenderPass'};renderPassInfo.push(info);}
-return renderPassInfo;},getLayerInfos_(){if(!this.lthiSnapshot_)return[];const tree=this.lthiSnapshot_.getTree(this.whichTree_);if(!tree)return[];const layerInfos=[];const showPureTransformLayers=this.showPureTransformLayers_;function isPureTransformLayer(layer){if(layer.args.compositingReasons&&layer.args.compositingReasons.length!==1&&layer.args.compositingReasons[0]!=='No reasons given'){return false;}
-if(layer.args.drawsContent)return false;return true;}
-const visitedLayers={};function visitLayer(layer,depth,isMask,isReplica){if(visitedLayers[layer.layerId])return;visitedLayers[layer.layerId]=true;const info={layer,depth};if(layer.args.drawsContent){info.name=layer.objectInstance.name;}else{info.name='cc::LayerImpl';}
+return renderPassInfo;},getLayerInfos_(){if(!this.lthiSnapshot_)return[];const tree=this.lthiSnapshot_.getTree(this.whichTree_);if(!tree)return[];const layerInfos=[];const showPureTransformLayers=this.showPureTransformLayers_;const visitedLayers={};function visitLayer(layer,depth,isMask,isReplica){if(visitedLayers[layer.layerId])return;visitedLayers[layer.layerId]=true;const info={layer,depth};if(layer.args.drawsContent){info.name=layer.objectInstance.name;}else{info.name='cc::LayerImpl';}
if(layer.usingGpuRasterization){info.name+=' (G)';}
-info.isMaskLayer=isMask;info.replicaLayer=isReplica;if(showPureTransformLayers||!isPureTransformLayer(layer)){layerInfos.push(info);}}
+info.isMaskLayer=isMask;info.replicaLayer=isReplica;if(showPureTransformLayers||layer.args.drawsContent){layerInfos.push(info);}}
tree.iterLayers(visitLayer);return layerInfos;},updateContents_(){if(this.renderPassQuads_){this.updateRenderPassContents_();}else{this.updateLayerContents_();}},updateRenderPassContents_(){this.itemList_.clear();let selectedRenderPassId;if(this.selection_&&this.selection_.associatedRenderPassId){selectedRenderPassId=this.selection_.associatedRenderPassId;}
const renderPassInfos=this.getRenderPassInfos_();renderPassInfos.forEach(function(renderPassInfo){const renderPass=renderPassInfo.renderPass;const id=renderPassInfo.id;const item=this.createElementWithDepth_(renderPassInfo.depth);const labelEl=Polymer.dom(item).appendChild(tr.ui.b.createSpan());Polymer.dom(labelEl).textContent=renderPassInfo.name+' '+id;item.renderPass=renderPass;item.renderPassId=id;Polymer.dom(this.itemList_).appendChild(item);if(id===selectedRenderPassId){renderPass.selectionState=tr.model.SelectionState.SELECTED;}},this);},updateLayerContents_(){this.changingItemSelection_=true;try{this.itemList_.clear();let selectedLayerId;if(this.selection_&&this.selection_.associatedLayerId){selectedLayerId=this.selection_.associatedLayerId;}
const layerInfos=this.getLayerInfos_();layerInfos.forEach(function(layerInfo){const layer=layerInfo.layer;const id=layer.layerId;const item=this.createElementWithDepth_(layerInfo.depth);const labelEl=Polymer.dom(item).appendChild(tr.ui.b.createSpan());Polymer.dom(labelEl).textContent=layerInfo.name+' '+id;const notesEl=Polymer.dom(item).appendChild(tr.ui.b.createSpan());if(layerInfo.isMaskLayer){Polymer.dom(notesEl).textContent+='(mask)';}
@@ -7372,7 +7728,7 @@ ctx.stroke();ctx.restore();}
function drawProjectedQuadSelectionOutlineToContext(quad,p1,p2,p3,p4,ctx,quadCanvas){if(!quad.upperBorderColor)return;ctx.lineWidth=8;ctx.strokeStyle=quad.upperBorderColor;ctx.beginPath();ctx.moveTo(p1[0],p1[1]);ctx.lineTo(p2[0],p2[1]);ctx.lineTo(p3[0],p3[1]);ctx.lineTo(p4[0],p4[1]);ctx.closePath();ctx.stroke();}
function drawProjectedQuadToContext(passNumber,quad,p1,p2,p3,p4,ctx,quadCanvas){if(passNumber===0){drawProjectedQuadBackgroundToContext(quad,p1,p2,p3,p4,ctx,quadCanvas);}else if(passNumber===1){drawProjectedQuadOutlineToContext(quad,p1,p2,p3,p4,ctx,quadCanvas);}else if(passNumber===2){drawProjectedQuadSelectionOutlineToContext(quad,p1,p2,p3,p4,ctx,quadCanvas);}else{throw new Error('Invalid pass number');}}
const tmpP1=vec3.create();const tmpP2=vec3.create();const tmpP3=vec3.create();const tmpP4=vec3.create();function transformAndProcessQuads(matrix,viewport,quads,numPasses,handleQuadFunc,opt_arg1,opt_arg2){for(let passNumber=0;passNumber<numPasses;passNumber++){for(let i=0;i<quads.length;i++){const quad=quads[i];transform(tmpP1,quad.p1,matrix,viewport);transform(tmpP2,quad.p2,matrix,viewport);transform(tmpP3,quad.p3,matrix,viewport);transform(tmpP4,quad.p4,matrix,viewport);handleQuadFunc(passNumber,quad,tmpP1,tmpP2,tmpP3,tmpP4,opt_arg1,opt_arg2);}}}
-const QuadStackView=tr.ui.b.define('quad-stack-view');QuadStackView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.className='quad-stack-view';this.style.display='block';this.style.float='left';this.style.height='100%';this.style.overflow='hidden';this.style.position='relative';this.style.width='100%';const node=tr.ui.b.instantiateTemplate('#quad-stack-view-template',THIS_DOC);Polymer.dom(this).appendChild(node);this.updateHeaderVisibility_();const header=Polymer.dom(this).querySelector('#header');header.style.position='absolute';header.style.fontSize='70%';header.style.top='10px';header.style.left='10px';header.style.width='800px';this.canvas_=Polymer.dom(this).querySelector('#canvas');this.chromeImages_={left:Polymer.dom(this).querySelector('#chrome-left'),mid:Polymer.dom(this).querySelector('#chrome-mid'),right:Polymer.dom(this).querySelector('#chrome-right')};const stackingDistanceSlider=Polymer.dom(this).querySelector('#stacking-distance-slider');stackingDistanceSlider.style.position='absolute';stackingDistanceSlider.style.fontSize='70%';stackingDistanceSlider.style.top='10px';stackingDistanceSlider.style.right='10px';stackingDistanceSlider.value=tr.b.Settings.get('quadStackView.stackingDistance',45);stackingDistanceSlider.addEventListener('change',this.onStackingDistanceChange_.bind(this));stackingDistanceSlider.addEventListener('input',this.onStackingDistanceChange_.bind(this));this.trackMouse_();this.camera_=new tr.ui.b.Camera(this.mouseModeSelector_);this.camera_.addEventListener('renderrequired',this.onRenderRequired_.bind(this));this.cameraWasReset_=false;this.camera_.canvas=this.canvas_;this.viewportRect_=tr.b.math.Rect.fromXYWH(0,0,0,0);this.pixelRatio_=window.devicePixelRatio||1;},updateHeaderVisibility_(){if(this.headerText){Polymer.dom(this).querySelector('#header').style.display='';}else{Polymer.dom(this).querySelector('#header').style.display='none';}},get headerText(){return Polymer.dom(this).querySelector('#header').textContent;},set headerText(headerText){Polymer.dom(this).querySelector('#header').textContent=headerText;this.updateHeaderVisibility_();},onStackingDistanceChange_(e){tr.b.Settings.set('quadStackView.stackingDistance',this.stackingDistance);this.scheduleRender();e.stopPropagation();},get stackingDistance(){return Polymer.dom(this).querySelector('#stacking-distance-slider').value;},get mouseModeSelector(){return this.mouseModeSelector_;},get camera(){return this.camera_;},set quads(q){this.quads_=q;this.scheduleRender();},set deviceRect(rect){if(!rect||rect.equalTo(this.deviceRect_))return;this.deviceRect_=rect;this.camera_.deviceRect=rect;this.chromeQuad_=undefined;},resize(){if(!this.offsetParent)return true;const width=parseInt(window.getComputedStyle(this.offsetParent).width);const height=parseInt(window.getComputedStyle(this.offsetParent).height);const rect=tr.b.math.Rect.fromXYWH(0,0,width,height);if(rect.equalTo(this.viewportRect_))return false;this.viewportRect_=rect;this.style.width=width+'px';this.style.height=height+'px';this.canvas_.style.width=width+'px';this.canvas_.style.height=height+'px';this.canvas_.width=this.pixelRatio_*width;this.canvas_.height=this.pixelRatio_*height;if(!this.cameraWasReset_){this.camera_.resetCamera();this.cameraWasReset_=true;}
+const QuadStackView=tr.ui.b.define('quad-stack-view');QuadStackView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.className='quad-stack-view';this.style.display='flex';this.style.position='relative';const node=tr.ui.b.instantiateTemplate('#quad-stack-view-template',THIS_DOC);Polymer.dom(this).appendChild(node);this.updateHeaderVisibility_();const header=Polymer.dom(this).querySelector('#header');header.style.position='absolute';header.style.fontSize='70%';header.style.top='10px';header.style.left='10px';header.style.right='150px';const scroller=Polymer.dom(this).querySelector('#canvas-scroller');scroller.style.flexGrow=1;scroller.style.flexShrink=1;scroller.style.flexBasis='auto';scroller.style.minWidth=0;scroller.style.minHeight=0;scroller.style.overflow='auto';this.canvas_=Polymer.dom(this).querySelector('#canvas');this.chromeImages_={left:Polymer.dom(this).querySelector('#chrome-left'),mid:Polymer.dom(this).querySelector('#chrome-mid'),right:Polymer.dom(this).querySelector('#chrome-right')};const stackingDistanceSlider=Polymer.dom(this).querySelector('#stacking-distance-slider');stackingDistanceSlider.style.position='absolute';stackingDistanceSlider.style.fontSize='70%';stackingDistanceSlider.style.top='10px';stackingDistanceSlider.style.right='10px';stackingDistanceSlider.value=tr.b.Settings.get('quadStackView.stackingDistance',45);stackingDistanceSlider.addEventListener('change',this.onStackingDistanceChange_.bind(this));stackingDistanceSlider.addEventListener('input',this.onStackingDistanceChange_.bind(this));this.trackMouse_();this.camera_=new tr.ui.b.Camera(this.mouseModeSelector_);this.camera_.addEventListener('renderrequired',this.onRenderRequired_.bind(this));this.cameraWasReset_=false;this.camera_.canvas=this.canvas_;this.viewportRect_=tr.b.math.Rect.fromXYWH(0,0,0,0);this.pixelRatio_=window.devicePixelRatio||1;},updateHeaderVisibility_(){if(this.headerText){Polymer.dom(this).querySelector('#header').style.display='';}else{Polymer.dom(this).querySelector('#header').style.display='none';}},get headerText(){return Polymer.dom(this).querySelector('#header').textContent;},set headerText(headerText){Polymer.dom(this).querySelector('#header').textContent=headerText;this.updateHeaderVisibility_();},onStackingDistanceChange_(e){tr.b.Settings.set('quadStackView.stackingDistance',this.stackingDistance);this.scheduleRender();e.stopPropagation();},get stackingDistance(){return Polymer.dom(this).querySelector('#stacking-distance-slider').value;},get mouseModeSelector(){return this.mouseModeSelector_;},get camera(){return this.camera_;},set quads(q){this.quads_=q;this.scheduleRender();},set deviceRect(rect){if(!rect||rect.equalTo(this.deviceRect_))return;this.deviceRect_=rect;this.camera_.deviceRect=rect;this.chromeQuad_=undefined;},resize(){if(!this.offsetParent)return true;const width=parseInt(window.getComputedStyle(this.offsetParent).width);const height=parseInt(window.getComputedStyle(this.offsetParent).height);const rect=tr.b.math.Rect.fromXYWH(0,0,width,height);if(rect.equalTo(this.viewportRect_))return false;this.viewportRect_=rect;this.canvas_.style.width=width+'px';this.canvas_.style.height=height+'px';this.canvas_.width=this.pixelRatio_*width;this.canvas_.height=this.pixelRatio_*height;if(!this.cameraWasReset_){this.camera_.resetCamera();this.cameraWasReset_=true;}
return true;},readyToDraw(){if(!this.chromeImages_.left.src){let leftContent=window.getComputedStyle(this.chromeImages_.left).backgroundImage;leftContent=tr.ui.b.extractUrlString(leftContent);let midContent=window.getComputedStyle(this.chromeImages_.mid).backgroundImage;midContent=tr.ui.b.extractUrlString(midContent);let rightContent=window.getComputedStyle(this.chromeImages_.right).backgroundImage;rightContent=tr.ui.b.extractUrlString(rightContent);this.chromeImages_.left.src=leftContent;this.chromeImages_.mid.src=midContent;this.chromeImages_.right.src=rightContent;}
return(this.chromeImages_.left.height>0)&&(this.chromeImages_.mid.height>0)&&(this.chromeImages_.right.height>0);},get chromeQuad(){if(this.chromeQuad_)return this.chromeQuad_;const chromeCanvas=document.createElement('canvas');const offsetY=this.chromeImages_.left.height;chromeCanvas.width=this.deviceRect_.width;chromeCanvas.height=this.deviceRect_.height+offsetY;const leftWidth=this.chromeImages_.left.width;const midWidth=this.chromeImages_.mid.width;const rightWidth=this.chromeImages_.right.width;const chromeCtx=chromeCanvas.getContext('2d');chromeCtx.drawImage(this.chromeImages_.left,0,0);chromeCtx.save();chromeCtx.translate(leftWidth,0);const s=(this.deviceRect_.width-leftWidth-rightWidth)/midWidth;chromeCtx.scale(s,1);chromeCtx.drawImage(this.chromeImages_.mid,0,0);chromeCtx.restore();chromeCtx.drawImage(this.chromeImages_.right,leftWidth+s*midWidth,0);const chromeRect=tr.b.math.Rect.fromXYWH(this.deviceRect_.x,this.deviceRect_.y-offsetY,this.deviceRect_.width,this.deviceRect_.height+offsetY);const chromeQuad=tr.b.math.Quad.fromRect(chromeRect);chromeQuad.stackingGroupId=this.maxStackingGroupId_+1;chromeQuad.imageData=chromeCtx.getImageData(0,0,chromeCanvas.width,chromeCanvas.height);chromeQuad.shadowOffset=[0,0];chromeQuad.shadowBlur=5;chromeQuad.borderWidth=3;this.chromeQuad_=chromeQuad;return this.chromeQuad_;},scheduleRender(){if(this.redrawScheduled_)return false;this.redrawScheduled_=true;tr.b.requestAnimationFrame(this.render,this);},onRenderRequired_(e){this.scheduleRender();},stackTransformAndProcessQuads_(numPasses,handleQuadFunc,includeChromeQuad,opt_arg1,opt_arg2){const mv=this.camera_.modelViewMatrix;const p=this.camera_.projectionMatrix;const viewport=tr.b.math.Rect.fromXYWH(0,0,this.canvas_.width,this.canvas_.height);const quadStacks=[];for(let i=0;i<this.quads_.length;++i){const quad=this.quads_[i];const stackingId=quad.stackingGroupId||0;while(stackingId>=quadStacks.length){quadStacks.push([]);}
quadStacks[stackingId].push(quad);}
@@ -7381,8 +7737,9 @@ if(includeChromeQuad&&this.deviceRect_){transformAndProcessQuads(mvp,viewport,[t
if(!this.quads_)return;const canvasCtx=this.canvas_.getContext('2d');if(!this.resize()){canvasCtx.clearRect(0,0,this.canvas_.width,this.canvas_.height);}
const quadCanvas=document.createElement('canvas');this.stackTransformAndProcessQuads_(3,drawProjectedQuadToContext,true,canvasCtx,quadCanvas);quadCanvas.width=0;},trackMouse_(){this.mouseModeSelector_=document.createElement('tr-ui-b-mouse-mode-selector');this.mouseModeSelector_.targetElement=this.canvas_;this.mouseModeSelector_.supportedModeMask=tr.ui.b.MOUSE_SELECTOR_MODE.SELECTION|tr.ui.b.MOUSE_SELECTOR_MODE.PANSCAN|tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM|tr.ui.b.MOUSE_SELECTOR_MODE.ROTATE;this.mouseModeSelector_.mode=tr.ui.b.MOUSE_SELECTOR_MODE.PANSCAN;this.mouseModeSelector_.pos={x:0,y:100};Polymer.dom(this).appendChild(this.mouseModeSelector_);this.mouseModeSelector_.settingsKey='quadStackView.mouseModeSelector';this.mouseModeSelector_.setModifierForAlternateMode(tr.ui.b.MOUSE_SELECTOR_MODE.ROTATE,tr.ui.b.MODIFIER.SHIFT);this.mouseModeSelector_.setModifierForAlternateMode(tr.ui.b.MOUSE_SELECTOR_MODE.PANSCAN,tr.ui.b.MODIFIER.SPACE);this.mouseModeSelector_.setModifierForAlternateMode(tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM,tr.ui.b.MODIFIER.CMD_OR_CTRL);this.mouseModeSelector_.addEventListener('updateselection',this.onSelectionUpdate_.bind(this));this.mouseModeSelector_.addEventListener('endselection',this.onSelectionUpdate_.bind(this));},extractRelativeMousePosition_(e){const br=this.canvas_.getBoundingClientRect();return[this.pixelRatio_*(e.clientX-this.canvas_.offsetLeft-br.left),this.pixelRatio_*(e.clientY-this.canvas_.offsetTop-br.top)];},onSelectionUpdate_(e){const mousePos=this.extractRelativeMousePosition_(e);const res=[];function handleQuad(passNumber,quad,p1,p2,p3,p4){if(tr.b.math.pointInImplicitQuad(mousePos,p1,p2,p3,p4)){res.push(quad);}}
this.stackTransformAndProcessQuads_(1,handleQuad,false);e=new tr.b.Event('selectionchange');e.quads=res;this.dispatchEvent(e);}};return{QuadStackView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const ColorScheme=tr.b.ColorScheme;const THIS_DOC=document.currentScript.ownerDocument;const TILE_HEATMAP_TYPE={};TILE_HEATMAP_TYPE.NONE='none';TILE_HEATMAP_TYPE.SCHEDULED_PRIORITY='scheduledPriority';TILE_HEATMAP_TYPE.USING_GPU_MEMORY='usingGpuMemory';const cc=tr.ui.e.chrome.cc;function createTileRectsSelectorBaseOptions(){return[{label:'None',value:'none'},{label:'Coverage Rects',value:'coverage'}];}
-const LayerTreeQuadStackView=tr.ui.b.define('tr-ui-e-chrome-cc-layer-tree-quad-stack-view');LayerTreeQuadStackView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='100%';this.style.flexDirection='column';this.style.minHeight=0;this.style.display='flex';this.style.width='100%';this.isRenderPassQuads_=false;this.pictureAsImageData_={};this.messages_=[];this.controls_=document.createElement('top-controls');this.controls_.style.flexGrow=0;this.controls_.style.flexShrink=0;this.controls_.style.flexBasis='auto';this.controls_.style.backgroundImage='-webkit-gradient(linear, 0 0, 100% 0, from(#E5E5E5), to(#D1D1D1))';this.controls_.style.borderBottom='1px solid #8e8e8e';this.controls_.style.borderTop='1px solid white';this.controls_.style.display='flex';this.controls_.style.flexDirection='row';this.controls_.style.flexWrap='wrap';this.controls_.style.fontSize='14px';this.controls_.style.paddingLeft='2px';this.controls_.style.overflow='hidden';this.infoBar_=document.createElement('tr-ui-b-info-bar');this.quadStackView_=new tr.ui.b.QuadStackView();this.quadStackView_.addEventListener('selectionchange',this.onQuadStackViewSelectionChange_.bind(this));this.extraHighlightsByLayerId_=undefined;this.inputEventImageData_=undefined;const m=tr.ui.b.MOUSE_SELECTOR_MODE;const mms=this.quadStackView_.mouseModeSelector;mms.settingsKey='tr.e.cc.layerTreeQuadStackView.mouseModeSelector';mms.setKeyCodeForMode(m.SELECTION,'Z'.charCodeAt(0));mms.setKeyCodeForMode(m.PANSCAN,'X'.charCodeAt(0));mms.setKeyCodeForMode(m.ZOOM,'C'.charCodeAt(0));mms.setKeyCodeForMode(m.ROTATE,'V'.charCodeAt(0));const node=tr.ui.b.instantiateTemplate('#tr-ui-e-chrome-cc-layer-tree-quad-stack-view-template',THIS_DOC);Polymer.dom(this).appendChild(node);Polymer.dom(this).appendChild(this.controls_);Polymer.dom(this).appendChild(this.infoBar_);Polymer.dom(this).appendChild(this.quadStackView_);this.tileRectsSelector_=tr.ui.b.createSelector(this,'howToShowTiles','layerView.howToShowTiles','none',createTileRectsSelectorBaseOptions());Polymer.dom(this.controls_).appendChild(this.tileRectsSelector_);const tileHeatmapText=tr.ui.b.createSpan({textContent:'Tile heatmap:'});Polymer.dom(this.controls_).appendChild(tileHeatmapText);const tileHeatmapSelector=tr.ui.b.createSelector(this,'tileHeatmapType','layerView.tileHeatmapType',TILE_HEATMAP_TYPE.NONE,[{label:'None',value:TILE_HEATMAP_TYPE.NONE},{label:'Scheduled Priority',value:TILE_HEATMAP_TYPE.SCHEDULED_PRIORITY},{label:'Is using GPU memory',value:TILE_HEATMAP_TYPE.USING_GPU_MEMORY}]);Polymer.dom(this.controls_).appendChild(tileHeatmapSelector);const showOtherLayersCheckbox=tr.ui.b.createCheckBox(this,'showOtherLayers','layerView.showOtherLayers',true,'Other layers/passes');showOtherLayersCheckbox.title='When checked, show all layers, selected or not.';Polymer.dom(this.controls_).appendChild(showOtherLayersCheckbox);const showInvalidationsCheckbox=tr.ui.b.createCheckBox(this,'showInvalidations','layerView.showInvalidations',true,'Invalidations');showInvalidationsCheckbox.title='When checked, compositing invalidations are highlighted in red';Polymer.dom(this.controls_).appendChild(showInvalidationsCheckbox);const showUnrecordedRegionCheckbox=tr.ui.b.createCheckBox(this,'showUnrecordedRegion','layerView.showUnrecordedRegion',true,'Unrecorded area');showUnrecordedRegionCheckbox.title='When checked, unrecorded areas are highlighted in yellow';Polymer.dom(this.controls_).appendChild(showUnrecordedRegionCheckbox);const showBottlenecksCheckbox=tr.ui.b.createCheckBox(this,'showBottlenecks','layerView.showBottlenecks',true,'Bottlenecks');showBottlenecksCheckbox.title='When checked, scroll bottlenecks are highlighted';Polymer.dom(this.controls_).appendChild(showBottlenecksCheckbox);const showLayoutRectsCheckbox=tr.ui.b.createCheckBox(this,'showLayoutRects','layerView.showLayoutRects',false,'Layout rects');showLayoutRectsCheckbox.title='When checked, shows rects for regions where layout happened';Polymer.dom(this.controls_).appendChild(showLayoutRectsCheckbox);const showContentsCheckbox=tr.ui.b.createCheckBox(this,'showContents','layerView.showContents',true,'Contents');showContentsCheckbox.title='When checked, show the rendered contents inside the layer outlines';Polymer.dom(this.controls_).appendChild(showContentsCheckbox);const showAnimationBoundsCheckbox=tr.ui.b.createCheckBox(this,'showAnimationBounds','layerView.showAnimationBounds',false,'Animation Bounds');showAnimationBoundsCheckbox.title='When checked, show a border around'+' a layer showing the extent of its animation.';Polymer.dom(this.controls_).appendChild(showAnimationBoundsCheckbox);const showInputEventsCheckbox=tr.ui.b.createCheckBox(this,'showInputEvents','layerView.showInputEvents',true,'Input events');showInputEventsCheckbox.title='When checked, input events are '+'displayed as circles.';Polymer.dom(this.controls_).appendChild(showInputEventsCheckbox);this.whatRasterizedLink_=document.createElement('a');Polymer.dom(this.whatRasterizedLink_).classList.add('what-rasterized');Polymer.dom(this.whatRasterizedLink_).textContent='What rasterized?';this.whatRasterizedLink_.addEventListener('click',this.onWhatRasterizedLinkClicked_.bind(this));Polymer.dom(this).appendChild(this.whatRasterizedLink_);},get layerTreeImpl(){return this.layerTreeImpl_;},set isRenderPassQuads(newValue){this.isRenderPassQuads_=newValue;},set layerTreeImpl(layerTreeImpl){if(this.layerTreeImpl_===layerTreeImpl)return;this.layerTreeImpl_=layerTreeImpl;this.selection=undefined;},get extraHighlightsByLayerId(){return this.extraHighlightsByLayerId_;},set extraHighlightsByLayerId(extraHighlightsByLayerId){this.extraHighlightsByLayerId_=extraHighlightsByLayerId;this.scheduleUpdateContents_();},get showOtherLayers(){return this.showOtherLayers_;},set showOtherLayers(show){this.showOtherLayers_=show;this.updateContents_();},get showAnimationBounds(){return this.showAnimationBounds_;},set showAnimationBounds(show){this.showAnimationBounds_=show;this.updateContents_();},get showInputEvents(){return this.showInputEvents_;},set showInputEvents(show){this.showInputEvents_=show;this.updateContents_();},get showContents(){return this.showContents_;},set showContents(show){this.showContents_=show;this.updateContents_();},get showInvalidations(){return this.showInvalidations_;},set showInvalidations(show){this.showInvalidations_=show;this.updateContents_();},get showUnrecordedRegion(){return this.showUnrecordedRegion_;},set showUnrecordedRegion(show){this.showUnrecordedRegion_=show;this.updateContents_();},get showBottlenecks(){return this.showBottlenecks_;},set showBottlenecks(show){this.showBottlenecks_=show;this.updateContents_();},get showLayoutRects(){return this.showLayoutRects_;},set showLayoutRects(show){this.showLayoutRects_=show;this.updateContents_();},get howToShowTiles(){return this.howToShowTiles_;},set howToShowTiles(val){if(val!=='none'&&val!=='coverage'&&isNaN(parseFloat(val))){throw new Error('howToShowTiles requires "none" or "coverage" or a number');}
-this.howToShowTiles_=val;this.updateContents_();},get tileHeatmapType(){return this.tileHeatmapType_;},set tileHeatmapType(val){this.tileHeatmapType_=val;this.updateContents_();},get selection(){return this.selection_;},set selection(selection){if(this.selection===selection)return;this.selection_=selection;tr.b.dispatchSimpleEvent(this,'selection-change');this.updateContents_();},regenerateContent(){this.updateTilesSelector_();this.updateContents_();},loadDataForImageElement_(image,callback){const imageContent=window.getComputedStyle(image).backgroundImage;image.src=tr.ui.b.extractUrlString(imageContent);image.onload=function(){const canvas=document.createElement('canvas');const ctx=canvas.getContext('2d');canvas.width=image.width;canvas.height=image.height;ctx.drawImage(image,0,0);const imageData=ctx.getImageData(0,0,canvas.width,canvas.height);callback(imageData);};},onQuadStackViewSelectionChange_(e){const selectableQuads=e.quads.filter(function(q){return q.selectionToSetIfClicked!==undefined;});if(selectableQuads.length===0){this.selection=undefined;return;}
+const LayerTreeQuadStackView=tr.ui.b.define('tr-ui-e-chrome-cc-layer-tree-quad-stack-view');LayerTreeQuadStackView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='auto';this.style.flexDirection='column';this.style.minHeight=0;this.style.display='flex';this.isRenderPassQuads_=false;this.pictureAsImageData_={};this.messages_=[];this.controls_=document.createElement('top-controls');this.controls_.style.flexGrow=0;this.controls_.style.flexShrink=0;this.controls_.style.flexBasis='auto';this.controls_.style.backgroundImage='-webkit-gradient(linear, 0 0, 100% 0, from(#E5E5E5), to(#D1D1D1))';this.controls_.style.borderBottom='1px solid #8e8e8e';this.controls_.style.borderTop='1px solid white';this.controls_.style.display='flex';this.controls_.style.flexDirection='row';this.controls_.style.flexWrap='wrap';this.controls_.style.fontSize='14px';this.controls_.style.paddingLeft='2px';this.controls_.style.overflow='hidden';this.infoBar_=document.createElement('tr-ui-b-info-bar');this.quadStackView_=new tr.ui.b.QuadStackView();this.quadStackView_.addEventListener('selectionchange',this.onQuadStackViewSelectionChange_.bind(this));this.quadStackView_.style.flexGrow=1;this.quadStackView_.style.flexShrink=1;this.quadStackView_.style.flexBasis='auto';this.quadStackView_.style.minWidth='200px';this.extraHighlightsByLayerId_=undefined;this.inputEventImageData_=undefined;const m=tr.ui.b.MOUSE_SELECTOR_MODE;const mms=this.quadStackView_.mouseModeSelector;mms.settingsKey='tr.e.cc.layerTreeQuadStackView.mouseModeSelector';mms.setKeyCodeForMode(m.SELECTION,'Z'.charCodeAt(0));mms.setKeyCodeForMode(m.PANSCAN,'X'.charCodeAt(0));mms.setKeyCodeForMode(m.ZOOM,'C'.charCodeAt(0));mms.setKeyCodeForMode(m.ROTATE,'V'.charCodeAt(0));const node=tr.ui.b.instantiateTemplate('#tr-ui-e-chrome-cc-layer-tree-quad-stack-view-template',THIS_DOC);Polymer.dom(this).appendChild(node);Polymer.dom(this).appendChild(this.controls_);Polymer.dom(this).appendChild(this.infoBar_);Polymer.dom(this).appendChild(this.quadStackView_);this.tileRectsSelector_=tr.ui.b.createSelector(this,'howToShowTiles','layerView.howToShowTiles','none',createTileRectsSelectorBaseOptions());Polymer.dom(this.controls_).appendChild(this.tileRectsSelector_);const tileHeatmapText=tr.ui.b.createSpan({textContent:'Tile heatmap:'});Polymer.dom(this.controls_).appendChild(tileHeatmapText);const tileHeatmapSelector=tr.ui.b.createSelector(this,'tileHeatmapType','layerView.tileHeatmapType',TILE_HEATMAP_TYPE.NONE,[{label:'None',value:TILE_HEATMAP_TYPE.NONE},{label:'Scheduled Priority',value:TILE_HEATMAP_TYPE.SCHEDULED_PRIORITY},{label:'Is using GPU memory',value:TILE_HEATMAP_TYPE.USING_GPU_MEMORY}]);Polymer.dom(this.controls_).appendChild(tileHeatmapSelector);const showOtherLayersCheckbox=tr.ui.b.createCheckBox(this,'showOtherLayers','layerView.showOtherLayers',true,'Other layers/passes');showOtherLayersCheckbox.title='When checked, show all layers, selected or not.';Polymer.dom(this.controls_).appendChild(showOtherLayersCheckbox);const showInvalidationsCheckbox=tr.ui.b.createCheckBox(this,'showInvalidations','layerView.showInvalidations',true,'Invalidations');showInvalidationsCheckbox.title='When checked, compositing invalidations are highlighted in red';Polymer.dom(this.controls_).appendChild(showInvalidationsCheckbox);const showUnrecordedRegionCheckbox=tr.ui.b.createCheckBox(this,'showUnrecordedRegion','layerView.showUnrecordedRegion',true,'Unrecorded area');showUnrecordedRegionCheckbox.title='When checked, unrecorded areas are highlighted in yellow';Polymer.dom(this.controls_).appendChild(showUnrecordedRegionCheckbox);const showBottlenecksCheckbox=tr.ui.b.createCheckBox(this,'showBottlenecks','layerView.showBottlenecks',true,'Bottlenecks');showBottlenecksCheckbox.title='When checked, scroll bottlenecks are highlighted';Polymer.dom(this.controls_).appendChild(showBottlenecksCheckbox);const showLayoutRectsCheckbox=tr.ui.b.createCheckBox(this,'showLayoutRects','layerView.showLayoutRects',false,'Layout rects');showLayoutRectsCheckbox.title='When checked, shows rects for regions where layout happened';Polymer.dom(this.controls_).appendChild(showLayoutRectsCheckbox);const showContentsCheckbox=tr.ui.b.createCheckBox(this,'showContents','layerView.showContents',true,'Contents');showContentsCheckbox.title='When checked, show the rendered contents inside the layer outlines';Polymer.dom(this.controls_).appendChild(showContentsCheckbox);const showAnimationBoundsCheckbox=tr.ui.b.createCheckBox(this,'showAnimationBounds','layerView.showAnimationBounds',false,'Animation Bounds');showAnimationBoundsCheckbox.title='When checked, show a border around'+' a layer showing the extent of its animation.';Polymer.dom(this.controls_).appendChild(showAnimationBoundsCheckbox);const showInputEventsCheckbox=tr.ui.b.createCheckBox(this,'showInputEvents','layerView.showInputEvents',true,'Input events');showInputEventsCheckbox.title='When checked, input events are '+'displayed as circles.';Polymer.dom(this.controls_).appendChild(showInputEventsCheckbox);this.whatRasterizedLink_=document.createElement('tr-ui-a-analysis-link');this.whatRasterizedLink_.style.position='absolute';this.whatRasterizedLink_.style.bottom='15px';this.whatRasterizedLink_.style.left='10px';this.whatRasterizedLink_.selection=this.getWhatRasterizedEventSet_.bind(this);Polymer.dom(this.quadStackView_).appendChild(this.whatRasterizedLink_);},get layerTreeImpl(){return this.layerTreeImpl_;},set isRenderPassQuads(newValue){this.isRenderPassQuads_=newValue;},set layerTreeImpl(layerTreeImpl){if(this.layerTreeImpl_===layerTreeImpl)return;this.layerTreeImpl_=layerTreeImpl;this.selection=undefined;},get extraHighlightsByLayerId(){return this.extraHighlightsByLayerId_;},set extraHighlightsByLayerId(extraHighlightsByLayerId){this.extraHighlightsByLayerId_=extraHighlightsByLayerId;this.scheduleUpdateContents_();},get showOtherLayers(){return this.showOtherLayers_;},set showOtherLayers(show){this.showOtherLayers_=show;this.updateContents_();},get showAnimationBounds(){return this.showAnimationBounds_;},set showAnimationBounds(show){this.showAnimationBounds_=show;this.updateContents_();},get showInputEvents(){return this.showInputEvents_;},set showInputEvents(show){this.showInputEvents_=show;this.updateContents_();},get showContents(){return this.showContents_;},set showContents(show){this.showContents_=show;this.updateContents_();},get showInvalidations(){return this.showInvalidations_;},set showInvalidations(show){this.showInvalidations_=show;this.updateContents_();},get showUnrecordedRegion(){return this.showUnrecordedRegion_;},set showUnrecordedRegion(show){this.showUnrecordedRegion_=show;this.updateContents_();},get showBottlenecks(){return this.showBottlenecks_;},set showBottlenecks(show){this.showBottlenecks_=show;this.updateContents_();},get showLayoutRects(){return this.showLayoutRects_;},set showLayoutRects(show){this.showLayoutRects_=show;this.updateContents_();},get howToShowTiles(){return this.howToShowTiles_;},set howToShowTiles(val){if(val!=='none'&&val!=='coverage'&&isNaN(parseFloat(val))){throw new Error('howToShowTiles requires "none" or "coverage" or a number');}
+this.howToShowTiles_=val;this.updateContents_();},get tileHeatmapType(){return this.tileHeatmapType_;},set tileHeatmapType(val){this.tileHeatmapType_=val;this.updateContents_();},get selection(){return this.selection_;},set selection(selection){if(this.selection===selection)return;this.selection_=selection;tr.b.dispatchSimpleEvent(this,'selection-change');this.updateContents_();},regenerateContent(){this.updateTilesSelector_();this.updateContents_();},loadDataForImageElement_(image,callback){const imageContent=window.getComputedStyle(image).backgroundImage;if(!imageContent){this.scheduleUpdateContents_();return;}
+image.src=tr.ui.b.extractUrlString(imageContent);image.onload=function(){const canvas=document.createElement('canvas');const ctx=canvas.getContext('2d');canvas.width=image.width;canvas.height=image.height;ctx.drawImage(image,0,0);const imageData=ctx.getImageData(0,0,canvas.width,canvas.height);callback(imageData);};},onQuadStackViewSelectionChange_(e){const selectableQuads=e.quads.filter(function(q){return q.selectionToSetIfClicked!==undefined;});if(selectableQuads.length===0){this.selection=undefined;return;}
selectableQuads.sort(function(x,y){const z=x.stackingGroupId-y.stackingGroupId;if(z!==0)return z;return x.selectionToSetIfClicked.specicifity-
y.selectionToSetIfClicked.specicifity;});const quadToSelect=selectableQuads[selectableQuads.length-1];this.selection=quadToSelect.selectionToSetIfClicked;},scheduleUpdateContents_(){if(this.updateContentsPending_)return;this.updateContentsPending_=true;tr.b.requestAnimationFrameInThisFrameIfPossible(this.updateContents_,this);},updateContents_(){if(!this.layerTreeImpl_){this.quadStackView_.headerText='No tree';this.quadStackView_.quads=[];return;}
const status=this.computePictureLoadingStatus_();if(!status.picturesComplete)return;const lthi=this.layerTreeImpl_.layerTreeHostImpl;const lthiInstance=lthi.objectInstance;const worldViewportRect=tr.b.math.Rect.fromXYWH(0,0,lthi.deviceViewportSize.width,lthi.deviceViewportSize.height);this.quadStackView_.deviceRect=worldViewportRect;if(this.isRenderPassQuads_){this.quadStackView_.quads=this.generateRenderPassQuads();}else{this.quadStackView_.quads=this.generateLayerQuads();}
@@ -7413,9 +7770,10 @@ status.picturesComplete=false;}
return status;},get selectedRenderPass(){if(this.selection){return this.selection.renderPass_;}},get selectedLayer(){if(this.selection){const selectedLayerId=this.selection.associatedLayerId;return this.layerTreeImpl_.findLayerWithId(selectedLayerId);}},get renderPasses(){let renderPasses=this.layerTreeImpl.layerTreeHostImpl.args.frame.renderPasses;if(!this.showOtherLayers){const selectedRenderPass=this.selectedRenderPass;if(selectedRenderPass){renderPasses=[selectedRenderPass];}}
return renderPasses;},get layers(){let layers=this.layerTreeImpl.renderSurfaceLayerList;if(!this.showOtherLayers){const selectedLayer=this.selectedLayer;if(selectedLayer){layers=[selectedLayer];}}
return layers;},appendImageQuads_(quads,layer,layerQuad){for(let ir=0;ir<layer.pictures.length;++ir){const picture=layer.pictures[ir];if(!picture.layerRect)continue;const unitRect=picture.layerRect.asUVRectInside(layer.bounds);const iq=layerQuad.projectUnitRect(unitRect);const pictureData=this.pictureAsImageData_[picture.guid];if(this.showContents&&pictureData&&pictureData.imageData){iq.imageData=pictureData.imageData;iq.borderColor='rgba(0,0,0,0)';}else{iq.imageData=undefined;}
-iq.stackingGroupId=layerQuad.stackingGroupId;quads.push(iq);}},appendAnimationQuads_(quads,layer,layerQuad){if(!layer.animationBoundsRect)return;const rect=layer.animationBoundsRect;const abq=tr.b.math.Quad.fromRect(rect);abq.backgroundColor='rgba(164,191,48,0.5)';abq.borderColor='rgba(205,255,0,0.75)';abq.borderWidth=3.0;abq.stackingGroupId=layerQuad.stackingGroupId;abq.selectionToSetIfClicked=new cc.AnimationRectSelection(layer,rect);quads.push(abq);},appendInvalidationQuads_(quads,layer,layerQuad){if(layer.layerTreeImpl.hasSourceFrameBeenDrawnBefore)return;for(let ir=0;ir<layer.annotatedInvalidation.rects.length;ir++){const rect=layer.annotatedInvalidation.rects[ir];const unitRect=rect.asUVRectInside(layer.bounds);const iq=layerQuad.projectUnitRect(unitRect);iq.backgroundColor='rgba(0, 255, 0, 0.1)';if(rect.reason==='renderer insertion'){iq.backgroundColor='rgba(0, 255, 128, 0.1)';}
-iq.borderColor='rgba(0, 255, 0, 1)';iq.stackingGroupId=layerQuad.stackingGroupId;iq.selectionToSetIfClicked=new cc.LayerRectSelection(layer,'Invalidation rect ('+rect.reason+')',rect,rect);quads.push(iq);}
-if(layer.annotatedInvalidation.rects.length===0){for(let ir=0;ir<layer.invalidation.rects.length;ir++){const rect=layer.invalidation.rects[ir];const unitRect=rect.asUVRectInside(layer.bounds);const iq=layerQuad.projectUnitRect(unitRect);iq.backgroundColor='rgba(0, 255, 0, 0.1)';iq.borderColor='rgba(0, 255, 0, 1)';iq.stackingGroupId=layerQuad.stackingGroupId;iq.selectionToSetIfClicked=new cc.LayerRectSelection(layer,'Invalidation rect',rect,rect);quads.push(iq);}}},appendUnrecordedRegionQuads_(quads,layer,layerQuad){for(let ir=0;ir<layer.unrecordedRegion.rects.length;ir++){const rect=layer.unrecordedRegion.rects[ir];const unitRect=rect.asUVRectInside(layer.bounds);const iq=layerQuad.projectUnitRect(unitRect);iq.backgroundColor='rgba(240, 230, 140, 0.3)';iq.borderColor='rgba(240, 230, 140, 1)';iq.stackingGroupId=layerQuad.stackingGroupId;iq.selectionToSetIfClicked=new cc.LayerRectSelection(layer,'Unrecorded area',rect,rect);quads.push(iq);}},appendBottleneckQuads_(quads,layer,layerQuad,stackingGroupId){function processRegion(region,label,borderColor){const backgroundColor=borderColor.clone();backgroundColor.a=0.4*(borderColor.a||1.0);if(!region||!region.rects)return;for(let ir=0;ir<region.rects.length;ir++){const rect=region.rects[ir];const unitRect=rect.asUVRectInside(layer.bounds);const iq=layerQuad.projectUnitRect(unitRect);iq.backgroundColor=backgroundColor.toString();iq.borderColor=borderColor.toString();iq.borderWidth=4.0;iq.stackingGroupId=stackingGroupId;iq.selectionToSetIfClicked=new cc.LayerRectSelection(layer,label,rect,rect);quads.push(iq);}}
+iq.stackingGroupId=layerQuad.stackingGroupId;quads.push(iq);}},appendAnimationQuads_(quads,layer,layerQuad){if(!layer.animationBoundsRect)return;const rect=layer.animationBoundsRect;const abq=tr.b.math.Quad.fromRect(rect);abq.backgroundColor='rgba(164,191,48,0.5)';abq.borderColor='rgba(205,255,0,0.75)';abq.borderWidth=3.0;abq.stackingGroupId=layerQuad.stackingGroupId;abq.selectionToSetIfClicked=new cc.AnimationRectSelection(layer,rect);quads.push(abq);},appendInvalidationQuads_(quads,layer,layerQuad){if(layer.layerTreeImpl.hasSourceFrameBeenDrawnBefore)return;for(const rect of layer.invalidation.rects){const unitRect=rect.asUVRectInside(layer.bounds);const iq=layerQuad.projectUnitRect(unitRect);iq.backgroundColor='rgba(0, 255, 0, 0.1)';if(rect.reason==='appeared'){iq.backgroundColor='rgba(0, 255, 128, 0.1)';}
+iq.borderColor='rgba(0, 255, 0, 1)';iq.stackingGroupId=layerQuad.stackingGroupId;let message='Invalidation rect';if(rect.reason){message+=' ('+rect.reason+')';}
+if(rect.client){message+=' for '+rect.client;}
+iq.selectionToSetIfClicked=new cc.LayerRectSelection(layer,message,rect,rect);quads.push(iq);}},appendUnrecordedRegionQuads_(quads,layer,layerQuad){for(let ir=0;ir<layer.unrecordedRegion.rects.length;ir++){const rect=layer.unrecordedRegion.rects[ir];const unitRect=rect.asUVRectInside(layer.bounds);const iq=layerQuad.projectUnitRect(unitRect);iq.backgroundColor='rgba(240, 230, 140, 0.3)';iq.borderColor='rgba(240, 230, 140, 1)';iq.stackingGroupId=layerQuad.stackingGroupId;iq.selectionToSetIfClicked=new cc.LayerRectSelection(layer,'Unrecorded area',rect,rect);quads.push(iq);}},appendBottleneckQuads_(quads,layer,layerQuad,stackingGroupId){function processRegion(region,label,borderColor){const backgroundColor=borderColor.clone();backgroundColor.a=0.4*(borderColor.a||1.0);if(!region||!region.rects)return;for(let ir=0;ir<region.rects.length;ir++){const rect=region.rects[ir];const unitRect=rect.asUVRectInside(layer.bounds);const iq=layerQuad.projectUnitRect(unitRect);iq.backgroundColor=backgroundColor.toString();iq.borderColor=borderColor.toString();iq.borderWidth=4.0;iq.stackingGroupId=stackingGroupId;iq.selectionToSetIfClicked=new cc.LayerRectSelection(layer,label,rect,rect);quads.push(iq);}}
processRegion(layer.touchEventHandlerRegion,'Touch listener',tr.b.Color.fromString('rgb(228, 226, 27)'));processRegion(layer.wheelEventHandlerRegion,'Wheel listener',tr.b.Color.fromString('rgb(176, 205, 29)'));processRegion(layer.nonFastScrollableRegion,'Repaints on scroll',tr.b.Color.fromString('rgb(213, 134, 32)'));},appendTileCoverageRectQuads_(quads,layer,layerQuad,heatmapType){if(!layer.tileCoverageRects)return;const tiles=[];for(let ct=0;ct<layer.tileCoverageRects.length;++ct){const tile=layer.tileCoverageRects[ct].tile;if(tile!==undefined)tiles.push(tile);}
const lthi=this.layerTreeImpl_.layerTreeHostImpl;const minMax=this.getMinMaxForHeatmap_(lthi.activeTiles,heatmapType);const heatmapResult=this.computeHeatmapColors_(tiles,minMax,heatmapType);let heatIndex=0;for(let ct=0;ct<layer.tileCoverageRects.length;++ct){let rect=layer.tileCoverageRects[ct].geometryRect;rect=rect.scale(1.0/layer.geometryContentsScale);const tile=layer.tileCoverageRects[ct].tile;const unitRect=rect.asUVRectInside(layer.bounds);const quad=layerQuad.projectUnitRect(unitRect);quad.backgroundColor='rgba(0, 0, 0, 0)';quad.stackingGroupId=layerQuad.stackingGroupId;let type=tr.e.cc.tileTypes.missing;if(tile){type=tile.getTypeForLayer(layer);quad.backgroundColor=heatmapResult[heatIndex].color;++heatIndex;}
quad.borderColor=tr.e.cc.tileBorder[type].color;quad.borderWidth=tr.e.cc.tileBorder[type].width;let label;if(tile){label='coverageRect';}else{label='checkerboard coverageRect';}
@@ -7442,14 +7800,15 @@ let highlights;highlights=extraHighlightsByLayerId[layer.layerId];if(highlights)
highlights=selectionHighlightsByLayerId[layer.layerId];if(highlights){this.appendHighlightQuadsForLayer_(quads,layer,layerQuad,highlights);}}
this.layerTreeImpl.iterLayers(function(layer,depth,isMask,isReplica){if(!this.showOtherLayers&&this.selectedLayer!==layer)return;if(alreadyVisitedLayerIds[layer.layerId])return;const layerQuad=layer.layerQuad;const stackingGroupId=nextStackingGroupId++;if(this.showBottlenecks){this.appendBottleneckQuads_(quads,layer,layerQuad,stackingGroupId);}},this);const tracedInputLatencies=this.layerTreeImpl.tracedInputLatencies;if(this.showInputEvents&&tracedInputLatencies){for(let i=0;i<tracedInputLatencies.length;i++){const coordinatesArray=tracedInputLatencies[i].args.data.coordinates;for(let j=0;j<coordinatesArray.length;j++){const inputQuad=tr.b.math.Quad.fromXYWH(coordinatesArray[j].x-25,coordinatesArray[j].y-25,50,50);inputQuad.borderColor='rgba(0, 0, 0, 0)';inputQuad.imageData=this.inputEventImageData_;quads.push(inputQuad);}}}
return quads;},updateInfoBar_(infoBarMessages){if(infoBarMessages.length){this.infoBar_.removeAllButtons();this.infoBar_.message='Some problems were encountered...';this.infoBar_.addButton('More info...',function(e){const overlay=new tr.ui.b.Overlay();Polymer.dom(overlay).textContent='';infoBarMessages.forEach(function(message){const title=document.createElement('h3');Polymer.dom(title).textContent=message.header;const details=document.createElement('div');Polymer.dom(details).textContent=message.details;Polymer.dom(overlay).appendChild(title);Polymer.dom(overlay).appendChild(details);});overlay.visible=true;e.stopPropagation();return false;});this.infoBar_.visible=true;}else{this.infoBar_.removeAllButtons();this.infoBar_.message='';this.infoBar_.visible=false;}},getWhatRasterized_(){const lthi=this.layerTreeImpl_.layerTreeHostImpl;const renderProcess=lthi.objectInstance.parent;const tasks=[];for(const event of renderProcess.getDescendantEvents()){if(!(event instanceof tr.model.Slice))continue;const tile=tr.e.cc.getTileFromRasterTaskSlice(event);if(tile===undefined)continue;if(tile.containingSnapshot===lthi){tasks.push(event);}}
-return tasks;},updateWhatRasterizedLinkState_(){const tasks=this.getWhatRasterized_();if(tasks.length){Polymer.dom(this.whatRasterizedLink_).textContent=tasks.length+' raster tasks';this.whatRasterizedLink_.style.display='';}else{Polymer.dom(this.whatRasterizedLink_).textContent='';this.whatRasterizedLink_.style.display='none';}},onWhatRasterizedLinkClicked_(){const tasks=this.getWhatRasterized_();const event=new tr.model.RequestSelectionChangeEvent();event.selection=new tr.model.EventSet(tasks);this.dispatchEvent(event);}};return{LayerTreeQuadStackView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const constants=tr.e.cc.constants;const LayerView=tr.ui.b.define('tr-ui-e-chrome-cc-layer-view');LayerView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.flexDirection='column';this.style.display='flex';this.style.left=0;this.style.position='relative';this.style.top=0;this.layerTreeQuadStackView_=new tr.ui.e.chrome.cc.LayerTreeQuadStackView();this.dragBar_=document.createElement('tr-ui-b-drag-handle');this.analysisEl_=document.createElement('tr-ui-e-chrome-cc-layer-view-analysis');this.analysisEl_.style.height='150px';this.analysisEl_.style.overflowY='auto';this.analysisEl_.addEventListener('requestSelectionChange',this.onRequestSelectionChangeFromAnalysisEl_.bind(this));this.dragBar_.target=this.analysisEl_;Polymer.dom(this).appendChild(this.layerTreeQuadStackView_);Polymer.dom(this).appendChild(this.dragBar_);Polymer.dom(this).appendChild(this.analysisEl_);this.layerTreeQuadStackView_.addEventListener('selection-change',function(){this.layerTreeQuadStackViewSelectionChanged_();}.bind(this));this.layerTreeQuadStackViewSelectionChanged_();},get layerTreeImpl(){return this.layerTreeQuadStackView_.layerTreeImpl;},set layerTreeImpl(newValue){return this.layerTreeQuadStackView_.layerTreeImpl=newValue;},set isRenderPassQuads(newValue){return this.layerTreeQuadStackView_.isRenderPassQuads=newValue;},get selection(){return this.layerTreeQuadStackView_.selection;},set selection(newValue){this.layerTreeQuadStackView_.selection=newValue;},regenerateContent(){this.layerTreeQuadStackView_.regenerateContent();},layerTreeQuadStackViewSelectionChanged_(){const selection=this.layerTreeQuadStackView_.selection;if(selection){this.dragBar_.style.display='';this.analysisEl_.style.display='';Polymer.dom(this.analysisEl_).textContent='';const layer=selection.layer;if(layer&&layer.args&&layer.args.pictures){Polymer.dom(this.analysisEl_).appendChild(this.createPictureBtn_(layer.args.pictures));}
+return tasks;},updateWhatRasterizedLinkState_(){const tasks=this.getWhatRasterized_();if(tasks.length){Polymer.dom(this.whatRasterizedLink_).textContent=tasks.length+' raster tasks';this.whatRasterizedLink_.style.display='';}else{Polymer.dom(this.whatRasterizedLink_).textContent='';this.whatRasterizedLink_.style.display='none';}},getWhatRasterizedEventSet_(){return new tr.model.EventSet(this.getWhatRasterized_());}};return{LayerTreeQuadStackView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const constants=tr.e.cc.constants;const LayerView=tr.ui.b.define('tr-ui-e-chrome-cc-layer-view');LayerView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.flexDirection='column';this.style.display='flex';this.layerTreeQuadStackView_=new tr.ui.e.chrome.cc.LayerTreeQuadStackView();this.dragBar_=document.createElement('tr-ui-b-drag-handle');this.analysisEl_=document.createElement('tr-ui-e-chrome-cc-layer-view-analysis');this.analysisEl_.style.flexGrow=0;this.analysisEl_.style.flexShrink=0;this.analysisEl_.style.flexBasis='auto';this.analysisEl_.style.height='150px';this.analysisEl_.style.overflow='auto';this.analysisEl_.addEventListener('requestSelectionChange',this.onRequestSelectionChangeFromAnalysisEl_.bind(this));this.dragBar_.target=this.analysisEl_;Polymer.dom(this).appendChild(this.layerTreeQuadStackView_);Polymer.dom(this).appendChild(this.dragBar_);Polymer.dom(this).appendChild(this.analysisEl_);this.layerTreeQuadStackView_.addEventListener('selection-change',function(){this.layerTreeQuadStackViewSelectionChanged_();}.bind(this));this.layerTreeQuadStackViewSelectionChanged_();},get layerTreeImpl(){return this.layerTreeQuadStackView_.layerTreeImpl;},set layerTreeImpl(newValue){return this.layerTreeQuadStackView_.layerTreeImpl=newValue;},set isRenderPassQuads(newValue){return this.layerTreeQuadStackView_.isRenderPassQuads=newValue;},get selection(){return this.layerTreeQuadStackView_.selection;},set selection(newValue){this.layerTreeQuadStackView_.selection=newValue;},regenerateContent(){this.layerTreeQuadStackView_.regenerateContent();},layerTreeQuadStackViewSelectionChanged_(){const selection=this.layerTreeQuadStackView_.selection;if(selection){this.dragBar_.style.display='';this.analysisEl_.style.display='';Polymer.dom(this.analysisEl_).textContent='';const layer=selection.layer;if(tr.e.cc.PictureSnapshot.CanDebugPicture()&&layer&&layer.args&&layer.args.pictures&&layer.args.pictures.length){Polymer.dom(this.analysisEl_).appendChild(this.createPictureBtn_(layer.args.pictures));}
const analysis=selection.createAnalysis();Polymer.dom(this.analysisEl_).appendChild(analysis);for(const child of this.analysisEl_.children){child.style.userSelect='text';}}else{this.dragBar_.style.display='none';this.analysisEl_.style.display='none';const analysis=Polymer.dom(this.analysisEl_).firstChild;if(analysis){Polymer.dom(this.analysisEl_).removeChild(analysis);}
this.layerTreeQuadStackView_.style.height=window.getComputedStyle(this).height;}
tr.b.dispatchSimpleEvent(this,'selection-change');},createPictureBtn_(pictures){if(!(pictures instanceof Array)){pictures=[pictures];}
const link=document.createElement('tr-ui-a-analysis-link');link.selection=function(){const layeredPicture=new tr.e.cc.LayeredPicture(pictures);const snapshot=new tr.e.cc.PictureSnapshot(layeredPicture);snapshot.picture=layeredPicture;const selection=new tr.model.EventSet();selection.push(snapshot);return selection;};Polymer.dom(link).textContent='View in Picture Debugger';return link;},onRequestSelectionChangeFromAnalysisEl_(e){if(!(e.selection instanceof tr.ui.e.chrome.cc.Selection)){return;}
-e.stopPropagation();this.selection=e.selection;},get extraHighlightsByLayerId(){return this.layerTreeQuadStackView_.extraHighlightsByLayerId;},set extraHighlightsByLayerId(extraHighlightsByLayerId){this.layerTreeQuadStackView_.extraHighlightsByLayerId=extraHighlightsByLayerId;}};return{LayerView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const LayerTreeHostImplSnapshotView=tr.ui.b.define('tr-ui-e-chrome-cc-layer-tree-host-impl-snapshot-view',tr.ui.analysis.ObjectSnapshotView);LayerTreeHostImplSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){Polymer.dom(this).classList.add('tr-ui-e-chrome-cc-lthi-s-view');this.style.display='flex';this.style.flexDirection='row';this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='auto';this.selection_=undefined;this.layerPicker_=new tr.ui.e.chrome.cc.LayerPicker();this.layerPicker_.style.flexGrow=1;this.layerPicker_.style.flexShrink=1;this.layerPicker_.style.flexBasis='auto';this.layerPicker_.addEventListener('selection-change',this.onLayerPickerSelectionChanged_.bind(this));this.layerView_=new tr.ui.e.chrome.cc.LayerView();this.layerView_.addEventListener('selection-change',this.onLayerViewSelectionChanged_.bind(this));this.dragHandle_=document.createElement('tr-ui-b-drag-handle');this.dragHandle_.style.flexGrow=0;this.dragHandle_.style.flexShrink=0;this.dragHandle_.style.flexBasis='auto';this.dragHandle_.horizontal=false;this.dragHandle_.target=this.layerView_;Polymer.dom(this).appendChild(this.layerPicker_);Polymer.dom(this).appendChild(this.dragHandle_);Polymer.dom(this).appendChild(this.layerView_);this.onLayerViewSelectionChanged_();this.onLayerPickerSelectionChanged_();},get objectSnapshot(){return this.objectSnapshot_;},set objectSnapshot(objectSnapshot){this.objectSnapshot_=objectSnapshot;const lthi=this.objectSnapshot;let layerTreeImpl;if(lthi){layerTreeImpl=lthi.getTree(this.layerPicker_.whichTree);}
-this.layerPicker_.lthiSnapshot=lthi;this.layerView_.layerTreeImpl=layerTreeImpl;this.layerView_.regenerateContent();if(!this.selection_)return;this.selection=this.selection_.findEquivalent(lthi);},get selection(){return this.selection_;},set selection(selection){if(this.selection_===selection)return;this.selection_=selection;this.layerPicker_.selection=selection;this.layerView_.selection=selection;tr.b.dispatchSimpleEvent(this,'cc-selection-change');},onLayerPickerSelectionChanged_(){this.selection_=this.layerPicker_.selection;this.layerView_.selection=this.selection;this.layerView_.layerTreeImpl=this.layerPicker_.layerTreeImpl;this.layerView_.isRenderPassQuads=this.layerPicker_.isRenderPassQuads;this.layerView_.regenerateContent();tr.b.dispatchSimpleEvent(this,'cc-selection-change');},onLayerViewSelectionChanged_(){this.selection_=this.layerView_.selection;this.layerPicker_.selection=this.selection;tr.b.dispatchSimpleEvent(this,'cc-selection-change');},get extraHighlightsByLayerId(){return this.layerView_.extraHighlightsByLayerId;},set extraHighlightsByLayerId(extraHighlightsByLayerId){this.layerView_.extraHighlightsByLayerId=extraHighlightsByLayerId;}};tr.ui.analysis.ObjectSnapshotView.register(LayerTreeHostImplSnapshotView,{typeName:'cc::LayerTreeHostImpl'});return{LayerTreeHostImplSnapshotView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const OPS_TIMING_ITERATIONS=3;const CHART_PADDING_LEFT=65;const CHART_PADDING_RIGHT=40;const AXIS_PADDING_LEFT=60;const AXIS_PADDING_RIGHT=35;const AXIS_PADDING_TOP=25;const AXIS_PADDING_BOTTOM=45;const AXIS_LABEL_PADDING=5;const AXIS_TICK_SIZE=10;const LABEL_PADDING=5;const LABEL_INTERLEAVE_OFFSET=15;const BAR_PADDING=5;const VERTICAL_TICKS=5;const HUE_CHAR_CODE_ADJUSTMENT=5.7;const PictureOpsChartSummaryView=tr.ui.b.define('tr-ui-e-chrome-cc-picture-ops-chart-summary-view');PictureOpsChartSummaryView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.flexGrow=0;this.style.flexShrink=0;this.style.flexBasis='auto';this.style.fontSize=0;this.style.margin=0;this.style.minHeight='200px';this.style.minWidth='200px';this.style.overflow='hidden';this.style.padding=0;this.picture_=undefined;this.pictureDataProcessed_=false;this.chartScale_=window.devicePixelRatio;this.chart_=document.createElement('canvas');this.chartCtx_=this.chart_.getContext('2d');Polymer.dom(this).appendChild(this.chart_);this.opsTimingData_=[];this.chartWidth_=0;this.chartHeight_=0;this.requiresRedraw_=true;this.currentBarMouseOverTarget_=null;this.chart_.addEventListener('mousemove',this.onMouseMove_.bind(this));},get requiresRedraw(){return this.requiresRedraw_;},set requiresRedraw(requiresRedraw){this.requiresRedraw_=requiresRedraw;},get picture(){return this.picture_;},set picture(picture){this.picture_=picture;this.pictureDataProcessed_=false;if(Polymer.dom(this).classList.contains('hidden'))return;this.processPictureData_();this.requiresRedraw=true;this.updateChartContents();},hide(){Polymer.dom(this).classList.add('hidden');this.style.display='none';},show(){Polymer.dom(this).classList.remove('hidden');this.style.display='';if(this.pictureDataProcessed_)return;this.processPictureData_();this.requiresRedraw=true;this.updateChartContents();},onMouseMove_(e){const lastBarMouseOverTarget=this.currentBarMouseOverTarget_;this.currentBarMouseOverTarget_=null;const x=e.offsetX;const y=e.offsetY;const chartLeft=CHART_PADDING_LEFT;const chartRight=this.chartWidth_-CHART_PADDING_RIGHT;const chartTop=AXIS_PADDING_TOP;const chartBottom=this.chartHeight_-AXIS_PADDING_BOTTOM;const chartInnerWidth=chartRight-chartLeft;if(x>chartLeft&&x<chartRight&&y>chartTop&&y<chartBottom){this.currentBarMouseOverTarget_=Math.floor((x-chartLeft)/chartInnerWidth*this.opsTimingData_.length);this.currentBarMouseOverTarget_=tr.b.math.clamp(this.currentBarMouseOverTarget_,0,this.opsTimingData_.length-1);}
-if(this.currentBarMouseOverTarget_===lastBarMouseOverTarget)return;this.drawChartContents_();},updateChartContents(){if(this.requiresRedraw){this.updateChartDimensions_();}
+e.stopPropagation();this.selection=e.selection;},get extraHighlightsByLayerId(){return this.layerTreeQuadStackView_.extraHighlightsByLayerId;},set extraHighlightsByLayerId(extraHighlightsByLayerId){this.layerTreeQuadStackView_.extraHighlightsByLayerId=extraHighlightsByLayerId;}};return{LayerView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const LayerTreeHostImplSnapshotView=tr.ui.b.define('tr-ui-e-chrome-cc-layer-tree-host-impl-snapshot-view',tr.ui.analysis.ObjectSnapshotView);LayerTreeHostImplSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){Polymer.dom(this).classList.add('tr-ui-e-chrome-cc-lthi-s-view');this.style.display='flex';this.style.flexDirection='row';this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='auto';this.style.minWidth=0;this.selection_=undefined;this.layerPicker_=new tr.ui.e.chrome.cc.LayerPicker();this.layerPicker_.style.flexGrow=0;this.layerPicker_.style.flexShrink=0;this.layerPicker_.style.flexBasis='auto';this.layerPicker_.style.minWidth='200px';this.layerPicker_.addEventListener('selection-change',this.onLayerPickerSelectionChanged_.bind(this));this.layerView_=new tr.ui.e.chrome.cc.LayerView();this.layerView_.addEventListener('selection-change',this.onLayerViewSelectionChanged_.bind(this));this.layerView_.style.flexGrow=1;this.layerView_.style.flexShrink=1;this.layerView_.style.flexBasis='auto';this.layerView_.style.minWidth=0;this.dragHandle_=document.createElement('tr-ui-b-drag-handle');this.dragHandle_.style.flexGrow=0;this.dragHandle_.style.flexShrink=0;this.dragHandle_.style.flexBasis='auto';this.dragHandle_.horizontal=false;this.dragHandle_.target=this.layerPicker_;Polymer.dom(this).appendChild(this.layerPicker_);Polymer.dom(this).appendChild(this.dragHandle_);Polymer.dom(this).appendChild(this.layerView_);this.onLayerViewSelectionChanged_();this.onLayerPickerSelectionChanged_();},get objectSnapshot(){return this.objectSnapshot_;},set objectSnapshot(objectSnapshot){this.objectSnapshot_=objectSnapshot;const lthi=this.objectSnapshot;let layerTreeImpl;if(lthi){layerTreeImpl=lthi.getTree(this.layerPicker_.whichTree);}
+this.layerPicker_.lthiSnapshot=lthi;this.layerView_.layerTreeImpl=layerTreeImpl;this.layerView_.regenerateContent();if(!this.selection_)return;this.selection=this.selection_.findEquivalent(lthi);},get selection(){return this.selection_;},set selection(selection){if(this.selection_===selection)return;this.selection_=selection;this.layerPicker_.selection=selection;this.layerView_.selection=selection;tr.b.dispatchSimpleEvent(this,'cc-selection-change');},onLayerPickerSelectionChanged_(){this.selection_=this.layerPicker_.selection;this.layerView_.selection=this.selection;this.layerView_.layerTreeImpl=this.layerPicker_.layerTreeImpl;this.layerView_.isRenderPassQuads=this.layerPicker_.isRenderPassQuads;this.layerView_.regenerateContent();tr.b.dispatchSimpleEvent(this,'cc-selection-change');},onLayerViewSelectionChanged_(){this.selection_=this.layerView_.selection;this.layerPicker_.selection=this.selection;tr.b.dispatchSimpleEvent(this,'cc-selection-change');},get extraHighlightsByLayerId(){return this.layerView_.extraHighlightsByLayerId;},set extraHighlightsByLayerId(extraHighlightsByLayerId){this.layerView_.extraHighlightsByLayerId=extraHighlightsByLayerId;}};tr.ui.analysis.ObjectSnapshotView.register(LayerTreeHostImplSnapshotView,{typeName:'cc::LayerTreeHostImpl'});return{LayerTreeHostImplSnapshotView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const OPS_TIMING_ITERATIONS=3;const CHART_PADDING_LEFT=65;const CHART_PADDING_RIGHT=40;const AXIS_PADDING_LEFT=60;const AXIS_PADDING_RIGHT=35;const AXIS_PADDING_TOP=25;const AXIS_PADDING_BOTTOM=45;const AXIS_LABEL_PADDING=5;const AXIS_TICK_SIZE=10;const LABEL_PADDING=5;const LABEL_INTERLEAVE_OFFSET=15;const BAR_PADDING=5;const VERTICAL_TICKS=5;const HUE_CHAR_CODE_ADJUSTMENT=5.7;const PictureOpsChartSummaryView=tr.ui.b.define('tr-ui-e-chrome-cc-picture-ops-chart-summary-view');PictureOpsChartSummaryView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.flexGrow=0;this.style.flexShrink=0;this.style.flexBasis='auto';this.style.fontSize=0;this.style.margin=0;this.style.minHeight='200px';this.style.minWidth='200px';this.style.overflow='hidden';this.style.padding=0;this.picture_=undefined;this.pictureDataProcessed_=false;this.chartScale_=window.devicePixelRatio;this.chart_=document.createElement('canvas');this.chartCtx_=this.chart_.getContext('2d');Polymer.dom(this).appendChild(this.chart_);this.opsTimingData_=[];this.chartWidth_=0;this.chartHeight_=0;this.requiresRedraw_=true;this.currentBarMouseOverTarget_=null;this.chart_.addEventListener('mousemove',this.onMouseMove_.bind(this));new ResizeObserver(this.onResize_.bind(this)).observe(this);},get requiresRedraw(){return this.requiresRedraw_;},set requiresRedraw(requiresRedraw){this.requiresRedraw_=requiresRedraw;},get picture(){return this.picture_;},set picture(picture){this.picture_=picture;this.pictureDataProcessed_=false;if(Polymer.dom(this).classList.contains('hidden'))return;this.processPictureData_();this.requiresRedraw=true;this.updateChartContents();},hide(){Polymer.dom(this).classList.add('hidden');this.style.display='none';},show(){Polymer.dom(this).classList.remove('hidden');this.style.display='';if(!this.pictureDataProcessed_){this.processPictureData_();}
+this.requiresRedraw=true;this.updateChartContents();},onMouseMove_(e){const lastBarMouseOverTarget=this.currentBarMouseOverTarget_;this.currentBarMouseOverTarget_=null;const x=e.offsetX;const y=e.offsetY;const chartLeft=CHART_PADDING_LEFT;const chartRight=this.chartWidth_-CHART_PADDING_RIGHT;const chartTop=AXIS_PADDING_TOP;const chartBottom=this.chartHeight_-AXIS_PADDING_BOTTOM;const chartInnerWidth=chartRight-chartLeft;if(x>chartLeft&&x<chartRight&&y>chartTop&&y<chartBottom){this.currentBarMouseOverTarget_=Math.floor((x-chartLeft)/chartInnerWidth*this.opsTimingData_.length);this.currentBarMouseOverTarget_=tr.b.math.clamp(this.currentBarMouseOverTarget_,0,this.opsTimingData_.length-1);}
+if(this.currentBarMouseOverTarget_===lastBarMouseOverTarget)return;this.drawChartContents_();},onResize_(){this.requiresRedraw=true;this.updateChartContents();},updateChartContents(){if(this.requiresRedraw){this.updateChartDimensions_();}
this.drawChartContents_();},updateChartDimensions_(){this.chartWidth_=this.offsetWidth;this.chartHeight_=this.offsetHeight;this.chart_.width=this.chartWidth_*this.chartScale_;this.chart_.height=this.chartHeight_*this.chartScale_;this.chart_.style.width=this.chartWidth_+'px';this.chart_.style.height=this.chartHeight_+'px';this.chartCtx_.scale(this.chartScale_,this.chartScale_);},processPictureData_(){this.resetOpsTimingData_();this.pictureDataProcessed_=true;if(!this.picture_)return;let ops=this.picture_.getOps();if(!ops)return;ops=this.picture_.tagOpsWithTimings(ops);if(ops[0].cmd_time===undefined)return;this.collapseOpsToTimingBuckets_(ops);},drawChartContents_(){this.clearChartContents_();if(this.opsTimingData_.length===0){this.showNoTimingDataMessage_();return;}
this.drawChartAxes_();this.drawBars_();this.drawLineAtBottomOfChart_();if(this.currentBarMouseOverTarget_===null)return;this.drawTooltip_();},drawLineAtBottomOfChart_(){this.chartCtx_.strokeStyle='#AAA';this.chartCtx_.moveTo(0,this.chartHeight_-0.5);this.chartCtx_.lineTo(this.chartWidth_,this.chartHeight_-0.5);this.chartCtx_.stroke();},drawTooltip_(){const tooltipData=this.opsTimingData_[this.currentBarMouseOverTarget_];const tooltipTitle=tooltipData.cmd_string;const tooltipTime=tooltipData.cmd_time.toFixed(4);const tooltipWidth=110;const tooltipHeight=40;const chartInnerWidth=this.chartWidth_-CHART_PADDING_RIGHT-
CHART_PADDING_LEFT;const barWidth=chartInnerWidth/this.opsTimingData_.length;const tooltipOffset=Math.round((tooltipWidth-barWidth)*0.5);const left=CHART_PADDING_LEFT+this.currentBarMouseOverTarget_*barWidth-tooltipOffset;const top=Math.round((this.chartHeight_-tooltipHeight)*0.5);this.chartCtx_.save();this.chartCtx_.shadowOffsetX=0;this.chartCtx_.shadowOffsetY=5;this.chartCtx_.shadowBlur=4;this.chartCtx_.shadowColor='rgba(0,0,0,0.4)';this.chartCtx_.strokeStyle='#888';this.chartCtx_.fillStyle='#EEE';this.chartCtx_.fillRect(left,top,tooltipWidth,tooltipHeight);this.chartCtx_.shadowColor='transparent';this.chartCtx_.translate(0.5,0.5);this.chartCtx_.strokeRect(left,top,tooltipWidth,tooltipHeight);this.chartCtx_.restore();this.chartCtx_.fillStyle='#222';this.chartCtx_.textBaseline='top';this.chartCtx_.font='800 12px Arial';this.chartCtx_.fillText(tooltipTitle,left+8,top+8);this.chartCtx_.fillStyle='#555';this.chartCtx_.textBaseline='top';this.chartCtx_.font='400 italic 10px Arial';this.chartCtx_.fillText('Total: '+tooltipTime+'ms',left+8,top+22);},drawBars_(){const len=this.opsTimingData_.length;const max=this.opsTimingData_[0].cmd_time;const min=this.opsTimingData_[len-1].cmd_time;const width=this.chartWidth_-CHART_PADDING_LEFT-CHART_PADDING_RIGHT;const height=this.chartHeight_-AXIS_PADDING_TOP-AXIS_PADDING_BOTTOM;const barWidth=Math.floor(width/len);let opData;let opTiming;let opHeight;let opLabel;let barLeft;for(let b=0;b<len;b++){opData=this.opsTimingData_[b];opTiming=opData.cmd_time/max;opHeight=Math.round(Math.max(1,opTiming*height));opLabel=opData.cmd_string;barLeft=CHART_PADDING_LEFT+b*barWidth;this.chartCtx_.fillStyle=this.getOpColor_(opLabel);this.chartCtx_.fillRect(barLeft+BAR_PADDING,AXIS_PADDING_TOP+
@@ -7458,11 +7817,11 @@ CHART_PADDING_RIGHT;const barWidth=Math.floor(totalBarWidth/len);const tickYInte
this.chartCtx_.stroke();this.chartCtx_.restore();this.chartCtx_.save();this.chartCtx_.translate(CHART_PADDING_LEFT+Math.round(barWidth*0.5),AXIS_PADDING_TOP+height+LABEL_PADDING);this.chartCtx_.font='10px Arial';this.chartCtx_.textAlign='center';this.chartCtx_.textBaseline='top';let labelTickLeft;let labelTickBottom;for(let l=0;l<len;l++){labelTickLeft=Math.round(l*barWidth);labelTickBottom=l%2*LABEL_INTERLEAVE_OFFSET;this.chartCtx_.save();this.chartCtx_.moveTo(labelTickLeft,-LABEL_PADDING);this.chartCtx_.lineTo(labelTickLeft,labelTickBottom);this.chartCtx_.stroke();this.chartCtx_.restore();this.chartCtx_.fillText(this.opsTimingData_[l].cmd_string,labelTickLeft,labelTickBottom);}
this.chartCtx_.restore();this.chartCtx_.restore();},clearChartContents_(){this.chartCtx_.clearRect(0,0,this.chartWidth_,this.chartHeight_);},showNoTimingDataMessage_(){this.chartCtx_.font='800 italic 14px Arial';this.chartCtx_.fillStyle='#333';this.chartCtx_.textAlign='center';this.chartCtx_.textBaseline='middle';this.chartCtx_.fillText('No timing data available.',this.chartWidth_*0.5,this.chartHeight_*0.5);},collapseOpsToTimingBuckets_(ops){const opsTimingDataIndexHash_={};const timingData=this.opsTimingData_;let op;let opIndex;for(let i=0;i<ops.length;i++){op=ops[i];if(op.cmd_time===undefined)continue;opIndex=opsTimingDataIndexHash_[op.cmd_string]||null;if(opIndex===null){timingData.push({cmd_time:0,cmd_string:op.cmd_string});opIndex=timingData.length-1;opsTimingDataIndexHash_[op.cmd_string]=opIndex;}
timingData[opIndex].cmd_time+=op.cmd_time;}
-timingData.sort(this.sortTimingBucketsByOpTimeDescending_);this.collapseTimingBucketsToOther_(4);},collapseTimingBucketsToOther_(count){const timingData=this.opsTimingData_;const otherSource=timingData.splice(count,timingData.length-count);let otherDestination=null;if(!otherSource.length)return;timingData.push({cmd_time:0,cmd_string:'Other'});otherDestination=timingData[timingData.length-1];for(let i=0;i<otherSource.length;i++){otherDestination.cmd_time+=otherSource[i].cmd_time;}},sortTimingBucketsByOpTimeDescending_(a,b){return b.cmd_time-a.cmd_time;},resetOpsTimingData_(){this.opsTimingData_.length=0;}};return{PictureOpsChartSummaryView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const BAR_PADDING=1;const BAR_WIDTH=5;const CHART_PADDING_LEFT=65;const CHART_PADDING_RIGHT=30;const CHART_PADDING_BOTTOM=35;const CHART_PADDING_TOP=20;const AXIS_PADDING_LEFT=55;const AXIS_PADDING_RIGHT=30;const AXIS_PADDING_BOTTOM=35;const AXIS_PADDING_TOP=20;const AXIS_TICK_SIZE=5;const AXIS_LABEL_PADDING=5;const VERTICAL_TICKS=5;const HUE_CHAR_CODE_ADJUSTMENT=5.7;const PictureOpsChartView=tr.ui.b.define('tr-ui-e-chrome-cc-picture-ops-chart-view');PictureOpsChartView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.display='block';this.style.height='180px';this.style.margin=0;this.style.padding=0;this.style.position='relative';this.picture_=undefined;this.pictureOps_=undefined;this.opCosts_=undefined;this.chartScale_=window.devicePixelRatio;this.chart_=document.createElement('canvas');this.chartCtx_=this.chart_.getContext('2d');Polymer.dom(this).appendChild(this.chart_);this.selectedOpIndex_=undefined;this.chartWidth_=0;this.chartHeight_=0;this.dimensionsHaveChanged_=true;this.currentBarMouseOverTarget_=undefined;this.ninetyFifthPercentileCost_=0;this.totalOpCost_=0;this.chart_.addEventListener('click',this.onClick_.bind(this));this.chart_.addEventListener('mousemove',this.onMouseMove_.bind(this));this.usePercentileScale_=false;this.usePercentileScaleCheckbox_=tr.ui.b.createCheckBox(this,'usePercentileScale','PictureOpsChartView.usePercentileScale',false,'Limit to 95%-ile');Polymer.dom(this.usePercentileScaleCheckbox_).classList.add('use-percentile-scale');this.usePercentileScaleCheckbox_.style.position='absolute';this.usePercentileScaleCheckbox_.style.left=0;this.usePercentileScaleCheckbox_.style.top=0;Polymer.dom(this).appendChild(this.usePercentileScaleCheckbox_);},get dimensionsHaveChanged(){return this.dimensionsHaveChanged_;},set dimensionsHaveChanged(dimensionsHaveChanged){this.dimensionsHaveChanged_=dimensionsHaveChanged;},get usePercentileScale(){return this.usePercentileScale_;},set usePercentileScale(usePercentileScale){this.usePercentileScale_=usePercentileScale;this.drawChartContents_();},get numOps(){return this.opCosts_.length;},get selectedOpIndex(){return this.selectedOpIndex_;},set selectedOpIndex(selectedOpIndex){if(selectedOpIndex<0)throw new Error('Invalid index');if(selectedOpIndex>=this.numOps)throw new Error('Invalid index');this.selectedOpIndex_=selectedOpIndex;},get picture(){return this.picture_;},set picture(picture){this.picture_=picture;this.pictureOps_=picture.tagOpsWithTimings(picture.getOps());this.currentBarMouseOverTarget_=undefined;this.processPictureData_();this.dimensionsHaveChanged=true;},processPictureData_(){if(this.pictureOps_===undefined)return;let totalOpCost=0;this.opCosts_=this.pictureOps_.map(function(op){totalOpCost+=op.cmd_time;return op.cmd_time;});this.opCosts_.sort();const ninetyFifthPercentileCostIndex=Math.floor(this.opCosts_.length*0.95);this.ninetyFifthPercentileCost_=this.opCosts_[ninetyFifthPercentileCostIndex];this.maxCost_=this.opCosts_[this.opCosts_.length-1];this.totalOpCost_=totalOpCost;},extractBarIndex_(e){let index=undefined;if(this.pictureOps_===undefined||this.pictureOps_.length===0){return index;}
+timingData.sort(this.sortTimingBucketsByOpTimeDescending_);this.collapseTimingBucketsToOther_(4);},collapseTimingBucketsToOther_(count){const timingData=this.opsTimingData_;const otherSource=timingData.splice(count,timingData.length-count);let otherDestination=null;if(!otherSource.length)return;timingData.push({cmd_time:0,cmd_string:'Other'});otherDestination=timingData[timingData.length-1];for(let i=0;i<otherSource.length;i++){otherDestination.cmd_time+=otherSource[i].cmd_time;}},sortTimingBucketsByOpTimeDescending_(a,b){return b.cmd_time-a.cmd_time;},resetOpsTimingData_(){this.opsTimingData_.length=0;}};return{PictureOpsChartSummaryView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const BAR_PADDING=1;const BAR_WIDTH=5;const CHART_PADDING_LEFT=65;const CHART_PADDING_RIGHT=30;const CHART_PADDING_BOTTOM=35;const CHART_PADDING_TOP=20;const AXIS_PADDING_LEFT=55;const AXIS_PADDING_RIGHT=30;const AXIS_PADDING_BOTTOM=35;const AXIS_PADDING_TOP=20;const AXIS_TICK_SIZE=5;const AXIS_LABEL_PADDING=5;const VERTICAL_TICKS=5;const HUE_CHAR_CODE_ADJUSTMENT=5.7;const PictureOpsChartView=tr.ui.b.define('tr-ui-e-chrome-cc-picture-ops-chart-view');PictureOpsChartView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.display='block';this.style.height='180px';this.style.margin=0;this.style.padding=0;this.style.position='relative';this.picture_=undefined;this.pictureOps_=undefined;this.opCosts_=undefined;this.chartScale_=window.devicePixelRatio;this.chart_=document.createElement('canvas');this.chartCtx_=this.chart_.getContext('2d');Polymer.dom(this).appendChild(this.chart_);this.selectedOpIndex_=undefined;this.chartWidth_=0;this.chartHeight_=0;this.dimensionsHaveChanged_=true;this.currentBarMouseOverTarget_=undefined;this.ninetyFifthPercentileCost_=0;this.totalOpCost_=0;this.chart_.addEventListener('click',this.onClick_.bind(this));this.chart_.addEventListener('mousemove',this.onMouseMove_.bind(this));new ResizeObserver(this.onResize_.bind(this)).observe(this);this.usePercentileScale_=false;this.usePercentileScaleCheckbox_=tr.ui.b.createCheckBox(this,'usePercentileScale','PictureOpsChartView.usePercentileScale',false,'Limit to 95%-ile');Polymer.dom(this.usePercentileScaleCheckbox_).classList.add('use-percentile-scale');this.usePercentileScaleCheckbox_.style.position='absolute';this.usePercentileScaleCheckbox_.style.left=0;this.usePercentileScaleCheckbox_.style.top=0;Polymer.dom(this).appendChild(this.usePercentileScaleCheckbox_);},get dimensionsHaveChanged(){return this.dimensionsHaveChanged_;},set dimensionsHaveChanged(dimensionsHaveChanged){this.dimensionsHaveChanged_=dimensionsHaveChanged;},get usePercentileScale(){return this.usePercentileScale_;},set usePercentileScale(usePercentileScale){this.usePercentileScale_=usePercentileScale;this.drawChartContents_();},get numOps(){return this.opCosts_.length;},get selectedOpIndex(){return this.selectedOpIndex_;},set selectedOpIndex(selectedOpIndex){if(selectedOpIndex<0)throw new Error('Invalid index');if(selectedOpIndex>=this.numOps)throw new Error('Invalid index');this.selectedOpIndex_=selectedOpIndex;},get picture(){return this.picture_;},set picture(picture){this.picture_=picture;this.pictureOps_=picture.tagOpsWithTimings(picture.getOps());this.currentBarMouseOverTarget_=undefined;this.processPictureData_();this.dimensionsHaveChanged=true;},processPictureData_(){if(this.pictureOps_===undefined)return;let totalOpCost=0;this.opCosts_=this.pictureOps_.map(function(op){totalOpCost+=op.cmd_time;return op.cmd_time;});this.opCosts_.sort();const ninetyFifthPercentileCostIndex=Math.floor(this.opCosts_.length*0.95);this.ninetyFifthPercentileCost_=this.opCosts_[ninetyFifthPercentileCostIndex];this.maxCost_=this.opCosts_[this.opCosts_.length-1];this.totalOpCost_=totalOpCost;},extractBarIndex_(e){let index=undefined;if(this.pictureOps_===undefined||this.pictureOps_.length===0){return index;}
const x=e.offsetX;const y=e.offsetY;const totalBarWidth=(BAR_WIDTH+BAR_PADDING)*this.pictureOps_.length;const chartLeft=CHART_PADDING_LEFT;const chartTop=0;const chartBottom=this.chartHeight_-CHART_PADDING_BOTTOM;const chartRight=chartLeft+totalBarWidth;if(x<chartLeft||x>chartRight||y<chartTop||y>chartBottom){return index;}
index=Math.floor((x-chartLeft)/totalBarWidth*this.pictureOps_.length);index=tr.b.math.clamp(index,0,this.pictureOps_.length-1);return index;},onClick_(e){const barClicked=this.extractBarIndex_(e);if(barClicked===undefined)return;if(barClicked===this.selectedOpIndex){this.selectedOpIndex=undefined;}else{this.selectedOpIndex=barClicked;}
e.preventDefault();tr.b.dispatchSimpleEvent(this,'selection-changed',false);},onMouseMove_(e){const lastBarMouseOverTarget=this.currentBarMouseOverTarget_;this.currentBarMouseOverTarget_=this.extractBarIndex_(e);if(this.currentBarMouseOverTarget_===lastBarMouseOverTarget){return;}
-this.drawChartContents_();},scrollSelectedItemIntoViewIfNecessary(){if(this.selectedOpIndex===undefined){return;}
+this.drawChartContents_();},onResize_(){this.dimensionsHaveChanged=true;this.updateChartContents();},scrollSelectedItemIntoViewIfNecessary(){if(this.selectedOpIndex===undefined){return;}
const width=this.offsetWidth;const left=this.scrollLeft;const right=left+width;const targetLeft=CHART_PADDING_LEFT+
(BAR_WIDTH+BAR_PADDING)*this.selectedOpIndex;if(targetLeft>left&&targetLeft<right){return;}
this.scrollLeft=(targetLeft-width*0.5);},updateChartContents(){if(this.dimensionsHaveChanged){this.updateChartDimensions_();}
@@ -7479,7 +7838,7 @@ CHART_PADDING_LEFT;const barWidth=BAR_WIDTH+BAR_PADDING;const tooltipOffset=Math
toolTipTimePercentage+'%)',left+8,top+22);},drawBars_(){let op;let opColor=0;let opHeight=0;const opWidth=BAR_WIDTH+BAR_PADDING;let opHover=false;const bottom=this.chartHeight_-CHART_PADDING_BOTTOM;const maxHeight=this.chartHeight_-CHART_PADDING_BOTTOM-
CHART_PADDING_TOP;let maxValue;if(this.usePercentileScale){maxValue=this.ninetyFifthPercentileCost_;}else{maxValue=this.maxCost_;}
for(let b=0;b<this.pictureOps_.length;b++){op=this.pictureOps_[b];opHeight=Math.round((op.cmd_time/maxValue)*maxHeight);opHeight=Math.max(opHeight,1);opHover=(b===this.currentBarMouseOverTarget_);opColor=this.getOpColor_(op.cmd_string,opHover);if(b===this.selectedOpIndex){this.chartCtx_.fillStyle='#FFFF00';}else{this.chartCtx_.fillStyle=opColor;}
-this.chartCtx_.fillRect(CHART_PADDING_LEFT+b*opWidth,bottom-opHeight,BAR_WIDTH,opHeight);}},getOpColor_(opName,hover){const characters=opName.split('');const hue=characters.reduce(this.reduceNameToHue,0)%360;const saturation=30;const lightness=hover?'75%':'50%';return'hsl('+hue+', '+saturation+'%, '+lightness+'%)';},reduceNameToHue(previousValue,currentValue,index,array){return Math.round(previousValue+currentValue.charCodeAt(0)*HUE_CHAR_CODE_ADJUSTMENT);},clearChartContents_(){this.chartCtx_.clearRect(0,0,this.chartWidth_,this.chartHeight_);},showNoTimingDataMessage_(){this.chartCtx_.font='800 italic 14px Arial';this.chartCtx_.fillStyle='#333';this.chartCtx_.textAlign='center';this.chartCtx_.textBaseline='middle';this.chartCtx_.fillText('No timing data available.',this.chartWidth_*0.5,this.chartHeight_*0.5);}};return{PictureOpsChartView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const THIS_DOC=document.currentScript.ownerDocument;const PictureDebugger=tr.ui.b.define('tr-ui-e-chrome-cc-picture-debugger');PictureDebugger.prototype={__proto__:HTMLDivElement.prototype,decorate(){const node=tr.ui.b.instantiateTemplate('#tr-ui-e-chrome-cc-picture-debugger-template',THIS_DOC);Polymer.dom(this).appendChild(node);this.style.display='flex';this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='auto';this.style.flexDirection='row';const title=this.querySelector('.title');title.style.fontWeight='bold';title.style.marginLeft='5px';title.style.marginRight='5px';this.pictureAsImageData_=undefined;this.showOverdraw_=false;this.zoomScaleValue_=1;this.sizeInfo_=Polymer.dom(this).querySelector('.size');this.rasterArea_=Polymer.dom(this).querySelector('raster-area');this.rasterArea_.style.backgroundColor='#ddd';this.rasterArea_.style.minHeight='200px';this.rasterArea_.style.minWidth='200px';this.rasterArea_.style.overflowY='auto';this.rasterArea_.style.paddingLeft='5px';this.rasterCanvas_=Polymer.dom(this.rasterArea_).querySelector('canvas');this.rasterCtx_=this.rasterCanvas_.getContext('2d');this.filename_=Polymer.dom(this).querySelector('.filename');this.filename_.style.userSelect='text';this.filename_.style.marginLeft='5px';this.drawOpsChartSummaryView_=new tr.ui.e.chrome.cc.PictureOpsChartSummaryView();this.drawOpsChartView_=new tr.ui.e.chrome.cc.PictureOpsChartView();this.drawOpsChartView_.addEventListener('selection-changed',this.onChartBarClicked_.bind(this));this.exportButton_=Polymer.dom(this).querySelector('.export');this.exportButton_.addEventListener('click',this.onSaveAsSkPictureClicked_.bind(this));this.trackMouse_();const overdrawCheckbox=tr.ui.b.createCheckBox(this,'showOverdraw','pictureView.showOverdraw',false,'Show overdraw');const chartCheckbox=tr.ui.b.createCheckBox(this,'showSummaryChart','pictureView.showSummaryChart',false,'Show timing summary');const pictureInfo=Polymer.dom(this).querySelector('picture-info');pictureInfo.style.flexGrow=0;pictureInfo.style.flexShrink=0;pictureInfo.style.flexBasis='auto';pictureInfo.style.paddingTop='2px';Polymer.dom(pictureInfo).appendChild(overdrawCheckbox);Polymer.dom(pictureInfo).appendChild(chartCheckbox);this.drawOpsView_=new tr.ui.e.chrome.cc.PictureOpsListView();this.drawOpsView_.addEventListener('selection-changed',this.onChangeDrawOps_.bind(this));const leftPanel=Polymer.dom(this).querySelector('left-panel');leftPanel.style.flexDirection='column';leftPanel.style.display='flex';leftPanel.style.minWidth='300px';Polymer.dom(leftPanel).appendChild(this.drawOpsChartSummaryView_);Polymer.dom(leftPanel).appendChild(this.drawOpsView_);const middleDragHandle=document.createElement('tr-ui-b-drag-handle');middleDragHandle.style.flexGrow=0;middleDragHandle.style.flexShrink=0;middleDragHandle.style.flexBasis='auto';middleDragHandle.horizontal=false;middleDragHandle.target=leftPanel;const rightPanel=Polymer.dom(this).querySelector('right-panel');rightPanel.style.flexGrow=1;rightPanel.style.flexShrink=1;rightPanel.style.flexBasis='auto';rightPanel.style.flexDirection='column';rightPanel.style.display='flex';const chartView=Polymer.dom(rightPanel).querySelector('tr-ui-e-chrome-cc-picture-ops-chart-view');chartView.style.minHeight='150px';chartView.style.minWidth=0;chartView.style.overflowX='auto';chartView.style.overflowY='hidden';rightPanel.replaceChild(this.drawOpsChartView_,chartView);this.infoBar_=document.createElement('tr-ui-b-info-bar');Polymer.dom(this.rasterArea_).appendChild(this.infoBar_);Polymer.dom(this).insertBefore(middleDragHandle,rightPanel);this.picture_=undefined;const hkc=document.createElement('tv-ui-b-hotkey-controller');hkc.addHotKey(new tr.ui.b.HotKey({eventType:'keypress',thisArg:this,keyCode:'h'.charCodeAt(0),callback(e){this.moveSelectedOpBy(-1);e.stopPropagation();}}));hkc.addHotKey(new tr.ui.b.HotKey({eventType:'keypress',thisArg:this,keyCode:'l'.charCodeAt(0),callback(e){this.moveSelectedOpBy(1);e.stopPropagation();}}));Polymer.dom(this).appendChild(hkc);this.mutationObserver_=new MutationObserver(this.onMutation_.bind(this));this.mutationObserver_.observe(leftPanel,{attributes:true});},onMutation_(mutations){for(let m=0;m<mutations.length;m++){if(mutations[m].attributeName==='style'){this.drawOpsChartSummaryView_.requiresRedraw=true;this.drawOpsChartSummaryView_.updateChartContents();this.drawOpsChartView_.dimensionsHaveChanged=true;this.drawOpsChartView_.updateChartContents();break;}}},onSaveAsSkPictureClicked_(){const rawData=tr.b.Base64.atob(this.picture_.getBase64SkpData());const length=rawData.length;const arrayBuffer=new ArrayBuffer(length);const uint8Array=new Uint8Array(arrayBuffer);for(let c=0;c<length;c++){uint8Array[c]=rawData.charCodeAt(c);}
+this.chartCtx_.fillRect(CHART_PADDING_LEFT+b*opWidth,bottom-opHeight,BAR_WIDTH,opHeight);}},getOpColor_(opName,hover){const characters=opName.split('');const hue=characters.reduce(this.reduceNameToHue,0)%360;const saturation=30;const lightness=hover?'75%':'50%';return'hsl('+hue+', '+saturation+'%, '+lightness+'%)';},reduceNameToHue(previousValue,currentValue,index,array){return Math.round(previousValue+currentValue.charCodeAt(0)*HUE_CHAR_CODE_ADJUSTMENT);},clearChartContents_(){this.chartCtx_.clearRect(0,0,this.chartWidth_,this.chartHeight_);},showNoTimingDataMessage_(){this.chartCtx_.font='800 italic 14px Arial';this.chartCtx_.fillStyle='#333';this.chartCtx_.textAlign='center';this.chartCtx_.textBaseline='middle';this.chartCtx_.fillText('No timing data available.',this.chartWidth_*0.5,this.chartHeight_*0.5);}};return{PictureOpsChartView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const THIS_DOC=document.currentScript.ownerDocument;const PictureDebugger=tr.ui.b.define('tr-ui-e-chrome-cc-picture-debugger');PictureDebugger.prototype={__proto__:HTMLDivElement.prototype,decorate(){const node=tr.ui.b.instantiateTemplate('#tr-ui-e-chrome-cc-picture-debugger-template',THIS_DOC);Polymer.dom(this).appendChild(node);this.style.display='flex';this.style.flexDirection='row';const title=this.querySelector('.title');title.style.fontWeight='bold';title.style.marginLeft='5px';title.style.marginRight='5px';this.pictureAsImageData_=undefined;this.showOverdraw_=false;this.zoomScaleValue_=1;this.sizeInfo_=Polymer.dom(this).querySelector('.size');this.rasterArea_=Polymer.dom(this).querySelector('raster-area');this.rasterArea_.style.backgroundColor='#ddd';this.rasterArea_.style.minHeight='100px';this.rasterArea_.style.minWidth='200px';this.rasterArea_.style.overflow='auto';this.rasterArea_.style.paddingLeft='5px';this.rasterCanvas_=Polymer.dom(this.rasterArea_).querySelector('canvas');this.rasterCtx_=this.rasterCanvas_.getContext('2d');this.filename_=Polymer.dom(this).querySelector('.filename');this.filename_.style.userSelect='text';this.filename_.style.marginLeft='5px';this.drawOpsChartSummaryView_=new tr.ui.e.chrome.cc.PictureOpsChartSummaryView();this.drawOpsChartView_=new tr.ui.e.chrome.cc.PictureOpsChartView();this.drawOpsChartView_.addEventListener('selection-changed',this.onChartBarClicked_.bind(this));this.exportButton_=Polymer.dom(this).querySelector('.export');this.exportButton_.addEventListener('click',this.onSaveAsSkPictureClicked_.bind(this));this.trackMouse_();const overdrawCheckbox=tr.ui.b.createCheckBox(this,'showOverdraw','pictureView.showOverdraw',false,'Show overdraw');const chartCheckbox=tr.ui.b.createCheckBox(this,'showSummaryChart','pictureView.showSummaryChart',false,'Show timing summary');const pictureInfo=Polymer.dom(this).querySelector('picture-info');pictureInfo.style.flexGrow=0;pictureInfo.style.flexShrink=0;pictureInfo.style.flexBasis='auto';pictureInfo.style.paddingTop='2px';Polymer.dom(pictureInfo).appendChild(overdrawCheckbox);Polymer.dom(pictureInfo).appendChild(chartCheckbox);this.drawOpsView_=new tr.ui.e.chrome.cc.PictureOpsListView();this.drawOpsView_.flexGrow=1;this.drawOpsView_.flexShrink=1;this.drawOpsView_.flexBasis='auto';this.drawOpsView_.addEventListener('selection-changed',this.onChangeDrawOps_.bind(this));const leftPanel=Polymer.dom(this).querySelector('left-panel');leftPanel.style.flexDirection='column';leftPanel.style.display='flex';leftPanel.style.flexGrow=0;leftPanel.style.flexShrink=0;leftPanel.style.flexBasis='auto';leftPanel.style.minWidth='200px';leftPanel.style.overflow='auto';Polymer.dom(leftPanel).appendChild(this.drawOpsChartSummaryView_);Polymer.dom(leftPanel).appendChild(this.drawOpsView_);const middleDragHandle=document.createElement('tr-ui-b-drag-handle');middleDragHandle.style.flexGrow=0;middleDragHandle.style.flexShrink=0;middleDragHandle.style.flexBasis='auto';middleDragHandle.horizontal=false;middleDragHandle.target=leftPanel;const rightPanel=Polymer.dom(this).querySelector('right-panel');rightPanel.style.flexGrow=1;rightPanel.style.flexShrink=1;rightPanel.style.flexBasis='auto';rightPanel.style.minWidth=0;rightPanel.style.flexDirection='column';rightPanel.style.display='flex';const chartView=Polymer.dom(rightPanel).querySelector('tr-ui-e-chrome-cc-picture-ops-chart-view');this.drawOpsChartView_.style.flexGrow=0;this.drawOpsChartView_.style.flexShrink=0;this.drawOpsChartView_.style.flexBasis='auto';this.drawOpsChartView_.style.minWidth=0;this.drawOpsChartView_.style.overflowX='auto';this.drawOpsChartView_.style.overflowY='hidden';rightPanel.replaceChild(this.drawOpsChartView_,chartView);this.infoBar_=document.createElement('tr-ui-b-info-bar');Polymer.dom(this.rasterArea_).appendChild(this.infoBar_);Polymer.dom(this).insertBefore(middleDragHandle,rightPanel);this.picture_=undefined;const hkc=document.createElement('tv-ui-b-hotkey-controller');hkc.addHotKey(new tr.ui.b.HotKey({eventType:'keypress',thisArg:this,keyCode:'h'.charCodeAt(0),callback(e){this.moveSelectedOpBy(-1);e.stopPropagation();}}));hkc.addHotKey(new tr.ui.b.HotKey({eventType:'keypress',thisArg:this,keyCode:'l'.charCodeAt(0),callback(e){this.moveSelectedOpBy(1);e.stopPropagation();}}));Polymer.dom(this).appendChild(hkc);},onSaveAsSkPictureClicked_(){const rawData=tr.b.Base64.atob(this.picture_.getBase64SkpData());const length=rawData.length;const arrayBuffer=new ArrayBuffer(length);const uint8Array=new Uint8Array(arrayBuffer);for(let c=0;c<length;c++){uint8Array[c]=rawData.charCodeAt(c);}
const blob=new Blob([uint8Array],{type:'application/octet-binary'});const blobUrl=window.webkitURL.createObjectURL(blob);const link=document.createElementNS('http://www.w3.org/1999/xhtml','a');link.href=blobUrl;link.download=this.filename_.value;const event=document.createEvent('MouseEvents');event.initMouseEvent('click',true,false,window,0,0,0,0,0,false,false,false,false,0,null);link.dispatchEvent(event);},get picture(){return this.picture_;},set picture(picture){this.drawOpsView_.picture=picture;this.drawOpsChartView_.picture=picture;this.drawOpsChartSummaryView_.picture=picture;this.picture_=picture;this.exportButton_.disabled=!this.picture_.canSave;if(picture){const size=this.getRasterCanvasSize_();this.rasterCanvas_.width=size.width;this.rasterCanvas_.height=size.height;}
const bounds=this.rasterArea_.getBoundingClientRect();const selectorBounds=this.mouseModeSelector_.getBoundingClientRect();this.mouseModeSelector_.pos={x:(bounds.right-selectorBounds.width-10),y:bounds.top};this.rasterize_();this.scheduleUpdateContents_();},getRasterCanvasSize_(){const style=window.getComputedStyle(this.rasterArea_);const width=Math.max(parseInt(style.width),this.picture_.layerRect.width);const height=Math.max(parseInt(style.height),this.picture_.layerRect.height);return{width,height};},scheduleUpdateContents_(){if(this.updateContentsPending_)return;this.updateContentsPending_=true;tr.b.requestAnimationFrameInThisFrameIfPossible(this.updateContents_.bind(this));},updateContents_(){this.updateContentsPending_=false;if(this.picture_){Polymer.dom(this.sizeInfo_).textContent='('+
this.picture_.layerRect.width+' x '+
@@ -7488,7 +7847,7 @@ this.drawOpsChartView_.updateChartContents();this.drawOpsChartView_.scrollSelect
this.drawPicture_();},drawPicture_(){const size=this.getRasterCanvasSize_();if(size.width!==this.rasterCanvas_.width){this.rasterCanvas_.width=size.width;}
if(size.height!==this.rasterCanvas_.height){this.rasterCanvas_.height=size.height;}
this.rasterCtx_.clearRect(0,0,size.width,size.height);if(!this.pictureAsImageData_.imageData)return;const imgCanvas=this.pictureAsImageData_.asCanvas();const w=imgCanvas.width;const h=imgCanvas.height;this.rasterCtx_.drawImage(imgCanvas,0,0,w,h,0,0,w*this.zoomScaleValue_,h*this.zoomScaleValue_);},rasterize_(){if(this.picture_){this.picture_.rasterize({stopIndex:this.drawOpsView_.selectedOpIndex,showOverdraw:this.showOverdraw_},this.onRasterComplete_.bind(this));}},onRasterComplete_(pictureAsImageData){this.pictureAsImageData_=pictureAsImageData;this.scheduleUpdateContents_();},moveSelectedOpBy(increment){if(this.selectedOpIndex===undefined){this.selectedOpIndex=0;return;}
-this.selectedOpIndex=tr.b.math.clamp(this.selectedOpIndex+increment,0,this.numOps);},get numOps(){return this.drawOpsView_.numOps;},get selectedOpIndex(){return this.drawOpsView_.selectedOpIndex;},set selectedOpIndex(index){this.drawOpsView_.selectedOpIndex=index;this.drawOpsChartView_.selectedOpIndex=index;},onChartBarClicked_(e){this.drawOpsView_.selectedOpIndex=this.drawOpsChartView_.selectedOpIndex;},onChangeDrawOps_(e){this.rasterize_();this.scheduleUpdateContents_();this.drawOpsChartView_.selectedOpIndex=this.drawOpsView_.selectedOpIndex;},set showOverdraw(v){this.showOverdraw_=v;this.rasterize_();},set showSummaryChart(chartShouldBeVisible){if(chartShouldBeVisible){this.drawOpsChartSummaryView_.show();}else{this.drawOpsChartSummaryView_.hide();}},trackMouse_(){this.mouseModeSelector_=document.createElement('tr-ui-b-mouse-mode-selector');this.mouseModeSelector_.targetElement=this.rasterArea_;Polymer.dom(this.rasterArea_).appendChild(this.mouseModeSelector_);this.mouseModeSelector_.supportedModeMask=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.mode=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.defaultMode=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.settingsKey='pictureDebugger.mouseModeSelector';this.mouseModeSelector_.addEventListener('beginzoom',this.onBeginZoom_.bind(this));this.mouseModeSelector_.addEventListener('updatezoom',this.onUpdateZoom_.bind(this));this.mouseModeSelector_.addEventListener('endzoom',this.onEndZoom_.bind(this));},onBeginZoom_(e){this.isZooming_=true;this.lastMouseViewPos_=this.extractRelativeMousePosition_(e);e.preventDefault();},onUpdateZoom_(e){if(!this.isZooming_)return;const currentMouseViewPos=this.extractRelativeMousePosition_(e);this.zoomScaleValue_+=((this.lastMouseViewPos_.y-currentMouseViewPos.y)*0.001);this.zoomScaleValue_=Math.max(this.zoomScaleValue_,0.1);this.drawPicture_();this.lastMouseViewPos_=currentMouseViewPos;},onEndZoom_(e){this.lastMouseViewPos_=undefined;this.isZooming_=false;e.preventDefault();},extractRelativeMousePosition_(e){return{x:e.clientX-this.rasterArea_.offsetLeft,y:e.clientY-this.rasterArea_.offsetTop};}};return{PictureDebugger,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const PictureSnapshotView=tr.ui.b.define('tr-ui-e-chrome-cc-picture-snapshot-view',tr.ui.analysis.ObjectSnapshotView);PictureSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){Polymer.dom(this).classList.add('tr-ui-e-chrome-cc-picture-snapshot-view');this.style.display='flex';this.style.flexGrow=0;this.style.flexShrink=1;this.style.flexBasis='auto';this.pictureDebugger_=new tr.ui.e.chrome.cc.PictureDebugger();Polymer.dom(this).appendChild(this.pictureDebugger_);},updateContents(){if(this.objectSnapshot_&&this.pictureDebugger_){this.pictureDebugger_.picture=this.objectSnapshot_;}}};tr.ui.analysis.ObjectSnapshotView.register(PictureSnapshotView,{typeNames:['cc::Picture','cc::LayeredPicture'],showInstances:false});return{PictureSnapshotView,};});'use strict';tr.exportTo('tr.e.cc',function(){const knownRasterTaskNames=['TileManager::RunRasterTask','RasterWorkerPoolTaskImpl::RunRasterOnThread','RasterWorkerPoolTaskImpl::Raster','RasterTaskImpl::Raster','cc::RasterTask','RasterTask'];const knownAnalysisTaskNames=['TileManager::RunAnalyzeTask','RasterWorkerPoolTaskImpl::RunAnalysisOnThread','RasterWorkerPoolTaskImpl::Analyze','RasterTaskImpl::Analyze','cc::AnalyzeTask','AnalyzeTask'];function getTileFromRasterTaskSlice(slice){if(!(isSliceDoingRasterization(slice)||isSliceDoingAnalysis(slice))){return undefined;}
+this.selectedOpIndex=tr.b.math.clamp(this.selectedOpIndex+increment,0,this.numOps);},get numOps(){return this.drawOpsView_.numOps;},get selectedOpIndex(){return this.drawOpsView_.selectedOpIndex;},set selectedOpIndex(index){this.drawOpsView_.selectedOpIndex=index;this.drawOpsChartView_.selectedOpIndex=index;},onChartBarClicked_(e){this.drawOpsView_.selectedOpIndex=this.drawOpsChartView_.selectedOpIndex;},onChangeDrawOps_(e){this.rasterize_();this.scheduleUpdateContents_();this.drawOpsChartView_.selectedOpIndex=this.drawOpsView_.selectedOpIndex;},set showOverdraw(v){this.showOverdraw_=v;this.rasterize_();},set showSummaryChart(chartShouldBeVisible){if(chartShouldBeVisible){this.drawOpsChartSummaryView_.show();}else{this.drawOpsChartSummaryView_.hide();}},trackMouse_(){this.mouseModeSelector_=document.createElement('tr-ui-b-mouse-mode-selector');this.mouseModeSelector_.targetElement=this.rasterArea_;Polymer.dom(this.rasterArea_).appendChild(this.mouseModeSelector_);this.mouseModeSelector_.supportedModeMask=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.mode=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.defaultMode=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.settingsKey='pictureDebugger.mouseModeSelector';this.mouseModeSelector_.addEventListener('beginzoom',this.onBeginZoom_.bind(this));this.mouseModeSelector_.addEventListener('updatezoom',this.onUpdateZoom_.bind(this));this.mouseModeSelector_.addEventListener('endzoom',this.onEndZoom_.bind(this));},onBeginZoom_(e){this.isZooming_=true;this.lastMouseViewPos_=this.extractRelativeMousePosition_(e);e.preventDefault();},onUpdateZoom_(e){if(!this.isZooming_)return;const currentMouseViewPos=this.extractRelativeMousePosition_(e);this.zoomScaleValue_+=((this.lastMouseViewPos_.y-currentMouseViewPos.y)*0.001);this.zoomScaleValue_=Math.max(this.zoomScaleValue_,0.1);this.drawPicture_();this.lastMouseViewPos_=currentMouseViewPos;},onEndZoom_(e){this.lastMouseViewPos_=undefined;this.isZooming_=false;e.preventDefault();},extractRelativeMousePosition_(e){return{x:e.clientX-this.rasterArea_.offsetLeft,y:e.clientY-this.rasterArea_.offsetTop};}};return{PictureDebugger,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const PictureSnapshotView=tr.ui.b.define('tr-ui-e-chrome-cc-picture-snapshot-view',tr.ui.analysis.ObjectSnapshotView);PictureSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){Polymer.dom(this).classList.add('tr-ui-e-chrome-cc-picture-snapshot-view');this.style.display='flex';this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='auto';this.style.minWidth=0;this.pictureDebugger_=new tr.ui.e.chrome.cc.PictureDebugger();this.pictureDebugger_.style.flexGrow=1;this.pictureDebugger_.style.flexShrink=1;this.pictureDebugger_.style.flexBasis='auto';this.pictureDebugger_.style.minWidth=0;Polymer.dom(this).appendChild(this.pictureDebugger_);},updateContents(){if(this.objectSnapshot_&&this.pictureDebugger_){this.pictureDebugger_.picture=this.objectSnapshot_;}}};tr.ui.analysis.ObjectSnapshotView.register(PictureSnapshotView,{typeNames:['cc::Picture','cc::LayeredPicture'],showInstances:false});return{PictureSnapshotView,};});'use strict';tr.exportTo('tr.e.cc',function(){const knownRasterTaskNames=['TileManager::RunRasterTask','RasterWorkerPoolTaskImpl::RunRasterOnThread','RasterWorkerPoolTaskImpl::Raster','RasterTaskImpl::Raster','cc::RasterTask','RasterTask'];const knownAnalysisTaskNames=['TileManager::RunAnalyzeTask','RasterWorkerPoolTaskImpl::RunAnalysisOnThread','RasterWorkerPoolTaskImpl::Analyze','RasterTaskImpl::Analyze','cc::AnalyzeTask','AnalyzeTask'];function getTileFromRasterTaskSlice(slice){if(!(isSliceDoingRasterization(slice)||isSliceDoingAnalysis(slice))){return undefined;}
let tileData;if(slice.args.data){tileData=slice.args.data;}else{tileData=slice.args.tileData;}
if(tileData===undefined)return undefined;if(tileData.tile_id)return tileData.tile_id;const tile=tileData.tileId;if(!(tile instanceof tr.e.cc.TileSnapshot)){return undefined;}
return tileData.tileId;}
@@ -7519,7 +7878,8 @@ if(hasTitle){cols.push({title:'Title',value(row){return row.title;}});}
table.tableColumns=cols;table.rebuild();},tableForTesting(){return this.$.table;}});'use strict';Polymer({is:'tr-ui-a-single-event-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],properties:{isFlow:{type:Boolean,value:false}},ready(){this.currentSelection_=undefined;this.$.table.tableColumns=[{title:'Label',value(row){return row.name;},width:'150px'},{title:'Value',width:'100%',value(row){return row.value;}}];this.$.table.showHeader=false;},get selection(){return this.currentSelection_;},set selection(selection){if(selection.length!==1){throw new Error('Only supports single slices');}
this.setSelectionWithoutErrorChecks(selection);},setSelectionWithoutErrorChecks(selection){this.currentSelection_=selection;this.updateContents_();},getFlowEventRows_(event){const rows=this.getEventRowsHelper_(event);rows.splice(0,0,{name:'ID',value:event.id});function createLinkTo(slice){const linkEl=document.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(function(){return new tr.model.EventSet(slice);});Polymer.dom(linkEl).textContent=slice.userFriendlyName;return linkEl;}
rows.push({name:'From',value:createLinkTo(event.startSlice)});rows.push({name:'To',value:createLinkTo(event.endSlice)});return rows;},getEventRowsHelper_(event){const rows=[];if(event.error){rows.push({name:'Error',value:event.error});}
-if(event.title){rows.push({name:'Title',value:event.title});}
+if(event.title){let title=event.title;if(tr.isExported('tr-ui-e-chrome-codesearch')){const container=document.createElement('div');container.appendChild(document.createTextNode(title));const link=document.createElement('tr-ui-e-chrome-codesearch');link.searchPhrase=title;container.appendChild(link);title=container;}
+rows.push({name:'Title',value:title});}
if(event.category){rows.push({name:'Category',value:event.category});}
if(event.model!==undefined){const ufc=event.model.getUserFriendlyCategoryFromEvent(event);if(ufc!==undefined){rows.push({name:'User Friendly Category',value:ufc});}}
if(event.name){rows.push({name:'Name',value:event.name});}
@@ -7539,7 +7899,7 @@ if(n>0){const subRows=[];for(const argName in args){n+=1;}
if(n>0){const subRows=[];for(const argName in args){const argView=document.createElement('tr-ui-a-generic-object-view');argView.object=args[argName];subRows.push({name:argName,value:argView});}
rows.push({name:'Args',value:'',isExpanded:true,subRows});}}},addContextsToRows_(rows,contexts){if(contexts.length){const subRows=contexts.map(function(context){const contextView=document.createElement('tr-ui-a-generic-object-view');contextView.object=context;return{name:'Context',value:contextView};});rows.push({name:'Contexts',value:'',isExpanded:true,subRows});}},updateContents_(){if(this.currentSelection_===undefined){this.$.table.rows=[];this.$.table.rebuild();return;}
const event=tr.b.getOnlyElement(this.currentSelection_);const rows=this.getEventRows_(event);if(event.argsStripped){rows.push({name:'Args',value:'Stripped'});}else{this.addArgsToRows_(rows,event.args);}
-this.addContextsToRows_(rows,event.contexts);const customizeRowsEvent=new tr.b.Event('customize-rows');customizeRowsEvent.rows=rows;this.dispatchEvent(customizeRowsEvent);this.$.table.tableRows=rows;this.$.table.rebuild();}});'use strict';Polymer({is:'tr-ui-e-chrome-cc-raster-task-view',created(){this.selection_=undefined;},set selection(selection){this.selection_=selection;this.updateContents_();},updateColumns_(hadCpuDurations){const timeSpanConfig={unit:tr.b.Unit.byName.timeDurationInMs,ownerDocument:this.ownerDocument};const columns=[{title:'Layer',value(row){if(row.isTotals)return'Totals';if(row.layer){const linkEl=document.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(function(){return new tr.ui.e.chrome.cc.LayerSelection(costs.layer);},'Layer '+row.layerId);return linkEl;}
+this.addContextsToRows_(rows,event.contexts);const customizeRowsEvent=new tr.b.Event('customize-rows');customizeRowsEvent.rows=rows;this.dispatchEvent(customizeRowsEvent);this.$.table.tableRows=rows;this.$.table.rebuild();}});'use strict';Polymer({is:'tr-ui-e-chrome-cc-raster-task-view',created(){this.selection_=undefined;},set selection(selection){this.selection_=selection;this.updateContents_();},updateColumns_(hadCpuDurations){const timeSpanConfig={unit:tr.b.Unit.byName.timeDurationInMs,ownerDocument:this.ownerDocument};const columns=[{title:'Layer',value(row){if(row.isTotals)return'Totals';if(row.layer){const linkEl=document.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(function(){return new tr.ui.e.chrome.cc.LayerSelection(row.layer);},'Layer '+row.layerId);return linkEl;}
return'Layer '+row.layerId;},width:'250px'},{title:'Num Tiles',value(row){return row.numTiles;},cmp(a,b){return a.numTiles-b.numTiles;}},{title:'Num Analysis Tasks',value(row){return row.numAnalysisTasks;},cmp(a,b){return a.numAnalysisTasks-b.numAnalysisTasks;}},{title:'Num Raster Tasks',value(row){return row.numRasterTasks;},cmp(a,b){return a.numRasterTasks-b.numRasterTasks;}},{title:'Wall Duration (ms)',value(row){return tr.v.ui.createScalarSpan(row.duration,timeSpanConfig);},cmp(a,b){return a.duration-b.duration;}}];if(hadCpuDurations){columns.push({title:'CPU Duration (ms)',value(row){return tr.v.ui.createScalarSpan(row.cpuDuration,timeSpanConfig);},cmp(a,b){return a.cpuDuration-b.cpuDuration;}});}
let colWidthPercentage;if(columns.length===1){colWidthPercentage='100%';}else{colWidthPercentage=(100/(columns.length-1)).toFixed(3)+'%';}
for(let i=1;i<columns.length;i++){columns[i].width=colWidthPercentage;}
@@ -7561,7 +7921,7 @@ if(!referenceSnapshot){referenceSnapshot=tile.containingSnapshot;}else{if(tile.c
return{ok:true};};RasterTaskSelection.supports=function(selection){return RasterTaskSelection.whySuported(selection).ok;};RasterTaskSelection.prototype={__proto__:tr.ui.e.chrome.cc.Selection.prototype,get specicifity(){return 3;},get associatedLayerId(){const tile0=this.tiles_[0];const allSameLayer=this.tiles_.every(function(tile){tile.layerId===tile0.layerId;});if(allSameLayer){return tile0.layerId;}
return undefined;},get extraHighlightsByLayerId(){const highlights={};this.tiles_.forEach(function(tile,i){if(highlights[tile.layerId]===undefined){highlights[tile.layerId]=[];}
const slice=this.slices_[i];highlights[tile.layerId].push({colorKey:slice.title,rect:tile.layerRect});},this);return highlights;},createAnalysis(){const sel=new tr.model.EventSet();this.slices_.forEach(function(slice){sel.push(slice);});let analysis;if(sel.length===1){analysis=document.createElement('tr-ui-a-single-event-sub-view');}else{analysis=document.createElement('tr-ui-e-chrome-cc-raster-task-view');}
-analysis.selection=sel;return analysis;},findEquivalent(lthi){return undefined;},get containingSnapshot(){return this.tiles_[0].containingSnapshot;}};return{RasterTaskSelection,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const TileSnapshotView=tr.ui.b.define('tr-ui-e-chrome-cc-tile-snapshot-view',tr.ui.analysis.ObjectSnapshotView);TileSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){Polymer.dom(this).classList.add('tr-ui-e-chrome-cc-tile-snapshot-view');this.layerTreeView_=new tr.ui.e.chrome.cc.LayerTreeHostImplSnapshotView();Polymer.dom(this).appendChild(this.layerTreeView_);},updateContents(){const tile=this.objectSnapshot_;const layerTreeHostImpl=tile.containingSnapshot;if(!layerTreeHostImpl)return;this.layerTreeView_.objectSnapshot=layerTreeHostImpl;this.layerTreeView_.selection=new tr.ui.e.chrome.cc.TileSelection(tile);}};tr.ui.analysis.ObjectSnapshotView.register(TileSnapshotView,{typeName:'cc::Tile',showInTrackView:false});return{TileSnapshotView,};});'use strict';tr.exportTo('tr.e.gpu',function(){const AsyncSlice=tr.model.AsyncSlice;function GpuAsyncSlice(){AsyncSlice.apply(this,arguments);}
+analysis.selection=sel;return analysis;},findEquivalent(lthi){return undefined;},get containingSnapshot(){return this.tiles_[0].containingSnapshot;}};return{RasterTaskSelection,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const TileSnapshotView=tr.ui.b.define('tr-ui-e-chrome-cc-tile-snapshot-view',tr.ui.analysis.ObjectSnapshotView);TileSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){Polymer.dom(this).classList.add('tr-ui-e-chrome-cc-tile-snapshot-view');this.layerTreeView_=new tr.ui.e.chrome.cc.LayerTreeHostImplSnapshotView();Polymer.dom(this).appendChild(this.layerTreeView_);},updateContents(){const tile=this.objectSnapshot_;const layerTreeHostImpl=tile.containingSnapshot;if(!layerTreeHostImpl)return;this.layerTreeView_.objectSnapshot=layerTreeHostImpl;this.layerTreeView_.selection=new tr.ui.e.chrome.cc.TileSelection(tile);}};tr.ui.analysis.ObjectSnapshotView.register(TileSnapshotView,{typeName:'cc::Tile',showInTrackView:false});return{TileSnapshotView,};});'use strict';tr.exportTo('tr.ui.e.chrome',function(){Polymer({is:'tr-ui-e-chrome-codesearch',set searchPhrase(phrase){const link=Polymer.dom(this.$.codesearchLink);const codeSearchURL='https://cs.chromium.org/search/?sq=package:chromium&type=cs&q=';link.setAttribute('href',codeSearchURL+encodeURIComponent(phrase));},onClick(clickEvent){clickEvent.stopPropagation();}});return{};});'use strict';tr.exportTo('tr.e.gpu',function(){const AsyncSlice=tr.model.AsyncSlice;function GpuAsyncSlice(){AsyncSlice.apply(this,arguments);}
GpuAsyncSlice.prototype={__proto__:AsyncSlice.prototype,get viewSubGroupTitle(){if(this.args.channel){if(this.category==='disabled-by-default-gpu.device'){return'Device.'+this.args.channel;}
return'Service.'+this.args.channel;}
return this.title;}};AsyncSlice.subTypes.register(GpuAsyncSlice,{categoryParts:['disabled-by-default-gpu.device','disabled-by-default-gpu.service']});return{GpuAsyncSlice,};});'use strict';tr.exportTo('tr.e.gpu',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;function StateSnapshot(){ObjectSnapshot.apply(this,arguments);}
@@ -7594,10 +7954,12 @@ const width=textNode.getComputedTextLength();const height=textNode.getBBox().hei
function DataSeries(key){this.key_=key;this.target_=undefined;this.title_='';this.optional_=false;this.enabled_=true;this.color_=getColorOfKey(key,false);this.highlightedColor_=getColorOfKey(key,true);}
DataSeries.prototype={get key(){return this.key_;},get title(){return this.title_;},set title(t){this.title_=t;},get color(){return this.color_;},set color(c){this.color_=c;},get highlightedColor(){return this.highlightedColor_;},set highlightedColor(c){this.highlightedColor_=c;},get optional(){return this.optional_;},set optional(optional){this.optional_=optional;},get enabled(){return this.enabled_;},set enabled(enabled){if(!this.optional&&!enabled){this.optional=true;}
this.enabled_=enabled;},get target(){return this.target_;},set target(t){this.target_=t;}};const ChartBase=tr.ui.b.define('svg',undefined,svgNS);ChartBase.prototype={__proto__:HTMLUnknownElement.prototype,getDataSeries(key){if(!this.seriesByKey_.has(key)){this.seriesByKey_.set(key,new DataSeries(key));}
-return this.seriesByKey_.get(key);},decorate(){Polymer.dom(this).classList.add('chart-base');this.setAttribute('style','cursor: default; user-select: none;');this.chartTitle_=undefined;this.seriesByKey_=new Map();this.graphWidth_=undefined;this.graphHeight_=undefined;this.margin={top:0,right:0,bottom:0,left:0,};this.hideLegend_=false;const template=Polymer.dom(THIS_DOC).querySelector('#chart-base-template');const svgEl=Polymer.dom(template.content).querySelector('svg');for(let i=0;i<Polymer.dom(svgEl).children.length;i++){Polymer.dom(this).appendChild(Polymer.dom(svgEl.children[i]).cloneNode(true));}
-this.addEventListener(DataSeriesEnableChangeEventType,this.onDataSeriesEnableChange_.bind(this));},get hideLegend(){return this.hideLegend_;},set hideLegend(h){this.hideLegend_=h;this.updateContents_();},isSeriesEnabled(key){return this.getDataSeries(key).enabled;},onDataSeriesEnableChange_(event){this.getDataSeries(event.key).enabled=event.enabled;this.updateContents_();},get chartTitle(){return this.chartTitle_;},set chartTitle(chartTitle){this.chartTitle_=chartTitle;this.updateContents_();},get chartAreaElement(){return Polymer.dom(this).querySelector('#chart-area');},get graphWidth(){if(this.graphWidth_===undefined)return this.defaultGraphWidth;return this.graphWidth_;},set graphWidth(width){this.graphWidth_=width;this.updateContents_();},get defaultGraphWidth(){return 0;},get graphHeight(){if(this.graphHeight_===undefined)return this.defaultGraphHeight;return this.graphHeight_;},set graphHeight(height){this.graphHeight_=height;this.updateContents_();},get defaultGraphHeight(){return 0;},get totalWidth(){return this.margin.left+this.graphWidth+this.margin.right;},get totalHeight(){return this.margin.top+this.graphHeight+this.margin.bottom;},updateMargins_(){const legendSize=this.computeLegendSize_();this.margin.right=Math.max(this.margin.right,legendSize.width);this.margin.bottom=Math.max(this.margin.bottom,legendSize.height-this.graphHeight);if(this.chartTitle_){const titleSize=getSVGTextSize(this,this.chartTitle_,textNode=>{textNode.style.fontSize='16pt';});this.margin.top=Math.max(this.margin.top,titleSize.height+15);const horizontalOverhangPx=(titleSize.width-this.graphWidth)/2;this.margin.left=Math.max(this.margin.left,horizontalOverhangPx);this.margin.right=Math.max(this.margin.right,horizontalOverhangPx);}},computeLegendSize_(){let width=0;let height=0;if(this.hideLegend)return{width,height};for(const series of this.seriesByKey_.values()){const textSize=getSVGTextSize(this,series.key);width=Math.max(width,textSize.width+20);height+=textSize.height;}
+return this.seriesByKey_.get(key);},decorate(){Polymer.dom(this).classList.add('chart-base');this.setAttribute('style','cursor: default; user-select: none;');this.chartTitle_=undefined;this.seriesByKey_=new Map();this.graphWidth_=undefined;this.graphHeight_=undefined;this.margin={top:0,right:0,bottom:0,left:0,};this.hideLegend_=false;this.showTitleInLegend_=false;this.titleHeight_='16pt';const template=Polymer.dom(THIS_DOC).querySelector('#chart-base-template');const svgEl=Polymer.dom(template.content).querySelector('svg');for(let i=0;i<Polymer.dom(svgEl).children.length;i++){Polymer.dom(this).appendChild(Polymer.dom(svgEl.children[i]).cloneNode(true));}
+this.addEventListener(DataSeriesEnableChangeEventType,this.onDataSeriesEnableChange_.bind(this));},get hideLegend(){return this.hideLegend_;},set hideLegend(h){this.hideLegend_=h;this.updateContents_();},get showTitleInLegend(){return this.showTitleInLegend_;},set showTitleInLegend(s){this.showTitleInLegend_=s;this.updateContents_();},isSeriesEnabled(key){return this.getDataSeries(key).enabled;},onDataSeriesEnableChange_(event){this.getDataSeries(event.key).enabled=event.enabled;this.updateContents_();},get chartTitle(){return this.chartTitle_;},set chartTitle(chartTitle){this.chartTitle_=chartTitle;this.updateContents_();},get chartAreaElement(){return Polymer.dom(this).querySelector('#chart-area');},get graphWidth(){if(this.graphWidth_===undefined)return this.defaultGraphWidth;return this.graphWidth_;},set graphWidth(width){this.graphWidth_=width;this.updateContents_();},get defaultGraphWidth(){return 0;},get graphHeight(){if(this.graphHeight_===undefined)return this.defaultGraphHeight;return this.graphHeight_;},set graphHeight(height){this.graphHeight_=height;this.updateContents_();},get titleHeight(){return this.titleHeight_;},set titleHeight(height){this.titleHeight_=height;this.updateContents_();},get defaultGraphHeight(){return 0;},get totalWidth(){return this.margin.left+this.graphWidth+this.margin.right;},get totalHeight(){return this.margin.top+this.graphHeight+this.margin.bottom;},updateMargins_(){const legendSize=this.computeLegendSize_();this.margin.right=Math.max(this.margin.right,legendSize.width);this.margin.bottom=Math.max(this.margin.bottom,legendSize.height-this.graphHeight);if(this.chartTitle_){const titleSize=getSVGTextSize(this,this.chartTitle_,textNode=>{textNode.style.fontSize='16pt';});this.margin.top=Math.max(this.margin.top,titleSize.height+15);const horizontalOverhangPx=(titleSize.width-this.graphWidth)/2;this.margin.left=Math.max(this.margin.left,horizontalOverhangPx);this.margin.right=Math.max(this.margin.right,horizontalOverhangPx);}},computeLegendSize_(){let width=0;let height=0;if(this.hideLegend)return{width,height};let series=[...this.seriesByKey_.values()];if(this.showTitleInLegend){series=series.filter(series=>series.title!=='');}
+for(const seriesEntry of series){const legendText=this.showTitleInLegend?seriesEntry.title:seriesEntry.key;const textSize=getSVGTextSize(this,legendText);width=Math.max(width,textSize.width+30);height+=textSize.height;}
return{width,height};},updateDimensions_(){const thisSel=d3.select(this);thisSel.attr('width',this.totalWidth);thisSel.attr('height',this.totalHeight);d3.select(this.chartAreaElement).attr('transform','translate('+this.margin.left+', '+this.margin.top+')');},updateContents_(){this.updateMargins_();this.updateDimensions_();this.updateTitle_();this.updateLegend_();},updateTitle_(){const titleSel=d3.select(this.chartAreaElement).select('#title');if(!this.chartTitle_){titleSel.style('display','none');return;}
-titleSel.attr('transform','translate('+this.graphWidth*0.5+',-15)').style('display',undefined).style('text-anchor','middle').style('font-size','16pt').attr('class','title').attr('width',this.graphWidth).text(this.chartTitle_);},updateLegend_(){const chartAreaSel=d3.select(this.chartAreaElement);chartAreaSel.selectAll('.legend').remove();if(this.hideLegend)return;const series=[...this.seriesByKey_.values()].reverse();const legendEntriesSel=chartAreaSel.selectAll('.legend').data(series);legendEntriesSel.enter().append('foreignObject').attr('class','legend').attr('x',this.graphWidth+2).attr('width',this.margin.right).attr('height',18).attr('transform',(series,i)=>'translate(0,'+i*18+')').append('xhtml:body').style('margin',0).append('tr-ui-b-chart-legend-key').property('color',series=>((this.currentHighlightedLegendKey===series.key)?series.highlightedColor:series.color)).property('width',this.margin.right).property('target',series=>series.target).property('title',series=>series.title).property('optional',series=>series.optional).property('enabled',series=>series.enabled).text(series=>series.key);legendEntriesSel.exit().remove();},get highlightedLegendKey(){return this.highlightedLegendKey_;},set highlightedLegendKey(highlightedLegendKey){this.highlightedLegendKey_=highlightedLegendKey;this.updateHighlight_();},get currentHighlightedLegendKey(){if(this.tempHighlightedLegendKey_){return this.tempHighlightedLegendKey_;}
+titleSel.attr('transform','translate('+this.graphWidth*0.5+',-15)').style('display',undefined).style('text-anchor','middle').style('font-size',this.titleHeight).attr('class','title').attr('width',this.graphWidth).text(this.chartTitle_);},updateLegend_(){const chartAreaSel=d3.select(this.chartAreaElement);chartAreaSel.selectAll('.legend').remove();if(this.hideLegend)return;let series;let seriesText;if(this.showTitleInLegend){series=[...this.seriesByKey_.values()].filter(series=>series.title!=='').filter(series=>series.color!=='transparent').reverse();seriesText=series=>series.title;}else{series=[...this.seriesByKey_.values()].filter(series=>series.color!=='transparent').reverse();seriesText=series=>series.key;}
+const legendEntriesSel=chartAreaSel.selectAll('.legend').data(series);legendEntriesSel.enter().append('foreignObject').attr('class','legend').attr('x',this.graphWidth+2).attr('width',this.margin.right).attr('height',18).attr('transform',(series,i)=>'translate(0,'+i*18+')').append('xhtml:body').style('margin',0).append('tr-ui-b-chart-legend-key').property('color',series=>((this.currentHighlightedLegendKey===series.key)?series.highlightedColor:series.color)).property('width',this.margin.right).property('target',series=>series.target).property('title',series=>series.title).property('optional',series=>series.optional).property('enabled',series=>series.enabled).text(seriesText);legendEntriesSel.exit().remove();},get highlightedLegendKey(){return this.highlightedLegendKey_;},set highlightedLegendKey(highlightedLegendKey){this.highlightedLegendKey_=highlightedLegendKey;this.updateHighlight_();},get currentHighlightedLegendKey(){if(this.tempHighlightedLegendKey_){return this.tempHighlightedLegendKey_;}
return this.highlightedLegendKey_;},pushTempHighlightedLegendKey(key){if(this.tempHighlightedLegendKey_){throw new Error('push cannot nest');}
this.tempHighlightedLegendKey_=key;this.updateHighlight_();},popTempHighlightedLegendKey(key){if(this.tempHighlightedLegendKey_!==key){throw new Error('pop cannot happen');}
this.tempHighlightedLegendKey_=undefined;this.updateHighlight_();},updateHighlight_(){const chartAreaSel=d3.select(this.chartAreaElement);const legendEntriesSel=chartAreaSel.selectAll('.legend');const getDataSeries=chart.getDataSeries.bind(chart);const currentHighlightedLegendKey=chart.currentHighlightedLegendKey;legendEntriesSel.each(function(key){const dataSeries=getDataSeries(key);if(key===currentHighlightedLegendKey){this.style.fill=dataSeries.highlightedColor;this.style.fontWeight='bold';}else{this.style.fill=dataSeries.color;this.style.fontWeight='';}});}};return{ChartBase,DataSeriesEnableChangeEventType,getColorOfKey,getSVGTextSize,};});'use strict';tr.exportTo('tr.ui.b',function(){const D3_Y_AXIS_WIDTH_PX=9;const D3_X_AXIS_HEIGHT_PX=23;function sanitizePower(x,defaultValue){if(!isNaN(x)&&isFinite(x)&&(x!==0))return x;return defaultValue;}
@@ -7629,21 +7991,27 @@ this.updateBrushContents_(chartAreaSel.select('#brushes'));this.updateDataConten
this.data_.forEach(function(multiSeriesDatum,index){const x=this.getXForDatum_(multiSeriesDatum,index);d3.keys(multiSeriesDatum).forEach(function(seriesKey){if(seriesKey==='x')return;if(multiSeriesDatum[seriesKey]===undefined)return;if(!this.isDatumFieldSeries_(seriesKey))return;const singleSeriesDatum={x};singleSeriesDatum[seriesKey]=multiSeriesDatum[seriesKey];dataBySeriesKey[seriesKey].push(singleSeriesDatum);},this);},this);return dataBySeriesKey;},getChartPointAtClientPoint_(clientPoint){const rect=this.getBoundingClientRect();return{x:clientPoint.x-rect.left-this.margin.left,y:clientPoint.y-rect.top-this.margin.top};},getDataPointAtChartPoint_(chartPoint){return{x:tr.b.math.clamp(this.xScale_.invert(chartPoint.x),this.xScale_.domain()[0],this.xScale_.domain()[1]),y:tr.b.math.clamp(this.yScale_.invert(chartPoint.y),this.yScale_.domain()[0],this.yScale_.domain()[1])};},getDataPointAtClientPoint_(clientX,clientY){const chartPoint=this.getChartPointAtClientPoint_({x:clientX,y:clientY});return this.getDataPointAtChartPoint_(chartPoint);},prepareDataEvent_(mouseEvent,dataEvent){const dataPoint=this.getDataPointAtClientPoint_(mouseEvent.clientX,mouseEvent.clientY);dataEvent.x=dataPoint.x;dataEvent.y=dataPoint.y;},onMouseDown_(mouseEvent){tr.ui.b.trackMouseMovesUntilMouseUp(this.onMouseMove_.bind(this,mouseEvent.button),this.onMouseUp_.bind(this,mouseEvent.button));mouseEvent.preventDefault();mouseEvent.stopPropagation();const dataEvent=new tr.b.Event('item-mousedown');dataEvent.button=mouseEvent.button;this.prepareDataEvent_(mouseEvent,dataEvent);this.dispatchEvent(dataEvent);for(const child of this.querySelector('#brushes').children){child.setAttribute('fill','rgb(103, 199, 165)');}},onMouseMove_(button,mouseEvent){if(mouseEvent.buttons!==undefined){mouseEvent.preventDefault();mouseEvent.stopPropagation();}
const dataEvent=new tr.b.Event('item-mousemove');dataEvent.button=button;this.prepareDataEvent_(mouseEvent,dataEvent);this.dispatchEvent(dataEvent);for(const child of this.querySelector('#brushes').children){child.setAttribute('fill','rgb(103, 199, 165)');}},onMouseUp_(button,mouseEvent){mouseEvent.preventDefault();mouseEvent.stopPropagation();const dataEvent=new tr.b.Event('item-mouseup');dataEvent.button=button;this.prepareDataEvent_(mouseEvent,dataEvent);this.dispatchEvent(dataEvent);for(const child of this.querySelector('#brushes').children){child.setAttribute('fill','rgb(213, 236, 229)');}}};return{ChartBase2D,};});'use strict';tr.exportTo('tr.ui.b',function(){const ChartBase2D=tr.ui.b.ChartBase2D;const ChartBase2DBrushX=tr.ui.b.define('chart-base-2d-brush-1d',ChartBase2D);ChartBase2DBrushX.prototype={__proto__:ChartBase2D.prototype,decorate(){super.decorate();this.brushedRange_=new tr.b.math.Range();},set brushedRange(range){this.brushedRange_.reset();this.brushedRange_.addRange(range);this.updateContents_();},get brushedRange(){return tr.b.math.Range.fromDict(this.brushedRange_.toJSON());},computeBrushRangeFromIndices(indexA,indexB){indexA=tr.b.math.clamp(indexA,0,this.data_.length-1);indexB=tr.b.math.clamp(indexB,0,this.data_.length-1);const leftIndex=Math.min(indexA,indexB);const rightIndex=Math.max(indexA,indexB);const brushRange=new tr.b.math.Range();brushRange.addValue(this.getXForDatum_(this.data_[leftIndex],leftIndex)-
this.getSampleWidth_(this.data_,leftIndex,true));brushRange.addValue(this.getXForDatum_(this.data_[rightIndex],rightIndex)+
-this.getSampleWidth_(this.data_,rightIndex,false));return brushRange;},getDataIndex_(dataX){if(this.data.length===0)return undefined;const bisect=d3.bisector(this.getXForDatum_.bind(this)).right;return bisect(this.data_,dataX)-1;},prepareDataEvent_(mouseEvent,dataEvent){ChartBase2D.prototype.prepareDataEvent_.call(this,mouseEvent,dataEvent);dataEvent.index=this.getDataIndex_(dataEvent.x);if(dataEvent.index!==undefined){dataEvent.data=this.data_[dataEvent.index];}},updateBrushContents_(brushSel){brushSel.selectAll('*').remove();const brushes=this.brushedRange_.isEmpty?[]:[this.brushedRange_];const brushRectsSel=brushSel.selectAll('rect').data(brushes);brushRectsSel.enter().append('rect');brushRectsSel.exit().remove();this.drawBrush_(brushRectsSel);},drawBrush_(brushRectsSel){brushRectsSel.attr('x',d=>this.xScale_(d.min)).attr('y',0).attr('width',d=>this.xScale_(d.max)-this.xScale_(d.min)).attr('height',this.graphHeight).attr('fill','rgb(213, 236, 229)');}};return{ChartBase2DBrushX,};});'use strict';tr.exportTo('tr.ui.b',function(){const ColumnChart=tr.ui.b.define('column-chart',tr.ui.b.ChartBase2DBrushX);ColumnChart.prototype={__proto__:tr.ui.b.ChartBase2DBrushX.prototype,decorate(){super.decorate();this.xCushion_=1;this.isStacked_=false;this.enableHoverBox=true;this.displayXInHover=false;},set isStacked(stacked){this.isStacked_=true;this.updateContents_();},get isStacked(){return this.isStacked_;},get defaultGraphHeight(){return 100;},get defaultGraphWidth(){return 10*this.data_.length;},updateScales_(){if(this.data_.length===0)return;let xDifferences=0;let currentX=undefined;let previousX=undefined;this.data_.forEach(function(datum,index){previousX=currentX;currentX=this.getXForDatum_(datum,index);if(previousX!==undefined){xDifferences+=currentX-previousX;}},this);this.xScale_.range([0,this.graphWidth]);const domain=d3.extent(this.data_,this.getXForDatum_.bind(this));if(this.data_.length>1){this.xCushion_=xDifferences/(this.data_.length-1);}
+this.getSampleWidth_(this.data_,rightIndex,false));return brushRange;},getDataIndex_(dataX){if(this.data.length===0)return undefined;const bisect=d3.bisector(this.getXForDatum_.bind(this)).right;return bisect(this.data_,dataX)-1;},prepareDataEvent_(mouseEvent,dataEvent){ChartBase2D.prototype.prepareDataEvent_.call(this,mouseEvent,dataEvent);dataEvent.index=this.getDataIndex_(dataEvent.x);if(dataEvent.index!==undefined){dataEvent.data=this.data_[dataEvent.index];}},updateBrushContents_(brushSel){brushSel.selectAll('*').remove();const brushes=this.brushedRange_.isEmpty?[]:[this.brushedRange_];const brushRectsSel=brushSel.selectAll('rect').data(brushes);brushRectsSel.enter().append('rect');brushRectsSel.exit().remove();this.drawBrush_(brushRectsSel);},drawBrush_(brushRectsSel){brushRectsSel.attr('x',d=>this.xScale_(d.min)).attr('y',0).attr('width',d=>this.xScale_(d.max)-this.xScale_(d.min)).attr('height',this.graphHeight).attr('fill','rgb(213, 236, 229)');}};return{ChartBase2DBrushX,};});'use strict';tr.exportTo('tr.ui.b',function(){const ColumnChart=tr.ui.b.define('column-chart',tr.ui.b.ChartBase2DBrushX);ColumnChart.prototype={__proto__:tr.ui.b.ChartBase2DBrushX.prototype,decorate(){super.decorate();this.xCushion_=1;this.isStacked_=false;this.isGrouped_=false;this.enableHoverBox=true;this.displayXInHover=false;this.enableToolTip=false;this.toolTipCallBack_=()=>{};},set toolTipCallBack(callback){this.toolTipCallBack_=callback;},get toolTipCallBack(){return this.toolTipCallBack_;},set isGrouped(grouped){this.isGrouped_=grouped;if(grouped){this.getDataSeries('group').color='transparent';}
+this.updateContents_();},get isGrouped(){return this.isGrouped_;},set isStacked(stacked){this.isStacked_=true;this.updateContents_();},get isStacked(){return this.isStacked_;},get defaultGraphHeight(){return 100;},get defaultGraphWidth(){return 10*this.data_.length;},updateScales_(){if(this.data_.length===0)return;let xDifferences=0;let currentX=undefined;let previousX=undefined;this.data_.forEach(function(datum,index){previousX=currentX;currentX=this.getXForDatum_(datum,index);if(previousX!==undefined){xDifferences+=currentX-previousX;}},this);this.xScale_.range([0,this.graphWidth]);const domain=d3.extent(this.data_,this.getXForDatum_.bind(this));if(this.data_.length>1){this.xCushion_=xDifferences/(this.data_.length-1);}
this.xScale_.domain([domain[0],domain[1]+this.xCushion_]);this.yScale_.range([this.graphHeight,0]);this.yScale_.domain(this.getYScaleDomain_(this.dataRange.min,this.dataRange.max));},updateDataRange_(){if(!this.isStacked){super.updateDataRange_();return;}
-this.autoDataRange_.reset();this.autoDataRange_.addValue(0);for(const datum of this.data_){let sum=0;for(const[key,series]of this.seriesByKey_){if(datum[key]===undefined){continue;}
+this.autoDataRange_.reset();this.autoDataRange_.addValue(0);for(const datum of this.data_){let sum=0;for(const[key,series]of this.seriesByKey_){if(datum[key]===undefined){continue;}else if(this.isGrouped&&key==='group'){continue;}
sum+=datum[key];}
-this.autoDataRange_.addValue(sum);}},getStackedRectsForDatum_(datum,index){const stacks=[];let bottom=this.yScale_.range()[0];let sum=0;for(const[key,series]of this.seriesByKey_){if(datum[key]===undefined||!this.isSeriesEnabled(key)){continue;}
+this.autoDataRange_.addValue(sum);}},getStackedRectsForDatum_(datum,index){const stacks=[];let bottom=this.yScale_.range()[0];let sum=0;for(const[key,series]of this.seriesByKey_){if(datum[key]===undefined||!this.isSeriesEnabled(key)){continue;}else if(this.isGrouped&&key==='group'){continue;}
sum+=this.dataRange.clamp(datum[key]);const heightPx=bottom-this.yScale_(sum);bottom-=heightPx;stacks.push({key,value:datum[key],color:this.getDataSeries(key).color,heightPx,topPx:bottom,underflow:sum<this.dataRange.min,overflow:sum>this.dataRange.max,});}
return stacks;},getRectsForDatum_(datum,index){if(this.isStacked){return this.getStackedRectsForDatum_(datum,index);}
const stacks=[];for(const[key,series]of this.seriesByKey_){if(datum[key]===undefined||!this.isSeriesEnabled(key)){continue;}
const clampedValue=this.dataRange.clamp(datum[key]);const topPx=this.yScale_(Math.max(clampedValue,this.getYScaleMin_()));stacks.push({key,value:datum[key],topPx,heightPx:this.yScale_.range()[0]-topPx,color:this.getDataSeries(key).color,underflow:datum[key]<this.dataRange.min,overflow:datum[key]>this.dataRange.max,});}
-stacks.sort(function(a,b){return b.topPx-a.topPx;});return stacks;},drawHoverValueBox_(rect){const rectHoverEvent=new tr.b.Event('rect-mouseenter');rectHoverEvent.rect=rect;this.dispatchEvent(rectHoverEvent);if(!this.enableHoverBox)return;const seriesKeys=[...this.seriesByKey_.keys()];const chartAreaSel=d3.select(this.chartAreaElement);chartAreaSel.selectAll('.hover').remove();let keyWidthPx=0;let keyHeightPx=0;if(seriesKeys.length>1){keyWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,rect.key).width+5;keyHeightPx=this.textHeightPx_;}
+stacks.sort(function(a,b){return b.topPx-a.topPx;});return stacks;},drawToolTip_(rect){if(!this.enableToolTip)return;const chartAreaSel=d3.select(this.chartAreaElement);chartAreaSel.selectAll('.tooltip').remove();const labelText='View Breakdown';const labelWidth=tr.ui.b.getSVGTextSize(this.chartAreaElement,labelText).width+5;const labelHeight=this.textHeightPx_;const toolTipLeftPx=rect.leftPx+(rect.widthPx/2);const toolTipTopPx=rect.topPx;chartAreaSel.append('rect').attr('class','tooltip').attr('fill','white').attr('opacity',0.8).attr('stroke','black').attr('x',toolTipLeftPx).attr('y',toolTipTopPx).attr('width',labelWidth+5).attr('height',labelHeight+10);chartAreaSel.append('text').style('cursor','pointer').attr('class','tooltip').on('mousedown',()=>this.toolTipCallBack_(rect)).attr('fill','blue').attr('x',toolTipLeftPx+4).attr('y',toolTipTopPx+labelHeight).attr('text-decoration','underline').text(labelText);},drawHoverValueBox_(rect){const rectHoverEvent=new tr.b.Event('rect-mouseenter');rectHoverEvent.rect=rect;this.dispatchEvent(rectHoverEvent);if(!this.enableHoverBox)return;const seriesKeys=[...this.seriesByKey_.keys()];const chartAreaSel=d3.select(this.chartAreaElement);chartAreaSel.selectAll('.hover').remove();let keyWidthPx=0;let keyHeightPx=0;if(seriesKeys.length>1&&!this.isGrouped){keyWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,rect.key).width+5;keyHeightPx=this.textHeightPx_;}
let xLabelWidthPx=0;let xLabelHeightPx=0;if(this.displayXInHover){xLabelWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,rect.datum.x).width+5;xLabelHeightPx=this.textHeightPx_;}
-let value=rect.value;if(this.unit)value=this.unit.format(value);const valueWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,value).width+5;const valueHeightPx=this.textHeightPx_;const hoverWidthPx=Math.max(keyWidthPx,valueWidthPx,xLabelWidthPx);let hoverLeftPx=rect.leftPx+(rect.widthPx/2);hoverLeftPx=Math.max(hoverLeftPx-hoverWidthPx,-this.margin.left);const hoverHeightPx=keyHeightPx+valueHeightPx+xLabelHeightPx+2;let hoverTopPx=rect.topPx;hoverTopPx=Math.min(hoverTopPx,this.getBoundingClientRect().height-hoverHeightPx-12);chartAreaSel.append('rect').attr('class','hover').on('mouseleave',()=>this.clearHoverValueBox_(rect)).attr('fill','white').attr('stroke','black').attr('x',hoverLeftPx).attr('y',hoverTopPx).attr('width',hoverWidthPx).attr('height',hoverHeightPx);if(seriesKeys.length>1){chartAreaSel.append('text').attr('class','hover').on('mouseleave',()=>this.clearHoverValueBox_(rect)).attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx-2).text(rect.key);}
-if(this.displayXInHover){chartAreaSel.append('text').attr('class','hover').on('mouseleave',()=>this.clearHoverValueBox_(rect)).attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx+xLabelHeightPx-2).text(rect.datum.x);}
-chartAreaSel.append('text').attr('class','hover').on('mouseleave',()=>this.clearHoverValueBox_(rect)).attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+hoverHeightPx-2).text(value);},clearHoverValueBox_(rect){const event=window.event;if(event.relatedTarget&&Array.from(event.relatedTarget.classList).includes('hover')){return;}
-const rectHoverEvent=new tr.b.Event('rect-mouseleave');rectHoverEvent.rect=rect;this.dispatchEvent(rectHoverEvent);d3.select(this.chartAreaElement).selectAll('.hover').remove();},drawRect_(rect,sel){sel=sel.data([rect]);sel.enter().append('rect').attr('fill',rect.color).attr('x',rect.leftPx).attr('y',rect.topPx).attr('width',rect.widthPx).attr('height',rect.heightPx).on('mouseenter',this.drawHoverValueBox_.bind(this,rect)).on('mouseleave',this.clearHoverValueBox_.bind(this,rect));sel.exit().remove();},drawUnderflow_(rect,sel){sel=sel.data([rect]);sel.enter().append('text').text('*').attr('fill',rect.color).attr('x',rect.leftPx+(rect.widthPx/2)).attr('y',this.graphHeight).on('mouseenter',this.drawHoverValueBox_.bind(this,rect)).on('mouseleave',this.clearHoverValueBox_.bind(this,rect));sel.exit().remove();},drawOverflow_(rect,sel){sel=sel.data([rect]);sel.enter().append('text').text('*').attr('fill',rect.color).attr('x',rect.leftPx+(rect.widthPx/2)).attr('y',0);sel.exit().remove();},updateDataContents_(dataSel){dataSel.selectAll('*').remove();const chartAreaSel=d3.select(this.chartAreaElement);const seriesKeys=[...this.seriesByKey_.keys()];const rectsSel=dataSel.selectAll('path');this.data_.forEach(function(datum,index){const currentX=this.getXForDatum_(datum,index);let width=undefined;if(index<(this.data_.length-1)){const nextX=this.getXForDatum_(this.data_[index+1],index+1);width=nextX-currentX;}else{width=this.xCushion_;}
+let groupWidthPx=0;let groupHeightPx=0;if(this.isGrouped&&rect.datum.group!==undefined){groupWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,rect.datum.group).width+5;groupHeightPx=this.textHeightPx_;}
+let value=rect.value;if(this.unit)value=this.unit.format(value);const valueWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,value).width+5;const valueHeightPx=this.textHeightPx_;const hoverWidthPx=Math.max(keyWidthPx,valueWidthPx,xLabelWidthPx,groupWidthPx);let hoverLeftPx=rect.leftPx+(rect.widthPx/2);hoverLeftPx=Math.max(hoverLeftPx-hoverWidthPx,-this.margin.left);const hoverHeightPx=keyHeightPx+valueHeightPx+
+xLabelHeightPx+groupHeightPx+2;const topOffSetPx=this.isGrouped?36:12;let hoverTopPx=rect.topPx;hoverTopPx=Math.min(hoverTopPx,this.getBoundingClientRect().height-
+hoverHeightPx-topOffSetPx);chartAreaSel.append('rect').attr('class','hover').on('mouseleave',()=>this.clearHoverValueBox_(rect)).on('mousedown',this.drawToolTip_.bind(this,rect)).attr('fill','white').attr('stroke','black').attr('x',hoverLeftPx).attr('y',hoverTopPx).attr('width',hoverWidthPx).attr('height',hoverHeightPx);if(seriesKeys.length>1&&!this.isGrouped){chartAreaSel.append('text').attr('class','hover').on('mouseleave',()=>this.clearHoverValueBox_(rect)).on('mousedown',this.drawToolTip_.bind(this,rect)).attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx-2).text(rect.key);}
+if(this.displayXInHover){chartAreaSel.append('text').attr('class','hover').on('mouseleave',()=>this.clearHoverValueBox_(rect)).on('mousedown',this.drawToolTip_.bind(this,rect)).attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx+xLabelHeightPx-2).text(rect.datum.x);}
+if(this.isGrouped&&rect.datum.group!==undefined){chartAreaSel.append('text').attr('class','hover').on('mouseleave',()=>this.clearHoverValueBox_(rect)).on('mousedown',this.drawToolTip_.bind(this,rect)).attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx+
+xLabelHeightPx+groupHeightPx-2).text(rect.datum.group);}
+chartAreaSel.append('text').attr('class','hover').on('mouseleave',()=>this.clearHoverValueBox_(rect)).on('mousedown',this.drawToolTip_.bind(this,rect)).attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+hoverHeightPx-2).text(value);},clearHoverValueBox_(rect){const event=window.event;if(event.relatedTarget&&Array.from(event.relatedTarget.classList).includes('hover')){return;}
+const rectHoverEvent=new tr.b.Event('rect-mouseleave');rectHoverEvent.rect=rect;this.dispatchEvent(rectHoverEvent);d3.select(this.chartAreaElement).selectAll('.hover').remove();},drawRect_(rect,sel){sel=sel.data([rect]);sel.enter().append('rect').attr('fill',rect.color).attr('x',rect.leftPx).attr('y',rect.topPx).attr('width',rect.widthPx).attr('height',rect.heightPx).on('mousedown',this.drawToolTip_.bind(this,rect)).on('mouseenter',this.drawHoverValueBox_.bind(this,rect)).on('mouseleave',this.clearHoverValueBox_.bind(this,rect));sel.exit().remove();},drawUnderflow_(rect,sel){sel=sel.data([rect]);sel.enter().append('text').text('*').attr('fill',rect.color).attr('x',rect.leftPx+(rect.widthPx/2)).attr('y',this.graphHeight).on('mousedown',this.drawToolTip_.bind(this,rect)).on('mouseenter',this.drawHoverValueBox_.bind(this,rect)).on('mouseleave',this.clearHoverValueBox_.bind(this,rect));sel.exit().remove();},drawOverflow_(rect,sel){sel=sel.data([rect]);sel.enter().append('text').text('*').attr('fill',rect.color).attr('x',rect.leftPx+(rect.widthPx/2)).attr('y',0);sel.exit().remove();},updateDataContents_(dataSel){dataSel.selectAll('*').remove();const chartAreaSel=d3.select(this.chartAreaElement);const seriesKeys=[...this.seriesByKey_.keys()];const rectsSel=dataSel.selectAll('path');this.data_.forEach(function(datum,index){const currentX=this.getXForDatum_(datum,index);let width=undefined;if(index<(this.data_.length-1)){const nextX=this.getXForDatum_(this.data_[index+1],index+1);width=nextX-currentX;}else{width=this.xCushion_;}
for(const rect of this.getRectsForDatum_(datum,index)){rect.datum=datum;rect.index=index;rect.leftPx=this.xScale_(currentX);rect.rightPx=this.xScale_(currentX+width);rect.widthPx=rect.rightPx-rect.leftPx;this.drawRect_(rect,rectsSel);if(rect.underflow){this.drawUnderflow_(rect,rectsSel);}
if(rect.overflow){this.drawOverflow_(rect,rectsSel);}}},this);}};return{ColumnChart,};});'use strict';tr.exportTo('tr.ui.b',function(){const LineChart=tr.ui.b.define('line-chart',tr.ui.b.ChartBase2DBrushX);LineChart.prototype={__proto__:tr.ui.b.ChartBase2DBrushX.prototype,decorate(){super.decorate();this.enableHoverBox=true;this.displayXInHover=false;},get defaultGraphWidth(){return 20*this.data_.length;},get defaultGraphHeight(){return 100;},drawHoverValueBox_(circle){tr.ui.b.ColumnChart.prototype.drawHoverValueBox_.call(this,circle);},clearHoverValueBox_(circle){tr.ui.b.ColumnChart.prototype.clearHoverValueBox_.call(this,circle);},updateDataContents_(dataSel){dataSel.selectAll('*').remove();const dataBySeriesKey=this.getDataBySeriesKey_();const seriesKeys=[...this.seriesByKey_.keys()];const pathsSel=dataSel.selectAll('path').data(seriesKeys);pathsSel.enter().append('path').style('fill','none').style('stroke-width','1.5px').style('stroke',key=>this.getDataSeries(key).color).attr('d',key=>{const line=d3.svg.line().x(d=>this.xScale_(d.x)).y(d=>this.yScale_(this.dataRange.clamp(d[key])));return line(dataBySeriesKey[key]);});pathsSel.exit().remove();if(this.enableHoverBox){for(let index=0;index<this.data_.length;++index){const datum=this.data_[index];const x=this.getXForDatum_(datum,index);for(const[key,value]of Object.entries(datum)){if(key==='x')continue;if(value===undefined)continue;const color=this.getDataSeries(key).color;const circle=document.createElementNS('http://www.w3.org/2000/svg','circle');circle.setAttribute('cx',this.xScale_(x));circle.setAttribute('cy',this.yScale_(this.dataRange.clamp(value)));circle.setAttribute('r',5);circle.style.fill=color;circle.datum=datum;circle.key=key;circle.value=datum[key];circle.leftPx=this.xScale_(x);circle.widthPx=0;circle.color=color;circle.topPx=this.yScale_(this.dataRange.clamp(value));circle.heightPx=0;circle.addEventListener('mouseenter',()=>this.drawHoverValueBox_(circle));circle.addEventListener('mouseleave',()=>this.clearHoverValueBox_(circle));dataSel[0][0].appendChild(circle);}}}}};return{LineChart,};});'use strict';Polymer({is:'tr-ui-e-s-input-latency-side-panel',behaviors:[tr.ui.behaviors.SidePanel],ready(){this.rangeOfInterest_=new tr.b.math.Range();this.frametimeType_=tr.model.helpers.IMPL_FRAMETIME_TYPE;this.latencyChart_=undefined;this.frametimeChart_=undefined;this.selectedProcessId_=undefined;this.mouseDownIndex_=undefined;this.curMouseIndex_=undefined;},get model(){return this.model_;},set model(model){this.model_=model;if(this.model_){this.modelHelper_=this.model_.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);}else{this.modelHelper_=undefined;}
this.updateToolbar_();this.updateContents_();},get frametimeType(){return this.frametimeType_;},set frametimeType(type){if(this.frametimeType_===type)return;this.frametimeType_=type;this.updateContents_();},get selectedProcessId(){return this.selectedProcessId_;},set selectedProcessId(process){if(this.selectedProcessId_===process)return;this.selectedProcessId_=process;this.updateContents_();},set selection(selection){if(this.latencyChart_===undefined)return;this.latencyChart_.brushedRange=selection.bounds;},setBrushedIndices(mouseDownIndex,curIndex){this.mouseDownIndex_=mouseDownIndex;this.curMouseIndex_=curIndex;this.updateBrushedRange_();},updateBrushedRange_(){if(this.latencyChart_===undefined)return;let r=new tr.b.math.Range();if(this.mouseDownIndex_===undefined){this.latencyChart_.brushedRange=r;return;}
@@ -7658,7 +8026,7 @@ const frameEvents=chromeProcess.getFrameEventsInRange(this.frametimeType,rangeOf
if(frametimeData.length!==0){this.frametimeChart_=this.createLatencyLineChart(frametimeData,'Frame Times',resultArea);}},get rangeOfInterest(){return this.rangeOfInterest_;},set rangeOfInterest(rangeOfInterest){this.rangeOfInterest_=rangeOfInterest;this.updateContents_();},supportsModel(m){if(m===undefined){return{supported:false,reason:'Unknown tracing model'};}
if(!tr.model.helpers.ChromeModelHelper.supportsModel(m)){return{supported:false,reason:'No Chrome browser or renderer process found'};}
const modelHelper=m.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(modelHelper.browserHelper&&modelHelper.browserHelper.hasLatencyEvents){return{supported:true};}
-return{supported:false,reason:'No InputLatency events trace. Consider enabling '+'benchmark" and "input" category when recording the trace'};},get textLabel(){return'Input Latency';}});tr.ui.side_panel.SidePanelRegistry.register(function(){return document.createElement('tr-ui-e-s-input-latency-side-panel');});'use strict';tr.exportTo('tr.e.system_stats',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;function SystemStatsSnapshot(objectInstance,ts,args){ObjectSnapshot.apply(this,arguments);this.objectInstance=objectInstance;this.ts=ts;this.args=args;this.stats=args;}
+return{supported:false,reason:'No InputLatency events trace. Consider enabling '+'benchmark" and "input" category when recording the trace'};},get textLabel(){return'Input Latency';}});tr.ui.side_panel.SidePanelRegistry.register(function(){return document.createElement('tr-ui-e-s-input-latency-side-panel');});'use strict';tr.exportTo('tr.e.system_stats',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;function SystemStatsSnapshot(objectInstance,ts,args){ObjectSnapshot.apply(this,arguments);this.objectInstance=objectInstance;this.ts=ts;this.args=args;this.stats_=args;}
SystemStatsSnapshot.prototype={__proto__:ObjectSnapshot.prototype,initialize(){if(this.args.length===0){throw new Error('No system stats snapshot data.');}
this.stats_=this.args;},getStats(){return this.stats_;},setStats(stats){this.stats_=stats;}};ObjectSnapshot.subTypes.register(SystemStatsSnapshot,{typeName:'base::TraceEventSystemStatsMonitor::SystemStats'});return{SystemStatsSnapshot,};});'use strict';tr.exportTo('tr.ui.b',function(){const constants={HEADING_WIDTH:250};return{constants,};});'use strict';Polymer({is:'tr-ui-b-heading',DOWN_ARROW:String.fromCharCode(0x25BE),RIGHT_ARROW:String.fromCharCode(0x25B8),ready(viewport){this.style.width=(tr.ui.b.constants.HEADING_WIDTH-6)+'px';this.heading_='';this.expanded_=true;this.arrowVisible_=false;this.selectionGenerator_=undefined;this.updateContents_();},get heading(){return this.heading_;},set heading(text){if(this.heading_===text)return;this.heading_=text;this.updateContents_();},set arrowVisible(val){if(this.arrowVisible_===val)return;this.arrowVisible_=!!val;this.updateContents_();},set tooltip(text){this.$.heading.title=text;},set selectionGenerator(generator){if(this.selectionGenerator_===generator)return;this.selectionGenerator_=generator;this.updateContents_();},get expanded(){return this.expanded_;},set expanded(expanded){if(this.expanded_===expanded)return;this.expanded_=!!expanded;this.updateContents_();},onHeadingDivClicked_(){this.dispatchEvent(new tr.b.Event('heading-clicked',true));},updateContents_(){if(this.arrowVisible_){this.$.arrow.style.display='';}else{this.$.arrow.style.display='none';this.$.heading.style.display=this.expanded_?'':'none';}
if(this.arrowVisible_){Polymer.dom(this.$.arrow).textContent=this.expanded_?this.DOWN_ARROW:this.RIGHT_ARROW;}
@@ -7678,7 +8046,7 @@ const snapshots=this.objectInstance_.snapshots;const maxBounds=this.objectInstan
return snapshots[i].ts-snapshots[i-1].ts;}
return snapshots[i+1].ts-snapshots[i].ts;},loWX,hiWX,onSnapshot);},addEventNearToProvidedEventToSelection(event,offset,selection){if(!(event instanceof tr.model.ObjectSnapshot)){throw new Error('Unrecognized event');}
const objectSnapshots=this.objectInstance_.snapshots;const index=objectSnapshots.indexOf(event);const newIndex=index+offset;if(newIndex>=0&&newIndex<objectSnapshots.length){selection.push(objectSnapshots[newIndex]);return true;}
-return false;},addAllEventsMatchingFilterToSelection(filter,selection){},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){const snapshot=tr.b.findClosestElementInSortedArray(this.objectInstance_.snapshots,function(x){return x.ts;},worldX,worldMaxDist);if(!snapshot)return;selection.push(snapshot);}};return{StackedBarsTrack,};});'use strict';tr.exportTo('tr.ui.e.system_stats',function(){const EventPresenter=tr.ui.b.EventPresenter;let statCount;const excludedStats={'meminfo':{'pswpin':0,'pswpout':0,'pgmajfault':0},'diskinfo':{'io':0,'io_time':0,'read_time':0,'reads':0,'reads_merged':0,'sectors_read':0,'sectors_written':0,'weighted_io_time':0,'write_time':0,'writes':0,'writes_merged':0},'swapinfo':{}};const SystemStatsInstanceTrack=tr.ui.b.define('tr-ui-e-system-stats-instance-track',tr.ui.tracks.StackedBarsTrack);SystemStatsInstanceTrack.prototype={__proto__:tr.ui.tracks.StackedBarsTrack.prototype,decorate(viewport){tr.ui.tracks.StackedBarsTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('tr-ui-e-system-stats-instance-track');this.objectInstance_=null;},set objectInstances(objectInstances){if(!objectInstances){this.objectInstance_=[];return;}
+return false;},addAllEventsMatchingFilterToSelection(filter,selection){},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){const snapshot=tr.b.findClosestElementInSortedArray(this.objectInstance_.snapshots,function(x){return x.ts;},worldX,worldMaxDist);if(!snapshot)return;selection.push(snapshot);}};return{StackedBarsTrack,};});'use strict';tr.exportTo('tr.ui.e.system_stats',function(){const EventPresenter=tr.ui.b.EventPresenter;let statCount;const excludedStats={'meminfo':{'pswpin':0,'pswpout':0,'pgmajfault':0},'diskinfo':{'io':0,'io_time':0,'read_time':0,'reads':0,'reads_merged':0,'sectors_read':0,'sectors_written':0,'weighted_io_time':0,'write_time':0,'writes':0,'writes_merged':0},'swapinfo':{},'perfinfo':{'idle_time':0,'read_transfer_count':0,'write_transfer_count':0,'other_transfer_count':0,'read_operation_count':0,'write_operation_count':0,'other_operation_count':0,'pagefile_pages_written':0,'pagefile_pages_write_ios':0,'available_pages':0,'pages_read':0,'page_read_ios':0}};const SystemStatsInstanceTrack=tr.ui.b.define('tr-ui-e-system-stats-instance-track',tr.ui.tracks.StackedBarsTrack);const kPageSizeWindows=4096;SystemStatsInstanceTrack.prototype={__proto__:tr.ui.tracks.StackedBarsTrack.prototype,decorate(viewport){tr.ui.tracks.StackedBarsTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('tr-ui-e-system-stats-instance-track');this.objectInstance_=null;},set objectInstances(objectInstances){if(!objectInstances){this.objectInstance_=[];return;}
if(objectInstances.length!==1){throw new Error('Bad object instance count.');}
this.objectInstance_=objectInstances[0];if(this.objectInstance_!==null){this.computeRates_(this.objectInstance_.snapshots);this.maxStats_=this.computeMaxStats_(this.objectInstance_.snapshots);}},computeRates_(snapshots){for(let i=0;i<snapshots.length;i++){const snapshot=snapshots[i];const stats=snapshot.getStats();let prevSnapshot;if(i===0){prevSnapshot=snapshots[0];}else{prevSnapshot=snapshots[i-1];}
const prevStats=prevSnapshot.getStats();let timeIntervalSeconds=(snapshot.ts-prevSnapshot.ts)/1000;if(timeIntervalSeconds===0){timeIntervalSeconds=1;}
@@ -7691,7 +8059,27 @@ prevStats.pgmajfault)/timeIntervalSeconds;}
if(statName==='pswpin'){stats.bytes_swpin_per_sec=(stats.pswpin-
prevStats.pswpin)*1000/timeIntervalSeconds;}
if(statName==='pswpout'){stats.bytes_swpout_per_sec=(stats.pswpout-
-prevStats.pswpout)*1000/timeIntervalSeconds;}}}},computeMaxStats_(snapshots){const maxStats={};statCount=0;for(let i=0;i<snapshots.length;i++){const snapshot=snapshots[i];const stats=snapshot.getStats();this.computeMaxStatsRecursive_(stats,maxStats,excludedStats);}
+prevStats.pswpout)*1000/timeIntervalSeconds;}
+if(statName==='idle_time'){const units=tr.b.convertUnit(100.,tr.b.UnitScale.TIME.NANO_SEC,tr.b.UnitScale.TIME.SEC);const idleTile=(stats.idle_time-prevStats.idle_time)*units;stats.idle_time_per_sec=idleTile/timeIntervalSeconds;}
+if(statName==='read_transfer_count'){const bytesRead=stats.read_transfer_count-
+prevStats.read_transfer_count;stats.bytes_read_per_sec=bytesRead/timeIntervalSeconds;}
+if(statName==='write_transfer_count'){const bytesWritten=stats.write_transfer_count-
+prevStats.write_transfer_count;stats.bytes_written_per_sec=bytesWritten/timeIntervalSeconds;}
+if(statName==='other_transfer_count'){const bytesTransfer=stats.other_transfer_count-
+prevStats.other_transfer_count;stats.bytes_other_per_sec=bytesTransfer/timeIntervalSeconds;}
+if(statName==='read_operation_count'){const readOperation=stats.read_operation_count-
+prevStats.read_operation_count;stats.read_operation_per_sec=readOperation/timeIntervalSeconds;}
+if(statName==='write_operation_count'){const writeOperation=stats.write_operation_count-
+prevStats.write_operation_count;stats.write_operation_per_sec=writeOperation/timeIntervalSeconds;}
+if(statName==='other_operation_count'){const otherOperation=stats.other_operation_count-
+prevStats.other_operation_count;stats.other_operation_per_sec=otherOperation/timeIntervalSeconds;}
+if(statName==='pagefile_pages_written'){const pageFileBytesWritten=(stats.pagefile_pages_written-
+prevStats.pagefile_pages_written)*kPageSizeWindows;stats.pagefile_bytes_written_per_sec=pageFileBytesWritten/timeIntervalSeconds;}
+if(statName==='pagefile_pages_write_ios'){const pagefileWriteOperation=stats.pagefile_pages_write_ios-
+prevStats.pagefile_pages_write_ios;stats.pagefile_write_operation_per_sec=pagefileWriteOperation/timeIntervalSeconds;}
+if(statName==='available_pages'){stats.available_pages_in_bytes=stats.available_pages*kPageSizeWindows;}
+if(statName==='pages_read'){const pagesBytesRead=(stats.pages_read-prevStats.pages_read)*kPageSizeWindows;stats.bytes_read_per_sec=pagesBytesRead/timeIntervalSeconds;}
+if(statName==='page_read_ios'){const pagesBytesReadOperations=stats.page_read_ios-prevStats.page_read_ios;stats.pagefile_write_operation_per_sec=pagesBytesReadOperations/timeIntervalSeconds;}}}},computeMaxStats_(snapshots){const maxStats={};statCount=0;for(let i=0;i<snapshots.length;i++){const snapshot=snapshots[i];const stats=snapshot.getStats();this.computeMaxStatsRecursive_(stats,maxStats,excludedStats);}
return maxStats;},computeMaxStatsRecursive_(stats,maxStats,excludedStats){for(const statName in stats){if(stats[statName]instanceof Object){if(!(statName in maxStats)){maxStats[statName]={};}
let excludedNested;if(excludedStats&&statName in excludedStats){excludedNested=excludedStats[statName];}else{excludedNested=null;}
this.computeMaxStatsRecursive_(stats[statName],maxStats[statName],excludedNested);}else{if(excludedStats&&statName in excludedStats){continue;}
@@ -7706,7 +8094,7 @@ return currentY;},drawStatNames_(leftView,height,currentY,prefix,maxStats){const
ctx.fillText(fullname,leftView-10,currentY-height/4);currentY+=height;}}
return currentY;}};tr.ui.tracks.ObjectInstanceTrack.register(SystemStatsInstanceTrack,{typeName:'base::TraceEventSystemStatsMonitor::SystemStats'});return{SystemStatsInstanceTrack,};});'use strict';tr.exportTo('tr.ui.e.system_stats',function(){const SystemStatsSnapshotView=tr.ui.b.define('tr-ui-e-system-stats-snapshot-view',tr.ui.analysis.ObjectSnapshotView);SystemStatsSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){Polymer.dom(this).classList.add('tr-ui-e-system-stats-snapshot-view');},updateContents(){const snapshot=this.objectSnapshot_;if(!snapshot||!snapshot.getStats()){Polymer.dom(this).textContent='No system stats snapshot found.';return;}
Polymer.dom(this).textContent='';const stats=snapshot.getStats();Polymer.dom(this).appendChild(this.buildList_(stats));},isFloat(n){return typeof n==='number'&&n%1!==0;},buildList_(stats){const statList=document.createElement('ul');for(const statName in stats){const statText=document.createElement('li');Polymer.dom(statText).textContent=''+statName+': ';Polymer.dom(statList).appendChild(statText);if(stats[statName]instanceof Object){Polymer.dom(statList).appendChild(this.buildList_(stats[statName]));}else{if(this.isFloat(stats[statName])){Polymer.dom(statText).textContent+=stats[statName].toFixed(2);}else{Polymer.dom(statText).textContent+=stats[statName];}}}
-return statList;}};tr.ui.analysis.ObjectSnapshotView.register(SystemStatsSnapshotView,{typeName:'base::TraceEventSystemStatsMonitor::SystemStats'});return{SystemStatsSnapshotView,};});'use strict';tr.exportTo('tr.ui.e.v8',function(){const IGNORED_ENTRIES={match:full=>full.startsWith('*CODE_AGE_')};const INSTANCE_TYPE_GROUPS={FIXED_ARRAY_TYPE:{match:full=>full.startsWith('*FIXED_ARRAY_'),realEntry:'FIXED_ARRAY_TYPE',keyToName:key=>key.slice('*FIXED_ARRAY_'.length).slice(0,-('_SUB_TYPE'.length)),nameToKey:name=>'*FIXED_ARRAY_'+name+'_SUB_TYPE'},CODE_TYPE:{match:full=>full.startsWith('*CODE_'),realEntry:'CODE_TYPE',keyToName:key=>key.slice('*CODE_'.length),nameToKey:name=>'*CODE_'+name},JS_OBJECTS:{match:full=>full.startsWith('JS_'),keyToName:key=>key,nameToKey:name=>name},Strings:{match:full=>full.endsWith('STRING_TYPE'),keyToName:key=>key,nameToKey:name=>name}};const DIFF_COLOR={GREEN:'#64DD17',RED:'#D50000'};function computePercentage(valueA,valueB){if(valueA===0)return 0;return valueA/valueB*100;}
+return statList;}};tr.ui.analysis.ObjectSnapshotView.register(SystemStatsSnapshotView,{typeName:'base::TraceEventSystemStatsMonitor::SystemStats'});return{SystemStatsSnapshotView,};});'use strict';tr.exportTo('tr.ui.e.v8',function(){const IGNORED_ENTRIES={match:full=>full.startsWith('*CODE_AGE_')};const INSTANCE_TYPE_GROUPS={FIXED_ARRAY_TYPE:{match:full=>full.startsWith('*FIXED_ARRAY_'),realEntry:'FIXED_ARRAY_TYPE',keyToName:key=>key.slice('*FIXED_ARRAY_'.length).slice(0,-('_SUB_TYPE'.length)),nameToKey:name=>'*FIXED_ARRAY_'+name+'_SUB_TYPE'},CODE_TYPE:{match:full=>full.startsWith('*CODE_'),realEntry:'CODE_TYPE',keyToName:key=>key.slice('*CODE_'.length),nameToKey:name=>'*CODE_'+name},JS_OBJECTS:{match:full=>full.startsWith('JS_'),keyToName:key=>key,nameToKey:name=>name},Strings:{match:full=>full.endsWith('STRING_TYPE'),keyToName:key=>key,nameToKey:name=>name},Maps:{match:full=>full.startsWith('MAP_')&&full.endsWith('_TYPE'),keyToName:key=>key,nameToKey:name=>name},DescriptorArrays:{match:full=>full.endsWith('DESCRIPTOR_ARRAY_TYPE'),keyToName:key=>key,nameToKey:name=>name}};const DIFF_COLOR={GREEN:'#64DD17',RED:'#D50000'};function computePercentage(valueA,valueB){if(valueA===0)return 0;return valueA/valueB*100;}
class DiffEntry{constructor(originalEntry,diffEntry){this.originalEntry_=originalEntry;this.diffEntry_=diffEntry;}
get title(){return this.diffEntry_.title;}
get overall(){return this.diffEntry_.overall;}
@@ -7767,7 +8155,7 @@ const e=objects[instanceType];for(const name of Object.getOwnPropertyNames(INSTA
this.updateTable_();if(slices.length>1){this.buildOptions_();this.constructDiffTable_();}},updateTable_(){this.constructTable_();this.$.table.tableRows=this.isolateEntries_;this.$.table.rebuild();},});return{};});'use strict';Polymer({is:'tr-ui-e-multi-v8-gc-stats-thread-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],get selection(){return this.$.content.selection;},set selection(selection){this.$.gcObjectsStats.selection=selection;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-e-multi-v8-gc-stats-thread-slice-sub-view',tr.e.v8.V8GCStatsThreadSlice,{multi:true,title:'V8 GC Stats slices'});'use strict';tr.exportTo('tr.e.v8',function(){const IC_STATS_PROPERTIES=['type','category','scriptName','filePosition','state','isNative','map','propertiesMode','numberOfOwnProperties','instanceType'];class ICStatsEntry{constructor(obj){this.type_=obj.type;if(this.type_.includes('Store')){this.category_='Store';}else if(this.type_.includes('Load')){this.category_='Load';}
this.state_=obj.state;if(obj.functionName){this.functionName_=obj.optimized?'*':'~';this.functionName_+=obj.functionName.length===0?'(anonymous function)':obj.functionName;}
this.offset_=obj.offset;this.scriptName_=obj.scriptName?obj.scriptName:'unknown';this.isNative_=obj.scriptName&&obj.scriptName.includes('native');this.lineNum_=obj.lineNum?obj.lineNum:'unknown';this.filePosition_=this.scriptName_+':'+this.lineNum_;if(this.functionName_){this.filePosition_+=' '+this.functionName_+'+'+this.offset_;}
-this.constructor_=obj.constructor?false:true;this.map_=obj.map;if(this.map_){this.propertiesMode_=obj.dict===0?'slow':'fast';}else{this.propertiesMode_='unknown';}
+this.constructor_=obj.constructor?false:true;this.map_=obj.map;if(this.map_){this.propertiesMode_=obj.dict===1?'slow':'fast';}else{this.propertiesMode_='unknown';}
this.numberOfOwnProperties_=obj.own;this.instanceType_=obj.instanceType;this.key_=obj.key;}
get type(){return this.type_;}
get category(){return this.category_;}
@@ -7814,7 +8202,7 @@ match(name){return this.regex_&&name.match(this.regex_);}
add(entry){const value=this.entries_.get(entry.name);if(value!==undefined){value.addSample(entry.count,entry.time);}else{this.entries_.set(entry.name,entry);}
this.count_+=entry.count;this.time_+=entry.time;}
get values(){return Array.from(this.entries_.values());}}
-class RuntimeStatsGroupCollection{constructor(){this.blink_cpp_group_=new RuntimeStatsGroup('Blink C++',/.*Callback.*/);this.api_group_=new RuntimeStatsGroup('API',/.*API.*/);this.groups_=[new RuntimeStatsGroup('Total'),new RuntimeStatsGroup('IC',/.*IC_.*/),new RuntimeStatsGroup('Optimize',/StackGuard|.*Optimize.*|.*Deoptimize.*|Recompile.*/),new RuntimeStatsGroup('Compile-Background',/(.*CompileBackground.*)/),new RuntimeStatsGroup('Compile',/(^Compile.*)|(.*_Compile.*)/),new RuntimeStatsGroup('Parse-Background',/.*ParseBackground.*/),new RuntimeStatsGroup('Parse',/.*Parse.*/),this.blink_cpp_group_,this.api_group_,new RuntimeStatsGroup('GC-Background-Marking',/.*GC.MC.BACKGROUND.*MARKING.*/),new RuntimeStatsGroup('GC-Background-Sweeping',/.*GC.MC.BACKGROUND.*SWEEPING.*/),new RuntimeStatsGroup('GC-Background-Scavenger',/.*GC.SCAVENGER.BACKGROUND.*/),new RuntimeStatsGroup('GC-Background-MinorMC',/.*GC.MINOR_MC.BACKGROUND.*/),new RuntimeStatsGroup('GC-Background-MajorMC',/.*GC.MC.BACKGROUND.*/),new RuntimeStatsGroup('GC-Background-Other',/.*GC.*BACKGROUND.*/),new RuntimeStatsGroup('GC',/GC|AllocateInTargetSpace/),new RuntimeStatsGroup('JavaScript',/JS_Execution/),new RuntimeStatsGroup('V8 C++',/.*/)];this.blink_group_collection_=null;}
+class RuntimeStatsGroupCollection{constructor(){this.blink_cpp_group_=new RuntimeStatsGroup('Blink C++',/.*Callback.*/);this.api_group_=new RuntimeStatsGroup('API',/.*API.*/);this.groups_=[new RuntimeStatsGroup('Total'),new RuntimeStatsGroup('IC',/.*IC_.*/),new RuntimeStatsGroup('Optimize-Background',/(.*OptimizeConcurrent.*)|RecompileConcurrent.*/),new RuntimeStatsGroup('Optimize',/StackGuard|.*Optimize.*|.*Deoptimize.*|Recompile.*/),new RuntimeStatsGroup('Compile-Background',/(.*CompileBackground.*)/),new RuntimeStatsGroup('Compile',/(^Compile.*)|(.*_Compile.*)/),new RuntimeStatsGroup('Parse-Background',/.*ParseBackground.*/),new RuntimeStatsGroup('Parse',/.*Parse.*/),this.blink_cpp_group_,this.api_group_,new RuntimeStatsGroup('GC-Background-Marking',/.*GC.MC.BACKGROUND.*MARKING.*/),new RuntimeStatsGroup('GC-Background-Sweeping',/.*GC.MC.BACKGROUND.*SWEEPING.*/),new RuntimeStatsGroup('GC-Background-Scavenger',/.*GC.SCAVENGER.BACKGROUND.*/),new RuntimeStatsGroup('GC-Background-MinorMC',/.*GC.MINOR_MC.BACKGROUND.*/),new RuntimeStatsGroup('GC-Background-MajorMC',/.*GC.MC.BACKGROUND.*/),new RuntimeStatsGroup('GC-Background-Other',/.*GC.*BACKGROUND.*/),new RuntimeStatsGroup('GC',/GC|AllocateInTargetSpace/),new RuntimeStatsGroup('JavaScript',/JS_Execution/),new RuntimeStatsGroup('V8 C++',/.*/)];this.blink_group_collection_=null;}
addSlices(slices){const blinkEntries=[];for(const slice of slices){if(!(slice instanceof tr.e.v8.V8ThreadSlice))return;let runtimeCallStats;try{runtimeCallStats=JSON.parse(slice.runtimeCallStats);}catch(e){runtimeCallStats=slice.runtimeCallStats;}
if(runtimeCallStats===undefined)continue;for(const[name,stat]of Object.entries(runtimeCallStats)){if(name.match(/Blink_.*/)){if(name==='Blink_V8')continue;const entry=new RuntimeStatsEntry(name,stat[0],stat[1]);blinkEntries.push(entry);continue;}
for(let i=1;i<this.groups_.length;++i){if(this.groups_[i].match(name)){if(stat.length!==2)break;const entry=new RuntimeStatsEntry(name,stat[0],stat[1]);this.groups_[0].addSample(stat[0],stat[1]);this.groups_[i].add(entry);break;}}}}
@@ -7850,7 +8238,7 @@ function getPathsFromStack(stack){return stack.split('\n').map(line=>{line=line.
MetricRegistry.checkFilename=function(metricName,opt_metricPathForTest){if(metricName==='runtimeStatsTotalMetric'||metricName==='v8AndMemoryMetrics'){return;}
const expectedFilename=camelCaseToHackerString(metricName)+'.html';const stack=getCallStack();let metricPath=opt_metricPathForTest;if(metricPath===undefined){const paths=getPathsFromStack(stack);const METRIC_STACK_INDEX=5;if(paths.length<=METRIC_STACK_INDEX||paths[METRIC_STACK_INDEX].join('/')===paths[0].join('/')){return;}
metricPath=paths[METRIC_STACK_INDEX].slice(paths[METRIC_STACK_INDEX].length-2);}
-if(!metricPath[1].endsWith('_test.html')&&metricPath[1]!==expectedFilename&&metricPath.join('_')!==expectedFilename){throw new Error('Expected '+metricName+' to be in a file named '+
+if(!metricPath[1].endsWith('_test.html')&&!metricPath[1].endsWith('_test.html.js')&&metricPath[1]!==expectedFilename&&metricPath[1]!==expectedFilename+'.js'&&metricPath.join('_')!==expectedFilename&&metricPath.join('_')!==expectedFilename+'.js'){throw new Error('Expected '+metricName+' to be in a file named '+
expectedFilename+'; actual: '+metricPath.join('/')+'; stack: '+stack.replace(/\n/g,'\n '));}};MetricRegistry.addEventListener('will-register',function(e){const metric=e.typeInfo.constructor;if(!(metric instanceof Function)){throw new Error('Metrics must be functions.');}
if(!metric.name.endsWith('Metric')&&!metric.name.endsWith('Metrics')){throw new Error('Metric names must end with "Metric" or "Metrics".');}
if(metric.length<2){throw new Error('Metrics take a HistogramSet and a Model and '+'optionally an options dictionary.');}
@@ -7858,7 +8246,21 @@ MetricRegistry.checkFilename(metric.name);});return{MetricRegistry,};});'use str
if(slice.title==='RenderAccessibilityImpl::SendLocationChanges'){renderAccessibilityLocationsHist.addSample(slice.duration,{event:new tr.v.d.RelatedEventSet(slice)});}}}
for(const browserHelper of Object.values(chromeHelper.browserHelpers)){const mainThread=browserHelper.mainThread;if(mainThread===undefined)continue;for(const slice of mainThread.getDescendantEvents()){if(slice.title==='BrowserAccessibilityManager::OnAccessibilityEvents'){browserAccessibilityEventsHist.addSample(slice.duration,{event:new tr.v.d.RelatedEventSet(slice)});}}}
histograms.addHistogram(browserAccessibilityEventsHist);histograms.addHistogram(renderAccessibilityEventsHist);histograms.addHistogram(renderAccessibilityLocationsHist);}
-tr.metrics.MetricRegistry.register(accessibilityMetric);return{accessibilityMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){function androidStartupMetric(histograms,model){const messageLoopStartHistogram=histograms.createHistogram('messageloop_start_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[]);const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(!chromeHelper)return;for(const helper of chromeHelper.browserHelpers){for(const ev of helper.mainThread.asyncSliceGroup.childEvents()){if(ev.title==='Startup.BrowserMessageLoopStartTimeFromMainEntry3'){messageLoopStartHistogram.addSample(ev.duration,{events:new tr.v.d.RelatedEventSet([ev])});}}}}
+tr.metrics.MetricRegistry.register(accessibilityMetric);return{accessibilityMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const MESSAGE_LOOP_EVENT_NAME='Startup.BrowserMessageLoopStartTimeFromMainEntry3';const CONTENT_START_EVENT_NAME='content::Start';const NAVIGATION_EVENT_NAME='Navigation StartToCommit';const FIRST_CONTENTFUL_PAINT_EVENT_NAME='firstContentfulPaint';function androidStartupMetric(histograms,model){let messageLoopStartEvents=[];let navigationEvents=[];const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(!chromeHelper)return;for(const helper of chromeHelper.browserHelpers){for(const ev of helper.mainThread.asyncSliceGroup.childEvents()){if(ev.title===MESSAGE_LOOP_EVENT_NAME){messageLoopStartEvents.push(ev);}else if(ev.title===NAVIGATION_EVENT_NAME){navigationEvents.push(ev);}}}
+let contentStartEvents=[];let firstContentfulPaintEvents=[];const rendererHelpers=chromeHelper.rendererHelpers;const pids=Object.keys(rendererHelpers);for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){if(!rendererHelper.mainThread)continue;for(const ev of rendererHelper.mainThread.sliceGroup.childEvents()){if(ev.title===FIRST_CONTENTFUL_PAINT_EVENT_NAME){firstContentfulPaintEvents.push(ev);break;}else if(ev.title===CONTENT_START_EVENT_NAME){contentStartEvents.push(ev);}}}
+let totalBrowserStarts=messageLoopStartEvents.length;let totalContentStartEvents=contentStartEvents.length;let totalFcpEvents=firstContentfulPaintEvents.length;let totalNavigations=navigationEvents.length;if(totalFcpEvents!==totalBrowserStarts||totalNavigations!==totalBrowserStarts||totalContentStartEvents!==totalBrowserStarts||totalBrowserStarts===0){messageLoopStartEvents=[];contentStartEvents=[];navigationEvents=[];firstContentfulPaintEvents=[];for(const proc of Object.values(model.processes)){for(const ev of proc.getDescendantEvents()){if(ev.title===MESSAGE_LOOP_EVENT_NAME){messageLoopStartEvents.push(ev);}else if(ev.title===NAVIGATION_EVENT_NAME){navigationEvents.push(ev);}else if(ev.title===CONTENT_START_EVENT_NAME){contentStartEvents.push(ev);}}
+for(const ev of proc.getDescendantEvents()){if(ev.title===FIRST_CONTENTFUL_PAINT_EVENT_NAME){firstContentfulPaintEvents.push(ev);break;}}}
+totalBrowserStarts=messageLoopStartEvents.length;totalContentStartEvents=contentStartEvents.length;totalNavigations=navigationEvents.length;totalFcpEvents=firstContentfulPaintEvents.length;}
+function orderEvents(event1,event2){return event1.start-event2.start;}
+messageLoopStartEvents.sort(orderEvents);contentStartEvents.sort(orderEvents);navigationEvents.sort(orderEvents);firstContentfulPaintEvents.sort(orderEvents);if(totalFcpEvents<totalBrowserStarts){throw new Error('Found fewer FCP events ('+totalFcpEvents+') than browser starts ('+totalBrowserStarts+')');}
+const messageLoopStartHistogram=histograms.createHistogram('messageloop_start_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[]);const contentStartHistogram=histograms.createHistogram('experimental_content_start_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[]);const navigationStartHistogram=histograms.createHistogram('experimental_navigation_start_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[]);const navigationCommitHistogram=histograms.createHistogram('navigation_commit_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[]);const firstContentfulPaintHistogram=histograms.createHistogram('first_contentful_paint_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[]);let contentIndex=0;let navIndex=0;let fcpIndex=0;for(let loopStartIndex=0;loopStartIndex<totalBrowserStarts;){const startEvent=messageLoopStartEvents[loopStartIndex];if(fcpIndex===totalFcpEvents){break;}
+const contentStartEvent=contentIndex<contentStartEvents.length?contentStartEvents[contentIndex]:null;if(contentStartEvent&&contentStartEvent.start<startEvent.start){contentIndex++;continue;}
+const navEvent=navIndex<navigationEvents.length?navigationEvents[navIndex]:null;if(navEvent&&navEvent.start<startEvent.start){navIndex++;continue;}
+const fcpEvent=firstContentfulPaintEvents[fcpIndex];if(fcpEvent.start<startEvent.start){fcpIndex++;continue;}
+loopStartIndex++;if(fcpIndex<2){continue;}
+messageLoopStartHistogram.addSample(startEvent.duration,{events:new tr.v.d.RelatedEventSet([startEvent])});if(contentStartEvent){contentStartHistogram.addSample(contentStartEvent.start-startEvent.start,{events:new tr.v.d.RelatedEventSet([startEvent,contentStartEvent])});}
+if(navEvent){navigationStartHistogram.addSample(navEvent.start-startEvent.start,{events:new tr.v.d.RelatedEventSet([startEvent,navEvent])});navigationCommitHistogram.addSample(navEvent.end-startEvent.start,{events:new tr.v.d.RelatedEventSet([startEvent,navEvent])});}
+firstContentfulPaintHistogram.addSample(fcpEvent.end-startEvent.start,{events:new tr.v.d.RelatedEventSet([startEvent,fcpEvent])});}}
tr.metrics.MetricRegistry.register(androidStartupMetric);return{androidStartupMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const MAX_INPUT_EVENT_TO_STARTUP_DELAY_IN_MS=2000;const MIN_DRAW_DELAY_IN_MS=80;const MAX_DRAW_DELAY_IN_MS=2000;function findProcess(processName,model){for(const pid in model.processes){const process=model.processes[pid];if(process.name===processName){return process;}}
return undefined;}
function findThreads(process,threadPrefix){if(process===undefined)return undefined;const threads=[];for(const tid in process.threads){const thread=process.threads[tid];if(thread.name.startsWith(threadPrefix)){threads.push(thread);}}
@@ -7885,7 +8287,7 @@ if(this.pieces.length>0&&this.pieces[this.pieces.length-1].x2>x1){throw new Erro
if(x1<x2){this.pieces.push(new Piece(x1,y1,x2,y2));}},partBelow(y){return this.pieces.reduce((acc,p)=>(acc+p.partBelow(y)),0);},get min(){return this.pieces.reduce((acc,p)=>Math.min(acc,p.min),Infinity);},get max(){return this.pieces.reduce((acc,p)=>Math.max(acc,p.max),-Infinity);},get average(){let weightedSum=0;let totalWeight=0;this.pieces.forEach(function(piece){weightedSum+=piece.width*piece.average;totalWeight+=piece.width;});if(totalWeight===0)return 0;return weightedSum/totalWeight;},percentile(percent){if(!(percent>=0&&percent<=1)){throw new Error('percent must be [0,1]');}
let lower=this.min;let upper=this.max;const total=this.partBelow(upper);if(total===0)return 0;while(upper-lower>PERCENTILE_PRECISION){const middle=(lower+upper)/2;const below=this.partBelow(middle);if(below/total<percent){lower=middle;}else{upper=middle;}}
return(lower+upper)/2;}};function Piece(x1,y1,x2,y2){this.x1=x1;this.y1=y1;this.x2=x2;this.y2=y2;}
-Piece.prototype={partBelow(y){const width=this.width;if(width===0)return 0;const minY=this.min;const maxY=this.max;if(y>=maxY)return width;if(y<minY)return 0;return(y-minY)/(maxY-minY)*width;},get min(){return Math.min(this.y1,this.y2);},get max(){return Math.max(this.y1,this.y2);},get average(){return(this.y1+this.y2)/2;},get width(){return this.x2-this.x1;}};return{PiecewiseLinearFunction,};});'use strict';tr.exportTo('tr.metrics.v8.utils',function(){const IDLE_TASK_EVENT='SingleThreadIdleTaskRunner::RunTask';const V8_EXECUTE='V8.Execute';const GC_EVENT_PREFIX='V8.GC';const FULL_GC_EVENT='V8.GCCompactor';const LOW_MEMORY_EVENT='V8.GCLowMemoryNotification';const MAJOR_GC_EVENT='MajorGC';const MINOR_GC_EVENT='MinorGC';const TOP_GC_EVENTS={'V8.GCCompactor':'v8-gc-full-mark-compactor','V8.GCFinalizeMC':'v8-gc-latency-mark-compactor','V8.GCFinalizeMCReduceMemory':'v8-gc-memory-mark-compactor','V8.GCIncrementalMarking':'v8-gc-incremental-step','V8.GCIncrementalMarkingFinalize':'v8-gc-incremental-finalize','V8.GCIncrementalMarkingStart':'v8-gc-incremental-start','V8.GCPhantomHandleProcessingCallback':'v8-gc-phantom-handle-callback','V8.GCScavenger':'v8-gc-scavenger'};const LOW_MEMORY_MARK_COMPACTOR='v8-gc-low-memory-mark-compactor';function findParent(event,predicate){let parent=event.parentSlice;while(parent){if(predicate(parent)){return parent;}
+Piece.prototype={partBelow(y){const width=this.width;if(width===0)return 0;const minY=this.min;const maxY=this.max;if(y>=maxY)return width;if(y<minY)return 0;return(y-minY)/(maxY-minY)*width;},get min(){return Math.min(this.y1,this.y2);},get max(){return Math.max(this.y1,this.y2);},get average(){return(this.y1+this.y2)/2;},get width(){return this.x2-this.x1;}};return{PiecewiseLinearFunction,};});'use strict';tr.exportTo('tr.metrics.v8.utils',function(){const IDLE_TASK_EVENT='SingleThreadIdleTaskRunner::RunTask';const V8_EXECUTE='V8.Execute';const GC_EVENT_PREFIX='V8.GC';const FULL_GC_EVENT='V8.GCCompactor';const LOW_MEMORY_EVENT='V8.GCLowMemoryNotification';const MAJOR_GC_EVENT='MajorGC';const MINOR_GC_EVENT='MinorGC';const TOP_GC_EVENTS={'V8.GCCompactor':'v8-gc-full-mark-compactor','V8.GCFinalizeMC':'v8-gc-latency-mark-compactor','V8.GCFinalizeMCReduceMemory':'v8-gc-memory-mark-compactor','V8.GCIncrementalMarking':'v8-gc-incremental-step','V8.GCIncrementalMarkingFinalize':'v8-gc-incremental-finalize','V8.GCIncrementalMarkingStart':'v8-gc-incremental-start','V8.GCPhantomHandleProcessingCallback':'v8-gc-phantom-handle-callback','V8.GCScavenger':'v8-gc-scavenger'};const MARK_COMPACTOR_EVENTS=new Set(['V8.GCCompactor','V8.GCFinalizeMC','V8.GCFinalizeMCReduceMemory','V8.GCIncrementalMarking','V8.GCIncrementalMarkingFinalize','V8.GCIncrementalMarkingStart','V8.GCPhantomHandleProcessingCallback']);const LOW_MEMORY_MARK_COMPACTOR='v8-gc-low-memory-mark-compactor';function findParent(event,predicate){let parent=event.parentSlice;while(parent){if(predicate(parent)){return parent;}
parent=parent.parentSlice;}
return null;}
function isIdleTask(event){return event.title===IDLE_TASK_EVENT;}
@@ -7897,7 +8299,11 @@ function isGarbageCollectionEvent(event){return event.title&&event.title.startsW
function isTopGarbageCollectionEvent(event){return event.title in TOP_GC_EVENTS;}
function isForcedGarbageCollectionEvent(event){return findParent(event,isLowMemoryEvent)!==null;}
function isSubGarbageCollectionEvent(event){return isGarbageCollectionEvent(event)&&event.parentSlice&&(isTopGarbageCollectionEvent(event.parentSlice)||event.parentSlice.title===MAJOR_GC_EVENT||event.parentSlice.title===MINOR_GC_EVENT);}
+function isNotForcedTopGarbageCollectionEvent(event){return tr.metrics.v8.utils.isTopGarbageCollectionEvent(event)&&!tr.metrics.v8.utils.isForcedGarbageCollectionEvent(event);}
+function isNotForcedSubGarbageCollectionEvent(event){return tr.metrics.v8.utils.isSubGarbageCollectionEvent(event)&&!tr.metrics.v8.utils.isForcedGarbageCollectionEvent(event);}
function isFullMarkCompactorEvent(event){return event.title==='V8.GCCompactor';}
+function isMarkCompactorSummaryEvent(event){return event.title==='V8.GCMarkCompactorSummary';}
+function isMarkCompactorMarkingSummaryEvent(event){return event.title==='V8.GCMarkCompactorMarkingSummary';}
function isIncrementalMarkingEvent(event){return event.title.startsWith('V8.GCIncrementalMarking');}
function isLatencyMarkCompactorEvent(event){return event.title==='V8.GCFinalizeMC';}
function isMemoryMarkCompactorEvent(event){return event.title==='V8.GCFinalizeMCReduceMemory';}
@@ -7907,27 +8313,53 @@ function isCompileUnoptimizeRCSCategory(name){return name==='Compile';}
function isCompileParseRCSCategory(name){return name==='Parse';}
function isCompileRCSCategory(name){return name==='Compile'||name==='Optimize'||name==='Parse';}
function isV8RCSEvent(event){return event instanceof tr.e.v8.V8ThreadSlice;}
+function isMarkCompactorEvent(event){return MARK_COMPACTOR_EVENTS.has(event.title);}
+function isNotForcedMarkCompactorEvent(event){return!isForcedGarbageCollectionEvent(event)&&isMarkCompactorEvent(event);}
+function forcedGCEventName(){return LOW_MEMORY_EVENT;}
function topGarbageCollectionEventName(event){if(event.title===FULL_GC_EVENT){if(findParent(event,isLowMemoryEvent)){return LOW_MEMORY_MARK_COMPACTOR;}}
return TOP_GC_EVENTS[event.title];}
function subGarbageCollectionEventName(event){const topEvent=findParent(event,isTopGarbageCollectionEvent);const prefix=topEvent?topGarbageCollectionEventName(topEvent):'unknown';const name=event.title.replace('V8.GC_MC_','').replace('V8.GC_SCAVENGER_','').replace('V8.GC_','').replace(/_/g,'-').toLowerCase();return prefix+'-'+name;}
-function groupAndProcessEvents(model,filterCallback,nameCallback,processCallback){const nameToEvents={};for(const event of model.getDescendantEvents()){if(!filterCallback(event))continue;const name=nameCallback(event);nameToEvents[name]=nameToEvents[name]||[];nameToEvents[name].push(event);}
-for(const[name,events]of Object.entries(nameToEvents)){processCallback(name,events);}}
+function jsExecutionThreads(model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);let threads=[];for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){if(rendererHelper.isChromeTracingUI)continue;threads.push(rendererHelper.mainThread);threads=threads.concat(rendererHelper.dedicatedWorkerThreads);threads=threads.concat(rendererHelper.foregroundWorkerThreads);}
+return threads;}
+function groupAndProcessEvents(model,filterCallback,groupCallback,processCallback){const groupToEvents={};const threads=jsExecutionThreads(model);for(const thread of threads){for(const event of thread.sliceGroup.childEvents()){if(!filterCallback(event))continue;const group=groupCallback(event);groupToEvents[group]=groupToEvents[group]||[];groupToEvents[group].push(event);}}
+for(const[group,events]of Object.entries(groupToEvents)){processCallback(group,events);}}
function unionOfIntervals(intervals){if(intervals.length===0)return[];return tr.b.math.mergeRanges(intervals.map(x=>{return{min:x.start,max:x.end};}),1e-6,function(ranges){return{start:ranges.reduce((acc,x)=>Math.min(acc,x.min),ranges[0].min),end:ranges.reduce((acc,x)=>Math.max(acc,x.max),ranges[0].max)};});}
function hasV8Stats(globalMemoryDump){let v8stats=undefined;globalMemoryDump.iterateContainerDumps(function(dump){v8stats=v8stats||dump.getMemoryAllocatorDumpByFullName('v8');});return!!v8stats;}
function rangeForMemoryDumps(model){const startOfFirstDumpWithV8=model.globalMemoryDumps.filter(hasV8Stats).reduce((start,dump)=>Math.min(start,dump.start),Infinity);if(startOfFirstDumpWithV8===Infinity)return new tr.b.math.Range();return tr.b.math.Range.fromExplicitRange(startOfFirstDumpWithV8,Infinity);}
-return{findParent,groupAndProcessEvents,isForcedGarbageCollectionEvent,isFullMarkCompactorEvent,isGarbageCollectionEvent,isIdleTask,isIncrementalMarkingEvent,isLatencyMarkCompactorEvent,isLowMemoryEvent,isMemoryMarkCompactorEvent,isScavengerEvent,isSubGarbageCollectionEvent,isTopGarbageCollectionEvent,isTopV8ExecuteEvent,isV8Event,isV8ExecuteEvent,isV8RCSEvent,isCompileRCSCategory,isCompileOptimizeRCSCategory,isCompileUnoptimizeRCSCategory,isCompileParseRCSCategory,rangeForMemoryDumps,subGarbageCollectionEventName,topGarbageCollectionEventName,unionOfIntervals,};});'use strict';tr.exportTo('tr.metrics.blink',function(){const BLINK_GC_EVENTS={'BlinkGCMarking':'blink-gc-marking','ThreadState::completeSweep':'blink-gc-complete-sweep','ThreadState::performIdleLazySweep':'blink-gc-idle-lazy-sweep'};function isBlinkGarbageCollectionEvent(event){return event.title in BLINK_GC_EVENTS;}
-function blinkGarbageCollectionEventName(event){return BLINK_GC_EVENTS[event.title];}
-function blinkGcMetric(histograms,model){addDurationOfTopEvents(histograms,model);addTotalDurationOfTopEvents(histograms,model);addIdleTimesOfTopEvents(histograms,model);addTotalIdleTimesOfTopEvents(histograms,model);}
-tr.metrics.MetricRegistry.register(blinkGcMetric);const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const percentage_biggerIsBetter=tr.b.Unit.byName.normalizedPercentage_biggerIsBetter;const CUSTOM_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(0,20,200).addExponentialBins(200,100);function createNumericForTopEventTime(name){const n=new tr.v.Histogram(name,timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);n.customizeSummaryOptions({avg:true,count:true,max:true,min:false,std:true,sum:true,percentile:[0.90]});return n;}
-function createNumericForIdleTime(name){const n=new tr.v.Histogram(name,timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);n.customizeSummaryOptions({avg:true,count:false,max:true,min:false,std:false,sum:true,percentile:[]});return n;}
-function createPercentage(name,numerator,denominator){const histogram=new tr.v.Histogram(name,percentage_biggerIsBetter);if(denominator===0){histogram.addSample(0);}else{histogram.addSample(numerator/denominator);}
-return histogram;}
-function addDurationOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isBlinkGarbageCollectionEvent,blinkGarbageCollectionEventName,function(name,events){const cpuDuration=createNumericForTopEventTime(name);events.forEach(function(event){cpuDuration.addSample(event.cpuDuration);});histograms.addHistogram(cpuDuration);});}
-function addTotalDurationOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isBlinkGarbageCollectionEvent,event=>'blink-gc-total',function(name,events){const cpuDuration=createNumericForTopEventTime(name);events.forEach(function(event){cpuDuration.addSample(event.cpuDuration);});histograms.addHistogram(cpuDuration);});}
-function addIdleTimesOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isBlinkGarbageCollectionEvent,blinkGarbageCollectionEventName,function(name,events){addIdleTimes(histograms,model,name,events);});}
-function addTotalIdleTimesOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isBlinkGarbageCollectionEvent,event=>'blink-gc-total',function(name,events){addIdleTimes(histograms,model,name,events);});}
-function addIdleTimes(histograms,model,name,events){const cpuDuration=createNumericForIdleTime(name+'_cpu');const insideIdle=createNumericForIdleTime(name+'_inside_idle');const outsideIdle=createNumericForIdleTime(name+'_outside_idle');const idleDeadlineOverrun=createNumericForIdleTime(name+'_idle_deadline_overrun');events.forEach(function(event){const idleTask=tr.metrics.v8.utils.findParent(event,tr.metrics.v8.utils.isIdleTask);let inside=0;let overrun=0;if(idleTask){const allottedTime=idleTask.args.allotted_time_ms;if(event.duration>allottedTime){overrun=event.duration-allottedTime;inside=event.cpuDuration*allottedTime/event.duration;}else{inside=event.cpuDuration;}}
-cpuDuration.addSample(event.cpuDuration);insideIdle.addSample(inside);outsideIdle.addSample(event.cpuDuration-inside);idleDeadlineOverrun.addSample(overrun);});histograms.addHistogram(idleDeadlineOverrun);histograms.addHistogram(outsideIdle);const percentage=createPercentage(name+'_percentage_idle',insideIdle.sum,cpuDuration.sum);histograms.addHistogram(percentage);}
+class WindowEndpoint{constructor(start,points){this.points=points;this.lastIndex=-1;this.position=start;this.distanceUntilNextPoint=points[0].position-start;this.cummulativePause=0;this.stackDepth=0;}
+advance(delta){if(delta<this.distanceUntilNextPoint){this.position+=delta;this.cummulativePause+=this.stackDepth>0?delta:0;this.distanceUntilNextPoint=this.points[this.lastIndex+1].position-this.position;}else{this.position+=this.distanceUntilNextPoint;this.cummulativePause+=this.stackDepth>0?this.distanceUntilNextPoint:0;this.distanceUntilNextPoint=0;this.lastIndex++;if(this.lastIndex<this.points.length){this.stackDepth+=this.points[this.lastIndex].delta;if(this.lastIndex+1<this.points.length){this.distanceUntilNextPoint=this.points[this.lastIndex+1].position-this.position;}}}}}
+function mutatorUtilization(start,end,timeWindow,intervals){const mu=new tr.b.math.PiecewiseLinearFunction();if(end-start<=timeWindow){return mu;}
+if(intervals.length===0){mu.push(start,1.0,end-timeWindow,1.0);return mu;}
+intervals=unionOfIntervals(intervals);const points=[];for(const interval of intervals){points.push({position:interval.start,delta:1});points.push({position:interval.end,delta:-1});}
+points.sort((a,b)=>a.position-b.position);points.push({position:end,delta:0});const left=new WindowEndpoint(start,points);const right=new WindowEndpoint(start,points);const EPSILON=1e-6;while(right.position-left.position<timeWindow-EPSILON){right.advance(timeWindow-(right.position-left.position));}
+while(right.lastIndex<points.length){const distanceUntilNextPoint=Math.min(left.distanceUntilNextPoint,right.distanceUntilNextPoint);const position1=left.position;const value1=right.cummulativePause-left.cummulativePause;left.advance(distanceUntilNextPoint);right.advance(distanceUntilNextPoint);if(distanceUntilNextPoint>0){const position2=left.position;const value2=right.cummulativePause-left.cummulativePause;mu.push(position1,1.0-value1/timeWindow,position2,1.0-value2/timeWindow);}}
+return mu;}
+function addMutatorUtilization(metricName,eventFilter,timeWindows,rendererHelpers,histograms){const histogramMap=new Map();for(const timeWindow of timeWindows){const summaryOptions={avg:false,count:false,max:false,min:true,std:false,sum:false};const description=`The minimum mutator utilization in ${timeWindow}ms time window`;const histogram=histograms.createHistogram(`${metricName}-${timeWindow}ms_window`,tr.b.Unit.byName.normalizedPercentage_biggerIsBetter,[],{summaryOptions,description});histogramMap.set(timeWindow,histogram);}
+for(const rendererHelper of rendererHelpers){if(rendererHelper.isChromeTracingUI)continue;const pauses=[];for(const event of rendererHelper.mainThread.sliceGroup.childEvents()){if(eventFilter(event)&&event.end>event.start){pauses.push({start:event.start,end:event.end});}}
+pauses.sort((a,b)=>a.start-b.start);const start=rendererHelper.mainThread.bounds.min;const end=rendererHelper.mainThread.bounds.max;for(const timeWindow of timeWindows){const mu=mutatorUtilization(start,end,timeWindow,pauses);histogramMap.get(timeWindow).addSample(mu.min);}}}
+return{addMutatorUtilization,findParent,forcedGCEventName,groupAndProcessEvents,isForcedGarbageCollectionEvent,isFullMarkCompactorEvent,isGarbageCollectionEvent,isIdleTask,isIncrementalMarkingEvent,isLatencyMarkCompactorEvent,isLowMemoryEvent,isMarkCompactorSummaryEvent,isMarkCompactorMarkingSummaryEvent,isMemoryMarkCompactorEvent,isNotForcedMarkCompactorEvent,isNotForcedTopGarbageCollectionEvent,isNotForcedSubGarbageCollectionEvent,isScavengerEvent,isSubGarbageCollectionEvent,isTopGarbageCollectionEvent,isTopV8ExecuteEvent,isV8Event,isV8ExecuteEvent,isV8RCSEvent,isCompileRCSCategory,isCompileOptimizeRCSCategory,isCompileUnoptimizeRCSCategory,isCompileParseRCSCategory,mutatorUtilization,rangeForMemoryDumps,subGarbageCollectionEventName,topGarbageCollectionEventName,unionOfIntervals,};});'use strict';tr.exportTo('tr.metrics.blink',function(){const BLINK_TOP_GC_FOREGROUND_SWEEPING_EVENTS={'BlinkGC.CompleteSweep':'blink-gc-complete-sweep','BlinkGC.LazySweepInIdle':'blink-gc-sweep-task-foreground','BlinkGC.LazySweepOnAllocation':'blink-gc-sweep-allocation'};const BLINK_TOP_GC_BACKGROUND_SWEEPING_EVENTS={'BlinkGC.ConcurrentSweep':'blink-gc-sweep-task-background'};const BLINK_TOP_GC_EVENTS=Object.assign({'BlinkGC.AtomicPauseMarkEpilogue':'blink-gc-atomic-pause-mark-epilogue','BlinkGC.AtomicPauseMarkPrologue':'blink-gc-atomic-pause-mark-prologue','BlinkGC.AtomicPauseMarkRoots':'blink-gc-atomic-pause-mark-roots','BlinkGC.AtomicPauseMarkTransitiveClosure':'blink-gc-atomic-pause-mark-transitive-closure','BlinkGC.AtomicPauseSweepAndCompact':'blink-gc-atomic-pause-sweep-and-compact','BlinkGC.IncrementalMarkingStartMarking':'blink-gc-incremental-start','BlinkGC.IncrementalMarkingStep':'blink-gc-incremental-step'},BLINK_TOP_GC_FOREGROUND_SWEEPING_EVENTS);const ATOMIC_PAUSE_EVENTS=['BlinkGC.AtomicPauseMarkEpilogue','BlinkGC.AtomicPauseMarkPrologue','BlinkGC.AtomicPauseMarkRoots','BlinkGC.AtomicPauseMarkTransitiveClosure','BlinkGC.AtomicPauseSweepAndCompact'];function blinkGarbageCollectionEventName(event){return BLINK_TOP_GC_EVENTS[event.title];}
+function isNonForcedEvent(event){return(!event.args||!event.args.forced)&&!tr.metrics.v8.utils.isForcedGarbageCollectionEvent(event);}
+function isNonForcedBlinkGarbageCollectionEvent(event){return event.title in BLINK_TOP_GC_EVENTS&&isNonForcedEvent(event);}
+function isNonForcedBlinkGarbageCollectionAtomicPauseEvent(event){return ATOMIC_PAUSE_EVENTS.includes(event.title)&&isNonForcedEvent(event);}
+function isNonForcedBlinkGarbageCollectionForegroundSweepingEvent(event){return event.title in BLINK_TOP_GC_FOREGROUND_SWEEPING_EVENTS&&isNonForcedEvent(event);}
+function isNonForcedBlinkGarbageCollectionBackgroundSweepingEvent(event){return event.title in BLINK_TOP_GC_BACKGROUND_SWEEPING_EVENTS&&isNonForcedEvent(event);}
+function isNonNestedNonForcedBlinkGarbageCollectionEvent(event){return isNonForcedBlinkGarbageCollectionEvent(event)&&!tr.metrics.v8.utils.findParent(event,tr.metrics.v8.utils.isGarbageCollectionEvent);}
+function blinkGcMetric(histograms,model){addDurationOfTopEvents(histograms,model);addDurationOfAtomicPause(histograms,model);addTotalDurationOfTopEvents(histograms,model);addTotalDurationOfBlinkAndV8TopEvents(histograms,model);addTotalDurationOfForegroundSweeping(histograms,model);addTotalDurationOfBackgroundSweeping(histograms,model);}
+tr.metrics.MetricRegistry.register(blinkGcMetric);const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const CUSTOM_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(0,20,200).addExponentialBins(200,100);function createNumericForTopEventTime(name){const n=new tr.v.Histogram(name,timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);n.customizeSummaryOptions({avg:true,count:true,max:true,min:false,std:true,sum:true,percentile:[0.90]});return n;}
+function createNumericForTotalEventTime(name){const n=new tr.v.Histogram(name,timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);n.customizeSummaryOptions({avg:false,count:true,max:false,min:false,std:false,sum:true,percentile:[0.90]});return n;}
+function createNumericForUnifiedEventTime(name){const n=new tr.v.Histogram(name,timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);n.customizeSummaryOptions({avg:false,count:true,max:true,min:false,std:false,sum:true,percentile:[0.90]});return n;}
+function addDurationOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNonForcedBlinkGarbageCollectionEvent,blinkGarbageCollectionEventName,function(name,events){const cpuDuration=createNumericForTopEventTime(name);for(const event of events){cpuDuration.addSample(event.cpuDuration);}
+histograms.addHistogram(cpuDuration);});}
+function addDurationOfAtomicPause(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNonForcedBlinkGarbageCollectionAtomicPauseEvent,event=>event.args.epoch,function(group,events){const cpuDuration=createNumericForTopEventTime('blink-gc-atomic-pause');cpuDuration.addSample(events.reduce((acc,current)=>acc+current.cpuDuration,0));histograms.addHistogram(cpuDuration);});}
+function addTotalDurationOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNonForcedBlinkGarbageCollectionEvent,event=>'blink-gc-total',function(name,events){const cpuDuration=createNumericForTotalEventTime(name);for(const event of events){cpuDuration.addSample(event.cpuDuration);}
+histograms.addHistogram(cpuDuration);});}
+function addTotalDurationOfForegroundSweeping(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNonForcedBlinkGarbageCollectionForegroundSweepingEvent,event=>'blink-gc-sweep-foreground',function(name,events){const cpuDuration=createNumericForTotalEventTime(name);for(const event of events){cpuDuration.addSample(event.cpuDuration);}
+histograms.addHistogram(cpuDuration);});}
+function addTotalDurationOfBackgroundSweeping(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNonForcedBlinkGarbageCollectionBackgroundSweepingEvent,event=>'blink-gc-sweep-background',function(name,events){const cpuDuration=createNumericForTotalEventTime(name);for(const event of events){cpuDuration.addSample(event.cpuDuration);}
+histograms.addHistogram(cpuDuration);});}
+function isV8OrBlinkTopLevelGarbageCollectionEvent(event){return tr.metrics.v8.utils.isNotForcedTopGarbageCollectionEvent(event)||isNonNestedNonForcedBlinkGarbageCollectionEvent(event);}
+function addTotalDurationOfBlinkAndV8TopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isV8OrBlinkTopLevelGarbageCollectionEvent,event=>'unified-gc-total',function(name,events){const cpuDuration=createNumericForUnifiedEventTime(name);for(const event of events){cpuDuration.addSample(event.cpuDuration);}
+histograms.addHistogram(cpuDuration);});}
return{blinkGcMetric,};});'use strict';tr.exportTo('tr.metrics.blink',function(){function leakDetectionMetric(histograms,model){const modelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(modelHelper===undefined){throw new Error('Chrome is not present.');}
const rendererHelpers=modelHelper.rendererHelpers;if(Object.keys(rendererHelpers).length===0){throw new Error('Renderer process is not present.');}
const pids=Object.keys(rendererHelpers);const chromeDumps=tr.metrics.sh.splitGlobalDumpsByBrowserName(model,undefined).get('chrome');const sumCounter=new Map();for(const pid of pids){for(const[key,count]of countLeakedBlinkObjects(chromeDumps,pid)){sumCounter.set(key,(sumCounter.get(key)||0)+count);}}
@@ -7938,7 +8370,11 @@ const firstCounter=countBlinkObjects(dumps[0],pid);const lastCounter=countBlinkO
return diffCounter;}
function countBlinkObjects(dump,pid){const counter=new Map();const processesMemoryDumps=dump.processMemoryDumps;if(processesMemoryDumps[pid]===undefined)return counter;const blinkObjectsDump=processesMemoryDumps[pid].memoryAllocatorDumps.find(dump=>dump.fullName==='blink_objects');for(const v of blinkObjectsDump.children){counter.set(v.name,v.numerics.object_count.value);}
return counter;}
-return{leakDetectionMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){function getCpuSnapshotsFromModel(model){const snapshots=[];for(const pid in model.processes){const snapshotInstances=model.processes[pid].objects.getAllInstancesNamed('CPUSnapshots');if(!snapshotInstances)continue;for(const object of snapshotInstances[0].snapshots){snapshots.push(object.args.processes);}}
+return{leakDetectionMetric,};});'use strict';tr.exportTo('tr.metrics.console',function(){const COUNT_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(1,1e4,30);const SUMMARY_OPTIONS=tr.v.Histogram.AVERAGE_ONLY_SUMMARY_OPTIONS;const SOURCES=['all','js','network'];function consoleErrorMetric(histograms,model){const counts={};for(const source of SOURCES){counts[source]=0;}
+for(const slice of model.getDescendantEvents()){if(slice.category==='blink.console'&&slice.title==='ConsoleMessage::Error'){const source=slice.args.source.toLowerCase();counts.all++;if(source in counts){counts[source]++;}}
+if(slice.category==='v8.console'&&(slice.title==='V8ConsoleMessage::Exception'||slice.title==='V8ConsoleMessage::Error'||slice.title==='V8ConsoleMessage::Assert')){counts.all++;counts.js++;}}
+for(const source of SOURCES){histograms.createHistogram(`console:error:${source}`,tr.b.Unit.byName.count_smallerIsBetter,counts[source],{description:`Number of ${source} console error messages`,summaryOptions:SUMMARY_OPTIONS});}}
+tr.metrics.MetricRegistry.register(consoleErrorMetric);return{consoleErrorMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){function getCpuSnapshotsFromModel(model){const snapshots=[];for(const pid in model.processes){const snapshotInstances=model.processes[pid].objects.getAllInstancesNamed('CPUSnapshots');if(!snapshotInstances)continue;for(const object of snapshotInstances[0].snapshots){snapshots.push(object.args.processes);}}
return snapshots;}
function getProcessSumsFromSnapshot(snapshot){const processSums=new Map();for(const processData of snapshot){const processName=processData.name;if(!(processSums.has(processName))){processSums.set(processName,{sum:0.0,paths:new Set()});}
processSums.get(processName).sum+=parseFloat(processData.pCpu);if(processData.path){processSums.get(processName).paths.add(processData.path);}}
@@ -7949,18 +8385,19 @@ return processNumerics;}
function cpuProcessMetric(histograms,model){const snapshots=getCpuSnapshotsFromModel(model);const processNumerics=buildNumericsFromSnapshots(snapshots);for(const[processName,processData]of processNumerics){const numeric=processData.numeric;const missingSnapshotCount=snapshots.length-numeric.numValues;for(let i=0;i<missingSnapshotCount;i++){numeric.addSample(0);}
numeric.diagnostics.set('paths',new
tr.v.d.GenericSet([...processData.paths]));histograms.addHistogram(numeric);}}
-tr.metrics.MetricRegistry.register(cpuProcessMetric);return{cpuProcessMetric,};});'use strict';tr.exportTo('tr.metrics',function(){function mediaMetric(histograms,model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(chromeHelper===undefined)return;for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){const mainThread=rendererHelper.mainThread;if(mainThread===undefined)continue;const compositorThread=rendererHelper.compositorThread;const audioThreads=rendererHelper.process.findAllThreadsNamed('AudioOutputDevice');if(compositorThread===undefined&&audioThreads.length===0)continue;const processData=new PerProcessData();processData.recordPlayStarts(mainThread);if(!processData.hasPlaybacks)continue;if(compositorThread!==undefined){processData.calculateTimeToVideoPlays(compositorThread);processData.calculateDroppedFrameCounts(compositorThread);}
+tr.metrics.MetricRegistry.register(cpuProcessMetric);return{cpuProcessMetric,};});'use strict';tr.exportTo('tr.metrics',function(){function mediaMetric(histograms,model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(chromeHelper===undefined)return;for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){const mainThread=rendererHelper.mainThread;if(mainThread===undefined)continue;const videoThreads=rendererHelper.process.findAllThreadsMatching(thread=>(thread.name?thread.name.startsWith('ThreadPoolSingleThreadSharedForegroundBlocking'):false));const compositorThread=rendererHelper.compositorThread;if(compositorThread!==undefined){videoThreads.push(compositorThread);}
+const audioThreads=rendererHelper.process.findAllThreadsNamed('AudioOutputDevice');if(audioThreads.length===0&&videoThreads.length===0)continue;const processData=new PerProcessData();processData.recordPlayStarts(mainThread);if(!processData.hasPlaybacks)continue;if(videoThreads.length!==0){processData.calculateTimeToVideoPlays(videoThreads);processData.calculateDroppedFrameCounts(videoThreads);}
if(audioThreads.length!==0){processData.calculateTimeToAudioPlays(audioThreads);}
processData.calculateSeekTimes(mainThread);processData.calculateBufferingTimes(mainThread);processData.addMetricToHistograms(histograms);}}
class PerProcessData{constructor(){this.playbackIdToDataMap_=new Map();}
recordPlayStarts(mainThread){for(const event of mainThread.sliceGroup.getDescendantEvents()){if(event.title==='WebMediaPlayerImpl::DoLoad'){const id=event.args.id;if(this.playbackIdToDataMap_.has(id)){throw new Error('Unexpected multiple initialization of a media playback');}
this.playbackIdToDataMap_.set(id,new PerPlaybackData(event.start));}}}
get hasPlaybacks(){return this.playbackIdToDataMap_.size>0;}
-calculateTimeToVideoPlays(compositorThread){for(const event of compositorThread.sliceGroup.getDescendantEvents()){if(event.title==='VideoRendererImpl::Render'){this.getPerPlaybackObject_(event.args.id).processVideoRenderTime(event.start);}}}
+calculateTimeToVideoPlays(videoThreads){for(const thread of videoThreads){for(const event of thread.sliceGroup.getDescendantEvents()){if(event.title==='VideoRendererImpl::Render'){this.getPerPlaybackObject_(event.args.id).processVideoRenderTime(event.start);}}}}
calculateTimeToAudioPlays(audioThreads){for(const audioThread of audioThreads){for(const event of audioThread.sliceGroup.getDescendantEvents()){if(event.title==='AudioRendererImpl::Render'){this.getPerPlaybackObject_(event.args.id).processAudioRenderTime(event.start);}}}}
calculateSeekTimes(mainThread){for(const event of mainThread.sliceGroup.getDescendantEvents()){if(event.title==='WebMediaPlayerImpl::DoSeek'){this.getPerPlaybackObject_(event.args.id).processDoSeek(event.args.target,event.start);}else if(event.title==='WebMediaPlayerImpl::OnPipelineSeeked'){this.getPerPlaybackObject_(event.args.id).processOnPipelineSeeked(event.args.target,event.start);}else if(event.title==='WebMediaPlayerImpl::BufferingHaveEnough'){this.getPerPlaybackObject_(event.args.id).processBufferingHaveEnough(event.start);}}}
calculateBufferingTimes(mainThread){for(const event of mainThread.sliceGroup.getDescendantEvents()){if(event.title==='WebMediaPlayerImpl::OnEnded'){this.getPerPlaybackObject_(event.args.id).processOnEnded(event.start,event.args.duration);}}}
-calculateDroppedFrameCounts(compositorThread){for(const event of compositorThread.sliceGroup.getDescendantEvents()){if(event.title==='VideoFramesDropped'){this.getPerPlaybackObject_(event.args.id).processVideoFramesDropped(event.args.count);}}}
+calculateDroppedFrameCounts(videoThreads){for(const thread of videoThreads){for(const event of thread.sliceGroup.getDescendantEvents()){if(event.title==='VideoFramesDropped'){this.getPerPlaybackObject_(event.args.id).processVideoFramesDropped(event.args.count);}}}}
addMetricToHistograms(histograms){for(const[id,playbackData]of this.playbackIdToDataMap_){playbackData.addMetricToHistograms(histograms);}}
getPerPlaybackObject_(playbackId){let perPlaybackObject=this.playbackIdToDataMap_.get(playbackId);if(perPlaybackObject===undefined){perPlaybackObject=new PerPlaybackData(undefined);this.playbackIdToDataMap_.set(playbackId,perPlaybackObject);}
return perPlaybackObject;}}
@@ -7986,7 +8423,99 @@ processOnEnded(playEndTime,duration){if(this.playStart_===undefined)return;if(th
addMetricToHistograms(histograms){this.addSample_(histograms,'time_to_video_play',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,this.timeToVideoPlay);this.addSample_(histograms,'time_to_audio_play',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,this.timeToAudioPlay);this.addSample_(histograms,'dropped_frame_count',tr.b.Unit.byName.count_smallerIsBetter,this.droppedFrameCount);for(const[key,value]of this.seekTimes.entries()){const keyString=key.toString().replace('.','_');this.addSample_(histograms,'pipeline_seek_time_'+keyString,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,value.pipelineSeekTime);this.addSample_(histograms,'seek_time_'+keyString,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,value.seekTime);}
this.addSample_(histograms,'buffering_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,this.bufferingTime);}
addSample_(histograms,name,unit,sample){if(sample===undefined)return;const histogram=histograms.getHistogramNamed(name);if(histogram===undefined){histograms.createHistogram(name,unit,sample);}else{histogram.addSample(sample);}}}
-tr.metrics.MetricRegistry.register(mediaMetric);return{mediaMetric,};});'use strict';tr.exportTo('tr.metrics',function(){function sampleExceptionMetric(histograms,model){const hist=new tr.v.Histogram('foo',tr.b.Unit.byName.sizeInBytes_smallerIsBetter);hist.addSample(9);hist.addSample(91,{bar:new tr.v.d.GenericSet([{hello:42}])});for(const expectation of model.userModel.expectations){if(expectation instanceof tr.model.um.ResponseExpectation){}else if(expectation instanceof tr.model.um.AnimationExpectation){}else if(expectation instanceof tr.model.um.IdleExpectation){}else if(expectation instanceof tr.model.um.LoadExpectation){}}
+tr.metrics.MetricRegistry.register(mediaMetric);return{mediaMetric,};});'use strict';tr.exportTo('tr.metrics.rendering',function(){const UNKNOWN_THREAD_NAME='Unknown';const CATEGORY_THREAD_MAP=new Map();CATEGORY_THREAD_MAP.set('total_all',[/.*/]);CATEGORY_THREAD_MAP.set('browser',[/^Browser Compositor$/,/^CrBrowserMain$/]);CATEGORY_THREAD_MAP.set('display_compositor',[/^VizCompositorThread$/]);CATEGORY_THREAD_MAP.set('GPU',[/^Chrome_InProcGpuThread$/,/^CrGpuMain$/]);CATEGORY_THREAD_MAP.set('IO',[/IOThread/]);CATEGORY_THREAD_MAP.set('raster',[/CompositorTileWorker/]);CATEGORY_THREAD_MAP.set('renderer_compositor',[/^Compositor$/]);CATEGORY_THREAD_MAP.set('renderer_main',[/^CrRendererMain$/]);CATEGORY_THREAD_MAP.set('total_rendering',[/^Browser Compositor$/,/^Chrome_InProcGpuThread$/,/^Compositor$/,/CompositorTileWorker/,/^CrBrowserMain$/,/^CrGpuMain$/,/^CrRendererMain$/,/IOThread/,/^VizCompositorThread$/]);const ALL_CATEGORIES=[...CATEGORY_THREAD_MAP.keys(),'other'];function addValueToMap_(map,key,value){const oldValue=map.get(key)||0;map.set(key,oldValue+value);}
+function categoryShouldHaveBreakdown(category){return category==='total_all'||category==='total_rendering';}
+function*getCategories_(threadName){let isOther=true;for(const[category,regexps]of CATEGORY_THREAD_MAP){for(const regexp of regexps){if(regexp.test(threadName)){if(category!=='total_all')isOther=false;yield category;break;}}}
+if(isOther)yield'other';}
+function isSubset_(regexps1,regexps2){for(const r1 of regexps1){if(regexps2.find(r2=>r2.toString()===r1.toString())===undefined){return false;}}
+return true;}
+function addCpuUtilizationHistograms(histograms,model,segments,shouldNormalize,segmentCostFunc,histogramNameFunc,description,unit){if(!unit)unit=tr.b.Unit.byName.unitlessNumber;const histogramMap=new Map();for(const category of ALL_CATEGORIES){const histogram=histograms.createHistogram(histogramNameFunc(category),unit,[],{binBoundaries:tr.v.HistogramBinBoundaries.createExponential(1,50,20),description,summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,});histogramMap.set(category,histogram);}
+for(const[category,regexps]of CATEGORY_THREAD_MAP){const relatedCategories=new tr.v.d.RelatedNameMap();const histogram=histogramMap.get(category);for(const[otherCategory,otherRegexps]of CATEGORY_THREAD_MAP){if(otherCategory===category)continue;if(category!=='all'&&!isSubset_(otherRegexps,regexps))continue;const otherHistogram=histogramMap.get(otherCategory);relatedCategories.set(otherCategory,otherHistogram.name);}
+if([...relatedCategories.values()].length>0){histogram.diagnostics.set('breakdown',relatedCategories);}}
+for(const segment of segments){const threadValues=new Map();for(const thread of model.getAllThreads()){addValueToMap_(threadValues,thread.name||UNKNOWN_THREAD_NAME,segmentCostFunc(thread,segment));}
+const categoryValues=new Map();const breakdowns=new Map();for(const[threadName,coresPerSec]of threadValues){for(const category of getCategories_(threadName)){addValueToMap_(categoryValues,category,coresPerSec);if(!categoryShouldHaveBreakdown(category))continue;if(!breakdowns.has(category)){breakdowns.set(category,new tr.v.d.Breakdown());}
+breakdowns.get(category).set(threadName,coresPerSec);}}
+for(const category of ALL_CATEGORIES){let value=categoryValues.get(category)||0;if(shouldNormalize)value/=segment.duration;const diagnostics=new tr.v.d.DiagnosticMap();const breakdown=breakdowns.get(category);if(breakdown)diagnostics.set('breakdown',breakdown);const histogram=histogramMap.get(category);histogram.addSample(value,diagnostics);}}}
+const SUMMARY_OPTIONS={percentile:[0.90,0.95],ci:[0.95],};return{addCpuUtilizationHistograms,SUMMARY_OPTIONS,};});'use strict';tr.exportTo('tr.metrics.rendering',function(){const PRESENT_EVENT='Display::FrameDisplayed';const DISPLAY_EVENT='BenchmarkInstrumentation::DisplayRenderingStats';const DRM_EVENT='DrmEventFlipComplete';const SURFACE_FLINGER_EVENT='vsync_before';const COMPOSITOR_FRAME_PRESENTED_EVENT='FramePresented';const MIN_FRAME_LENGTH=0.5;const MIN_FRAME_COUNT=10;const PAUSE_THRESHOLD=20;const ASH_ENVIRONMENT='ash';const BROWSER_ENVIRONMENT='browser';class FrameEvent{constructor(event){this.event_=event;}
+get eventStart(){return this.event_.start;}
+get frameStart(){if(this.event_.title!==DRM_EVENT)return this.event_.start;const data=this.event_.args.data;const TIME=tr.b.UnitScale.TIME;return tr.b.convertUnit(data['vblank.tv_sec'],TIME.SEC,TIME.MILLI_SEC)+
+tr.b.convertUnit(data['vblank.tv_usec'],TIME.MICRO_SEC,TIME.MILLI_SEC);}
+get event(){return this.event_;}}
+class FrameSegment{constructor(frameEvent,duration){this.frameEvent_=frameEvent;this.duration_=duration;this.segment_=new tr.model.um.Segment(frameEvent.eventStart,duration);this.length_=undefined;}
+updateLength(refreshPeriod){this.length_=this.duration_/refreshPeriod;}
+get segment(){return this.segment_;}
+get boundsRange(){return this.segment_.boundsRange;}
+get length(){return this.length_;}
+get duration(){return this.duration_;}
+get event(){return this.frameEvent_.event;}}
+function getDisplayCompositorPresentationEventsExp_(modelHelper){if(!modelHelper)return[];function findEventsFromProcess(process){const events=[];for(const event of process.findTopmostSlicesNamed(PRESENT_EVENT)){events.push(event);}
+return events;}
+if(modelHelper.gpuHelper){const events=findEventsFromProcess(modelHelper.gpuHelper.process);if(events.length>0)return events;}
+if(!modelHelper.browserProcess)return[];return findEventsFromProcess(modelHelper.browserProcess);}
+function getDisplayCompositorPresentationEvents_(modelHelper){if(!modelHelper||!modelHelper.browserProcess)return[];let events=[];if(modelHelper.surfaceFlingerProcess){events=[...modelHelper.surfaceFlingerProcess.findTopmostSlicesNamed(SURFACE_FLINGER_EVENT)];if(events.length>0)return events;}
+if(modelHelper.gpuHelper){const gpuProcess=modelHelper.gpuHelper.process;events=[...gpuProcess.findTopmostSlicesNamed(DRM_EVENT)];if(events.length>0)return events;events=[...gpuProcess.findTopmostSlicesNamed(DISPLAY_EVENT)];if(events.length>0)return events;}
+return[...modelHelper.browserProcess.findTopmostSlicesNamed(DISPLAY_EVENT)];}
+function getUIPresentationEvents_(modelHelper){if(!modelHelper||!modelHelper.browserProcess)return[];const legacyEvents=[];const eventsByEnvironment={};eventsByEnvironment[ASH_ENVIRONMENT]=[];eventsByEnvironment[BROWSER_ENVIRONMENT]=[];for(const event of modelHelper.browserProcess.findTopmostSlicesNamed(COMPOSITOR_FRAME_PRESENTED_EVENT)){if(!('environment'in event.args)){legacyEvents.push(event);}else{eventsByEnvironment[event.args.environment].push(event);}}
+if(eventsByEnvironment[ASH_ENVIRONMENT].length>0){return eventsByEnvironment[ASH_ENVIRONMENT];}
+if(eventsByEnvironment[BROWSER_ENVIRONMENT].length>0){return eventsByEnvironment[BROWSER_ENVIRONMENT];}
+return legacyEvents;}
+function computeFrameSegments_(events,segments,opt_minFrameCount){const minFrameCount=opt_minFrameCount||MIN_FRAME_COUNT;const frameEvents=events.map(e=>new FrameEvent(e));const frameSegments=[];for(const segment of segments){const filtered=segment.boundsRange.filterArray(frameEvents,x=>x.eventStart);if(filtered.length<minFrameCount)continue;for(let i=1;i<filtered.length;i++){const duration=filtered[i].frameStart-filtered[i-1].frameStart;frameSegments.push(new FrameSegment(filtered[i-1],duration));}}
+return frameSegments;}
+function addBasicFrameTimeHistograms_(histograms,frameSegments,prefix){const frameTimes=(frameSegments.length===0)?[0]:frameSegments.map(x=>x.duration);histograms.createHistogram(`${prefix}frame_times`,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,frameTimes,{binBoundaries:tr.v.HistogramBinBoundaries.createLinear(0,50,20),description:'Raw frame times.',summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,});histograms.createHistogram(`${prefix}percentage_smooth`,tr.b.Unit.byName.unitlessNumber_biggerIsBetter,100*tr.b.math.Statistics.sum(frameTimes,(x=>(x<17?1:0)))/frameTimes.length,{description:'Percentage of frames that were hitting 60 FPS.',summaryOptions:{},});}
+function addFrameTimeHistograms(histograms,model,segments,opt_minFrameCount){const minFrameCount=opt_minFrameCount||MIN_FRAME_COUNT;const modelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const events=getDisplayCompositorPresentationEvents_(modelHelper);if(!events)return;addFrameTimeHistogramsHelper(histograms,model,segments,events,'',true,minFrameCount);const eventsExp=getDisplayCompositorPresentationEventsExp_(modelHelper);if(eventsExp&&eventsExp.length>0){addFrameTimeHistogramsHelper(histograms,model,segments,eventsExp,'exp_',minFrameCount);}}
+function addFrameTimeHistogramsHelper(histograms,model,segments,events,prefix,addCpuMetrics,minFrameCount){const frameSegments=computeFrameSegments_(events,segments,minFrameCount);addBasicFrameTimeHistograms_(histograms,frameSegments,prefix+'');if(addCpuMetrics){tr.metrics.rendering.addCpuUtilizationHistograms(histograms,model,frameSegments,false,(thread,segment)=>thread.getCpuTimeForRange(segment.boundsRange),category=>`thread_${category}_cpu_time_per_frame`,'CPU cores of a thread group per frame',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);tr.metrics.rendering.addCpuUtilizationHistograms(histograms,model,frameSegments,false,(thread,segment)=>thread.getNumToplevelSlicesForRange(segment.boundsRange),category=>`tasks_per_frame_${category}`,'Number of tasks of a thread group per frame',tr.b.Unit.byName.unitlessNumber_smallerIsBetter);}
+const refreshPeriod=getRefreshPeriod(model,frameSegments.map(fs=>fs.boundsRange));frameSegments.forEach(fs=>fs.updateLength(refreshPeriod));const validFrames=frameSegments.filter(fs=>fs.length>=MIN_FRAME_LENGTH);const totalFrameDuration=tr.b.math.Statistics.sum(frameSegments,fs=>fs.duration);addJankCountHistograms(histograms,validFrames,prefix);const frameLengths=validFrames.map(frame=>frame.length);histograms.createHistogram(prefix+'frame_lengths',tr.b.Unit.byName.unitlessNumber_smallerIsBetter,frameLengths,{binBoundaries:tr.v.HistogramBinBoundaries.createLinear(0,5,20),summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,description:'Frame times in vsyncs.'});histograms.createHistogram(prefix+'avg_surface_fps',tr.b.Unit.byName.unitlessNumber_biggerIsBetter,frameLengths.length/tr.b.convertUnit(totalFrameDuration,tr.b.UnitScale.TIME.MILLI_SEC,tr.b.UnitScale.TIME.SEC),{description:'Average frames per second.',summaryOptions:{},});}
+function addUIFrameTimeHistograms(histograms,model,segments,opt_minFrameCount){const minFrameCount=opt_minFrameCount||MIN_FRAME_COUNT;const events=getUIPresentationEvents_(model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper));if(events.length===0)return;const frameSegments=computeFrameSegments_(events,segments,minFrameCount);addBasicFrameTimeHistograms_(histograms,frameSegments,'ui_');}
+function addJankCountHistograms(histograms,validFrames,prefix){const jankEvents=[];for(let i=1;i<validFrames.length;i++){const change=Math.round((validFrames[i].length-validFrames[i-1].length));if(change>0&&change<PAUSE_THRESHOLD){jankEvents.push(validFrames[i].event);}}
+const jankCount=jankEvents.length;const diagnostics=new tr.v.d.DiagnosticMap();diagnostics.set('events',new tr.v.d.RelatedEventSet(jankEvents));diagnostics.set('timestamps',new tr.v.d.GenericSet(jankEvents.map(e=>e.start)));const histogram=histograms.createHistogram(prefix+'jank_count',tr.b.Unit.byName.count_smallerIsBetter,{value:jankCount,diagnostics},{description:'Number of changes in frame rate.',summaryOptions:{},});}
+function getRefreshPeriod(model,ranges){for(const metadata of model.metadata){if(metadata.value&&metadata.value.surface_flinger){return metadata.value.surface_flinger.refresh_period;}}
+const FRAME_LENGTH=1000.0/60;const BEGIN_FRAME_ARGS='Scheduler::BeginFrame';const FRAME_INTERVAL='interval_us';const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){if(rendererHelper.compositorThread===undefined)continue;const slices=rendererHelper.compositorThread.sliceGroup;for(const slice of slices.getDescendantEventsInSortedRanges(ranges)){if(slice.title!==BEGIN_FRAME_ARGS)continue;const data=slice.args.args;if(!(FRAME_INTERVAL in data)){throw new Error(`${FRAME_INTERVAL} is missing`);}
+return tr.b.convertUnit(data[FRAME_INTERVAL],tr.b.UnitScale.TIME.MICRO_SEC,tr.b.UnitScale.TIME.MILLI_SEC);}}
+return FRAME_LENGTH;}
+return{addFrameTimeHistograms,addUIFrameTimeHistograms,};});'use strict';tr.exportTo('tr.metrics.rendering',function(){const RGB_DECODE_EVENT='ImageFrameGenerator::decode';const YUV_DECODE_EVENT='ImageFrameGenerator::decodeToYUV';const BLINK_GPU_RASTER_DECODE_EVENT='GpuImageDecodeCache::DecodeImage';const BLINK_SOFTWARE_RASTER_DECODE_EVENT='SoftwareImageDecodeCache::'+'DecodeImageInTask';function getImageDecodingEvents_(modelHelper,ranges){if(!modelHelper||!modelHelper.rendererHelpers)return[];const events=[];for(const renderer of Object.values(modelHelper.rendererHelpers)){for(const thread of renderer.rasterWorkerThreads){const slices=thread.sliceGroup;for(const slice of slices.getDescendantEventsInSortedRanges(ranges)){if(slice.title===RGB_DECODE_EVENT||slice.title===YUV_DECODE_EVENT||slice.title===BLINK_GPU_RASTER_DECODE_EVENT||slice.title===BLINK_SOFTWARE_RASTER_DECODE_EVENT){events.push(slice);}}}}
+return events;}
+function addImageDecodeTimeHistograms(histograms,model,segments){const modelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const decodeEvents=getImageDecodingEvents_(modelHelper,segments.map(s=>s.boundsRange));if(!decodeEvents)return;histograms.createHistogram('rgb_decode_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,decodeEvents.filter(slice=>slice.title===RGB_DECODE_EVENT).map(slice=>slice.cpuDuration),{description:'Duration of the Blink RGB decoding path for a chunk '+'of image data (possibly the whole image).',summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,});histograms.createHistogram('yuv_decode_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,decodeEvents.filter(slice=>slice.title===YUV_DECODE_EVENT).map(slice=>slice.cpuDuration),{description:'Duration of the Blink YUV decoding path for a '+'chunk of image data (possibly the whole image).',summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,});histograms.createHistogram('blink_decode_time_gpu_rasterization',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,decodeEvents.filter(slice=>slice.title===BLINK_GPU_RASTER_DECODE_EVENT).map(slice=>slice.cpuDuration),{description:'Duration of decoding and scaling within the '+'GpuImageDecodeCache for a chunk of image data '+'(possibly the whole image)',summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,});histograms.createHistogram('blink_decode_time_software_rasterization',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,decodeEvents.filter(slice=>slice.title===BLINK_SOFTWARE_RASTER_DECODE_EVENT).map(slice=>slice.cpuDuration),{description:'Duration of decoding and scaling within the '+'SoftwareImageDecodeCache for a chunk of image data '+'(possibly the whole image)',summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,});}
+return{addImageDecodeTimeHistograms};});'use strict';tr.exportTo('tr.metrics.rendering',function(){const BEGIN_SCROLL_UPDATE_COMP_NAME='LATENCY_BEGIN_SCROLL_LISTENER_UPDATE_MAIN_COMPONENT';const END_COMP_NAME='INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT';function*iterAsyncEvents_(processHelpers,ranges,processEventFn){for(const processHelper of processHelpers){const process=processHelper.process;for(const event of process.getDescendantEventsInSortedRanges(ranges,container=>container instanceof tr.model.AsyncSliceGroup)){yield*processEventFn(event);}}}
+function*processLatencyEvent(event){if(event.title!=='Latency::ScrollUpdate'||!('data'in event.args)||!(END_COMP_NAME in event.args.data)){return;}
+const data=event.args.data;const endTime=data[END_COMP_NAME].time;if(BEGIN_SCROLL_UPDATE_COMP_NAME in data){yield tr.b.Unit.timestampFromUs(endTime-data[BEGIN_SCROLL_UPDATE_COMP_NAME].time);}else{throw new Error('LatencyInfo has no begin component');}}
+function addLatencyHistograms(histograms,model,segments){const modelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(!modelHelper)return;const ranges=segments.map(s=>s.boundsRange);const mainThreadScrollLatencies=[...iterAsyncEvents_(Object.values(modelHelper.rendererHelpers),ranges,processLatencyEvent)];histograms.createHistogram('main_thread_scroll_latency',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,mainThreadScrollLatencies,{binBoundaries:tr.v.HistogramBinBoundaries.createLinear(0,50,50),summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,description:'Main thread scroll latencies.'});}
+return{addLatencyHistograms,};});'use strict';tr.exportTo('tr.metrics.rendering',function(){function eventIsValidGraphicsEvent_(event,eventMap){if(event.title!=='Graphics.Pipeline'||!event.bindId||!event.args||!event.args.step){return false;}
+const bindId=event.bindId;if(eventMap.has(bindId)&&event.args.step in eventMap.get(bindId)){if(event.args.step==='IssueBeginFrame'||event.args.step==='ReceiveBeginFrame'){throw new Error('Unexpected duplicate step: '+event.args.step);}
+return false;}
+return true;}
+function generateBreakdownForCompositorPipelineInClient_(flow){const breakdown=new tr.v.d.Breakdown();breakdown.set('time before GenerateRenderPass',flow.GenerateRenderPass.start-flow.ReceiveBeginFrame.start);breakdown.set('GenerateRenderPass duration',flow.GenerateRenderPass.duration);breakdown.set('GenerateCompositorFrame duration',flow.GenerateCompositorFrame.duration);breakdown.set('SubmitCompositorFrame duration',flow.SubmitCompositorFrame.duration);return breakdown;}
+function generateBreakdownForCompositorPipelineInService_(flow){const breakdown=new tr.v.d.Breakdown();breakdown.set('Processing CompositorFrame on reception',flow.ReceiveCompositorFrame.duration);breakdown.set('Delay before SurfaceAggregation',flow.SurfaceAggregation.start-flow.ReceiveCompositorFrame.end);breakdown.set('SurfaceAggregation duration',flow.SurfaceAggregation.duration);return breakdown;}
+function generateBreakdownForDraw_(drawEvent){const breakdown=new tr.v.d.Breakdown();for(const slice of drawEvent.subSlices){breakdown.set(slice.title,slice.duration);}
+return breakdown;}
+function getDisplayCompositorThread_(model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const gpuHelper=chromeHelper.gpuHelper;if(gpuHelper){const thread=gpuHelper.process.findAtMostOneThreadNamed('VizCompositorThread');if(thread){return thread;}}
+if(!chromeHelper.browserProcess)return null;return chromeHelper.browserProcess.findAtMostOneThreadNamed('CrBrowserMain');}
+function getRasterTaskTimes(sourceFrameNumber,model){const modelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const renderers=modelHelper.telemetryHelper.renderersWithIR;if(renderers.length===0)return;const rasterThreads=renderers[0].rasterWorkerThreads;let earliestStart=undefined;let lastEnd=undefined;for(const rasterThread of rasterThreads){for(const slice of[...rasterThread.findTopmostSlicesNamed('TaskGraphRunner::RunTask')]){if(slice.args&&slice.args.source_frame_number_&&slice.args.source_frame_number_===sourceFrameNumber){if(earliestStart===undefined||slice.start<earliestStart){earliestStart=slice.start;}
+if(lastEnd===undefined||slice.end>lastEnd){lastEnd=slice.end;}}}}
+return{start:earliestStart,end:lastEnd};}
+function addPipelineHistograms(histograms,model,segments){const ranges=segments.map(s=>s.boundsRange);const bindEvents=new Map();for(const thread of model.getAllThreads()){for(const event of thread.sliceGroup.childEvents()){if(!eventIsValidGraphicsEvent_(event,bindEvents))continue;for(const range of ranges){if(range.containsExplicitRangeInclusive(event.start,event.end)){if(!bindEvents.has(event.bindId))bindEvents.set(event.bindId,{});break;}}
+if(bindEvents.has(event.bindId)){bindEvents.get(event.bindId)[event.args.step]=event;}}}
+const dcThread=getDisplayCompositorThread_(model);const drawEvents={};if(dcThread){const events=[...dcThread.findTopmostSlicesNamed('Graphics.Pipeline.DrawAndSwap')];for(const segment of segments){const filteredEvents=segment.boundsRange.filterArray(events,evt=>evt.start);for(const event of filteredEvents){if((event.args&&event.args.status==='canceled')||!event.id.startsWith(':ptr:')){continue;}
+const id=parseInt(event.id.substring(5),16);if(id in drawEvents){throw new Error('Duplicate draw events: '+id);}
+drawEvents[id]=event;}}}
+const issueToReceipt=histograms.createHistogram('pipeline:begin_frame_transport',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],{description:'Latency of begin-frame message from the display '+'compositor to the client, including the IPC latency and task-'+'queue time in the client.',summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,});const issueToRasterStart=histograms.createHistogram('pipeline:begin_frame_to_raster_start',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],{description:'Latency between begin-frame message and '+'the beginning of the first CompositorTask run in the compositor.',summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,});const issueToRasterEnd=histograms.createHistogram('pipeline:begin_frame_to_raster_end',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],{description:'Latency between begin-frame message and '+'the end of the last CompositorTask run in the compositor.',summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,});const receiptToSubmit=histograms.createHistogram('pipeline:begin_frame_to_frame_submission',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],{description:'Latency between begin-frame reception and '+'CompositorFrame submission in the renderer.',summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,});const submitToAggregate=histograms.createHistogram('pipeline:frame_submission_to_display',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],{description:'Latency between CompositorFrame submission in the '+'renderer to display in the display-compositor, including IPC '+'latency, task-queue time in the display-compositor, and '+'additional processing (e.g. surface-sync etc.)',summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,});const aggregateToDraw=histograms.createHistogram('pipeline:draw',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],{description:'How long it takes for the gpu-swap step.',summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,});for(const flow of bindEvents.values()){if(!flow.IssueBeginFrame||!flow.ReceiveBeginFrame||!flow.SubmitCompositorFrame||!flow.SurfaceAggregation){continue;}
+issueToReceipt.addSample(flow.ReceiveBeginFrame.start-
+flow.IssueBeginFrame.start);receiptToSubmit.addSample(flow.SubmitCompositorFrame.end-flow.ReceiveBeginFrame.start,{breakdown:generateBreakdownForCompositorPipelineInClient_(flow)});submitToAggregate.addSample(flow.SurfaceAggregation.end-flow.SubmitCompositorFrame.end,{breakdown:generateBreakdownForCompositorPipelineInService_(flow)});if(flow.SubmitCompositorFrame.parentSlice){const sourceFrameNumber=flow.SubmitCompositorFrame.parentSlice.args.source_frame_number_;const rasterDuration=getRasterTaskTimes(sourceFrameNumber,model);if(rasterDuration&&rasterDuration.start&&rasterDuration.end){const receiveToStart=rasterDuration.start-
+flow.ReceiveBeginFrame.start;const receiveToEnd=rasterDuration.end-flow.ReceiveBeginFrame.end;if(receiveToEnd>0){issueToRasterStart.addSample(receiveToStart>0?receiveToStart:0);issueToRasterEnd.addSample(receiveToEnd);}}}
+if(flow.SurfaceAggregation.args&&flow.SurfaceAggregation.args.display_trace){const displayTrace=flow.SurfaceAggregation.args.display_trace;if(!(displayTrace in drawEvents))continue;const drawEvent=drawEvents[displayTrace];aggregateToDraw.addSample(drawEvent.duration,{breakdown:generateBreakdownForDraw_(drawEvent)});}}}
+return{addPipelineHistograms,};});'use strict';tr.exportTo('tr.metrics.rendering',function(){const IMPL_THREAD_RENDERING_STATS_EVENT='BenchmarkInstrumentation::ImplThreadRenderingStats';const VISIBLE_CONTENT_DATA='visible_content_area';const APPROXIMATED_VISIBLE_CONTENT_DATA='approximated_visible_content_area';const CHECKERBOARDED_VISIBLE_CONTENT_DATA='checkerboarded_visible_content_area';function addPixelsHistograms(histograms,model,segments){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(!chromeHelper)return;const approximatedPixelPercentages=[];const checkerboardedPixelPercentages=[];const ranges=segments.map(s=>s.boundsRange);for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){if(rendererHelper.compositorThread===undefined)continue;const slices=rendererHelper.compositorThread.sliceGroup;for(const slice of slices.getDescendantEventsInSortedRanges(ranges)){if(slice.title!==IMPL_THREAD_RENDERING_STATS_EVENT)continue;const data=slice.args.data;if(!(VISIBLE_CONTENT_DATA in data)){throw new Error(`${VISIBLE_CONTENT_DATA} is missing`);}
+const visibleContentArea=data[VISIBLE_CONTENT_DATA];if(visibleContentArea===0){continue;}
+if(APPROXIMATED_VISIBLE_CONTENT_DATA in data){approximatedPixelPercentages.push(data[APPROXIMATED_VISIBLE_CONTENT_DATA]/visibleContentArea);}
+if(CHECKERBOARDED_VISIBLE_CONTENT_DATA in data){checkerboardedPixelPercentages.push(data[CHECKERBOARDED_VISIBLE_CONTENT_DATA]/visibleContentArea);}}}
+histograms.createHistogram('mean_pixels_approximated',tr.b.Unit.byName.normalizedPercentage_smallerIsBetter,100*tr.b.math.Statistics.mean(approximatedPixelPercentages),{description:'Percentage of pixels that were approximated '+'(checkerboarding, low-resolution tiles, etc.).',summaryOptions:{},});histograms.createHistogram('mean_pixels_checkerboarded',tr.b.Unit.byName.normalizedPercentage_smallerIsBetter,100*tr.b.math.Statistics.mean(checkerboardedPixelPercentages),{description:'Percentage of pixels that were checkerboarded.',summaryOptions:{},});}
+return{addPixelsHistograms,};});'use strict';tr.exportTo('tr.metrics.rendering',function(){const BEGIN_MAIN_FRAME_EVENT='ThreadProxy::BeginMainFrame';const SEND_BEGIN_FRAME_EVENT='ThreadProxy::ScheduledActionSendBeginMainFrame';function getEventTimesByBeginFrameId_(thread,title,ranges){const out=new Map();const slices=thread.sliceGroup;for(const slice of slices.getDescendantEventsInSortedRanges(ranges)){if(slice.title!==title)continue;const id=slice.args.begin_frame_id;if(id===undefined)throw new Error('Event is missing begin_frame_id');if(out.has(id))throw new Error(`There must be exactly one ${title}`);out.set(id,slice.start);}
+return out;}
+function addQueueingDurationHistograms(histograms,model,segments){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(!chromeHelper)return;let targetRenderers=chromeHelper.telemetryHelper.renderersWithIR;if(targetRenderers.length===0){targetRenderers=Object.values(chromeHelper.rendererHelpers);}
+const queueingDurations=[];const ranges=segments.map(s=>s.boundsRange);for(const rendererHelper of targetRenderers){const mainThread=rendererHelper.mainThread;const compositorThread=rendererHelper.compositorThread;if(mainThread===undefined||compositorThread===undefined)continue;const beginMainFrameTimes=getEventTimesByBeginFrameId_(mainThread,BEGIN_MAIN_FRAME_EVENT,ranges);const sendBeginFrameTimes=getEventTimesByBeginFrameId_(compositorThread,SEND_BEGIN_FRAME_EVENT,ranges);for(const[id,time]of sendBeginFrameTimes){queueingDurations.push(beginMainFrameTimes.get(id)-time);}}
+histograms.createHistogram('queueing_durations',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,queueingDurations,{binBoundaries:tr.v.HistogramBinBoundaries.createExponential(0.01,2,20),summaryOptions:tr.metrics.rendering.SUMMARY_OPTIONS,description:'Time between ScheduledActionSendBeginMainFrame in '+'the compositor thread and the corresponding '+'BeginMainFrame in the main thread.'});}
+return{addQueueingDurationHistograms,};});'use strict';tr.exportTo('tr.metrics.rendering',function(){const GESTURE_EVENT='SyntheticGestureController::running';function renderingMetric(histograms,model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(!chromeHelper)return;let segments=chromeHelper.telemetryHelper.irSegments;if(segments.length===0){segments=chromeHelper.telemetryHelper.animationSegments;}
+if(segments.length>0){tr.metrics.rendering.addFrameTimeHistograms(histograms,model,segments);tr.metrics.rendering.addImageDecodeTimeHistograms(histograms,model,segments);tr.metrics.rendering.addLatencyHistograms(histograms,model,segments);tr.metrics.rendering.addPipelineHistograms(histograms,model,segments);tr.metrics.rendering.addPixelsHistograms(histograms,model,segments);tr.metrics.rendering.addQueueingDurationHistograms(histograms,model,segments);}
+const uiSegments=chromeHelper.telemetryHelper.uiSegments;if(uiSegments.length>0){tr.metrics.rendering.addUIFrameTimeHistograms(histograms,model,chromeHelper.telemetryHelper.uiSegments);}}
+tr.metrics.MetricRegistry.register(renderingMetric,{requiredCategories:['benchmark','toplevel'],});return{renderingMetric,};});'use strict';tr.exportTo('tr.metrics',function(){function sampleExceptionMetric(histograms,model){const hist=new tr.v.Histogram('foo',tr.b.Unit.byName.sizeInBytes_smallerIsBetter);hist.addSample(9);hist.addSample(91,{bar:new tr.v.d.GenericSet([{hello:42}])});for(const expectation of model.userModel.expectations){if(expectation instanceof tr.model.um.ResponseExpectation){}else if(expectation instanceof tr.model.um.AnimationExpectation){}else if(expectation instanceof tr.model.um.IdleExpectation){}else if(expectation instanceof tr.model.um.LoadExpectation){}}
const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);for(const[pid,process]of Object.entries(model.processes)){}
histograms.addHistogram(hist);throw new Error('There was an error');}
tr.metrics.MetricRegistry.register(sampleExceptionMetric);return{sampleExceptionMetric,};});'use strict';tr.exportTo('tr.metrics',function(){function sampleMetric(histograms,model){const hist=new tr.v.Histogram('foo',tr.b.Unit.byName.sizeInBytes_smallerIsBetter);hist.addSample(9);hist.addSample(91,{bar:new tr.v.d.GenericSet([{hello:42}])});for(const expectation of model.userModel.expectations){if(expectation instanceof tr.model.um.ResponseExpectation){}else if(expectation instanceof tr.model.um.AnimationExpectation){}else if(expectation instanceof tr.model.um.IdleExpectation){}else if(expectation instanceof tr.model.um.LoadExpectation){}}
@@ -8012,68 +8541,112 @@ function getSpaNavigationEventToFirstPaintEventMap_(rendererHelper){const spaNav
function findSpaNavigationsOnRenderer(rendererHelper,browserHelper){const spaNavEventToNavStartMap=getSpaNavigationEventToNavigationStartMap_(rendererHelper,browserHelper);const spaNavEventToFirstPaintEventMap=getSpaNavigationEventToFirstPaintEventMap_(rendererHelper);const spaNavigations=[];for(const[spaNavEvent,navStartEvent]of
spaNavEventToNavStartMap){if(spaNavEventToFirstPaintEventMap.has(spaNavEvent)){const firstPaintEvent=spaNavEventToFirstPaintEventMap.get(spaNavEvent);const isNavStartAsyncSlice=navStartEvent instanceof tr.model.AsyncSlice;spaNavigations.push({navStartCandidates:{inputLatencyAsyncSlice:isNavStartAsyncSlice?navStartEvent:undefined,goToIndexSlice:isNavStartAsyncSlice?undefined:navStartEvent},firstPaintEvent,url:spaNavEvent.args.url});}}
return spaNavigations;}
-return{findSpaNavigationsOnRenderer,};});'use strict';tr.exportTo('tr.metrics.sh',function(){function generateTimeBreakdownTree(mainThread,rangeOfInterest,getEventStart,getEventDuration,getEventSelfTime){if(mainThread===null)return;const breakdownTree={};for(const title of
+return{findSpaNavigationsOnRenderer,};});'use strict';tr.exportTo('tr.metrics.sh',function(){function getWallClockSelfTime_(event,rangeOfInterest){if(event.duration===0)return 0;const selfTimeRanges=[rangeOfInterest.findIntersection(event.range)];for(const subSlice of event.subSlices){if(selfTimeRanges.length===0)return 0;const lastRange=selfTimeRanges.pop();selfTimeRanges.push(...tr.b.math.Range.findDifference(lastRange,subSlice.range));}
+return tr.b.math.Statistics.sum(selfTimeRanges,r=>r.duration);}
+function getCPUSelfTime_(event,rangeOfInterest){if(event.duration===0||event.selfTime===0)return 0;if(event.cpuSelfTime===undefined)return 0;const cpuTimeDensity=event.cpuSelfTime/event.selfTime;return getWallClockSelfTime_(event,rangeOfInterest)*cpuTimeDensity;}
+function generateTimeBreakdownTree(mainThread,rangeOfInterest,getEventSelfTime){if(mainThread===null)return;const breakdownTree={};for(const title of
tr.e.chrome.ChromeUserFriendlyCategoryDriver.ALL_TITLES){breakdownTree[title]={total:0,events:{}};}
-for(const event of mainThread.getDescendantEvents()){const eventStart=getEventStart(event);const eventDuration=getEventDuration(event);const eventSelfTime=getEventSelfTime(event);const eventEnd=eventStart+eventDuration;if(!rangeOfInterest.intersectsExplicitRangeExclusive(eventStart,eventEnd)){continue;}
-if(eventSelfTime===undefined)continue;const title=tr.e.chrome.ChromeUserFriendlyCategoryDriver.fromEvent(event);let timeIntersectionRatio=0;if(eventDuration>0){timeIntersectionRatio=rangeOfInterest.findExplicitIntersectionDuration(eventStart,eventEnd)/eventDuration;}
+for(const event of mainThread.sliceGroup.childEvents()){if(!rangeOfInterest.intersectsRangeExclusive(event.range))continue;const eventSelfTime=getEventSelfTime(event,rangeOfInterest);const title=tr.e.chrome.ChromeUserFriendlyCategoryDriver.fromEvent(event);breakdownTree[title].total+=eventSelfTime;if(breakdownTree[title].events[event.title]===undefined){breakdownTree[title].events[event.title]=0;}
+breakdownTree[title].events[event.title]+=eventSelfTime;let timeIntersectionRatio=0;if(event.duration>0){timeIntersectionRatio=rangeOfInterest.findExplicitIntersectionDuration(event.start,event.end)/event.duration;}
const v8Runtime=event.args['runtime-call-stat'];if(v8Runtime!==undefined){const v8RuntimeObject=JSON.parse(v8Runtime);for(const runtimeCall in v8RuntimeObject){if(v8RuntimeObject[runtimeCall].length===2){if(breakdownTree.v8_runtime.events[runtimeCall]===undefined){breakdownTree.v8_runtime.events[runtimeCall]=0;}
-const runtimeTime=tr.b.Unit.timestampFromUs(v8RuntimeObject[runtimeCall][1]*timeIntersectionRatio);breakdownTree.v8_runtime.total+=runtimeTime;breakdownTree.v8_runtime.events[runtimeCall]+=runtimeTime;}}}
-const approximatedSelfTimeContribution=eventSelfTime*timeIntersectionRatio;breakdownTree[title].total+=approximatedSelfTimeContribution;if(breakdownTree[title].events[event.title]===undefined){breakdownTree[title].events[event.title]=0;}
-breakdownTree[title].events[event.title]+=approximatedSelfTimeContribution;}
+const runtimeTime=tr.b.Unit.timestampFromUs(v8RuntimeObject[runtimeCall][1]*timeIntersectionRatio);breakdownTree.v8_runtime.total+=runtimeTime;breakdownTree.v8_runtime.events[runtimeCall]+=runtimeTime;}}}}
return breakdownTree;}
-function addIdleAndBlockByNetworkBreakdown_(breakdownTree,mainThreadEvents,networkEvents,rangeOfInterest){let idleRanges=[rangeOfInterest];const mainThreadEventRanges=tr.b.math.convertEventsToRanges(mainThreadEvents);const networkEventRanges=tr.b.math.convertEventsToRanges(networkEvents);const eventRanges=mainThreadEventRanges.concat(networkEventRanges);eventRanges.sort((a,b)=>a.min-b.min);for(const eventRange of eventRanges){if(!eventRange||eventRange.isEmpty||eventRange.duration<0){throw new Error('Range is invalid');}
-const newLastIdleRanges=tr.b.math.Range.findDifference(idleRanges[idleRanges.length-1],eventRange);idleRanges.pop();idleRanges=idleRanges.concat(newLastIdleRanges);if(idleRanges.length===0)break;}
-const totalFreeDuration=tr.b.math.Statistics.sum(idleRanges,range=>range.duration);breakdownTree.idle={total:totalFreeDuration,events:{}};let totalBlockedDuration=rangeOfInterest.duration;for(const component of Object.values(breakdownTree)){totalBlockedDuration-=component.total;}
-breakdownTree.blocked_on_network={total:totalBlockedDuration,events:{}};}
-function generateWallClockTimeBreakdownTree(mainThread,networkEvents,rangeOfInterest){function getEventStart(e){return e.start;}
-function getEventDuration(e){return e.duration;}
-function getEventSelfTime(e){return e.selfTime;}
-const breakdownTree=generateTimeBreakdownTree(mainThread,rangeOfInterest,getEventStart,getEventDuration,getEventSelfTime);const mainThreadEventsInRange=tr.model.helpers.getSlicesIntersectingRange(rangeOfInterest,mainThread.sliceGroup.topLevelSlices);addIdleAndBlockByNetworkBreakdown_(breakdownTree,mainThreadEventsInRange,networkEvents,rangeOfInterest);return breakdownTree;}
-function generateCpuTimeBreakdownTree(mainThread,rangeOfInterestCpuTime){function getEventStart(e){return e.cpuStart;}
-function getEventDuration(e){return e.cpuDuration;}
-function getEventSelfTime(e){return e.cpuSelfTime;}
-return generateTimeBreakdownTree(mainThread,rangeOfInterestCpuTime,getEventStart,getEventDuration,getEventSelfTime);}
-return{generateTimeBreakdownTree,generateWallClockTimeBreakdownTree,generateCpuTimeBreakdownTree,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const LONG_TASK_THRESHOLD_MS=50;const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const RelatedEventSet=tr.v.d.RelatedEventSet;const hasCategoryAndName=tr.metrics.sh.hasCategoryAndName;const EventFinderUtils=tr.e.chrome.EventFinderUtils;function getNetworkEventsInRange(process,range){const networkEvents=[];for(const thread of Object.values(process.threads)){const threadHelper=new tr.model.helpers.ChromeThreadHelper(thread);const events=threadHelper.getNetworkEvents();for(const event of events){if(range.intersectsExplicitRangeInclusive(event.start,event.end)){networkEvents.push(event);}}}
-return networkEvents;}
-function createBreakdownDiagnostic(breakdownTree){const breakdownDiagnostic=new tr.v.d.Breakdown();breakdownDiagnostic.colorScheme=tr.v.d.COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER;for(const label in breakdownTree){breakdownDiagnostic.set(label,breakdownTree[label].total);}
+function addIdleAndBlockByNetworkBreakdown_(breakdownTree,mainThreadEvents,networkEvents,rangeOfInterest){const mainThreadEventRanges=tr.b.math.convertEventsToRanges(mainThreadEvents);const networkEventRanges=tr.b.math.convertEventsToRanges(networkEvents);const eventRanges=mainThreadEventRanges.concat(networkEventRanges);const idleRanges=tr.b.math.findEmptyRangesBetweenRanges(eventRanges,rangeOfInterest);const totalFreeDuration=tr.b.math.Statistics.sum(idleRanges,range=>range.duration);breakdownTree.idle={total:totalFreeDuration,events:{}};let totalBlockedDuration=rangeOfInterest.duration;for(const[title,component]of Object.entries(breakdownTree)){if(title==='v8_runtime')continue;totalBlockedDuration-=component.total;}
+breakdownTree.blocked_on_network={total:Math.max(totalBlockedDuration,0),events:{}};}
+function generateWallClockTimeBreakdownTree(mainThread,networkEvents,rangeOfInterest){const breakdownTree=generateTimeBreakdownTree(mainThread,rangeOfInterest,getWallClockSelfTime_);const mainThreadEventsInRange=tr.model.helpers.getSlicesIntersectingRange(rangeOfInterest,mainThread.sliceGroup.topLevelSlices);addIdleAndBlockByNetworkBreakdown_(breakdownTree,mainThreadEventsInRange,networkEvents,rangeOfInterest);return breakdownTree;}
+function generateCpuTimeBreakdownTree(mainThread,rangeOfInterest){return generateTimeBreakdownTree(mainThread,rangeOfInterest,getCPUSelfTime_);}
+return{generateTimeBreakdownTree,generateWallClockTimeBreakdownTree,generateCpuTimeBreakdownTree,};});'use strict';tr.exportTo('tr.e.chrome',function(){const LCP_CANDIDATE_EVENT_TITLE='NavStartToLargestContentfulPaint::Candidate::AllFrames::UKM';const LCP_INVALIDATE_EVENT_TITLE='NavStartToLargestContentfulPaint::Invalidate::AllFrames::UKM';class LcpEvent{constructor(event){if(!LcpInvalidateEvent.isLcpInvalidateEvent(event)&&!LcpCandidateEvent.isLcpCandidateEvent(event)){throw new Error('The LCP event should be either a candidate event or'+'an invalidate event.');}
+if(event.start===undefined||event.args.main_frame_tree_node_id===undefined){throw new Error('The LCP event is in unexpected format.');}
+this.start=event.start;this.mainFrameTreeNodeId=event.args.main_frame_tree_node_id;}}
+class LcpCandidateEvent extends LcpEvent{constructor(event){super(event);const{durationInMilliseconds,size,type,inMainFrame}=event.args.data;if(durationInMilliseconds===undefined||size===undefined||type===undefined||inMainFrame===undefined||event.args.main_frame_tree_node_id===undefined||!LcpCandidateEvent.isLcpCandidateEvent(event)){throw new Error('The LCP candidate event is in unexpected format.');}
+this.durationInMilliseconds=durationInMilliseconds;this.size=size;this.type=type;this.inMainFrame=inMainFrame;}
+static isLcpCandidateEvent(event){return event.title===LCP_CANDIDATE_EVENT_TITLE;}}
+class LcpInvalidateEvent extends LcpEvent{constructor(event){super(event);if(!LcpInvalidateEvent.isLcpInvalidateEvent(event)){throw new Error('The LCP invalidate event is in unexpected format.');}}
+static isLcpInvalidateEvent(event){return event.title===LCP_INVALIDATE_EVENT_TITLE;}}
+class LargestContentfulPaint{constructor(allBrowserEvents){this.allBrowserEvents=allBrowserEvents;}
+findCandidates(){const finalLcpEvents=this.findFinalLcpEventOfEachNavigation(this.allBrowserEvents);const finalCandidates=finalLcpEvents.filter(finalLcpEvent=>!LcpInvalidateEvent.isLcpInvalidateEvent(finalLcpEvent));return finalCandidates;}
+findFinalLcpEventOfEachNavigation(allBrowserEvents){const lcpEvents=[];for(const lcpEvent of allBrowserEvents){if(LcpCandidateEvent.isLcpCandidateEvent(lcpEvent)){lcpEvents.push(new LcpCandidateEvent(lcpEvent));}else if(LcpInvalidateEvent.isLcpInvalidateEvent(lcpEvent)){lcpEvents.push(new LcpInvalidateEvent(lcpEvent));}}
+const lcpEventsGroupedByNavigation=new Map();for(const e of lcpEvents){const key=e.mainFrameTreeNodeId;if(!lcpEventsGroupedByNavigation.has(key)){lcpEventsGroupedByNavigation[key]=[];}
+lcpEventsGroupedByNavigation[key].push(e);}
+const finalLcpEventOfEachNaivgation=[];for(const lcpEventList of Object.values(lcpEventsGroupedByNavigation)){lcpEventList.sort((a,b)=>a.start-b.start);finalLcpEventOfEachNaivgation.push(lcpEventList[lcpEventList.length-1]);}
+return finalLcpEventOfEachNaivgation;}}
+return{LCP_CANDIDATE_EVENT_TITLE,LCP_INVALIDATE_EVENT_TITLE,LargestContentfulPaint,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const LONG_TASK_THRESHOLD_MS=50;const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const unitlessNumber_smallerIsBetter=tr.b.Unit.byName.unitlessNumber_smallerIsBetter;const RelatedEventSet=tr.v.d.RelatedEventSet;const hasCategoryAndName=tr.metrics.sh.hasCategoryAndName;const EventFinderUtils=tr.e.chrome.EventFinderUtils;function createBreakdownDiagnostic(breakdownTree){const breakdownDiagnostic=new tr.v.d.Breakdown();breakdownDiagnostic.colorScheme=tr.v.d.COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER;for(const label in breakdownTree){breakdownDiagnostic.set(label,breakdownTree[label].total);}
return breakdownDiagnostic;}
-const LOADING_METRIC_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(0,1e3,20).addLinearBins(3e3,20).addExponentialBins(20e3,20);const TIME_TO_INTERACTIVE_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(1,40e3,35).addExponentialBins(80e3,15);const SUMMARY_OPTIONS={avg:true,count:false,max:true,min:true,std:true,sum:false,};function findFrameLoaderSnapshotAt(rendererHelper,frameIdRef,ts){const objects=rendererHelper.process.objects;const frameLoaderInstances=objects.instancesByTypeName_.FrameLoader;if(frameLoaderInstances===undefined)return undefined;let snapshot;for(const instance of frameLoaderInstances){if(!instance.isAliveAt(ts))continue;const maybeSnapshot=instance.getSnapshotAt(ts);if(frameIdRef!==maybeSnapshot.args.frame.id_ref)continue;snapshot=maybeSnapshot;}
+const LOADING_METRIC_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(0,1e3,20).addLinearBins(3e3,20).addExponentialBins(20e3,20);const TIME_TO_INTERACTIVE_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(1,40e3,35).addExponentialBins(80e3,15);const LAYOUT_SHIFT_SCORE_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(0,50,25);const SUMMARY_OPTIONS={avg:true,count:false,max:true,min:true,std:true,sum:false,};function findFrameLoaderSnapshotAt(rendererHelper,frameIdRef,ts){const objects=rendererHelper.process.objects;const frameLoaderInstances=objects.instancesByTypeName_.FrameLoader;if(frameLoaderInstances===undefined)return undefined;let snapshot;for(const instance of frameLoaderInstances){if(!instance.isAliveAt(ts))continue;const maybeSnapshot=instance.getSnapshotAt(ts);if(frameIdRef!==maybeSnapshot.args.frame.id_ref)continue;snapshot=maybeSnapshot;}
return snapshot;}
function findAllEvents(rendererHelper,category,title){const targetEvents=[];for(const ev of rendererHelper.process.getDescendantEvents()){if(!hasCategoryAndName(ev,category,title))continue;targetEvents.push(ev);}
return targetEvents;}
-const URL_BLACKLIST=['','about:blank','data:text/html,pluginplaceholderdata','chrome-error://chromewebdata/'];function shouldIgnoreURL(url){return URL_BLACKLIST.includes(url);}
-function collectTimeToEvent(category,eventName,rendererHelper,frameToNavStartEvents){const targetEvents=findAllEvents(rendererHelper,category,eventName);const samples=[];for(const ev of targetEvents){if(rendererHelper.isTelemetryInternalEvent(ev))continue;const frameIdRef=ev.args.frame;const snapshot=findFrameLoaderSnapshotAt(rendererHelper,frameIdRef,ev.start);if(snapshot===undefined||!snapshot.args.isLoadingMainFrame)continue;const url=snapshot.args.documentLoaderURL;if(shouldIgnoreURL(url))continue;const navigationStartEvent=EventFinderUtils.findLastEventStartingOnOrBeforeTimestamp(frameToNavStartEvents.get(frameIdRef)||[],ev.start);if(navigationStartEvent===undefined)continue;const navStartToEventRange=tr.b.math.Range.fromExplicitRange(navigationStartEvent.start,ev.start);const networkEvents=getNetworkEventsInRange(rendererHelper.process,navStartToEventRange);const breakdownTree=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,navStartToEventRange);samples.push({value:navStartToEventRange.duration,breakdownTree,diagnostics:{breakdown:createBreakdownDiagnostic(breakdownTree),url:new tr.v.d.GenericSet([url]),Start:new RelatedEventSet(navigationStartEvent),End:new RelatedEventSet(ev)}});}
+function getMostRecentValidEvent(rendererHelper,category,title){const targetEvents=findAllEvents(rendererHelper,category,title);let validEvent;for(const targetEvent of targetEvents){if(rendererHelper.isTelemetryInternalEvent(targetEvent))continue;if(validEvent===undefined){validEvent=targetEvent;}else{if(validEvent.start<targetEvent.start){validEvent=targetEvent;}}}
+return validEvent;}
+function getFirstViewportReadySamples(rendererHelper,navIdToNavStartEvents){const samples=[];const pcEvent=getMostRecentValidEvent(rendererHelper,'blink.user_timing','pc');if(pcEvent===undefined)return samples;if(rendererHelper.isTelemetryInternalEvent(pcEvent))return samples;const navigationStartEvent=navIdToNavStartEvents.get(pcEvent.args.data.navigationId);if(navigationStartEvent===undefined)return samples;const navStartToEventRange=tr.b.math.Range.fromExplicitRange(navigationStartEvent.start,pcEvent.start);const networkEvents=EventFinderUtils.getNetworkEventsInRange(rendererHelper.process,navStartToEventRange);const breakdownTree=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,navStartToEventRange);samples.push({value:navStartToEventRange.duration,breakdownTree,diagnostics:{breakdown:createBreakdownDiagnostic(breakdownTree),Start:new RelatedEventSet(navigationStartEvent),End:new RelatedEventSet(pcEvent)}});return samples;}
+function getAboveTheFoldLoadedToVisibleSamples(rendererHelper){const samples=[];const pcEvent=getMostRecentValidEvent(rendererHelper,'blink.user_timing','pc');const visibleEvent=getMostRecentValidEvent(rendererHelper,'blink.user_timing','visible');if(pcEvent!==undefined&&visibleEvent!==undefined){samples.push({value:Math.max(0.0,pcEvent.start-visibleEvent.start),diagnostics:{Start:new RelatedEventSet(visibleEvent),End:new RelatedEventSet(pcEvent)}});}
+return samples;}
+function findTimeToXEntries(category,eventName,rendererHelper,frameToNavStartEvents,navIdToNavStartEvents){const targetEvents=findAllEvents(rendererHelper,category,eventName);const entries=[];for(const targetEvent of targetEvents){if(rendererHelper.isTelemetryInternalEvent(targetEvent))continue;const frameIdRef=targetEvent.args.frame;const snapshot=findFrameLoaderSnapshotAt(rendererHelper,frameIdRef,targetEvent.start);if(snapshot===undefined||!snapshot.args.isLoadingMainFrame)continue;const url=snapshot.args.documentLoaderURL;if(tr.e.chrome.CHROME_INTERNAL_URLS.includes(url))continue;let navigationStartEvent;if(targetEvent.args.data===undefined||targetEvent.args.data.navigationId===undefined){navigationStartEvent=EventFinderUtils.findLastEventStartingOnOrBeforeTimestamp(frameToNavStartEvents.get(frameIdRef)||[],targetEvent.start);}else{navigationStartEvent=navIdToNavStartEvents.get(targetEvent.args.data.navigationId);}
+if(navigationStartEvent===undefined)continue;entries.push({navigationStartEvent,targetEvent,url,});}
+return entries;}
+function collectTimeToEvent(rendererHelper,timeToXEntries){const samples=[];for(const{targetEvent,navigationStartEvent,url}of timeToXEntries){const navStartToEventRange=tr.b.math.Range.fromExplicitRange(navigationStartEvent.start,targetEvent.start);const networkEvents=EventFinderUtils.getNetworkEventsInRange(rendererHelper.process,navStartToEventRange);const breakdownTree=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,navStartToEventRange);samples.push({value:navStartToEventRange.duration,breakdownTree,diagnostics:{breakdown:createBreakdownDiagnostic(breakdownTree),url:new tr.v.d.GenericSet([url]),Start:new RelatedEventSet(navigationStartEvent),End:new RelatedEventSet(targetEvent)}});}
return samples;}
-function addFirstMeaningfulPaintSample(samples,rendererHelper,navigationStart,fmpMarkerEvent,url){const navStartToFMPRange=tr.b.math.Range.fromExplicitRange(navigationStart.start,fmpMarkerEvent.start);const networkEvents=getNetworkEventsInRange(rendererHelper.process,navStartToFMPRange);const timeToFirstMeaningfulPaint=navStartToFMPRange.duration;const breakdownTree=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,navStartToFMPRange);samples.push({value:timeToFirstMeaningfulPaint,breakdownTree,diagnostics:{breakdown:createBreakdownDiagnostic(breakdownTree),start:new RelatedEventSet(navigationStart),end:new RelatedEventSet(fmpMarkerEvent),infos:new tr.v.d.GenericSet([{url,pid:rendererHelper.pid,start:navigationStart.start,fmp:fmpMarkerEvent.start,}]),}});}
-function addFirstMeaningfulPaintCpuTimeSample(samples,rendererHelper,navigationStart,fmpMarkerEvent,url){const navStartToFMPCpuRange=tr.b.math.Range.fromExplicitRange(navigationStart.cpuStart,fmpMarkerEvent.cpuStart);const mainThreadCpuTime=getMainThreadCpuTime(rendererHelper,navStartToFMPCpuRange);const breakdownTree=tr.metrics.sh.generateCpuTimeBreakdownTree(rendererHelper.mainThread,navStartToFMPCpuRange);samples.push({value:mainThreadCpuTime,breakdownTree,diagnostics:{breakdown:createBreakdownDiagnostic(breakdownTree),start:new RelatedEventSet(navigationStart),end:new RelatedEventSet(fmpMarkerEvent),infos:new tr.v.d.GenericSet([{url,pid:rendererHelper.pid,start:navigationStart.start,fmp:fmpMarkerEvent.start,}]),}});}
-function getMainThreadCpuTime(rendererHelper,rangeOfInterest){let mainThreadCpuTime=0;for(const slice of rendererHelper.mainThread.sliceGroup.topLevelSlices){if(!slice.cpuDuration)continue;const sliceRange=tr.b.math.Range.fromExplicitRange(slice.cpuStart,slice.cpuStart+slice.cpuDuration);const intersection=rangeOfInterest.findIntersection(sliceRange);mainThreadCpuTime+=intersection.duration;}
-return mainThreadCpuTime;}
-function decorateInteractivitySampleWithDiagnostics_(rendererHelper,eventTimestamp,navigationStartEvent,firstMeaningfulPaintTime,domContentLoadedEndTime,url){if(eventTimestamp===undefined)return undefined;const navigationStartTime=navigationStartEvent.start;const navStartToEventTimeRange=tr.b.math.Range.fromExplicitRange(navigationStartTime,eventTimestamp);const networkEvents=getNetworkEventsInRange(rendererHelper.process,navStartToEventTimeRange);const breakdownTree=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,navStartToEventTimeRange);const breakdownDiagnostic=createBreakdownDiagnostic(breakdownTree);return{value:navStartToEventTimeRange.duration,diagnostics:tr.v.d.DiagnosticMap.fromObject({'Start':new RelatedEventSet(navigationStartEvent),'Navigation infos':new tr.v.d.GenericSet([{url,pid:rendererHelper.pid,navigationStartTime,firstMeaningfulPaintTime,domContentLoadedEndTime,eventTimestamp,}]),'Breakdown of [navStart, eventTimestamp]':breakdownDiagnostic,}),};}
-function collectLoadingMetricsForRenderer(rendererHelper){const model=rendererHelper.modelHelper.model;const frameToNavStartEvents=EventFinderUtils.getSortedMainThreadEventsByFrame(rendererHelper,'navigationStart','blink.user_timing');const firstPaintSamples=collectTimeToEvent('loading','firstPaint',rendererHelper,frameToNavStartEvents);const firstContentfulPaintSamples=collectTimeToEvent('loading','firstContentfulPaint',rendererHelper,frameToNavStartEvents);const onLoadSamples=collectTimeToEvent('blink.user_timing','loadEventStart',rendererHelper,frameToNavStartEvents);const interactiveSamples=[];const firstCpuIdleSamples=[];const firstMeaningfulPaintSamples=[];const firstMeaningfulPaintCpuTimeSamples=[];for(const expectation of model.userModel.expectations){if(!(expectation instanceof tr.model.um.LoadExpectation))continue;if(shouldIgnoreURL(expectation.url))continue;if(expectation.renderProcess.pid!==rendererHelper.pid)continue;if(expectation.fmpEvent!==undefined){addFirstMeaningfulPaintSample(firstMeaningfulPaintSamples,rendererHelper,expectation.navigationStart,expectation.fmpEvent,expectation.url);addFirstMeaningfulPaintCpuTimeSample(firstMeaningfulPaintCpuTimeSamples,rendererHelper,expectation.navigationStart,expectation.fmpEvent,expectation.url);}
+function collectTimeToEventInCpuTime(rendererHelper,timeToXEntries){const samples=[];for(const{targetEvent,navigationStartEvent,url}of timeToXEntries){const navStartToEventRange=tr.b.math.Range.fromExplicitRange(navigationStartEvent.start,targetEvent.start);const mainThreadCpuTime=rendererHelper.mainThread.getCpuTimeForRange(navStartToEventRange);const breakdownTree=tr.metrics.sh.generateCpuTimeBreakdownTree(rendererHelper.mainThread,navStartToEventRange);samples.push({value:mainThreadCpuTime,breakdownTree,diagnostics:{breakdown:createBreakdownDiagnostic(breakdownTree),start:new RelatedEventSet(navigationStartEvent),end:new RelatedEventSet(targetEvent),infos:new tr.v.d.GenericSet([{pid:rendererHelper.pid,start:navigationStartEvent.start,event:targetEvent.start,}]),}});}
+return samples;}
+function findLayoutShiftSamples(rendererHelper){let sample;EventFinderUtils.getSortedMainThreadEventsByFrame(rendererHelper,'LayoutShift','loading').forEach((events)=>{const evData=events.pop().args.data;if(evData.is_main_frame){sample={value:evData.cumulative_score};}});return sample?[sample]:[];}
+function lineSweep(lineSweepRects,viewport){const verticalSweepRects=[];const horizontalSweepRects=[];for(let i=0;i<lineSweepRects.length;i++){const rect=lineSweepRects[i];let left=rect.left;let right=rect.right;let top=rect.top;let bottom=rect.bottom;if(left>viewport.x+viewport.width)continue;if(right<viewport.x)continue;if(top>viewport.y+viewport.height)continue;if(bottom<viewport.y)continue;left=Math.max(left,viewport.y);right=Math.min(right,viewport.y+viewport.width);top=Math.max(top,viewport.y);bottom=Math.min(bottom,viewport.y+viewport.height);verticalSweepRects.push({id:i,value:left,type:'left'},{id:i,value:right,type:'right'});horizontalSweepRects.push({id:i,value:top,type:'top'},{id:i,value:bottom,type:'bottom'});}
+verticalSweepRects.sort((a,b)=>a.value-b.value);horizontalSweepRects.sort((a,b)=>a.value-b.value);const active=new Array(lineSweepRects.length).fill(0);let area=0;active[verticalSweepRects[0].id]=1;for(let i=1;i<verticalSweepRects.length;i++){const currentLine=verticalSweepRects[i];const previousLine=verticalSweepRects[i-1];const deltaX=currentLine.value-previousLine.value;if(deltaX===0)continue;let count=0;let firstRect;for(let j=0;j<horizontalSweepRects.length;j++){if(active[horizontalSweepRects[j].id]===1){if(horizontalSweepRects[j].type==='top'){if(count===0){firstRect=j;count++;}}else{if(count===1){const deltaY=horizontalSweepRects[j].value-
+horizontalSweepRects[firstRect].value;area+=deltaX*deltaY;count--;}}}}
+active[currentLine.id]=(currentLine.type==='left');}
+return area;}
+function addVisuallyCompleteBeforeSomeTimeSample(samples,rendererHelper,navigationStart,loadDuration,frameID){const someTime=2000;if(loadDuration<someTime)return;let viewport;for(const event of EventFinderUtils.getMainThreadEvents(rendererHelper,'viewport','loading')){if(event.args.data.frameID===frameID&&event.start>navigationStart&&event.start<navigationStart+loadDuration){viewport=event.args.data;break;}}
+if(!viewport)return;const ccDisplayItemListObjects=rendererHelper.process.objects.getAllInstancesNamed('cc::DisplayItemList');if(!ccDisplayItemListObjects||!ccDisplayItemListObjects.length)return;const RectsUpdatedAfterSomeTime=[];for(let i=0;i<ccDisplayItemListObjects.length;i++){const displayItemListSnapshots=ccDisplayItemListObjects[i].snapshots;for(let j=0;j<displayItemListSnapshots.length;j++){const snapshot=displayItemListSnapshots[j];const timestamp=snapshot.ts;if(timestamp<navigationStart||timestamp>navigationStart+loadDuration){continue;}
+if(timestamp-navigationStart>someTime){RectsUpdatedAfterSomeTime.push(snapshot.args.params.layerRect);}}}
+const areaUpdatedAfterSomeTime=RectsUpdatedAfterSomeTime.length?lineSweep(RectsUpdatedAfterSomeTime,viewport):0;const pixelsLastUpdatedBeforeSomeTime=1-
+areaUpdatedAfterSomeTime/(viewport.width*viewport.height);samples.push({value:pixelsLastUpdatedBeforeSomeTime});}
+function addSpeedIndexSample(rendererHelper){const rects=[];let totalArea=0;for(const event of EventFinderUtils.getMainThreadEvents(rendererHelper,'PaintTracker::LayoutObjectPainted','loading')){const rect=event.args.data.visible_new_visual_rect;if(!rect)continue;const area=areaOfQuad(rect);if(!area)continue;rects.push({rect,ts:event.start});totalArea+=area;}
+const sample=[];if(!totalArea)return sample;let areaSoFar=0;const progress=new Array(rects.length);for(let i=0;i<rects.length;i++){const area=areaOfQuad(rects[i].rect);areaSoFar+=(area/totalArea);progress[i]={value:areaSoFar,ts:rects[i].ts};}
+sample.push({value:calculateSpeedIndex(progress)});return sample;}
+function areaOfQuad(quad){const width=Math.max(Math.abs(quad[0]-quad[2]),Math.abs(quad[2]-quad[4]));const height=Math.max(Math.abs(quad[1]-quad[3]),Math.abs(quad[3]-quad[5]));return width*height;}
+function calculateSpeedIndex(progress){let lastMs=0;let lastProgress=0;let speedIndex=0;for(let i=0;i<progress.length;i++){const elapsed=progress[i].ts-lastMs;speedIndex+=elapsed*(1.0-lastProgress);lastMs=progress[i].ts;lastProgress=progress[i].value;}
+return speedIndex;}
+function addFirstMeaningfulPaintSample(samples,rendererHelper,navigationStart,fmpMarkerEvent,url){const navStartToFMPRange=tr.b.math.Range.fromExplicitRange(navigationStart.start,fmpMarkerEvent.start);const networkEvents=EventFinderUtils.getNetworkEventsInRange(rendererHelper.process,navStartToFMPRange);const timeToFirstMeaningfulPaint=navStartToFMPRange.duration;const breakdownTree=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,navStartToFMPRange);samples.push({value:timeToFirstMeaningfulPaint,breakdownTree,diagnostics:{breakdown:createBreakdownDiagnostic(breakdownTree),start:new RelatedEventSet(navigationStart),end:new RelatedEventSet(fmpMarkerEvent),infos:new tr.v.d.GenericSet([{url,pid:rendererHelper.pid,start:navigationStart.start,fmp:fmpMarkerEvent.start,}]),}});}
+function addFirstMeaningfulPaintCpuTimeSample(samples,rendererHelper,navigationStart,fmpMarkerEvent,url){const navStartToFMPRange=tr.b.math.Range.fromExplicitRange(navigationStart.start,fmpMarkerEvent.start);const mainThreadCpuTime=rendererHelper.mainThread.getCpuTimeForRange(navStartToFMPRange);const breakdownTree=tr.metrics.sh.generateCpuTimeBreakdownTree(rendererHelper.mainThread,navStartToFMPRange);samples.push({value:mainThreadCpuTime,breakdownTree,diagnostics:{breakdown:createBreakdownDiagnostic(breakdownTree),start:new RelatedEventSet(navigationStart),end:new RelatedEventSet(fmpMarkerEvent),infos:new tr.v.d.GenericSet([{url,pid:rendererHelper.pid,start:navigationStart.start,fmp:fmpMarkerEvent.start,}]),}});}
+function decorateInteractivitySampleWithDiagnostics_(rendererHelper,eventTimestamp,navigationStartEvent,firstMeaningfulPaintTime,domContentLoadedEndTime,url){if(eventTimestamp===undefined)return undefined;const navigationStartTime=navigationStartEvent.start;const navStartToEventTimeRange=tr.b.math.Range.fromExplicitRange(navigationStartTime,eventTimestamp);const networkEvents=EventFinderUtils.getNetworkEventsInRange(rendererHelper.process,navStartToEventTimeRange);const breakdownTree=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,navStartToEventTimeRange);const breakdownDiagnostic=createBreakdownDiagnostic(breakdownTree);return{value:navStartToEventTimeRange.duration,diagnostics:tr.v.d.DiagnosticMap.fromObject({'Start':new RelatedEventSet(navigationStartEvent),'Navigation infos':new tr.v.d.GenericSet([{url,pid:rendererHelper.pid,navigationStartTime,firstMeaningfulPaintTime,domContentLoadedEndTime,eventTimestamp,}]),'Breakdown of [navStart, eventTimestamp]':breakdownDiagnostic,}),};}
+function getCandidateIndex(entry){return entry.targetEvent.args.data.candidateIndex;}
+function findLastCandidateForEachNavigation(timeToXEntries){const entryMap=new Map();for(const e of timeToXEntries){const navStartEvent=e.navigationStartEvent;if(!entryMap.has(navStartEvent)){entryMap.set(navStartEvent,[]);}
+entryMap.get(navStartEvent).push(e);}
+const lastCandidates=[];for(const timeToXEntriesByNavigation of entryMap.values()){let lastCandidate=timeToXEntriesByNavigation.shift();for(const entry of timeToXEntriesByNavigation){if(getCandidateIndex(entry)>getCandidateIndex(lastCandidate)){lastCandidate=entry;}}
+lastCandidates.push(lastCandidate);}
+return lastCandidates;}
+function findLargestTextPaintSamples(rendererHelper,frameToNavStartEvents,navIdToNavStartEvents){const timeToPaintEntries=findTimeToXEntries('loading','LargestTextPaint::Candidate',rendererHelper,frameToNavStartEvents,navIdToNavStartEvents);const timeToPaintBlockingEntries=findTimeToXEntries('loading','LargestTextPaint::NoCandidate',rendererHelper,frameToNavStartEvents,navIdToNavStartEvents);const lastCandidateEvents=findLastCandidateForEachNavigation(timeToPaintEntries.concat(timeToPaintBlockingEntries)).filter(event=>event.targetEvent.title!=='LargestTextPaint::NoCandidate');return collectTimeToEvent(rendererHelper,lastCandidateEvents);}
+function findLargestImagePaintSamples(rendererHelper,frameToNavStartEvents,navIdToNavStartEvents){const timeToPaintEntries=findTimeToXEntries('loading','LargestImagePaint::Candidate',rendererHelper,frameToNavStartEvents,navIdToNavStartEvents);const timeToPaintBlockingEntries=findTimeToXEntries('loading','LargestImagePaint::NoCandidate',rendererHelper,frameToNavStartEvents,navIdToNavStartEvents);const lastCandidateEvents=findLastCandidateForEachNavigation(timeToPaintEntries.concat(timeToPaintBlockingEntries)).filter(event=>event.targetEvent.title!=='LargestImagePaint::NoCandidate');return collectTimeToEvent(rendererHelper,lastCandidateEvents);}
+function findLargestContentfulPaintHistogramSamples(allBrowserEvents){const lcp=new tr.e.chrome.LargestContentfulPaint(allBrowserEvents);const lcpSamples=lcp.findCandidates().map(candidate=>{const{durationInMilliseconds,size,type,inMainFrame,mainFrameTreeNodeId}=candidate;return{value:durationInMilliseconds,diagnostics:{size:new tr.v.d.GenericSet([size]),type:new tr.v.d.GenericSet([type]),inMainFrame:new tr.v.d.GenericSet([inMainFrame]),mainFrameTreeNodeId:new tr.v.d.GenericSet([mainFrameTreeNodeId]),},};});return lcpSamples;}
+function collectLoadingMetricsForRenderer(rendererHelper){const frameToNavStartEvents=EventFinderUtils.getSortedMainThreadEventsByFrame(rendererHelper,'navigationStart','blink.user_timing');const navIdToNavStartEvents=EventFinderUtils.getSortedMainThreadEventsByNavId(rendererHelper,'navigationStart','blink.user_timing');const firstPaintSamples=collectTimeToEvent(rendererHelper,findTimeToXEntries('loading','firstPaint',rendererHelper,frameToNavStartEvents,navIdToNavStartEvents));const timeToFCPEntries=findTimeToXEntries('loading','firstContentfulPaint',rendererHelper,frameToNavStartEvents,navIdToNavStartEvents);const firstContentfulPaintSamples=collectTimeToEvent(rendererHelper,timeToFCPEntries);const firstContentfulPaintCpuTimeSamples=collectTimeToEventInCpuTime(rendererHelper,timeToFCPEntries);const onLoadSamples=collectTimeToEvent(rendererHelper,findTimeToXEntries('blink.user_timing','loadEventStart',rendererHelper,frameToNavStartEvents,navIdToNavStartEvents));const aboveTheFoldLoadedToVisibleSamples=getAboveTheFoldLoadedToVisibleSamples(rendererHelper);const firstViewportReadySamples=getFirstViewportReadySamples(rendererHelper,navIdToNavStartEvents);const largestImagePaintSamples=findLargestImagePaintSamples(rendererHelper,frameToNavStartEvents,navIdToNavStartEvents);const largestTextPaintSamples=findLargestTextPaintSamples(rendererHelper,frameToNavStartEvents,navIdToNavStartEvents);const layoutShiftSamples=findLayoutShiftSamples(rendererHelper);const speedIndexSamples=addSpeedIndexSample(rendererHelper);return{frameToNavStartEvents,firstPaintSamples,firstContentfulPaintSamples,firstContentfulPaintCpuTimeSamples,onLoadSamples,aboveTheFoldLoadedToVisibleSamples,firstViewportReadySamples,largestImagePaintSamples,largestTextPaintSamples,layoutShiftSamples,speedIndexSamples};}
+function collectMetricsFromLoadExpectations(model,chromeHelper){const interactiveSamples=[];const firstCpuIdleSamples=[];const firstMeaningfulPaintSamples=[];const firstMeaningfulPaintCpuTimeSamples=[];const visuallyCompleteBeforeSomeTimeSamples=[];for(const expectation of model.userModel.expectations){if(!(expectation instanceof tr.model.um.LoadExpectation))continue;if(tr.e.chrome.CHROME_INTERNAL_URLS.includes(expectation.url)){continue;}
+const rendererHelper=chromeHelper.rendererHelpers[expectation.renderProcess.pid];addVisuallyCompleteBeforeSomeTimeSample(visuallyCompleteBeforeSomeTimeSamples,rendererHelper,expectation.navigationStart.start,expectation.duration,expectation.navigationStart.args.frame);if(expectation.fmpEvent!==undefined){addFirstMeaningfulPaintSample(firstMeaningfulPaintSamples,rendererHelper,expectation.navigationStart,expectation.fmpEvent,expectation.url);addFirstMeaningfulPaintCpuTimeSample(firstMeaningfulPaintCpuTimeSamples,rendererHelper,expectation.navigationStart,expectation.fmpEvent,expectation.url);}
if(expectation.firstCpuIdleTime!==undefined){firstCpuIdleSamples.push(decorateInteractivitySampleWithDiagnostics_(rendererHelper,expectation.firstCpuIdleTime,expectation.navigationStart,expectation.fmpEvent.start,expectation.domContentLoadedEndEvent.start,expectation.url));}
if(expectation.timeToInteractive!==undefined){interactiveSamples.push(decorateInteractivitySampleWithDiagnostics_(rendererHelper,expectation.timeToInteractive,expectation.navigationStart,expectation.fmpEvent.start,expectation.domContentLoadedEndEvent.start,expectation.url));}}
-return{firstPaintSamples,firstContentfulPaintSamples,onLoadSamples,firstMeaningfulPaintSamples,firstMeaningfulPaintCpuTimeSamples,firstCpuIdleSamples,interactiveSamples,};}
+return{firstMeaningfulPaintSamples,firstMeaningfulPaintCpuTimeSamples,firstCpuIdleSamples,interactiveSamples,visuallyCompleteBeforeSomeTimeSamples,};}
function addSamplesToHistogram(samples,histogram,histograms){for(const sample of samples){histogram.addSample(sample.value,sample.diagnostics);if(histogram.name!=='timeToFirstContentfulPaint')continue;if(!sample.breakdownTree)continue;for(const[category,breakdown]of Object.entries(sample.breakdownTree)){const relatedName=`${histogram.name}:${category}`;let relatedHist=histograms.getHistogramsNamed(relatedName)[0];if(!relatedHist){relatedHist=histograms.createHistogram(relatedName,histogram.unit,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,summaryOptions:{count:false,max:false,min:false,sum:false,},});let relatedNames=histogram.diagnostics.get('breakdown');if(!relatedNames){relatedNames=new tr.v.d.RelatedNameMap();histogram.diagnostics.set('breakdown',relatedNames);}
relatedNames.set(category,relatedName);}
relatedHist.addSample(breakdown.total,{breakdown:tr.v.d.Breakdown.fromEntries(Object.entries(breakdown.events)),});}}}
-function loadingMetric(histograms,model){const firstPaintHistogram=histograms.createHistogram('timeToFirstPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'time to first paint',summaryOptions:SUMMARY_OPTIONS,});const firstContentfulPaintHistogram=histograms.createHistogram('timeToFirstContentfulPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'time to first contentful paint',summaryOptions:SUMMARY_OPTIONS,});const onLoadHistogram=histograms.createHistogram('timeToOnload',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'time to onload. '+'This is temporary metric used for PCv1/v2 sanity checking',summaryOptions:SUMMARY_OPTIONS,});const firstMeaningfulPaintHistogram=histograms.createHistogram('timeToFirstMeaningfulPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'time to first meaningful paint',summaryOptions:SUMMARY_OPTIONS,});const firstMeaningfulPaintCpuTimeHistogram=histograms.createHistogram('cpuTimeToFirstMeaningfulPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'CPU time to first meaningful paint',summaryOptions:SUMMARY_OPTIONS,});const timeToInteractiveHistogram=histograms.createHistogram('timeToInteractive',timeDurationInMs_smallerIsBetter,[],{binBoundaries:TIME_TO_INTERACTIVE_BOUNDARIES,description:'Time to Interactive',summaryOptions:SUMMARY_OPTIONS,});const timeToFirstCpuIdleHistogram=histograms.createHistogram('timeToFirstCpuIdle',timeDurationInMs_smallerIsBetter,[],{binBoundaries:TIME_TO_INTERACTIVE_BOUNDARIES,description:'Time to First CPU Idle',summaryOptions:SUMMARY_OPTIONS,});const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);for(const pid in chromeHelper.rendererHelpers){const rendererHelper=chromeHelper.rendererHelpers[pid];if(rendererHelper.isChromeTracingUI)continue;const samplesSet=collectLoadingMetricsForRenderer(rendererHelper);addSamplesToHistogram(samplesSet.firstPaintSamples,firstPaintHistogram,histograms);addSamplesToHistogram(samplesSet.firstContentfulPaintSamples,firstContentfulPaintHistogram,histograms);addSamplesToHistogram(samplesSet.onLoadSamples,onLoadHistogram,histograms);addSamplesToHistogram(samplesSet.firstMeaningfulPaintSamples,firstMeaningfulPaintHistogram,histograms);addSamplesToHistogram(samplesSet.firstMeaningfulPaintCpuTimeSamples,firstMeaningfulPaintCpuTimeHistogram,histograms);addSamplesToHistogram(samplesSet.interactiveSamples,timeToInteractiveHistogram,histograms);addSamplesToHistogram(samplesSet.firstCpuIdleSamples,timeToFirstCpuIdleHistogram,histograms);}}
-tr.metrics.MetricRegistry.register(loadingMetric);return{loadingMetric,getNetworkEventsInRange,collectLoadingMetricsForRenderer,};});'use strict';tr.exportTo('tr.metrics',function(){const SPA_NAVIGATION_START_TO_FIRST_PAINT_DURATION_BIN_BOUNDARY=tr.v.HistogramBinBoundaries.createExponential(1,1000,50);function spaNavigationMetric(histograms,model){const histogram=new tr.v.Histogram('spaNavigationStartToFpDuration',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,SPA_NAVIGATION_START_TO_FIRST_PAINT_DURATION_BIN_BOUNDARY);histogram.description='Latency between the input event causing'+' a SPA navigation and the first paint event after it';histogram.customizeSummaryOptions({count:false,sum:false,});const modelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(!modelHelper){return;}
+function loadingMetric(histograms,model){const firstPaintHistogram=histograms.createHistogram('timeToFirstPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'time to first paint',summaryOptions:SUMMARY_OPTIONS,});const firstContentfulPaintHistogram=histograms.createHistogram('timeToFirstContentfulPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'time to first contentful paint',summaryOptions:SUMMARY_OPTIONS,});const firstContentfulPaintCpuTimeHistogram=histograms.createHistogram('cpuTimeToFirstContentfulPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'CPU time to first contentful paint',summaryOptions:SUMMARY_OPTIONS,});const onLoadHistogram=histograms.createHistogram('timeToOnload',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'time to onload. '+'This is temporary metric used for PCv1/v2 sanity checking',summaryOptions:SUMMARY_OPTIONS,});const firstMeaningfulPaintHistogram=histograms.createHistogram('timeToFirstMeaningfulPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'time to first meaningful paint',summaryOptions:SUMMARY_OPTIONS,});const firstMeaningfulPaintCpuTimeHistogram=histograms.createHistogram('cpuTimeToFirstMeaningfulPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'CPU time to first meaningful paint',summaryOptions:SUMMARY_OPTIONS,});const timeToInteractiveHistogram=histograms.createHistogram('timeToInteractive',timeDurationInMs_smallerIsBetter,[],{binBoundaries:TIME_TO_INTERACTIVE_BOUNDARIES,description:'Time to Interactive',summaryOptions:SUMMARY_OPTIONS,});const timeToFirstCpuIdleHistogram=histograms.createHistogram('timeToFirstCpuIdle',timeDurationInMs_smallerIsBetter,[],{binBoundaries:TIME_TO_INTERACTIVE_BOUNDARIES,description:'Time to First CPU Idle',summaryOptions:SUMMARY_OPTIONS,});const aboveTheFoldLoadedToVisibleHistogram=histograms.createHistogram('aboveTheFoldLoadedToVisible',timeDurationInMs_smallerIsBetter,[],{binBoundaries:TIME_TO_INTERACTIVE_BOUNDARIES,description:'Time from first visible to load for AMP pages only.',summaryOptions:SUMMARY_OPTIONS,});const firstViewportReadyHistogram=histograms.createHistogram('timeToFirstViewportReady',timeDurationInMs_smallerIsBetter,[],{binBoundaries:TIME_TO_INTERACTIVE_BOUNDARIES,description:'Time from navigation to load for AMP pages only. ',summaryOptions:SUMMARY_OPTIONS,});const largestImagePaintHistogram=histograms.createHistogram('largestImagePaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'Time to Largest Image Paint',summaryOptions:SUMMARY_OPTIONS,});const largestTextPaintHistogram=histograms.createHistogram('largestTextPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'Time to Largest Text Paint',summaryOptions:SUMMARY_OPTIONS,});const largestContentfulPaintHistogram=histograms.createHistogram('largestContentfulPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'Time to Largest Contentful Paint',summaryOptions:SUMMARY_OPTIONS,});const layoutShiftHistogram=histograms.createHistogram('mainFrameCumulativeLayoutShift',unitlessNumber_smallerIsBetter,[],{binBoundaries:LAYOUT_SHIFT_SCORE_BOUNDARIES,description:'Main Frame Document Cumulative Layout Shift Score',summaryOptions:SUMMARY_OPTIONS,});const visuallyCompleteBeforeSomeTimeHistogram=histograms.createHistogram('visuallyCompleteBeforeSomeTime',unitlessNumber_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'Fraction of pixels in the initial viewport reaching '+'final value within some time interval after navigation start.',summaryOptions:SUMMARY_OPTIONS,});const speedIndexHistogram=histograms.createHistogram('speedIndex',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:' the average time at which visible parts of the'+' page are displayed (in ms).',summaryOptions:SUMMARY_OPTIONS,});const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);for(const pid in chromeHelper.rendererHelpers){const rendererHelper=chromeHelper.rendererHelpers[pid];if(rendererHelper.isChromeTracingUI)continue;const samplesSet=collectLoadingMetricsForRenderer(rendererHelper);const lcpSamples=findLargestContentfulPaintHistogramSamples(chromeHelper.browserHelper.mainThread.sliceGroup.slices);addSamplesToHistogram(lcpSamples,largestContentfulPaintHistogram,histograms);addSamplesToHistogram(samplesSet.firstPaintSamples,firstPaintHistogram,histograms);addSamplesToHistogram(samplesSet.firstContentfulPaintSamples,firstContentfulPaintHistogram,histograms);addSamplesToHistogram(samplesSet.firstContentfulPaintCpuTimeSamples,firstContentfulPaintCpuTimeHistogram,histograms);addSamplesToHistogram(samplesSet.onLoadSamples,onLoadHistogram,histograms);addSamplesToHistogram(samplesSet.aboveTheFoldLoadedToVisibleSamples,aboveTheFoldLoadedToVisibleHistogram,histograms);addSamplesToHistogram(samplesSet.firstViewportReadySamples,firstViewportReadyHistogram,histograms);addSamplesToHistogram(samplesSet.largestImagePaintSamples,largestImagePaintHistogram,histograms);addSamplesToHistogram(samplesSet.largestTextPaintSamples,largestTextPaintHistogram,histograms);addSamplesToHistogram(samplesSet.layoutShiftSamples,layoutShiftHistogram,histograms);addSamplesToHistogram(samplesSet.speedIndexSamples,speedIndexHistogram,histograms);}
+const samplesSet=collectMetricsFromLoadExpectations(model,chromeHelper);addSamplesToHistogram(samplesSet.firstMeaningfulPaintSamples,firstMeaningfulPaintHistogram,histograms);addSamplesToHistogram(samplesSet.firstMeaningfulPaintCpuTimeSamples,firstMeaningfulPaintCpuTimeHistogram,histograms);addSamplesToHistogram(samplesSet.interactiveSamples,timeToInteractiveHistogram,histograms);addSamplesToHistogram(samplesSet.firstCpuIdleSamples,timeToFirstCpuIdleHistogram,histograms);addSamplesToHistogram(samplesSet.visuallyCompleteBeforeSomeTimeSamples,visuallyCompleteBeforeSomeTimeHistogram,histograms);}
+tr.metrics.MetricRegistry.register(loadingMetric);return{loadingMetric,createBreakdownDiagnostic};});'use strict';tr.exportTo('tr.metrics',function(){const SPA_NAVIGATION_START_TO_FIRST_PAINT_DURATION_BIN_BOUNDARY=tr.v.HistogramBinBoundaries.createExponential(1,1000,50);function spaNavigationMetric(histograms,model){const histogram=new tr.v.Histogram('spaNavigationStartToFpDuration',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,SPA_NAVIGATION_START_TO_FIRST_PAINT_DURATION_BIN_BOUNDARY);histogram.description='Latency between the input event causing'+' a SPA navigation and the first paint event after it';histogram.customizeSummaryOptions({count:false,sum:false,});const modelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(!modelHelper){return;}
const rendererHelpers=modelHelper.rendererHelpers;if(!rendererHelpers){return;}
const browserHelper=modelHelper.browserHelper;for(const rendererHelper of Object.values(rendererHelpers)){const spaNavigations=tr.metrics.findSpaNavigationsOnRenderer(rendererHelper,browserHelper);for(const spaNav of spaNavigations){let beginTs=0;if(spaNav.navStartCandidates.inputLatencyAsyncSlice){const beginData=spaNav.navStartCandidates.inputLatencyAsyncSlice.args.data;beginTs=model.convertTimestampToModelTime('traceEventClock',beginData.INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT.time);}else{beginTs=spaNav.navStartCandidates.goToIndexSlice.start;}
-const rangeOfInterest=tr.b.math.Range.fromExplicitRange(beginTs,spaNav.firstPaintEvent.start);const networkEvents=tr.metrics.sh.getNetworkEventsInRange(rendererHelper.process,rangeOfInterest);const breakdownDict=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,rangeOfInterest);const breakdownDiagnostic=new tr.v.d.Breakdown();breakdownDiagnostic.colorScheme=tr.v.d.COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER;for(const label in breakdownDict){breakdownDiagnostic.set(label,parseInt(breakdownDict[label].total*1e3)/1e3);}
+const rangeOfInterest=tr.b.math.Range.fromExplicitRange(beginTs,spaNav.firstPaintEvent.start);const networkEvents=tr.e.chrome.EventFinderUtils.getNetworkEventsInRange(rendererHelper.process,rangeOfInterest);const breakdownDict=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,rangeOfInterest);const breakdownDiagnostic=new tr.v.d.Breakdown();breakdownDiagnostic.colorScheme=tr.v.d.COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER;for(const label in breakdownDict){breakdownDiagnostic.set(label,parseInt(breakdownDict[label].total*1e3)/1e3);}
histogram.addSample(rangeOfInterest.duration,{'Breakdown of [navStart, firstPaint]':breakdownDiagnostic,'Start':new tr.v.d.RelatedEventSet(spaNav.navigationStart),'End':new tr.v.d.RelatedEventSet(spaNav.firstPaintEvent),'Navigation infos':new tr.v.d.GenericSet([{url:spaNav.url,pid:rendererHelper.pid,navStart:beginTs,firstPaint:spaNav.firstPaintEvent.start}]),});}}
histograms.addHistogram(histogram);}
tr.metrics.MetricRegistry.register(spaNavigationMetric);return{spaNavigationMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const LATENCY_BOUNDS=tr.v.HistogramBinBoundaries.createLinear(0,20,100);function clockSyncLatencyMetric(values,model){const domains=Array.from(model.clockSyncManager.domainsSeen).sort();for(let i=0;i<domains.length;i++){for(let j=i+1;j<domains.length;j++){const latency=model.clockSyncManager.getTimeTransformerError(domains[i],domains[j]);const hist=new tr.v.Histogram('clock_sync_latency_'+
domains[i].toLowerCase()+'_to_'+domains[j].toLowerCase(),tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,LATENCY_BOUNDS);hist.customizeSummaryOptions({avg:true,count:false,max:false,min:false,std:false,sum:false,});hist.description='Clock sync latency for domain '+domains[i]+' to domain '+domains[j];hist.addSample(latency);values.addHistogram(hist);}}}
tr.metrics.MetricRegistry.register(clockSyncLatencyMetric);return{clockSyncLatencyMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const CPU_TIME_PERCENTAGE_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(0.01,50,200);function cpuTimeMetric(histograms,model,opt_options){let rangeOfInterest=model.bounds;if(opt_options&&opt_options.rangeOfInterest){rangeOfInterest=opt_options.rangeOfInterest;}else{const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(chromeHelper){const chromeBounds=chromeHelper.chromeBounds;if(chromeBounds){rangeOfInterest=chromeBounds;}}}
let allProcessCpuTime=0;for(const pid in model.processes){const process=model.processes[pid];if(tr.model.helpers.ChromeRendererHelper.isTracingProcess(process)){continue;}
-let processCpuTime=0;for(const tid in process.threads){const thread=process.threads[tid];let threadCpuTime=0;thread.sliceGroup.topLevelSlices.forEach(function(slice){if(slice.duration===0)return;if(!slice.cpuDuration)return;const sliceRange=tr.b.math.Range.fromExplicitRange(slice.start,slice.end);const intersection=rangeOfInterest.findIntersection(sliceRange);const fractionOfSliceInsideRangeOfInterest=intersection.duration/slice.duration;threadCpuTime+=slice.cpuDuration*fractionOfSliceInsideRangeOfInterest;});processCpuTime+=threadCpuTime;}
+let processCpuTime=0;for(const tid in process.threads){const thread=process.threads[tid];processCpuTime+=thread.getCpuTimeForRange(rangeOfInterest);}
allProcessCpuTime+=processCpuTime;}
let normalizedAllProcessCpuTime=0;if(rangeOfInterest.duration>0){normalizedAllProcessCpuTime=allProcessCpuTime/rangeOfInterest.duration;}
const unit=tr.b.Unit.byName.normalizedPercentage_smallerIsBetter;const cpuTimeHist=new tr.v.Histogram('cpu_time_percentage',unit,CPU_TIME_PERCENTAGE_BOUNDARIES);cpuTimeHist.description='Percent CPU utilization, normalized against a single core. Can be '+'greater than 100% if machine has multiple cores.';cpuTimeHist.customizeSummaryOptions({avg:true,count:false,max:false,min:false,std:false,sum:false});cpuTimeHist.addSample(normalizedAllProcessCpuTime);histograms.addHistogram(cpuTimeHist);}
-tr.metrics.MetricRegistry.register(cpuTimeMetric,{supportsRangeOfInterest:true});return{cpuTimeMetric,};});'use strict';tr.exportTo('tr.v.d',function(){function addRelatedNames(histograms){for(const hist of histograms){const relatedNames=new Set();for(const[name,diagnostic]of hist.diagnostics){if(diagnostic instanceof tr.v.d.RelatedHistogramMap){for(const[relationshipName,relatedHist]of diagnostic){relatedNames.add(relatedHist.name);}}}
-if(relatedNames.size){hist.diagnostics.set(tr.v.d.RESERVED_NAMES.RELATED_NAMES,new tr.v.d.GenericSet(relatedNames));}}}
-return{addRelatedNames,};});'use strict';tr.exportTo('tr.v',function(){class HistogramGrouping{constructor(key,callback){this.key_=key;this.callback_=callback;HistogramGrouping.BY_KEY.set(key,this);}
+tr.metrics.MetricRegistry.register(cpuTimeMetric,{supportsRangeOfInterest:true});return{cpuTimeMetric,};});'use strict';tr.exportTo('tr.v',function(){class HistogramDeserializer{static deserialize(data){const deserializer=new HistogramDeserializer(data[0],data[1]);return data.slice(2).map(datum=>tr.v.Histogram.deserialize(datum,deserializer));}
+constructor(objects,diagnostics){this.objects_=objects;this.diagnostics_=[];for(const[type,diagnosticsByName]of Object.entries(diagnostics||{})){for(const[name,diagnosticsById]of Object.entries(diagnosticsByName)){for(const[id,data]of Object.entries(diagnosticsById)){const diagnostic=tr.v.d.Diagnostic.deserialize(type,data,this);this.diagnostics_[parseInt(id)]={name,diagnostic};}}}}
+getObject(id){return this.objects_[id];}
+getDiagnostic(id){return this.diagnostics_[parseInt(id)];}}
+return{HistogramDeserializer};});'use strict';tr.exportTo('tr.v',function(){class HistogramGrouping{constructor(key,callback){this.key_=key;this.callback_=callback;HistogramGrouping.BY_KEY.set(key,this);}
get key(){return this.key_;}
get callback(){return this.callback_;}
get label(){return this.key;}
@@ -8090,42 +8663,43 @@ HistogramGrouping.BY_KEY=new Map();HistogramGrouping.HISTOGRAM_NAME=new Histogra
const benchmarks=hist.diagnostics.get(tr.v.d.RESERVED_NAMES.BENCHMARKS);const start=hist.diagnostics.get(tr.v.d.RESERVED_NAMES.BENCHMARK_START);if(benchmarks===undefined){if(start===undefined)return'Value';return start.toString();}
const benchmarksStr=Array.from(benchmarks).join('\n');if(start===undefined)return benchmarksStr;return benchmarksStr+'\n'+start.toString();});class GenericSetGrouping extends HistogramGrouping{constructor(name){super(name,undefined);this.callback_=this.compute_.bind(this);}
compute_(hist){const diag=hist.diagnostics.get(this.key);if(diag===undefined)return'';const parts=Array.from(diag);parts.sort();return parts.join(',');}}
-GenericSetGrouping.NAMES=[tr.v.d.RESERVED_NAMES.ARCHITECTURES,tr.v.d.RESERVED_NAMES.BENCHMARKS,tr.v.d.RESERVED_NAMES.BOTS,tr.v.d.RESERVED_NAMES.BUILDS,tr.v.d.RESERVED_NAMES.DEVICE_IDS,tr.v.d.RESERVED_NAMES.MASTERS,tr.v.d.RESERVED_NAMES.MEMORY_AMOUNTS,tr.v.d.RESERVED_NAMES.OS_NAMES,tr.v.d.RESERVED_NAMES.OS_VERSIONS,tr.v.d.RESERVED_NAMES.PRODUCT_VERSIONS,tr.v.d.RESERVED_NAMES.STORIES,tr.v.d.RESERVED_NAMES.STORYSET_REPEATS,tr.v.d.RESERVED_NAMES.STORY_TAGS,];for(const name of GenericSetGrouping.NAMES){new GenericSetGrouping(name);}
+GenericSetGrouping.NAMES=[tr.v.d.RESERVED_NAMES.ARCHITECTURES,tr.v.d.RESERVED_NAMES.BENCHMARKS,tr.v.d.RESERVED_NAMES.BOTS,tr.v.d.RESERVED_NAMES.BUILDS,tr.v.d.RESERVED_NAMES.DEVICE_IDS,tr.v.d.RESERVED_NAMES.MASTERS,tr.v.d.RESERVED_NAMES.MEMORY_AMOUNTS,tr.v.d.RESERVED_NAMES.OS_NAMES,tr.v.d.RESERVED_NAMES.OS_VERSIONS,tr.v.d.RESERVED_NAMES.PRODUCT_VERSIONS,tr.v.d.RESERVED_NAMES.STORIES,tr.v.d.RESERVED_NAMES.STORYSET_REPEATS,tr.v.d.RESERVED_NAMES.STORY_TAGS,tr.v.d.RESERVED_NAMES.TEST_PATH,];for(const name of GenericSetGrouping.NAMES){new GenericSetGrouping(name);}
class DateRangeGrouping extends HistogramGrouping{constructor(name){super(name,undefined);this.callback_=this.compute_.bind(this);}
compute_(hist){const diag=hist.diagnostics.get(this.key);if(diag===undefined)return'';return diag.toString();}}
DateRangeGrouping.NAMES=[tr.v.d.RESERVED_NAMES.BENCHMARK_START,tr.v.d.RESERVED_NAMES.TRACE_START,];for(const name of DateRangeGrouping.NAMES){new DateRangeGrouping(name);}
-return{HistogramGrouping,GenericSetGrouping,DateRangeGrouping,};});'use strict';tr.exportTo('tr.v',function(){class HistogramSet{constructor(opt_histograms){this.histogramsByGuid_=new Map();this.sharedDiagnosticsByGuid_=new Map();if(opt_histograms!==undefined){for(const hist of opt_histograms){this.addHistogram(hist);}}}
+return{HistogramGrouping,GenericSetGrouping,DateRangeGrouping,};});'use strict';tr.exportTo('tr.v',function(){class HistogramSet{constructor(opt_histograms){this.histograms_=new Set();this.sharedDiagnosticsByGuid_=new Map();if(opt_histograms!==undefined){for(const hist of opt_histograms){this.addHistogram(hist);}}}
+has(hist){return this.histograms_.has(hist);}
createHistogram(name,unit,samples,opt_options){const hist=tr.v.Histogram.create(name,unit,samples,opt_options);this.addHistogram(hist);return hist;}
-addHistogram(hist,opt_diagnostics){if(this.histogramsByGuid_.has(hist.guid)){throw new Error('Cannot add same Histogram twice');}
+addHistogram(hist,opt_diagnostics){if(this.has(hist)){throw new Error('Cannot add same Histogram twice');}
if(opt_diagnostics!==undefined){if(!(opt_diagnostics instanceof Map)){opt_diagnostics=Object.entries(opt_diagnostics);}
for(const[name,diagnostic]of opt_diagnostics){hist.diagnostics.set(name,diagnostic);}}
-this.histogramsByGuid_.set(hist.guid,hist);}
+this.histograms_.add(hist);}
addSharedDiagnosticToAllHistograms(name,diagnostic){this.addSharedDiagnostic(diagnostic);for(const hist of this){hist.diagnostics.set(name,diagnostic);}}
addSharedDiagnostic(diagnostic){this.sharedDiagnosticsByGuid_.set(diagnostic.guid,diagnostic);}
-get length(){return this.histogramsByGuid_.size;}*[Symbol.iterator](){for(const hist of this.histogramsByGuid_.values()){yield hist;}}
+get length(){return this.histograms_.size;}*[Symbol.iterator](){for(const hist of this.histograms_){yield hist;}}
getHistogramsNamed(name){return[...this].filter(h=>h.name===name);}
getHistogramNamed(name){const histograms=this.getHistogramsNamed(name);if(histograms.length===0)return undefined;if(histograms.length>1){throw new Error(`Unexpectedly found multiple histograms named "${name}"`);}
return histograms[0];}
-lookupHistogram(guid){return this.histogramsByGuid_.get(guid);}
lookupDiagnostic(guid){return this.sharedDiagnosticsByGuid_.get(guid);}
-resolveRelatedHistograms(){const handleDiagnosticMap=dm=>{for(const[name,diagnostic]of dm){if(diagnostic instanceof tr.v.d.RelatedHistogramMap){diagnostic.resolve(this);}}};for(const hist of this){handleDiagnosticMap(hist.diagnostics);for(const dm of hist.nanDiagnosticMaps){handleDiagnosticMap(dm);}
-for(const bin of hist.allBins){for(const dm of bin.diagnosticMaps){handleDiagnosticMap(dm);}}}}
-importDicts(dicts){for(const dict of dicts){if(dict.type&&tr.v.d.Diagnostic.findTypeInfoWithName(dict.type)){this.sharedDiagnosticsByGuid_.set(dict.guid,tr.v.d.Diagnostic.fromDict(dict));}else{const hist=tr.v.Histogram.fromDict(dict);this.addHistogram(hist);hist.diagnostics.resolveSharedDiagnostics(this,true);}}}
+deserialize(data){for(const hist of tr.v.HistogramDeserializer.deserialize(data)){this.addHistogram(hist);}}
+importDicts(dicts){if((dicts instanceof Array)&&(dicts.length>2)&&(dicts[0]instanceof Array)){this.deserialize(dicts);return;}
+for(const dict of dicts){this.importLegacyDict(dict);}}
+importLegacyDict(dict){if(dict.type!==undefined){if(dict.type==='TagMap')return;if(!tr.v.d.Diagnostic.findTypeInfoWithName(dict.type)){throw new Error('Unrecognized shared diagnostic type '+dict.type);}
+this.sharedDiagnosticsByGuid_.set(dict.guid,tr.v.d.Diagnostic.fromDict(dict));}else{const hist=tr.v.Histogram.fromDict(dict);this.addHistogram(hist);hist.diagnostics.resolveSharedDiagnostics(this,true);}}
asDicts(){const dicts=[];for(const diagnostic of this.sharedDiagnosticsByGuid_.values()){dicts.push(diagnostic.asDict());}
for(const hist of this){dicts.push(hist.asDict());}
return dicts;}
get sourceHistograms(){const diagnosticNames=new Set();for(const hist of this){for(const diagnostic of hist.diagnostics.values()){if(!(diagnostic instanceof tr.v.d.RelatedNameMap))continue;for(const name of diagnostic.values()){diagnosticNames.add(name);}}}
-const sourceHistograms=new Map();for(const hist of this){if(!diagnosticNames.has(hist.name)){sourceHistograms.set(hist.guid,hist);}}
-function deleteSourceHistograms(diagnosticMap){for(const[name,diagnostic]of diagnosticMap){if(diagnostic instanceof tr.v.d.RelatedHistogramMap){for(const[name,relatedHist]of diagnostic){sourceHistograms.delete(relatedHist.guid);}}}}
-for(const hist of this){deleteSourceHistograms(hist.diagnostics);for(const dm of hist.nanDiagnosticMaps){deleteSourceHistograms(dm);}
-for(const b of hist.allBins){for(const dm of b.diagnosticMaps){deleteSourceHistograms(dm);}}}
-return new HistogramSet([...sourceHistograms.values()]);}
+const sourceHistograms=new HistogramSet;for(const hist of this){if(!diagnosticNames.has(hist.name)){sourceHistograms.addHistogram(hist);}}
+return sourceHistograms;}
groupHistogramsRecursively(groupings,opt_skipGroupingCallback){function recurse(histograms,level){if(level===groupings.length){return histograms;}
const grouping=groupings[level];const groupedHistograms=tr.b.groupIntoMap(histograms,grouping.callback);if(opt_skipGroupingCallback&&opt_skipGroupingCallback(grouping,groupedHistograms)){return recurse(histograms,level+1);}
for(const[key,group]of groupedHistograms){groupedHistograms.set(key,recurse(group,level+1));}
return groupedHistograms;}
return recurse([...this],0);}
-deduplicateDiagnostics(){const namesToCandidates=new Map();const diagnosticsToHistograms=new Map();for(const hist of this){for(const[name,candidate]of hist.diagnostics){if(candidate.equals===undefined){this.sharedDiagnosticsByGuid_.set(candidate.guid,candidate);continue;}
+deduplicateDiagnostics(){const namesToCandidates=new Map();const diagnosticsToHistograms=new Map();const keysToDiagnostics=new Map();for(const hist of this){for(const[name,candidate]of hist.diagnostics){if(candidate.equals===undefined){this.sharedDiagnosticsByGuid_.set(candidate.guid,candidate);continue;}
+const hashKey=candidate.hashKey;if(candidate.hashKey!==undefined){if(keysToDiagnostics.has(hashKey)){hist.diagnostics.set(name,keysToDiagnostics.get(hashKey));}else{keysToDiagnostics.set(hashKey,candidate);this.sharedDiagnosticsByGuid_.set(candidate.guid,candidate);}
+continue;}
if(diagnosticsToHistograms.get(candidate)===undefined){diagnosticsToHistograms.set(candidate,[hist]);}else{diagnosticsToHistograms.get(candidate).push(hist);}
if(!namesToCandidates.has(name)){namesToCandidates.set(name,new Set());}
namesToCandidates.get(name).add(candidate);}}
@@ -8135,12 +8709,14 @@ if(!found){deduplicatedDiagnostics.add(candidate);}
for(const diagnostic of deduplicatedDiagnostics){this.sharedDiagnosticsByGuid_.set(diagnostic.guid,diagnostic);}}}}
buildGroupingsFromTags(names){const tags=new Map();for(const hist of this){for(const name of names){if(!hist.diagnostics.has(name))continue;if(!tags.has(name))tags.set(name,new Set());for(const tag of hist.diagnostics.get(name)){tags.get(name).add(tag);}}}
const groupings=[];for(const[name,values]of tags){const built=tr.v.HistogramGrouping.buildFromTags(values,name);for(const grouping of built){groupings.push(grouping);}}
-return groupings;}
-mergeRelationships(){for(const hist of this){hist.diagnostics.mergeRelationships(hist);}}}
-return{HistogramSet,};});'use strict';tr.exportTo('tr.e.chrome',function(){function hasTitleAndCategory(event,title,category){return event.title===title&&event.category&&tr.b.getCategoryParts(event.category).includes(category);}
+return groupings;}}
+return{HistogramSet};});'use strict';tr.exportTo('tr.e.chrome',function(){function hasTitleAndCategory(event,title,category){return event.title===title&&event.category&&tr.b.getCategoryParts(event.category).includes(category);}
function getNavStartTimestamps(rendererHelper){const navStartTimestamps=[];for(const e of rendererHelper.mainThread.sliceGroup.childEvents()){if(hasTitleAndCategory(e,'navigationStart','blink.user_timing')){navStartTimestamps.push(e.start);}}
return navStartTimestamps;}
-function getInteractiveTimestamps(model){const interactiveTimestampsMap=new Map();const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){const timestamps=[];interactiveTimestampsMap.set(rendererHelper.pid,timestamps);const samples=tr.metrics.sh.collectLoadingMetricsForRenderer(rendererHelper).interactiveSamples;for(const sample of samples){timestamps.push(tr.b.getOnlyElement(sample.diagnostics.get('Navigation infos')).eventTimestamp);}}
+function getInteractiveTimestamps(model){const interactiveTimestampsMap=new Map();const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){const timestamps=[];interactiveTimestampsMap.set(rendererHelper.pid,timestamps);}
+for(const expectation of model.userModel.expectations){if(!(expectation instanceof tr.model.um.LoadExpectation))continue;if(tr.e.chrome.CHROME_INTERNAL_URLS.includes(expectation.url)){continue;}
+if(expectation.timeToInteractive===undefined)continue;if(interactiveTimestampsMap.get(expectation.renderProcess.pid)===undefined){interactiveTimestampsMap.set(expectation.renderProcess.pid,[]);}
+interactiveTimestampsMap.get(expectation.renderProcess.pid).push(expectation.timeToInteractive);}
return interactiveTimestampsMap;}
function getPostInteractiveTaskWindows(interactiveTimestamps,navStartTimestamps,traceEndTimestamp){let navStartTsIndex=0;let lastTaskWindowEndTs=undefined;const taskWindows=[];for(const currTTI of interactiveTimestamps){while(navStartTsIndex<navStartTimestamps.length&&navStartTimestamps[navStartTsIndex]<currTTI){navStartTsIndex++;}
const taskWindowEndTs=navStartTsIndex<navStartTimestamps.length?navStartTimestamps[navStartTsIndex]:traceEndTimestamp;if(taskWindowEndTs===lastTaskWindowEndTs){throw Error('Encountered two consecutive interactive timestamps '+'with no navigationStart between them. '+'PostInteractiveTaskWindow is not well defined in this case.');}
@@ -8161,37 +8737,33 @@ if(this.lastTaskIndex_+1<this.sortedTasks_.length&&this.sortedTasks_[this.lastTa
this.lastTaskIndex_++;}}}
function maxExpectedQueueingTimeInSlidingWindow(startTime,endTime,windowSize,tasks){if(windowSize<=0){throw Error('The window size must be positive number');}
if(startTime+windowSize>endTime){throw Error('The sliding window must fit in the specified time range');}
-const sortedTasks=tasks.slice().sort((a,b)=>a.start-b.start);for(let i=1;i<sortedTasks.length;i++){const PRECISION_MS=0.1;if(sortedTasks[i-1].end>sortedTasks[i].start+PRECISION_MS){throw Error('Tasks must not overlap');}
-if(sortedTasks[i-1].end>sortedTasks[i].start){const midpoint=(sortedTasks[i-1].end+sortedTasks[i].start)/2;sortedTasks[i-1].end=midpoint;sortedTasks[i].start=midpoint;}}
+const sortedTasks=tasks.slice().sort((a,b)=>a.start-b.start);for(let i=1;i<sortedTasks.length;i++){if(sortedTasks[i-1].end>sortedTasks[i].start){const midpoint=(sortedTasks[i-1].end+sortedTasks[i].start)/2;sortedTasks[i-1].end=midpoint;sortedTasks[i].start=midpoint;}}
let endpoints=[];endpoints.push(startTime);endpoints.push(endTime-windowSize);for(const task of tasks){endpoints.push(task.start-windowSize);endpoints.push(task.start);endpoints.push(task.end-windowSize);endpoints.push(task.end);}
endpoints=endpoints.filter(x=>(startTime<=x&&x+windowSize<=endTime));endpoints.sort((a,b)=>a-b);const slidingWindow=new SlidingWindow(endpoints[0],windowSize,sortedTasks);let maxEQT=0;for(const t of endpoints){slidingWindow.slide(t);maxEQT=Math.max(maxEQT,slidingWindow.getEQT);}
return maxEQT;}
return{getPostInteractiveTaskWindows,getNavStartTimestamps,getInteractiveTimestamps,expectedQueueingTime,maxExpectedQueueingTimeInSlidingWindow,weightedExpectedQueueingTime};});'use strict';tr.exportTo('tr.metrics.sh',function(){const WINDOW_SIZE_MS=500;const EQT_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(0.01,WINDOW_SIZE_MS,50);function containsForcedGC_(slice){return slice.findTopmostSlicesRelativeToThisSlice(tr.metrics.v8.utils.isForcedGarbageCollectionEvent).length>0;}
-function createHistogramForEQT_(name,description){const histogram=new tr.v.Histogram(name,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,EQT_BOUNDARIES);histogram.customizeSummaryOptions({avg:false,count:false,max:true,min:false,std:false,sum:false,});histogram.description=description;return histogram;}
-function expectedQueueingTimeMetric(histograms,model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const rendererHelpers=Object.values(chromeHelper.rendererHelpers);const rendererToInteractiveTimestamps=tr.e.chrome.getInteractiveTimestamps(model);addExpectedQueueingTimeMetric_('renderer_eqt',event=>{return{start:event.start,duration:event.duration};},false,rendererHelpers,rendererToInteractiveTimestamps,histograms,model);addExpectedQueueingTimeMetric_('renderer_eqt_cpu',event=>{return{start:event.cpuStart,duration:event.cpuDuration};},true,rendererHelpers,rendererToInteractiveTimestamps,histograms,model);}
-function addExpectedQueueingTimeMetric_(eqtName,getEventTimes,isCpuTime,rendererHelpers,rendererToInteractiveTimestamps,histograms,model){function getTasks(rendererHelper){const tasks=[];for(const slice of rendererHelper.mainThread.sliceGroup.topLevelSlices){const times=getEventTimes(slice);if(times.duration>0&&!containsForcedGC_(slice)){tasks.push({start:times.start,end:times.start+times.duration});}}
+function getOrCreateHistogram_(histograms,name,description){return histograms.getHistogramNamed(name)||histograms.createHistogram(name,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],{binBoundaries:EQT_BOUNDARIES,description,summaryOptions:{avg:false,count:false,max:true,min:false,std:false,sum:false,},});}
+function expectedQueueingTimeMetric(histograms,model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const rendererHelpers=Object.values(chromeHelper.rendererHelpers);addExpectedQueueingTimeMetric_('renderer_eqt',event=>{return{start:event.start,duration:event.duration};},false,rendererHelpers,histograms,model);}
+function addExpectedQueueingTimeMetric_(eqtName,getEventTimes,isCpuTime,rendererHelpers,histograms,model){function getTasks(rendererHelper){const tasks=[];for(const slice of
+tr.e.chrome.EventFinderUtils.findToplevelSchedulerTasks(rendererHelper.mainThread)){const times=getEventTimes(slice);if(times.duration>0&&!containsForcedGC_(slice)){tasks.push({start:times.start,end:times.start+times.duration});}}
return tasks;}
-const totalHistogram=createHistogramForEQT_(`total:${WINDOW_SIZE_MS}ms_window:${eqtName}`,`The maximum EQT in a ${WINDOW_SIZE_MS}ms sliding window`+' for a given renderer');const interactiveHistogram=createHistogramForEQT_(`interactive:${WINDOW_SIZE_MS}ms_window:${eqtName}`,`The maximum EQT in a ${WINDOW_SIZE_MS}ms sliding window`+' for a given renderer while the page is interactive');for(const rendererHelper of rendererHelpers){if(rendererHelper.isChromeTracingUI)continue;if(rendererHelper.mainThread.bounds.duration<WINDOW_SIZE_MS)continue;const tasks=getTasks(rendererHelper);totalHistogram.addSample(tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow(rendererHelper.mainThread.bounds.min,rendererHelper.mainThread.bounds.max,WINDOW_SIZE_MS,tasks));const interactiveTimestamps=rendererToInteractiveTimestamps.get(rendererHelper.pid);if(interactiveTimestamps.length===0)continue;if(interactiveTimestamps.length>1){continue;}
-const interactiveWindow=tr.b.math.Range.fromExplicitRange(interactiveTimestamps[0],Infinity).findIntersection(rendererHelper.mainThread.bounds);interactiveHistogram.addSample(tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow(interactiveWindow.min,interactiveWindow.max,WINDOW_SIZE_MS,tasks));}
-addV8ContributionToExpectedQueueingTime_(eqtName,getEventTimes,isCpuTime,totalHistogram,interactiveHistogram,rendererToInteractiveTimestamps,histograms,model);histograms.addHistogram(totalHistogram);histograms.addHistogram(interactiveHistogram);}
-function addV8ContributionToExpectedQueueingTime_(eqtName,getEventTimes,isCpuTime,totalEqtHistogram,interactiveEqtHistogram,rendererToInteractiveTimestamps,histograms,model){if(!model.categories.includes('v8'))return;const breakdownForTotal=new tr.v.d.RelatedHistogramMap();const breakdownForInteractive=new tr.v.d.RelatedHistogramMap();const eventNamesWithTaskExtractors=getV8EventNamesWithTaskExtractors_(getEventTimes);if(!isCpuTime){const taskExtractorsUsingRCS=getV8EventNamesWithTaskExtractorsUsingRCS_(getEventTimes);for(const[eventName,getTasks]of taskExtractorsUsingRCS){eventNamesWithTaskExtractors.set(eventName,getTasks);}}
-for(const[eventName,getTasks]of eventNamesWithTaskExtractors){const contribution=contributionToExpectedQueueingTime_(eqtName,eventName,getTasks,rendererToInteractiveTimestamps,histograms,model);breakdownForTotal.set(eventName,contribution.total);breakdownForInteractive.set(eventName,contribution.interactive);}
-totalEqtHistogram.diagnostics.set('v8',breakdownForTotal);interactiveEqtHistogram.diagnostics.set('v8',breakdownForInteractive);}
+const totalHistogram=getOrCreateHistogram_(histograms,`total:${WINDOW_SIZE_MS}ms_window:${eqtName}`,`The maximum EQT in a ${WINDOW_SIZE_MS}ms sliding window`+' for a given renderer');for(const rendererHelper of rendererHelpers){if(rendererHelper.isChromeTracingUI)continue;if(rendererHelper.mainThread.bounds.duration<WINDOW_SIZE_MS)continue;const tasks=getTasks(rendererHelper);const totalBreakdown=getV8Contribution_(eqtName,getEventTimes,isCpuTime,totalHistogram,histograms,rendererHelper,model);totalHistogram.addSample(tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow(rendererHelper.mainThread.bounds.min,rendererHelper.mainThread.bounds.max,WINDOW_SIZE_MS,tasks),{v8:totalBreakdown});}}
+function getV8Contribution_(eqtName,getEventTimes,isCpuTime,totalEqtHistogram,histograms,rendererHelper,model){if(!model.categories.includes('v8'))return null;const totalBreakdown=new tr.v.d.Breakdown();const eventNamesWithTaskExtractors=getV8EventNamesWithTaskExtractors_(getEventTimes);if(!isCpuTime){const taskExtractorsUsingRCS=getV8EventNamesWithTaskExtractorsUsingRCS_(getEventTimes);for(const[eventName,getTasks]of taskExtractorsUsingRCS){eventNamesWithTaskExtractors.set(eventName,getTasks);}}
+let totalNames=totalEqtHistogram.diagnostics.get('v8');if(!totalNames){totalNames=new tr.v.d.RelatedNameMap();totalEqtHistogram.diagnostics.set('v8',totalNames);}
+for(const[eventName,getTasks]of eventNamesWithTaskExtractors){const totalHistogram=getOrCreateHistogram_(histograms,`total:${WINDOW_SIZE_MS}ms_window:${eqtName}:${eventName}`,`Contribution to the expected queueing time by ${eventName}`+' for a given renderer. It is computed as the maximum EQT in'+` a ${WINDOW_SIZE_MS}ms sliding window after shrinking top-level`+` tasks to contain only ${eventName} subevents`);const tasks=getTasks(rendererHelper);const totalSample=tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow(rendererHelper.mainThread.bounds.min,rendererHelper.mainThread.bounds.max,WINDOW_SIZE_MS,tasks);totalHistogram.addSample(totalSample);totalBreakdown.set(eventName,totalSample);totalNames.set(eventName,totalHistogram.name);}
+return totalBreakdown;}
function getV8EventNamesWithTaskExtractors_(getEventTimes,cpuMetrics){function durationOfTopmostSubSlices(slice,predicate,excludePredicate){let duration=0;for(const sub of slice.findTopmostSlicesRelativeToThisSlice(predicate)){duration+=getEventTimes(sub).duration;if(excludePredicate!==null&&excludePredicate!==undefined){duration-=durationOfTopmostSubSlices(sub,excludePredicate);}}
return duration;}
-function taskExtractor(predicate,excludePredicate){return function(rendererHelper){const slices=rendererHelper.mainThread.sliceGroup.topLevelSlices;const result=[];for(const slice of slices){const times=getEventTimes(slice);if(times.duration>0&&!containsForcedGC_(slice)){const duration=durationOfTopmostSubSlices(slice,predicate,excludePredicate);result.push({start:times.start,end:times.start+duration});}}
+function taskExtractor(predicate,excludePredicate){return function(rendererHelper){const slices=tr.e.chrome.EventFinderUtils.findToplevelSchedulerTasks(rendererHelper.mainThread);const result=[];for(const slice of slices){const times=getEventTimes(slice);if(times.duration>0&&!containsForcedGC_(slice)){const duration=durationOfTopmostSubSlices(slice,predicate,excludePredicate);result.push({start:times.start,end:times.start+duration});}}
return result;};}
-return new Map([['v8',taskExtractor(tr.metrics.v8.utils.isV8Event)],['v8:execute',taskExtractor(tr.metrics.v8.utils.isV8ExecuteEvent)],['v8:gc',taskExtractor(tr.metrics.v8.utils.isGarbageCollectionEvent)],['v8:gc:full-mark-compactor',taskExtractor(tr.metrics.v8.utils.isFullMarkCompactorEvent)],['v8:gc:incremental-marking',taskExtractor(tr.metrics.v8.utils.isIncrementalMarkingEvent)],['v8:gc:latency-mark-compactor',taskExtractor(tr.metrics.v8.utils.isLatencyMarkCompactorEvent)],['v8:gc:memory-mark-compactor',taskExtractor(tr.metrics.v8.utils.isMemoryMarkCompactorEvent)],['v8:gc:scavenger',taskExtractor(tr.metrics.v8.utils.isScavengerEvent)]]);}
+return new Map([['v8',taskExtractor(tr.metrics.v8.utils.isV8Event)],['v8:execute',taskExtractor(tr.metrics.v8.utils.isV8ExecuteEvent)],['v8:gc',taskExtractor(tr.metrics.v8.utils.isGarbageCollectionEvent)]]);}
function extractTaskRCS(getEventTimes,predicate,rendererHelper){const result=[];for(const topSlice of
rendererHelper.mainThread.sliceGroup.topLevelSlices){const times=getEventTimes(topSlice);if(times.duration<=0||containsForcedGC_(topSlice)){continue;}
const v8ThreadSlices=[];for(const slice of topSlice.descendentSlices){if(tr.metrics.v8.utils.isV8RCSEvent(slice)){v8ThreadSlices.push(slice);}}
const runtimeGroupCollection=new tr.e.v8.RuntimeStatsGroupCollection();runtimeGroupCollection.addSlices(v8ThreadSlices);let duration=0;for(const runtimeGroup of runtimeGroupCollection.runtimeGroups){if(predicate(runtimeGroup.name)){duration+=runtimeGroup.time;}}
duration=tr.b.convertUnit(duration,tr.b.UnitPrefixScale.METRIC.MICRO,tr.b.UnitPrefixScale.METRIC.MILLI);result.push({start:times.start,end:times.start+duration});}
return result;}
-function getV8EventNamesWithTaskExtractorsUsingRCS_(getEventTimes){const extractors=new Map();extractors.set('v8:compile_rcs',rendererHelper=>extractTaskRCS(getEventTimes,tr.metrics.v8.utils.isCompileRCSCategory,rendererHelper));extractors.set('v8:compile:optimize_rcs',rendererHelper=>extractTaskRCS(getEventTimes,tr.metrics.v8.utils.isCompileOptimizeRCSCategory,rendererHelper));extractors.set('v8:compile:parse_rcs',rendererHelper=>extractTaskRCS(getEventTimes,tr.metrics.v8.utils.isCompileParseRCSCategory,rendererHelper));extractors.set('v8:compile:compile-unoptimize_rcs',rendererHelper=>extractTaskRCS(getEventTimes,tr.metrics.v8.utils.isCompileUnoptimizeRCSCategory,rendererHelper));return extractors;}
-function contributionToExpectedQueueingTime_(eqtName,eventName,getTasks,rendererToInteractiveTimestamps,histograms,model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const totalHistogram=createHistogramForEQT_(`total:${WINDOW_SIZE_MS}ms_window:${eqtName}:${eventName}`,`Contribution to the expected queueing time by ${eventName}`+' for a given renderer. It is computed as the maximum EQT in'+` a ${WINDOW_SIZE_MS}ms sliding window after shrinking top-level`+` tasks to contain only ${eventName} subevents`);const interactiveHistogram=createHistogramForEQT_(`interactive:${WINDOW_SIZE_MS}ms_window:${eqtName}:${eventName}`,`Contribution to the expected queueing time by ${eventName}`+' for a given renderer while the page is interactive. It is computed'+` as the maximum EQT in a ${WINDOW_SIZE_MS}ms sliding window after`+` shrinking top-level tasks to contain only ${eventName} subevents`);const rendererHelpers=Object.values(chromeHelper.rendererHelpers);for(const rendererHelper of rendererHelpers){if(rendererHelper.isChromeTracingUI)continue;const tasks=getTasks(rendererHelper);totalHistogram.addSample(tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow(rendererHelper.mainThread.bounds.min,rendererHelper.mainThread.bounds.max,WINDOW_SIZE_MS,tasks));const interactiveTimestamps=rendererToInteractiveTimestamps.get(rendererHelper.pid);if(interactiveTimestamps.length===0)continue;if(interactiveTimestamps.length>1){continue;}
-const interactiveWindow=tr.b.math.Range.fromExplicitRange(interactiveTimestamps[0],Infinity).findIntersection(rendererHelper.mainThread.bounds);interactiveHistogram.addSample(tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow(interactiveWindow.min,interactiveWindow.max,WINDOW_SIZE_MS,tasks));}
-histograms.addHistogram(totalHistogram);histograms.addHistogram(interactiveHistogram);return{total:totalHistogram,interactive:interactiveHistogram};}
+function getV8EventNamesWithTaskExtractorsUsingRCS_(getEventTimes){const extractors=new Map();extractors.set('v8:compile_rcs',rendererHelper=>extractTaskRCS(getEventTimes,tr.metrics.v8.utils.isCompileRCSCategory,rendererHelper));extractors.set('v8:compile:optimize_rcs',rendererHelper=>extractTaskRCS(getEventTimes,tr.metrics.v8.utils.isCompileOptimizeRCSCategory,rendererHelper));return extractors;}
tr.metrics.MetricRegistry.register(expectedQueueingTimeMetric);return{expectedQueueingTimeMetric,};});'use strict';tr.exportTo('tr.b',function(){function MultiDimensionalViewNode(title,valueCount){this.title=title;const dimensions=title.length;this.children=new Array(dimensions);for(let i=0;i<dimensions;i++){this.children[i]=new Map();}
this.values=new Array(valueCount);for(let v=0;v<valueCount;v++){this.values[v]={self:0,total:0,totalState:NOT_PROVIDED};}}
MultiDimensionalViewNode.TotalState={NOT_PROVIDED:0,LOWER_BOUND:1,EXACT:2};const NOT_PROVIDED=MultiDimensionalViewNode.TotalState.NOT_PROVIDED;const LOWER_BOUND=MultiDimensionalViewNode.TotalState.LOWER_BOUND;const EXACT=MultiDimensionalViewNode.TotalState.EXACT;MultiDimensionalViewNode.prototype={get subRows(){return Array.from(this.children[0].values());}};function MultiDimensionalViewBuilder(dimensions,valueCount){if(typeof(dimensions)!=='number'||dimensions<0){throw new Error('Dimensions must be a non-negative number');}
@@ -8232,14 +8804,12 @@ while(i+maxLength<n&&list[startIndex+maxLength]===list[startIndex+i+maxLength]){
if(i+maxLength-1>right){left=i;right=i+maxLength-1;}
z[i]=maxLength;}
return z;}
-return{MultiDimensionalViewBuilder,MultiDimensionalViewNode,RecursionDepthTracker,zFunction,};});'use strict';tr.exportTo('tr.e.chrome',function(){class CpuTime{static getCpuTimeForThread(thread,range){let totalCpuTime=0;tr.b.iterateOverIntersectingIntervals(thread.sliceGroup.topLevelSlices,slice=>slice.start,slice=>slice.end,range.min,range.max,slice=>{if(slice.duration===0)return;if(!slice.cpuDuration)return;const intersection=range.findIntersection(slice.range);const fractionOfSliceInsideRangeOfInterest=intersection.duration/slice.duration;totalCpuTime+=slice.cpuDuration*fractionOfSliceInsideRangeOfInterest;});return totalCpuTime;}
-static getStageToInitiatorToSegmentBounds(segments,rangeOfInterest){const stageToInitiatorToRanges=new Map();stageToInitiatorToRanges.set('all_stages',new Map([['all_initiators',new Set()]]));const allRanges=stageToInitiatorToRanges.get('all_stages').get('all_initiators');for(const segment of segments){if(!rangeOfInterest.intersectsRangeInclusive(segment.range))continue;const intersectingRange=rangeOfInterest.findIntersection(segment.range);allRanges.add(intersectingRange);for(const expectation of segment.expectations){const stageTitle=expectation.stageTitle;if(!stageToInitiatorToRanges.has(stageTitle)){stageToInitiatorToRanges.set(stageTitle,new Map([['all_initiators',new Set()]]));}
+return{MultiDimensionalViewBuilder,MultiDimensionalViewNode,RecursionDepthTracker,zFunction,};});'use strict';tr.exportTo('tr.e.chrome',function(){class CpuTime{static getStageToInitiatorToSegmentBounds(segments,rangeOfInterest){const stageToInitiatorToRanges=new Map();stageToInitiatorToRanges.set('all_stages',new Map([['all_initiators',new Set()]]));const allRanges=stageToInitiatorToRanges.get('all_stages').get('all_initiators');for(const segment of segments){if(!rangeOfInterest.intersectsRangeInclusive(segment.range))continue;const intersectingRange=rangeOfInterest.findIntersection(segment.range);allRanges.add(intersectingRange);for(const expectation of segment.expectations){const stageTitle=expectation.stageTitle;if(!stageToInitiatorToRanges.has(stageTitle)){stageToInitiatorToRanges.set(stageTitle,new Map([['all_initiators',new Set()]]));}
const initiatorToRanges=stageToInitiatorToRanges.get(stageTitle);initiatorToRanges.get('all_initiators').add(intersectingRange);const initiatorType=expectation.initiatorType;if(initiatorType){if(!initiatorToRanges.has(initiatorType)){initiatorToRanges.set(initiatorType,new Set());}
initiatorToRanges.get(initiatorType).add(intersectingRange);}}}
return stageToInitiatorToRanges;}
-static computeCpuTimesForRanges_(ranges,thread){const rangeToCpuTime=new Map();for(const range of ranges){rangeToCpuTime.set(range,CpuTime.getCpuTimeForThread(thread,range));}
-return rangeToCpuTime;}
-static constructMultiDimensionalView(model,rangeOfInterest){const mdvBuilder=new tr.b.MultiDimensionalViewBuilder(3,2);const stageToInitiatorToRanges=CpuTime.getStageToInitiatorToSegmentBounds(model.userModel.segments,rangeOfInterest);const allSegmentBoundsInRange=stageToInitiatorToRanges.get('all_stages').get('all_initiators');for(const[pid,process]of Object.entries(model.processes)){const processType=tr.e.chrome.chrome_processes.canonicalizeProcessName(process.name);for(const[tid,thread]of Object.entries(process.threads)){const rangeToCpuTime=CpuTime.computeCpuTimesForRanges_(allSegmentBoundsInRange,thread);for(const[stage,initiatorToRanges]of stageToInitiatorToRanges){for(const[initiator,ranges]of initiatorToRanges){const cpuTime=tr.b.math.Statistics.sum(ranges,range=>rangeToCpuTime.get(range));const duration=tr.b.math.Statistics.sum(ranges,range=>range.duration);const cpuTimePerSecond=cpuTime/duration;mdvBuilder.addPath([[processType],[thread.type],[stage,initiator]],[cpuTimePerSecond,cpuTime],tr.b.MultiDimensionalViewBuilder.ValueKind.TOTAL);}}}}
+static constructMultiDimensionalView(model,rangeOfInterest){const mdvBuilder=new tr.b.MultiDimensionalViewBuilder(3,2);const stageToInitiatorToRanges=CpuTime.getStageToInitiatorToSegmentBounds(model.userModel.segments,rangeOfInterest);const allSegmentBoundsInRange=stageToInitiatorToRanges.get('all_stages').get('all_initiators');for(const[pid,process]of Object.entries(model.processes)){const processType=tr.e.chrome.chrome_processes.canonicalizeProcessName(process.name);for(const[tid,thread]of Object.entries(process.threads)){const rangeToCpuTime=new Map();for(const range of allSegmentBoundsInRange){rangeToCpuTime.set(range,thread.getCpuTimeForRange(range));}
+for(const[stage,initiatorToRanges]of stageToInitiatorToRanges){for(const[initiator,ranges]of initiatorToRanges){const cpuTime=tr.b.math.Statistics.sum(ranges,range=>rangeToCpuTime.get(range));const duration=tr.b.math.Statistics.sum(ranges,range=>range.duration);const cpuTimePerSecond=cpuTime/duration;mdvBuilder.addPath([[processType],[thread.type],[stage,initiator]],[cpuTimePerSecond,cpuTime],tr.b.MultiDimensionalViewBuilder.ValueKind.TOTAL);}}}}
return mdvBuilder.buildTopDownTreeView();}}
return{CpuTime,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const CPU_PERCENTAGE_UNIT=tr.b.Unit.byName.normalizedPercentage_smallerIsBetter;const CPU_TIME_UNIT=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;function clonePath_(previousPath){return previousPath.map(subPath=>subPath.map(x=>x));}
function decodePath_(path){return{processType:path[0][0],threadType:path[1][0],railStage:path[2][0],initiatorType:path[2][1]};}
@@ -8271,7 +8841,8 @@ typeToSize[entry.objectTypeName]+=entry.size;}
let largestValue=0;let largestType='';for(const key in typeToSize){if(largestValue<typeToSize[key]){largestValue=typeToSize[key];largestType=key;}}
addProcessScalar({source:'reported_by_chrome',component:[allocatorName,largestType],property:HEAP_CATEGORY_SIZE,value:largestValue});}}
function addV8MemoryDumpValues(processDump,addProcessScalar){const v8Dump=processDump.getMemoryAllocatorDumpByFullName('v8');if(v8Dump===undefined)return;v8Dump.children.forEach(function(isolateDump){const mallocDump=isolateDump.getDescendantDumpByFullName('malloc');if(mallocDump!==undefined){addV8ComponentValues(mallocDump,['v8','allocated_by_malloc'],addProcessScalar);}
-const heapDump=isolateDump.getDescendantDumpByFullName('heap_spaces');if(heapDump!==undefined){addV8ComponentValues(heapDump,['v8','heap'],addProcessScalar);heapDump.children.forEach(function(spaceDump){if(spaceDump.name==='other_spaces')return;addV8ComponentValues(spaceDump,['v8','heap',spaceDump.name],addProcessScalar);});}});addProcessScalar({source:'reported_by_chrome',component:['v8'],property:CODE_AND_METADATA_SIZE,value:v8Dump.numerics.code_and_metadata_size});addProcessScalar({source:'reported_by_chrome',component:['v8'],property:CODE_AND_METADATA_SIZE,value:v8Dump.numerics.bytecode_and_metadata_size});}
+let heapDump=isolateDump.getDescendantDumpByFullName('heap');if(heapDump===undefined){heapDump=isolateDump.getDescendantDumpByFullName('heap_spaces');}
+if(heapDump!==undefined){addV8ComponentValues(heapDump,['v8','heap'],addProcessScalar);heapDump.children.forEach(function(spaceDump){if(spaceDump.name==='other_spaces')return;addV8ComponentValues(spaceDump,['v8','heap',spaceDump.name],addProcessScalar);});}});addProcessScalar({source:'reported_by_chrome',component:['v8'],property:CODE_AND_METADATA_SIZE,value:v8Dump.numerics.code_and_metadata_size});addProcessScalar({source:'reported_by_chrome',component:['v8'],property:CODE_AND_METADATA_SIZE,value:v8Dump.numerics.bytecode_and_metadata_size});}
function addV8ComponentValues(componentDump,componentPath,addProcessScalar){CHROME_VALUE_PROPERTIES.forEach(function(property){addProcessScalar({source:'reported_by_chrome',component:componentPath,property,value:componentDump.numerics[property.name]});});}
const PROCESS_COUNT={unit:count_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){if(componentPath.length>0){throw new Error('Unexpected process count non-empty component path: '+
componentPath.join(':'));}
@@ -8282,7 +8853,7 @@ nameParts.push(componentPath.join(':'));nameParts.push(formatSpec.userFriendlyPr
nameParts.push(formatSpec.userFriendlyPropertyName);nameParts.push(formatSpec.componentPreposition);if(componentPath[componentPath.length-1]==='allocated_by_malloc'){nameParts.push('objects allocated by malloc for');nameParts.push(componentPath.slice(0,componentPath.length-1).join(':'));}else{nameParts.push(componentPath.join(':'));}}
nameParts.push('in');}
nameParts.push(convertProcessNameToUserFriendlyName(processName));return nameParts.join(' ');}
-const RESIDENT_SIZE={name:'resident_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'resident set size (RSS)');}};const PEAK_RESIDENT_SIZE={name:'peak_resident_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'peak resident set size');}};const PROPORTIONAL_RESIDENT_SIZE={name:'proportional_resident_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'proportional resident size (PSS)');}};const PRIVATE_DIRTY_SIZE={name:'private_dirty_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'private dirty size');}};const PRIVATE_FOOTPRINT_SIZE={name:'private_footprint_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'private footprint size');}};function buildOsValueDescriptionPrefix(componentPath,processName,userFriendlyPropertyName){if(componentPath.length>2){throw new Error('OS value component path for \''+
+const RESIDENT_SIZE={name:'resident_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'resident set size (RSS)');}};const PEAK_RESIDENT_SIZE={name:'peak_resident_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'peak resident set size');}};const PROPORTIONAL_RESIDENT_SIZE={name:'proportional_resident_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'proportional resident size (PSS)');}};const PRIVATE_DIRTY_SIZE={name:'private_dirty_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'private dirty size');}};const PRIVATE_FOOTPRINT_SIZE={name:'private_footprint_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'private footprint size');}};const JAVA_BASE_CLEAN_RESIDENT={name:'java_base_clean_resident',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'java base odex and vdex total clean resident size');}};const JAVA_BASE_PSS={name:'java_base_pss',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'java base odex and vdex proportional resident size');}};const NATIVE_LIBRARY_PRIVATE_CLEAN_RESIDENT={name:'native_library_private_clean_resident',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'native library private clean resident size');}};const NATIVE_LIBRARY_SHARED_CLEAN_RESIDENT={name:'native_library_shared_clean_resident',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'native library shared clean resident size');}};const NATIVE_LIBRARY_PROPORTIONAL_RESIDENT={name:'native_library_proportional_resident',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'native library proportional resident size');}};function buildOsValueDescriptionPrefix(componentPath,processName,userFriendlyPropertyName){if(componentPath.length>2){throw new Error('OS value component path for \''+
userFriendlyPropertyName+'\' too long: '+componentPath.join(':'));}
const nameParts=[];if(componentPath.length<2){nameParts.push('total');}
nameParts.push(userFriendlyPropertyName);if(componentPath.length>0){switch(componentPath[0]){case'system_memory':if(componentPath.length>1){const userFriendlyComponentName=SYSTEM_VALUE_COMPONENTS[componentPath[1]].userFriendlyName;if(userFriendlyComponentName===undefined){throw new Error('System value sub-component for \''+
@@ -8295,7 +8866,11 @@ userFriendlyPropertyName+'\' unknown: '+
componentPath.join(':'));}}else{nameParts.push('reported by the OS for');}
nameParts.push(convertProcessNameToUserFriendlyName(processName));return nameParts.join(' ');}
function addDetailedMemoryDumpValues(browserNameToGlobalDumps,values){addMemoryDumpValues(browserNameToGlobalDumps,g=>g.levelOfDetail===DETAILED,function(processDump,addProcessScalar){for(const[componentName,componentSpec]of
-Object.entries(SYSTEM_VALUE_COMPONENTS)){const node=getDescendantVmRegionClassificationNode(processDump.vmRegions,componentSpec.classificationPath);const componentPath=['system_memory'];if(componentName)componentPath.push(componentName);addProcessScalar({source:'reported_by_os',component:componentPath,property:PROPORTIONAL_RESIDENT_SIZE,value:node===undefined?0:(node.byteStats.proportionalResident||0)});addProcessScalar({source:'reported_by_os',component:componentPath,property:PRIVATE_DIRTY_SIZE,value:node===undefined?0:(node.byteStats.privateDirtyResident||0)});}
+Object.entries(SYSTEM_VALUE_COMPONENTS)){const node=getDescendantVmRegionClassificationNode(processDump.vmRegions,componentSpec.classificationPath);const componentPath=['system_memory'];if(componentName)componentPath.push(componentName);addProcessScalar({source:'reported_by_os',component:componentPath,property:PROPORTIONAL_RESIDENT_SIZE,value:node===undefined?0:(node.byteStats.proportionalResident||0)});addProcessScalar({source:'reported_by_os',component:componentPath,property:PRIVATE_DIRTY_SIZE,value:node===undefined?0:(node.byteStats.privateDirtyResident||0)});if(node){if(node.byteStats.javaBasePss){addProcessScalar({source:'reported_by_os',component:componentPath,property:JAVA_BASE_PSS,value:node.byteStats.javaBasePss});}
+if(node.byteStats.javaBaseCleanResident){addProcessScalar({source:'reported_by_os',component:componentPath,property:JAVA_BASE_CLEAN_RESIDENT,value:node.byteStats.javaBaseCleanResident});}}
+if(node){if(node.byteStats.nativeLibraryPrivateCleanResident){addProcessScalar({source:'reported_by_os',component:componentPath,property:NATIVE_LIBRARY_PRIVATE_CLEAN_RESIDENT,value:node.byteStats.nativeLibraryPrivateCleanResident});}
+if(node.byteStats.nativeLibrarySharedCleanResident){addProcessScalar({source:'reported_by_os',component:componentPath,property:NATIVE_LIBRARY_SHARED_CLEAN_RESIDENT,value:node.byteStats.nativeLibrarySharedCleanResident});}
+if(node.byteStats.nativeLibraryProportionalResident){addProcessScalar({source:'reported_by_os',component:componentPath,property:NATIVE_LIBRARY_PROPORTIONAL_RESIDENT,value:node.byteStats.nativeLibraryProportionalResident});}}}
const memtrackDump=processDump.getMemoryAllocatorDumpByFullName('gpu/android_memtrack');if(memtrackDump!==undefined){memtrackDump.children.forEach(function(memtrackChildDump){addProcessScalar({source:'reported_by_os',component:['gpu_memory',memtrackChildDump.name],property:PROPORTIONAL_RESIDENT_SIZE,value:memtrackChildDump.numerics.memtrack_pss});});}},function(componentTree){},values);}
const SYSTEM_VALUE_COMPONENTS={'':{classificationPath:[],},'java_heap':{classificationPath:['Android','Java runtime','Spaces'],userFriendlyName:'the Java heap'},'ashmem':{classificationPath:['Android','Ashmem'],userFriendlyName:'ashmem'},'native_heap':{classificationPath:['Native heap'],userFriendlyName:'the native heap'},'stack':{classificationPath:['Stack'],userFriendlyName:'the thread stacks'}};function getDescendantVmRegionClassificationNode(node,path){for(let i=0;i<path.length;i++){if(node===undefined)break;node=node.children.find(c=>c.title===path[i]);}
return node;}
@@ -8334,11 +8909,31 @@ const componentBreakdown=new tr.v.d.Breakdown();for(const[name,subNode]of node.c
if(componentBreakdown.size>0){diagnostics.set('components',componentBreakdown);}
if(diagnostics.size===0)return undefined;return diagnostics;}
function buildMemoryNumericFromNode(name,node,unit){const histogram=new tr.v.Histogram(name,unit,BOUNDARIES_FOR_UNIT_MAP.get(unit));node.values.forEach(v=>histogram.addSample(v.total,buildSampleDiagnostics(v,node)));return histogram;}
-tr.metrics.MetricRegistry.register(memoryMetric,{supportsRangeOfInterest:true});return{memoryMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const CHROME_POWER_GRACE_PERIOD_MS=1;function createEmptyHistogram_(interval,histograms){if(interval.perSecond){return{perSecond:true,energy:histograms.createHistogram(`${interval.name}:power`,tr.b.Unit.byName.powerInWatts_smallerIsBetter,[],{description:`Energy consumption rate for ${interval.description}`,summaryOptions:{avg:true,count:false,max:true,min:true,std:false,sum:false,},}),};}
+tr.metrics.MetricRegistry.register(memoryMetric,{supportsRangeOfInterest:true});return{memoryMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const BYTE_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(1,1e9,1e2);function nativeCodeResidentMemoryMetric(histograms,model){const histogram=new tr.v.Histogram('NativeCodeResidentMemory',tr.b.Unit.byName.sizeInBytes_smallerIsBetter,BYTE_BOUNDARIES);for(const slice of model.getDescendantEvents()){if(slice.category==='disabled-by-default-memory-infra'&&slice.title==='ReportGlobalNativeCodeResidentMemoryKb'&&slice.args.NativeCodeResidentMemory){histogram.addSample(slice.args.NativeCodeResidentMemory);}}
+histograms.addHistogram(histogram);}
+tr.metrics.MetricRegistry.register(nativeCodeResidentMemoryMetric);return{nativeCodeResidentMemoryMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const EventFinderUtils=tr.e.chrome.EventFinderUtils;const LOADING_METRIC_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(0,1e3,20).addLinearBins(3e3,20).addExponentialBins(20e3,20);const SUMMARY_OPTIONS={avg:true,count:false,max:false,min:false,std:false,sum:false,};function addSamplesToHistogram(pairInfo,breakdownTree,histogram,histograms,diagnostics){histogram.addSample(pairInfo.end-pairInfo.start,diagnostics);if(!breakdownTree){return;}
+for(const[category,breakdown]of Object.entries(breakdownTree)){const relatedName=`${histogram.name}:${category}`;if(!histograms.getHistogramNamed(relatedName)){const relatedHist=histograms.createHistogram(relatedName,histogram.unit,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,summaryOptions:{count:false,max:false,min:false,sum:false,},});}
+const relatedHist=histograms.getHistogramNamed(relatedName);let relatedNames=histogram.diagnostics.get('breakdown');if(!relatedNames){relatedNames=new tr.v.d.RelatedNameMap();histogram.diagnostics.set('breakdown',relatedNames);}
+relatedNames.set(category,relatedName);relatedHist.addSample(breakdown.total,{breakdown:tr.v.d.Breakdown.fromEntries(Object.entries(breakdown.events)),});}}
+function splitOneRangeIntoPerSecondRanges(startTime,endTime){const results=[];for(let i=0;startTime+(i+1)*1000<=endTime;i+=1){const start=i*1000;const end=(i+1)*1000;results.push({start,end,});}
+return results;}
+function getNavigationInfos(model){const navigationInfos=[];const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);for(const expectation of model.userModel.expectations){if(!(expectation instanceof tr.model.um.LoadExpectation))continue;if(tr.e.chrome.CHROME_INTERNAL_URLS.includes(expectation.url)){continue;}
+const rendererHelper=chromeHelper.rendererHelpers[expectation.renderProcess.pid];navigationInfos.push({navigationStart:expectation.navigationStart,rendererHelper,url:expectation.url});}
+navigationInfos.forEach((navInfo,i)=>{if(i===navigationInfos.length-1){navInfo.navigationEndTime=model.bounds.max;}else{navInfo.navigationEndTime=navigationInfos[i+1].navigationStart.start;}});return navigationInfos;}
+function getRendererHelpers(model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const rendererHelpers=[];for(const pid in chromeHelper.rendererHelpers){const rendererHelper=chromeHelper.rendererHelpers[pid];if(rendererHelper.isChromeTracingUI)continue;rendererHelpers.push(rendererHelper);}
+return rendererHelpers;}
+function getWallTimeBreakdownTree(rendererHelper,start,end){const startEndRange=tr.b.math.Range.fromExplicitRange(start,end);const networkEvents=EventFinderUtils.getNetworkEventsInRange(rendererHelper.process,startEndRange);const breakdownTree=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,startEndRange);return breakdownTree;}
+function getCpuTimeBreakdownTree(rendererHelper,start,end){const startEndRange=tr.b.math.Range.fromExplicitRange(start,end);const breakdownTree=tr.metrics.sh.generateCpuTimeBreakdownTree(rendererHelper.mainThread,startEndRange);return breakdownTree;}
+function persecondMetric(histograms,model){const rendererHelpers=getRendererHelpers(model);const navigationInfos=getNavigationInfos(model);if(navigationInfos.length===0){return;}
+navigationInfos.forEach(navInfo=>{const navigationStart=navInfo.navigationStart.start;const navigationEnd=navInfo.navigationEndTime;const startEndPairs=splitOneRangeIntoPerSecondRanges(navigationStart,navigationEnd);const breakdownList=startEndPairs.map(p=>{const wallHistogramName=`wall_${p.start}_to_${p.end}`;const wallHistogramDescription=`Wall-clock time ${p.start} to ${p.end} breakdown`;const cpuHistogramName=`cpu_${p.start}_to_${p.end}`;const cpuHistogramDescription=`CPU time ${p.start} to ${p.end} breakdown`;const pid=navInfo.rendererHelper.pid;const breakdownTree=getWallTimeBreakdownTree(navInfo.rendererHelper,navigationStart+p.start,navigationStart+p.end);const cpuBreakdownTree=getCpuTimeBreakdownTree(navInfo.rendererHelper,navigationStart+p.start,navigationStart+p.end);const diagnostics={'Navigation infos':new tr.v.d.GenericSet([{url:navInfo.url,pid:navInfo.rendererHelper.pid,navStart:navigationStart,frameIdRef:navInfo.navigationStart.args.frame}]),'breakdown':tr.metrics.sh.createBreakdownDiagnostic(breakdownTree),};return Object.assign(p,{breakdownTree,cpuBreakdownTree,wallHistogramName,wallHistogramDescription,cpuHistogramName,cpuHistogramDescription,diagnostics,});});breakdownList.forEach(p=>{if(!histograms.getHistogramNamed(p.wallHistogramName)){histograms.createHistogram(p.wallHistogramName,timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:p.wallHistogramDescription,summaryOptions:SUMMARY_OPTIONS,});}
+const wallHistogram=histograms.getHistogramNamed(p.wallHistogramName);addSamplesToHistogram(p,p.breakdownTree,wallHistogram,histograms,p.diagnostics);if(!histograms.getHistogramNamed(p.cpuHistogramName)){histograms.createHistogram(p.cpuHistogramName,timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:p.cpuHistogramDescription,summaryOptions:SUMMARY_OPTIONS,});}
+const cpuHistogram=histograms.getHistogramNamed(p.cpuHistogramName);addSamplesToHistogram(p,p.cpuBreakdownTree,cpuHistogram,histograms,p.diagnostics);});});}
+tr.metrics.MetricRegistry.register(persecondMetric);return{persecondMetric,splitOneRangeIntoPerSecondRanges};});'use strict';tr.exportTo('tr.metrics.sh',function(){const CHROME_POWER_GRACE_PERIOD_MS=1;function createEmptyHistogram_(interval,histograms){if(interval.perSecond){return{perSecond:true,energy:histograms.createHistogram(`${interval.name}:power`,tr.b.Unit.byName.powerInWatts_smallerIsBetter,[],{description:`Energy consumption rate for ${interval.description}`,summaryOptions:{avg:true,count:false,max:true,min:true,std:false,sum:false,},}),};}
return{perSecond:false,energy:histograms.createHistogram(`${interval.name}:energy`,tr.b.Unit.byName.energyInJoules_smallerIsBetter,[],{description:`Energy consumed in ${interval.description}`,summaryOptions:{avg:false,count:false,max:true,min:true,std:false,sum:true,},}),};}
function createHistograms_(data,interval,histograms){if(data.histograms[interval.name]===undefined){data.histograms[interval.name]=createEmptyHistogram_(interval,histograms);}
if(data.histograms[interval.name].perSecond){for(const sample of data.model.device.powerSeries.getSamplesWithinRange(interval.bounds.min,interval.bounds.max)){data.histograms[interval.name].energy.addSample(sample.powerInW);}}else{const energyInJ=data.model.device.powerSeries.getEnergyConsumedInJ(interval.bounds.min,interval.bounds.max);data.histograms[interval.name].energy.addSample(energyInJ);}}
-function getNavigationTTIIntervals_(model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const intervals=[];for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){const samples=tr.metrics.sh.collectLoadingMetricsForRenderer(rendererHelper).interactiveSamples;for(const sample of samples){const info=tr.b.getOnlyElement(sample.diagnostics.get('Navigation infos'));intervals.push(tr.b.math.Range.fromExplicitRange(info.navigationStartTime,info.eventTimestamp));}}
+function getNavigationTTIIntervals_(model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const intervals=[];for(const expectation of model.userModel.expectations){if(!(expectation instanceof tr.model.um.LoadExpectation))continue;if(tr.e.chrome.CHROME_INTERNAL_URLS.includes(expectation.url)){continue;}
+if(expectation.timeToInteractive!==undefined){intervals.push(tr.b.math.Range.fromExplicitRange(expectation.navigationStart.start,expectation.timeToInteractive));}}
return intervals.sort((x,y)=>x.min-y.min);}
function*computeTimeIntervals_(model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const powerSeries=model.device.powerSeries;if(powerSeries===undefined||powerSeries.samples.length===0){return;}
yield{bounds:model.bounds,name:'story',description:'user story',perSecond:true};const chromeBounds=computeChromeBounds_(model);if(chromeBounds.isEmpty)return;const powerSeriesBoundsWithGracePeriod=tr.b.math.Range.fromExplicitRange(powerSeries.bounds.min-CHROME_POWER_GRACE_PERIOD_MS,powerSeries.bounds.max+CHROME_POWER_GRACE_PERIOD_MS);if(!powerSeriesBoundsWithGracePeriod.containsRangeExclusive(chromeBounds)){return;}
@@ -8350,7 +8945,46 @@ function computeChromeBounds_(model){const chromeBounds=new tr.b.math.Range();co
for(const pid in chromeHelper.rendererHelpers){if(chromeHelper.rendererHelpers[pid].mainThread){chromeBounds.addRange(chromeHelper.rendererHelpers[pid].mainThread.bounds);}}
return chromeBounds;}
function powerMetric(histograms,model){const data={model,histograms:{}};for(const interval of computeTimeIntervals_(model)){createHistograms_(data,interval,histograms);}}
-tr.metrics.MetricRegistry.register(powerMetric);return{powerMetric};});'use strict';tr.exportTo('tr.metrics.sh',function(){function computeAnimationThroughput(animationExpectation){if(animationExpectation.frameEvents===undefined||animationExpectation.frameEvents.length===0){throw new Error('Animation missing frameEvents '+
+tr.metrics.MetricRegistry.register(powerMetric);return{powerMetric};});'use strict';tr.exportTo('tr.b.math',function(){function earthMoversDistance(firstHistogram,secondHistogram){const buckets=firstHistogram.length;if(secondHistogram.length!==buckets){throw new Error('Histograms have a different number of bins.');}
+const arrSum=arr=>arr.reduce((a,b)=>a+b,0);if(arrSum(firstHistogram)!==arrSum(secondHistogram)){throw new Error('The histograms\' sizes don\'t match.');}
+let total=0;let remainder=0;for(let bucket=0;bucket<buckets;bucket++){remainder+=secondHistogram[bucket]-
+firstHistogram[bucket];total+=Math.abs(remainder);}
+return total;}
+return{earthMoversDistance,};});'use strict';tr.exportTo('tr.e.chrome',function(){const earthMoversDistance=tr.b.math.earthMoversDistance;class SpeedIndex{static getSnapshotsProgress_(timestampedColorHistograms){const numberOfScreenshots=timestampedColorHistograms.length;const firstHistogram=timestampedColorHistograms[0].colorHistogram;const lastHistogram=timestampedColorHistograms[numberOfScreenshots-1].colorHistogram;const totalDistance=earthMoversDistance(firstHistogram[0],lastHistogram[0])+
+earthMoversDistance(firstHistogram[1],lastHistogram[1])+
+earthMoversDistance(firstHistogram[2],lastHistogram[2]);if(totalDistance===0){return[{value:1,ts:timestampedColorHistograms[0].ts}];}
+const snapshotsProgress=new Array(numberOfScreenshots);for(let i=0;i<numberOfScreenshots;i++){const histogram=timestampedColorHistograms[i].colorHistogram;const distance=earthMoversDistance(histogram[0],lastHistogram[0])+
+earthMoversDistance(histogram[1],lastHistogram[1])+
+earthMoversDistance(histogram[2],lastHistogram[2]);const moved=Math.max(totalDistance-distance,0);snapshotsProgress[i]={value:(moved/totalDistance),ts:timestampedColorHistograms[i].ts};}
+return snapshotsProgress;}
+static speedIndexFromSnapshotsProgress_(snapshotsProgress){if(snapshotsProgress.length===0){throw new Error('No snapshots were provided.');}
+let prevSnapshotTimeTaken=0;let prevSnapshotProgress=0;let speedIndex=0;const numberOfScreenshots=snapshotsProgress.length;for(let i=0;i<numberOfScreenshots;i++){const elapsed=snapshotsProgress[i].ts-prevSnapshotTimeTaken;speedIndex+=elapsed*(1.0-prevSnapshotProgress);prevSnapshotTimeTaken=snapshotsProgress[i].ts;prevSnapshotProgress=snapshotsProgress[i].value;}
+return Math.round(speedIndex);}
+static createColorHistogram(imagePixelValues){const n=imagePixelValues.length;const histogram=new Array(3);for(let j=0;j<3;j++){histogram[j]=new Array(256).fill(0);}
+for(let i=0;i<n;i+=4){const r=imagePixelValues[i];const g=imagePixelValues[i+1];const b=imagePixelValues[i+2];histogram[0][r]++;histogram[1][g]++;histogram[2][b]++;}
+return histogram;}
+static calculateSpeedIndex(timestampedColorHistograms){const snapshotsProgress=SpeedIndex.getSnapshotsProgress_(timestampedColorHistograms);return SpeedIndex.speedIndexFromSnapshotsProgress_(snapshotsProgress);}
+static lineSweep(lineSweepRects,viewport){const verticalSweepEdges=[];const horizontalSweepEdges=[];for(let i=0;i<lineSweepRects.length;i++){const rect=lineSweepRects[i];let left=rect.left;let right=rect.right;let top=rect.top;let bottom=rect.bottom;if(left>viewport.x+viewport.width)continue;if(right<viewport.x)continue;if(top>viewport.y+viewport.height)continue;if(bottom<viewport.y)continue;left=Math.max(left,viewport.y);right=Math.min(right,viewport.y+viewport.width);top=Math.max(top,viewport.y);bottom=Math.min(bottom,viewport.y+viewport.height);verticalSweepEdges.push({id:i,value:left,type:'left'},{id:i,value:right,type:'right'});horizontalSweepEdges.push({id:i,value:top,type:'top'},{id:i,value:bottom,type:'bottom'});}
+verticalSweepEdges.sort((a,b)=>a.value-b.value);horizontalSweepEdges.sort((a,b)=>a.value-b.value);const active=new Array(lineSweepRects.length).fill(false);let area=0;active[verticalSweepEdges[0].id]=true;for(let i=1;i<verticalSweepEdges.length;i++){const currentLine=verticalSweepEdges[i];const previousLine=verticalSweepEdges[i-1];const deltaX=currentLine.value-previousLine.value;if(deltaX===0)continue;let count=0;let firstRect;for(let j=0;j<horizontalSweepEdges.length;j++){if(active[horizontalSweepEdges[j].id]===true){if(horizontalSweepEdges[j].type==='top'){if(count===0){firstRect=j;}
+count++;}else{if(count===1){const deltaY=horizontalSweepEdges[j].value-
+horizontalSweepEdges[firstRect].value;area+=deltaX*deltaY;}
+count--;}}}
+active[currentLine.id]=(currentLine.type==='left');}
+return area;}
+static quadToRect(quad){const left=Math.min(quad[0],quad[2],quad[4]);const right=Math.max(quad[0],quad[2],quad[4]);const top=Math.min(quad[1],quad[3],quad[5]);const bottom=Math.max(quad[1],quad[3],quad[5]);return{left,right,top,bottom};}
+static calculateRectsBasedSpeedIndex(timestampedPaintRects,viewport){const numberOfRects=timestampedPaintRects.length;if(numberOfRects===0){throw new Error('Can\'t calculate speed index without any paint '+'rectangles.');}
+const areaAddedAtTimestamp=new Array(numberOfRects);const rects=[];let previousAreaOfUnion=0;let totalAreaOfUnion=0;for(let i=numberOfRects-1;i>=0;i--){rects.push(timestampedPaintRects[i].rect);const currentAreaOfUnion=SpeedIndex.lineSweep(rects,viewport);areaAddedAtTimestamp[numberOfRects-i-1]={value:currentAreaOfUnion-previousAreaOfUnion,ts:timestampedPaintRects[i].ts};totalAreaOfUnion+=areaAddedAtTimestamp[numberOfRects-i-1].value;previousAreaOfUnion=currentAreaOfUnion;}
+const paintProgressAtTimestamp=new Array(numberOfRects);let lastProgressRecorded=0;for(let i=0;i<numberOfRects;i++){paintProgressAtTimestamp[i]={value:areaAddedAtTimestamp[i].value/totalAreaOfUnion+
+lastProgressRecorded,ts:areaAddedAtTimestamp[i].ts};lastProgressRecorded=paintProgressAtTimestamp[i].value;}
+return SpeedIndex.speedIndexFromSnapshotsProgress_(paintProgressAtTimestamp);}}
+return{SpeedIndex,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const SpeedIndex=tr.e.chrome.SpeedIndex;const EventFinderUtils=tr.e.chrome.EventFinderUtils;const BIN_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(0,1e3,20).addLinearBins(3e3,20).addExponentialBins(20e3,20);const SUMMARY_OPTIONS={avg:true,count:false,max:true,min:true,std:true,sum:false,};function addRectsBasedSpeedIndexSample(samples,rendererHelper,navigationStart,loadDuration,frameID){let viewport;for(const event of EventFinderUtils.getMainThreadEvents(rendererHelper,'viewport','loading')){if(event.args.data.frameID===frameID&&event.start<(navigationStart+loadDuration)){viewport=event.args.data;break;}}
+if(!viewport)return;const timestampedPaintRects=[];for(const event of EventFinderUtils.getMainThreadEvents(rendererHelper,'PaintTracker::LayoutObjectPainted','loading')){if(event.start>=navigationStart&&event.start<navigationStart+loadDuration){const paintRect=event.args.data.visible_new_visual_rect;if(!paintRect)continue;timestampedPaintRects.push({rect:SpeedIndex.quadToRect(paintRect),ts:event.start});}}
+const numberOfRects=timestampedPaintRects.length;if(numberOfRects===0)return;samples.push({value:SpeedIndex.calculateRectsBasedSpeedIndex(timestampedPaintRects,viewport)-navigationStart});}
+function collectRectsBasedSpeedIndexSamplesFromLoadExpectations(model,chromeHelper){const rectsBasedSpeedIndexSamples=[];for(const expectation of model.userModel.expectations){if(!(expectation instanceof tr.model.um.LoadExpectation))continue;if(tr.e.chrome.CHROME_INTERNAL_URLS.includes(expectation.url)){continue;}
+const rendererHelper=chromeHelper.rendererHelpers[expectation.renderProcess.pid];addRectsBasedSpeedIndexSample(rectsBasedSpeedIndexSamples,rendererHelper,expectation.navigationStart.start,expectation.duration,expectation.navigationStart.args.frame);}
+return rectsBasedSpeedIndexSamples;}
+function rectsBasedSpeedIndexMetric(histograms,model){const rectsBasedSpeedIndexHistogram=histograms.createHistogram('rectsBasedSpeedIndex',timeDurationInMs_smallerIsBetter,[],{binBoundaries:BIN_BOUNDARIES,description:' the average time at which visible parts of the'+' page are displayed (in ms).',summaryOptions:SUMMARY_OPTIONS,});const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const samples=collectRectsBasedSpeedIndexSamplesFromLoadExpectations(model,chromeHelper);for(const sample of samples){rectsBasedSpeedIndexHistogram.addSample(sample.value);}}
+tr.metrics.MetricRegistry.register(rectsBasedSpeedIndexMetric);return{rectsBasedSpeedIndexMetric};});'use strict';tr.exportTo('tr.metrics.sh',function(){function computeAnimationThroughput(animationExpectation){if(animationExpectation.frameEvents===undefined||animationExpectation.frameEvents.length===0){throw new Error('Animation missing frameEvents '+
animationExpectation.stableId);}
const durationInS=tr.b.convertUnit(animationExpectation.duration,tr.b.UnitPrefixScale.METRIC.MILLI,tr.b.UnitPrefixScale.METRIC.NONE);return animationExpectation.frameEvents.length/durationInS;}
function computeAnimationframeTimeDiscrepancy(animationExpectation){if(animationExpectation.frameEvents===undefined||animationExpectation.frameEvents.length===0){throw new Error('Animation missing frameEvents '+
@@ -8364,22 +8998,165 @@ throughputNumeric.addSample(throughput,sampleDiagnosticMap);const frameTimeDiscr
ue.stableId);}
frameTimeDiscrepancyNumeric.addSample(frameTimeDiscrepancy,sampleDiagnosticMap);ue.associatedEvents.forEach(function(event){if(!(event instanceof tr.e.cc.InputLatencyAsyncSlice)){return;}
latencyNumeric.addSample(event.duration,sampleDiagnosticMap);});}else{throw new Error('Unrecognized stage for '+ue.stableId);}});[responseNumeric,throughputNumeric,frameTimeDiscrepancyNumeric,latencyNumeric].forEach(function(numeric){numeric.customizeSummaryOptions({avg:true,max:true,min:true,std:true});});histograms.addHistogram(responseNumeric);histograms.addHistogram(throughputNumeric);histograms.addHistogram(frameTimeDiscrepancyNumeric);histograms.addHistogram(latencyNumeric);}
-tr.metrics.MetricRegistry.register(responsivenessMetric,{supportsRangeOfInterest:true,requiredCategories:['rail'],});return{responsivenessMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){function webviewStartupMetric(histograms,model){const startupWallHist=new tr.v.Histogram('webview_startup_wall_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);startupWallHist.description='WebView startup wall time';const startupCPUHist=new tr.v.Histogram('webview_startup_cpu_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);startupCPUHist.description='WebView startup CPU time';const loadWallHist=new tr.v.Histogram('webview_url_load_wall_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);loadWallHist.description='WebView blank URL load wall time';const loadCPUHist=new tr.v.Histogram('webview_url_load_cpu_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);loadCPUHist.description='WebView blank URL load CPU time';for(const slice of model.getDescendantEvents()){if(!(slice instanceof tr.model.ThreadSlice))continue;if(slice.title==='WebViewStartupInterval'){startupWallHist.addSample(slice.duration);startupCPUHist.addSample(slice.cpuDuration);}
+tr.metrics.MetricRegistry.register(responsivenessMetric,{supportsRangeOfInterest:true,requiredCategories:['rail'],});return{responsivenessMetric,};});var JpegImage=(function jpegImage(){"use strict";var dctZigZag=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]);var dctCos1=4017
+var dctSin1=799
+var dctCos3=3406
+var dctSin3=2276
+var dctCos6=1567
+var dctSin6=3784
+var dctSqrt2=5793
+var dctSqrt1d2=2896
+function constructor(){}
+function buildHuffmanTable(codeLengths,values){var k=0,code=[],i,j,length=16;while(length>0&&!codeLengths[length-1])
+length--;code.push({children:[],index:0});var p=code[0],q;for(i=0;i<length;i++){for(j=0;j<codeLengths[i];j++){p=code.pop();p.children[p.index]=values[k];while(p.index>0){p=code.pop();}
+p.index++;code.push(p);while(code.length<=i){code.push(q={children:[],index:0});p.children[p.index]=q.children;p=q;}
+k++;}
+if(i+1<length){code.push(q={children:[],index:0});p.children[p.index]=q.children;p=q;}}
+return code[0].children;}
+function decodeScan(data,offset,frame,components,resetInterval,spectralStart,spectralEnd,successivePrev,successive){var precision=frame.precision;var samplesPerLine=frame.samplesPerLine;var scanLines=frame.scanLines;var mcusPerLine=frame.mcusPerLine;var progressive=frame.progressive;var maxH=frame.maxH,maxV=frame.maxV;var startOffset=offset,bitsData=0,bitsCount=0;function readBit(){if(bitsCount>0){bitsCount--;return(bitsData>>bitsCount)&1;}
+bitsData=data[offset++];if(bitsData==0xFF){var nextByte=data[offset++];if(nextByte){throw new Error("unexpected marker: "+((bitsData<<8)|nextByte).toString(16));}}
+bitsCount=7;return bitsData>>>7;}
+function decodeHuffman(tree){var node=tree,bit;while((bit=readBit())!==null){node=node[bit];if(typeof node==='number')
+return node;if(typeof node!=='object')
+throw new Error("invalid huffman sequence");}
+return null;}
+function receive(length){var n=0;while(length>0){var bit=readBit();if(bit===null)return;n=(n<<1)|bit;length--;}
+return n;}
+function receiveAndExtend(length){var n=receive(length);if(n>=1<<(length-1))
+return n;return n+(-1<<length)+1;}
+function decodeBaseline(component,zz){var t=decodeHuffman(component.huffmanTableDC);var diff=t===0?0:receiveAndExtend(t);zz[0]=(component.pred+=diff);var k=1;while(k<64){var rs=decodeHuffman(component.huffmanTableAC);var s=rs&15,r=rs>>4;if(s===0){if(r<15)
+break;k+=16;continue;}
+k+=r;var z=dctZigZag[k];zz[z]=receiveAndExtend(s);k++;}}
+function decodeDCFirst(component,zz){var t=decodeHuffman(component.huffmanTableDC);var diff=t===0?0:(receiveAndExtend(t)<<successive);zz[0]=(component.pred+=diff);}
+function decodeDCSuccessive(component,zz){zz[0]|=readBit()<<successive;}
+var eobrun=0;function decodeACFirst(component,zz){if(eobrun>0){eobrun--;return;}
+var k=spectralStart,e=spectralEnd;while(k<=e){var rs=decodeHuffman(component.huffmanTableAC);var s=rs&15,r=rs>>4;if(s===0){if(r<15){eobrun=receive(r)+(1<<r)-1;break;}
+k+=16;continue;}
+k+=r;var z=dctZigZag[k];zz[z]=receiveAndExtend(s)*(1<<successive);k++;}}
+var successiveACState=0,successiveACNextValue;function decodeACSuccessive(component,zz){var k=spectralStart,e=spectralEnd,r=0;while(k<=e){var z=dctZigZag[k];var direction=zz[z]<0?-1:1;switch(successiveACState){case 0:var rs=decodeHuffman(component.huffmanTableAC);var s=rs&15,r=rs>>4;if(s===0){if(r<15){eobrun=receive(r)+(1<<r);successiveACState=4;}else{r=16;successiveACState=1;}}else{if(s!==1)
+throw new Error("invalid ACn encoding");successiveACNextValue=receiveAndExtend(s);successiveACState=r?2:3;}
+continue;case 1:case 2:if(zz[z])
+zz[z]+=(readBit()<<successive)*direction;else{r--;if(r===0)
+successiveACState=successiveACState==2?3:0;}
+break;case 3:if(zz[z])
+zz[z]+=(readBit()<<successive)*direction;else{zz[z]=successiveACNextValue<<successive;successiveACState=0;}
+break;case 4:if(zz[z])
+zz[z]+=(readBit()<<successive)*direction;break;}
+k++;}
+if(successiveACState===4){eobrun--;if(eobrun===0)
+successiveACState=0;}}
+function decodeMcu(component,decode,mcu,row,col){var mcuRow=(mcu/mcusPerLine)|0;var mcuCol=mcu%mcusPerLine;var blockRow=mcuRow*component.v+row;var blockCol=mcuCol*component.h+col;decode(component,component.blocks[blockRow][blockCol]);}
+function decodeBlock(component,decode,mcu){var blockRow=(mcu/component.blocksPerLine)|0;var blockCol=mcu%component.blocksPerLine;decode(component,component.blocks[blockRow][blockCol]);}
+var componentsLength=components.length;var component,i,j,k,n;var decodeFn;if(progressive){if(spectralStart===0)
+decodeFn=successivePrev===0?decodeDCFirst:decodeDCSuccessive;else
+decodeFn=successivePrev===0?decodeACFirst:decodeACSuccessive;}else{decodeFn=decodeBaseline;}
+var mcu=0,marker;var mcuExpected;if(componentsLength==1){mcuExpected=components[0].blocksPerLine*components[0].blocksPerColumn;}else{mcuExpected=mcusPerLine*frame.mcusPerColumn;}
+if(!resetInterval)resetInterval=mcuExpected;var h,v;while(mcu<mcuExpected){for(i=0;i<componentsLength;i++)
+components[i].pred=0;eobrun=0;if(componentsLength==1){component=components[0];for(n=0;n<resetInterval;n++){decodeBlock(component,decodeFn,mcu);mcu++;}}else{for(n=0;n<resetInterval;n++){for(i=0;i<componentsLength;i++){component=components[i];h=component.h;v=component.v;for(j=0;j<v;j++){for(k=0;k<h;k++){decodeMcu(component,decodeFn,mcu,j,k);}}}
+mcu++;if(mcu===mcuExpected)break;}}
+bitsCount=0;marker=(data[offset]<<8)|data[offset+1];if(marker<0xFF00){throw new Error("marker was not found");}
+if(marker>=0xFFD0&&marker<=0xFFD7){offset+=2;}
+else
+break;}
+return offset-startOffset;}
+function buildComponentData(frame,component){var lines=[];var blocksPerLine=component.blocksPerLine;var blocksPerColumn=component.blocksPerColumn;var samplesPerLine=blocksPerLine<<3;var R=new Int32Array(64),r=new Uint8Array(64);function quantizeAndInverse(zz,dataOut,dataIn){var qt=component.quantizationTable;var v0,v1,v2,v3,v4,v5,v6,v7,t;var p=dataIn;var i;for(i=0;i<64;i++)
+p[i]=zz[i]*qt[i];for(i=0;i<8;++i){var row=8*i;if(p[1+row]==0&&p[2+row]==0&&p[3+row]==0&&p[4+row]==0&&p[5+row]==0&&p[6+row]==0&&p[7+row]==0){t=(dctSqrt2*p[0+row]+512)>>10;p[0+row]=t;p[1+row]=t;p[2+row]=t;p[3+row]=t;p[4+row]=t;p[5+row]=t;p[6+row]=t;p[7+row]=t;continue;}
+v0=(dctSqrt2*p[0+row]+128)>>8;v1=(dctSqrt2*p[4+row]+128)>>8;v2=p[2+row];v3=p[6+row];v4=(dctSqrt1d2*(p[1+row]-p[7+row])+128)>>8;v7=(dctSqrt1d2*(p[1+row]+p[7+row])+128)>>8;v5=p[3+row]<<4;v6=p[5+row]<<4;t=(v0-v1+1)>>1;v0=(v0+v1+1)>>1;v1=t;t=(v2*dctSin6+v3*dctCos6+128)>>8;v2=(v2*dctCos6-v3*dctSin6+128)>>8;v3=t;t=(v4-v6+1)>>1;v4=(v4+v6+1)>>1;v6=t;t=(v7+v5+1)>>1;v5=(v7-v5+1)>>1;v7=t;t=(v0-v3+1)>>1;v0=(v0+v3+1)>>1;v3=t;t=(v1-v2+1)>>1;v1=(v1+v2+1)>>1;v2=t;t=(v4*dctSin3+v7*dctCos3+2048)>>12;v4=(v4*dctCos3-v7*dctSin3+2048)>>12;v7=t;t=(v5*dctSin1+v6*dctCos1+2048)>>12;v5=(v5*dctCos1-v6*dctSin1+2048)>>12;v6=t;p[0+row]=v0+v7;p[7+row]=v0-v7;p[1+row]=v1+v6;p[6+row]=v1-v6;p[2+row]=v2+v5;p[5+row]=v2-v5;p[3+row]=v3+v4;p[4+row]=v3-v4;}
+for(i=0;i<8;++i){var col=i;if(p[1*8+col]==0&&p[2*8+col]==0&&p[3*8+col]==0&&p[4*8+col]==0&&p[5*8+col]==0&&p[6*8+col]==0&&p[7*8+col]==0){t=(dctSqrt2*dataIn[i+0]+8192)>>14;p[0*8+col]=t;p[1*8+col]=t;p[2*8+col]=t;p[3*8+col]=t;p[4*8+col]=t;p[5*8+col]=t;p[6*8+col]=t;p[7*8+col]=t;continue;}
+v0=(dctSqrt2*p[0*8+col]+2048)>>12;v1=(dctSqrt2*p[4*8+col]+2048)>>12;v2=p[2*8+col];v3=p[6*8+col];v4=(dctSqrt1d2*(p[1*8+col]-p[7*8+col])+2048)>>12;v7=(dctSqrt1d2*(p[1*8+col]+p[7*8+col])+2048)>>12;v5=p[3*8+col];v6=p[5*8+col];t=(v0-v1+1)>>1;v0=(v0+v1+1)>>1;v1=t;t=(v2*dctSin6+v3*dctCos6+2048)>>12;v2=(v2*dctCos6-v3*dctSin6+2048)>>12;v3=t;t=(v4-v6+1)>>1;v4=(v4+v6+1)>>1;v6=t;t=(v7+v5+1)>>1;v5=(v7-v5+1)>>1;v7=t;t=(v0-v3+1)>>1;v0=(v0+v3+1)>>1;v3=t;t=(v1-v2+1)>>1;v1=(v1+v2+1)>>1;v2=t;t=(v4*dctSin3+v7*dctCos3+2048)>>12;v4=(v4*dctCos3-v7*dctSin3+2048)>>12;v7=t;t=(v5*dctSin1+v6*dctCos1+2048)>>12;v5=(v5*dctCos1-v6*dctSin1+2048)>>12;v6=t;p[0*8+col]=v0+v7;p[7*8+col]=v0-v7;p[1*8+col]=v1+v6;p[6*8+col]=v1-v6;p[2*8+col]=v2+v5;p[5*8+col]=v2-v5;p[3*8+col]=v3+v4;p[4*8+col]=v3-v4;}
+for(i=0;i<64;++i){var sample=128+((p[i]+8)>>4);dataOut[i]=sample<0?0:sample>0xFF?0xFF:sample;}}
+var i,j;for(var blockRow=0;blockRow<blocksPerColumn;blockRow++){var scanLine=blockRow<<3;for(i=0;i<8;i++)
+lines.push(new Uint8Array(samplesPerLine));for(var blockCol=0;blockCol<blocksPerLine;blockCol++){quantizeAndInverse(component.blocks[blockRow][blockCol],r,R);var offset=0,sample=blockCol<<3;for(j=0;j<8;j++){var line=lines[scanLine+j];for(i=0;i<8;i++)
+line[sample+i]=r[offset++];}}}
+return lines;}
+function clampTo8bit(a){return a<0?0:a>255?255:a;}
+constructor.prototype={load:function load(path){var xhr=new XMLHttpRequest();xhr.open("GET",path,true);xhr.responseType="arraybuffer";xhr.onload=(function(){var data=new Uint8Array(xhr.response||xhr.mozResponseArrayBuffer);this.parse(data);if(this.onload)
+this.onload();}).bind(this);xhr.send(null);},parse:function parse(data){var offset=0,length=data.length;function readUint16(){var value=(data[offset]<<8)|data[offset+1];offset+=2;return value;}
+function readDataBlock(){var length=readUint16();var array=data.subarray(offset,offset+length-2);offset+=array.length;return array;}
+function prepareComponents(frame){var maxH=0,maxV=0;var component,componentId;for(componentId in frame.components){if(frame.components.hasOwnProperty(componentId)){component=frame.components[componentId];if(maxH<component.h)maxH=component.h;if(maxV<component.v)maxV=component.v;}}
+var mcusPerLine=Math.ceil(frame.samplesPerLine/8/maxH);var mcusPerColumn=Math.ceil(frame.scanLines/8/maxV);for(componentId in frame.components){if(frame.components.hasOwnProperty(componentId)){component=frame.components[componentId];var blocksPerLine=Math.ceil(Math.ceil(frame.samplesPerLine/8)*component.h/maxH);var blocksPerColumn=Math.ceil(Math.ceil(frame.scanLines/8)*component.v/maxV);var blocksPerLineForMcu=mcusPerLine*component.h;var blocksPerColumnForMcu=mcusPerColumn*component.v;var blocks=[];for(var i=0;i<blocksPerColumnForMcu;i++){var row=[];for(var j=0;j<blocksPerLineForMcu;j++)
+row.push(new Int32Array(64));blocks.push(row);}
+component.blocksPerLine=blocksPerLine;component.blocksPerColumn=blocksPerColumn;component.blocks=blocks;}}
+frame.maxH=maxH;frame.maxV=maxV;frame.mcusPerLine=mcusPerLine;frame.mcusPerColumn=mcusPerColumn;}
+var jfif=null;var adobe=null;var pixels=null;var frame,resetInterval;var quantizationTables=[],frames=[];var huffmanTablesAC=[],huffmanTablesDC=[];var fileMarker=readUint16();if(fileMarker!=0xFFD8){throw new Error("SOI not found");}
+fileMarker=readUint16();while(fileMarker!=0xFFD9){var i,j,l;switch(fileMarker){case 0xFF00:break;case 0xFFE0:case 0xFFE1:case 0xFFE2:case 0xFFE3:case 0xFFE4:case 0xFFE5:case 0xFFE6:case 0xFFE7:case 0xFFE8:case 0xFFE9:case 0xFFEA:case 0xFFEB:case 0xFFEC:case 0xFFED:case 0xFFEE:case 0xFFEF:case 0xFFFE:var appData=readDataBlock();if(fileMarker===0xFFE0){if(appData[0]===0x4A&&appData[1]===0x46&&appData[2]===0x49&&appData[3]===0x46&&appData[4]===0){jfif={version:{major:appData[5],minor:appData[6]},densityUnits:appData[7],xDensity:(appData[8]<<8)|appData[9],yDensity:(appData[10]<<8)|appData[11],thumbWidth:appData[12],thumbHeight:appData[13],thumbData:appData.subarray(14,14+3*appData[12]*appData[13])};}}
+if(fileMarker===0xFFEE){if(appData[0]===0x41&&appData[1]===0x64&&appData[2]===0x6F&&appData[3]===0x62&&appData[4]===0x65&&appData[5]===0){adobe={version:appData[6],flags0:(appData[7]<<8)|appData[8],flags1:(appData[9]<<8)|appData[10],transformCode:appData[11]};}}
+break;case 0xFFDB:var quantizationTablesLength=readUint16();var quantizationTablesEnd=quantizationTablesLength+offset-2;while(offset<quantizationTablesEnd){var quantizationTableSpec=data[offset++];var tableData=new Int32Array(64);if((quantizationTableSpec>>4)===0){for(j=0;j<64;j++){var z=dctZigZag[j];tableData[z]=data[offset++];}}else if((quantizationTableSpec>>4)===1){for(j=0;j<64;j++){var z=dctZigZag[j];tableData[z]=readUint16();}}else
+throw new Error("DQT: invalid table spec");quantizationTables[quantizationTableSpec&15]=tableData;}
+break;case 0xFFC0:case 0xFFC1:case 0xFFC2:readUint16();frame={};frame.extended=(fileMarker===0xFFC1);frame.progressive=(fileMarker===0xFFC2);frame.precision=data[offset++];frame.scanLines=readUint16();frame.samplesPerLine=readUint16();frame.components={};frame.componentsOrder=[];var componentsCount=data[offset++],componentId;var maxH=0,maxV=0;for(i=0;i<componentsCount;i++){componentId=data[offset];var h=data[offset+1]>>4;var v=data[offset+1]&15;var qId=data[offset+2];frame.componentsOrder.push(componentId);frame.components[componentId]={h:h,v:v,quantizationIdx:qId};offset+=3;}
+prepareComponents(frame);frames.push(frame);break;case 0xFFC4:var huffmanLength=readUint16();for(i=2;i<huffmanLength;){var huffmanTableSpec=data[offset++];var codeLengths=new Uint8Array(16);var codeLengthSum=0;for(j=0;j<16;j++,offset++)
+codeLengthSum+=(codeLengths[j]=data[offset]);var huffmanValues=new Uint8Array(codeLengthSum);for(j=0;j<codeLengthSum;j++,offset++)
+huffmanValues[j]=data[offset];i+=17+codeLengthSum;((huffmanTableSpec>>4)===0?huffmanTablesDC:huffmanTablesAC)[huffmanTableSpec&15]=buildHuffmanTable(codeLengths,huffmanValues);}
+break;case 0xFFDD:readUint16();resetInterval=readUint16();break;case 0xFFDA:var scanLength=readUint16();var selectorsCount=data[offset++];var components=[],component;for(i=0;i<selectorsCount;i++){component=frame.components[data[offset++]];var tableSpec=data[offset++];component.huffmanTableDC=huffmanTablesDC[tableSpec>>4];component.huffmanTableAC=huffmanTablesAC[tableSpec&15];components.push(component);}
+var spectralStart=data[offset++];var spectralEnd=data[offset++];var successiveApproximation=data[offset++];var processed=decodeScan(data,offset,frame,components,resetInterval,spectralStart,spectralEnd,successiveApproximation>>4,successiveApproximation&15);offset+=processed;break;case 0xFFFF:if(data[offset]!==0xFF){offset--;}
+break;default:if(data[offset-3]==0xFF&&data[offset-2]>=0xC0&&data[offset-2]<=0xFE){offset-=3;break;}
+throw new Error("unknown JPEG marker "+fileMarker.toString(16));}
+fileMarker=readUint16();}
+if(frames.length!=1)
+throw new Error("only single frame JPEGs supported");for(var i=0;i<frames.length;i++){var cp=frames[i].components;for(var j in cp){cp[j].quantizationTable=quantizationTables[cp[j].quantizationIdx];delete cp[j].quantizationIdx;}}
+this.width=frame.samplesPerLine;this.height=frame.scanLines;this.jfif=jfif;this.adobe=adobe;this.components=[];for(var i=0;i<frame.componentsOrder.length;i++){var component=frame.components[frame.componentsOrder[i]];this.components.push({lines:buildComponentData(frame,component),scaleX:component.h/frame.maxH,scaleY:component.v/frame.maxV});}},getData:function getData(width,height){var scaleX=this.width/width,scaleY=this.height/height;var component1,component2,component3,component4;var component1Line,component2Line,component3Line,component4Line;var x,y;var offset=0;var Y,Cb,Cr,K,C,M,Ye,R,G,B;var colorTransform;var dataLength=width*height*this.components.length;var data=new Uint8Array(dataLength);switch(this.components.length){case 1:component1=this.components[0];for(y=0;y<height;y++){component1Line=component1.lines[0|(y*component1.scaleY*scaleY)];for(x=0;x<width;x++){Y=component1Line[0|(x*component1.scaleX*scaleX)];data[offset++]=Y;}}
+break;case 2:component1=this.components[0];component2=this.components[1];for(y=0;y<height;y++){component1Line=component1.lines[0|(y*component1.scaleY*scaleY)];component2Line=component2.lines[0|(y*component2.scaleY*scaleY)];for(x=0;x<width;x++){Y=component1Line[0|(x*component1.scaleX*scaleX)];data[offset++]=Y;Y=component2Line[0|(x*component2.scaleX*scaleX)];data[offset++]=Y;}}
+break;case 3:colorTransform=true;if(this.adobe&&this.adobe.transformCode)
+colorTransform=true;else if(typeof this.colorTransform!=='undefined')
+colorTransform=!!this.colorTransform;component1=this.components[0];component2=this.components[1];component3=this.components[2];for(y=0;y<height;y++){component1Line=component1.lines[0|(y*component1.scaleY*scaleY)];component2Line=component2.lines[0|(y*component2.scaleY*scaleY)];component3Line=component3.lines[0|(y*component3.scaleY*scaleY)];for(x=0;x<width;x++){if(!colorTransform){R=component1Line[0|(x*component1.scaleX*scaleX)];G=component2Line[0|(x*component2.scaleX*scaleX)];B=component3Line[0|(x*component3.scaleX*scaleX)];}else{Y=component1Line[0|(x*component1.scaleX*scaleX)];Cb=component2Line[0|(x*component2.scaleX*scaleX)];Cr=component3Line[0|(x*component3.scaleX*scaleX)];R=clampTo8bit(Y+1.402*(Cr-128));G=clampTo8bit(Y-0.3441363*(Cb-128)-0.71413636*(Cr-128));B=clampTo8bit(Y+1.772*(Cb-128));}
+data[offset++]=R;data[offset++]=G;data[offset++]=B;}}
+break;case 4:if(!this.adobe)
+throw new Error('Unsupported color mode (4 components)');colorTransform=false;if(this.adobe&&this.adobe.transformCode)
+colorTransform=true;else if(typeof this.colorTransform!=='undefined')
+colorTransform=!!this.colorTransform;component1=this.components[0];component2=this.components[1];component3=this.components[2];component4=this.components[3];for(y=0;y<height;y++){component1Line=component1.lines[0|(y*component1.scaleY*scaleY)];component2Line=component2.lines[0|(y*component2.scaleY*scaleY)];component3Line=component3.lines[0|(y*component3.scaleY*scaleY)];component4Line=component4.lines[0|(y*component4.scaleY*scaleY)];for(x=0;x<width;x++){if(!colorTransform){C=component1Line[0|(x*component1.scaleX*scaleX)];M=component2Line[0|(x*component2.scaleX*scaleX)];Ye=component3Line[0|(x*component3.scaleX*scaleX)];K=component4Line[0|(x*component4.scaleX*scaleX)];}else{Y=component1Line[0|(x*component1.scaleX*scaleX)];Cb=component2Line[0|(x*component2.scaleX*scaleX)];Cr=component3Line[0|(x*component3.scaleX*scaleX)];K=component4Line[0|(x*component4.scaleX*scaleX)];C=255-clampTo8bit(Y+1.402*(Cr-128));M=255-clampTo8bit(Y-0.3441363*(Cb-128)-0.71413636*(Cr-128));Ye=255-clampTo8bit(Y+1.772*(Cb-128));}
+data[offset++]=255-C;data[offset++]=255-M;data[offset++]=255-Ye;data[offset++]=255-K;}}
+break;default:throw new Error('Unsupported color mode');}
+return data;},copyToImageData:function copyToImageData(imageData){var width=imageData.width,height=imageData.height;var imageDataArray=imageData.data;var data=this.getData(width,height);var i=0,j=0,x,y;var Y,K,C,M,R,G,B;switch(this.components.length){case 1:for(y=0;y<height;y++){for(x=0;x<width;x++){Y=data[i++];imageDataArray[j++]=Y;imageDataArray[j++]=Y;imageDataArray[j++]=Y;imageDataArray[j++]=255;}}
+break;case 3:for(y=0;y<height;y++){for(x=0;x<width;x++){R=data[i++];G=data[i++];B=data[i++];imageDataArray[j++]=R;imageDataArray[j++]=G;imageDataArray[j++]=B;imageDataArray[j++]=255;}}
+break;case 4:for(y=0;y<height;y++){for(x=0;x<width;x++){C=data[i++];M=data[i++];Y=data[i++];K=data[i++];R=255-clampTo8bit(C*(1-K/255)+K);G=255-clampTo8bit(M*(1-K/255)+K);B=255-clampTo8bit(Y*(1-K/255)+K);imageDataArray[j++]=R;imageDataArray[j++]=G;imageDataArray[j++]=B;imageDataArray[j++]=255;}}
+break;default:throw new Error('Unsupported color mode');}}};return constructor;})();global.jpegDecode=decode;function decode(jpegData,opts){var defaultOpts={useTArray:false,colorTransform:true};if(opts){if(typeof opts==='object'){opts={useTArray:(typeof opts.useTArray==='undefined'?defaultOpts.useTArray:opts.useTArray),colorTransform:(typeof opts.colorTransform==='undefined'?defaultOpts.colorTransform:opts.colorTransform)};}else{opts=defaultOpts;opts.useTArray=true;}}else{opts=defaultOpts;}
+var arr=new Uint8Array(jpegData);var decoder=new JpegImage();decoder.parse(arr);decoder.colorTransform=opts.colorTransform;var image={width:decoder.width,height:decoder.height,data:opts.useTArray?new Uint8Array(decoder.width*decoder.height*4):new Buffer(decoder.width*decoder.height*4)};decoder.copyToImageData(image);return image;}'use strict';tr.exportTo('tr.metrics.sh',function(){const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const SpeedIndex=tr.e.chrome.SpeedIndex;const LOADING_METRIC_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(0,1e3,20).addLinearBins(3e3,20).addExponentialBins(20e3,20);const SUMMARY_OPTIONS={avg:true,count:false,max:true,min:true,std:true,sum:false,};function addSpeedIndexScreenshotsBasedSample(samples,navigationStart,browserHelper){const screenshotObjects=browserHelper.process.objects.getAllInstancesNamed('Screenshot');if(!screenshotObjects)return;for(let i=0;i<screenshotObjects.length;i++){const snapshots=screenshotObjects[i].snapshots;const timestampedColorHistograms=[];snapshots.map(snapshot=>{if(snapshot.ts>=navigationStart.start){timestampedColorHistograms.push({colorHistogram:SpeedIndex.createColorHistogram(getPixelData(snapshot.args)),ts:snapshot.ts});}});samples.push({value:SpeedIndex.calculateSpeedIndex(timestampedColorHistograms)-
+navigationStart.start});}}
+function getPixelData(base64JpegImage){const binaryString=atob(base64JpegImage);const bytes=new DataView(new ArrayBuffer(base64JpegImage.length));tr.b.Base64.DecodeToTypedArray(base64JpegImage,bytes);const rawImageData=jpegDecode(bytes.buffer,{useTArray:true});return rawImageData.data;}
+function collectSpeedIndexSamplesFromLoadExpectations(model,chromeHelper){const speedIndexScreenshotsBasedSamples=[];for(const expectation of model.userModel.expectations){if(!(expectation instanceof tr.model.um.LoadExpectation))continue;if(tr.e.chrome.CHROME_INTERNAL_URLS.includes(expectation.url)){continue;}
+const rendererHelper=chromeHelper.rendererHelpers[expectation.renderProcess.pid];addSpeedIndexScreenshotsBasedSample(speedIndexScreenshotsBasedSamples,expectation.navigationStart,chromeHelper.browserHelper);}
+return speedIndexScreenshotsBasedSamples;}
+function screenshotsBasedSpeedIndexMetric(histograms,model){const speedIndexScreenshotsBasedHistogram=histograms.createHistogram('speedIndexScreenshotsBased',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'The average time at which visible parts of the'+' page are displayed.',summaryOptions:SUMMARY_OPTIONS,});const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const samples=collectSpeedIndexSamplesFromLoadExpectations(model,chromeHelper);for(const sample of samples){speedIndexScreenshotsBasedHistogram.addSample(sample.value);}}
+tr.metrics.MetricRegistry.register(screenshotsBasedSpeedIndexMetric);return{screenshotsBasedSpeedIndexMetric};});'use strict';tr.exportTo('tr.metrics.sh',function(){function webviewStartupMetric(histograms,model){const startupWallHist=new tr.v.Histogram('webview_startup_wall_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);startupWallHist.description='WebView startup wall time';const startupCPUHist=new tr.v.Histogram('webview_startup_cpu_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);startupCPUHist.description='WebView startup CPU time';const loadWallHist=new tr.v.Histogram('webview_url_load_wall_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);loadWallHist.description='WebView blank URL load wall time';const loadCPUHist=new tr.v.Histogram('webview_url_load_cpu_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);loadCPUHist.description='WebView blank URL load CPU time';for(const slice of model.getDescendantEvents()){if(!(slice instanceof tr.model.ThreadSlice))continue;if(slice.title==='WebViewStartupInterval'){startupWallHist.addSample(slice.duration);startupCPUHist.addSample(slice.cpuDuration);}
if(slice.title==='WebViewBlankUrlLoadInterval'){loadWallHist.addSample(slice.duration);loadCPUHist.addSample(slice.cpuDuration);}}
histograms.addHistogram(startupWallHist);histograms.addHistogram(startupCPUHist);histograms.addHistogram(loadWallHist);histograms.addHistogram(loadCPUHist);}
-tr.metrics.MetricRegistry.register(webviewStartupMetric);return{webviewStartupMetric,};});'use strict';tr.exportTo('tr.metrics.tabs',function(){function tabsMetric(histograms,model,opt_options){const thread=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper).browserHelper.mainThread;const tabSwitchLatencies=[];if(thread){for(const slice of thread.asyncSliceGroup.slices){if(slice.title==='TabSwitching::Latency'){tabSwitchLatencies.push(slice.duration);}}}
+tr.metrics.MetricRegistry.register(webviewStartupMetric);return{webviewStartupMetric,};});'use strict';tr.exportTo('tr.metrics.tabs',function(){function tabsMetric(histograms,model,opt_options){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(!chromeHelper){return;}
+const tabSwitchRequestDelays=[];const TAB_SWITCHING_REQUEST_TITLE='TabSwitchVisibilityRequest';let startTabSwitchVisibilityRequest=Number.MAX_SAFE_INTEGER;for(const helper of chromeHelper.browserHelpers){if(!helper.mainThread)continue;for(const slice of helper.mainThread.asyncSliceGroup.slices){if(slice.title===TAB_SWITCHING_REQUEST_TITLE&&!slice.error){tabSwitchRequestDelays.push(slice.duration);if(slice.start<startTabSwitchVisibilityRequest){startTabSwitchVisibilityRequest=slice.start;}}}}
+histograms.createHistogram('tab_switching_request_delay',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,tabSwitchRequestDelays,{description:'Delay before tab-request is made',summaryOptions:{sum:false}});const tabSwitchLatencies=[];const TAB_SWITCHING_SLICE_TITLE='TabSwitching::Latency';function extractLatencyFromHelpers(helpers,legacy){for(const helper of helpers){if(!helper.mainThread){continue;}
+const thread=helper.mainThread;for(const slice of thread.asyncSliceGroup.slices){if(slice.title===TAB_SWITCHING_SLICE_TITLE&&(legacy||slice.args.latency)&&slice.start>startTabSwitchVisibilityRequest){tabSwitchLatencies.push(legacy?slice.duration:slice.args.latency);}}}}
+extractLatencyFromHelpers(chromeHelper.browserHelpers);extractLatencyFromHelpers(Object.values(chromeHelper.rendererHelpers));if(tabSwitchLatencies.length===0){extractLatencyFromHelpers(chromeHelper.browserHelpers,true);}
histograms.createHistogram('tab_switching_latency',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,tabSwitchLatencies,{description:'Tab switching time in ms',summaryOptions:{sum:false}});}
tr.metrics.MetricRegistry.register(tabsMetric,{supportsRangeOfInterest:false,});return{tabsMetric,};});'use strict';tr.exportTo('tr.metrics',function(){const MEMORY_INFRA_TRACING_CATEGORY='disabled-by-default-memory-infra';const TIME_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(1e-3,1e5,30);const BYTE_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(1,1e9,30);const COUNT_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(1,1e5,30);const SUMMARY_OPTIONS=tr.v.Histogram.AVERAGE_ONLY_SUMMARY_OPTIONS;function addMemoryInfraHistograms(histograms,model,categoryNamesToTotalEventSizes){const memoryDumpCount=model.globalMemoryDumps.length;if(memoryDumpCount===0)return;let totalOverhead=0;let nonMemoryInfraThreadOverhead=0;const overheadByProvider={};for(const process of Object.values(model.processes)){for(const thread of Object.values(process.threads)){for(const slice of Object.values(thread.sliceGroup.slices)){if(slice.category!==MEMORY_INFRA_TRACING_CATEGORY)continue;totalOverhead+=slice.duration;if(thread.name!=='MemoryInfra'){nonMemoryInfraThreadOverhead+=slice.duration;}
if(slice.args&&slice.args['dump_provider.name']){const providerName=slice.args['dump_provider.name'];let durationAndCount=overheadByProvider[providerName];if(durationAndCount===undefined){overheadByProvider[providerName]=durationAndCount={duration:0,count:0};}
durationAndCount.duration+=slice.duration;durationAndCount.count++;}}}}
histograms.createHistogram('memory_dump_cpu_overhead',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,totalOverhead/memoryDumpCount,{binBoundaries:TIME_BOUNDARIES,description:'Average CPU overhead on all threads per memory-infra dump',summaryOptions:SUMMARY_OPTIONS,});histograms.createHistogram('nonmemory_thread_memory_dump_cpu_overhead',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,nonMemoryInfraThreadOverhead/memoryDumpCount,{binBoundaries:TIME_BOUNDARIES,description:'Average CPU overhead on non-memory-infra threads '+'per memory-infra dump',summaryOptions:SUMMARY_OPTIONS,});for(const[providerName,overhead]of Object.entries(overheadByProvider)){histograms.createHistogram(`${providerName}_memory_dump_cpu_overhead`,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,overhead.duration/overhead.count,{binBoundaries:TIME_BOUNDARIES,description:`Average CPU overhead of ${providerName} per OnMemoryDump call`,summaryOptions:SUMMARY_OPTIONS,});}
const memoryInfraEventsSize=categoryNamesToTotalEventSizes.get(MEMORY_INFRA_TRACING_CATEGORY);const memoryInfraTraceBytesValue=new tr.v.Histogram('total_memory_dump_size',tr.b.Unit.byName.sizeInBytes_smallerIsBetter,BYTE_BOUNDARIES);memoryInfraTraceBytesValue.description='Total trace size of memory-infra dumps in bytes';memoryInfraTraceBytesValue.customizeSummaryOptions(SUMMARY_OPTIONS);memoryInfraTraceBytesValue.addSample(memoryInfraEventsSize);histograms.addHistogram(memoryInfraTraceBytesValue);const traceBytesPerDumpValue=new tr.v.Histogram('memory_dump_size',tr.b.Unit.byName.sizeInBytes_smallerIsBetter,BYTE_BOUNDARIES);traceBytesPerDumpValue.description='Average trace size of memory-infra dumps in bytes';traceBytesPerDumpValue.customizeSummaryOptions(SUMMARY_OPTIONS);traceBytesPerDumpValue.addSample(memoryInfraEventsSize/memoryDumpCount);histograms.addHistogram(traceBytesPerDumpValue);}
-function tracingMetric(histograms,model){histograms.createHistogram('trace_import_duration',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,model.stats.traceImportDurationMs,{binBoundaries:TIME_BOUNDARIES,description:'Duration that trace viewer required to import the trace',summaryOptions:SUMMARY_OPTIONS,});if(!model.stats.hasEventSizesinBytes)return;const eventStats=model.stats.allTraceEventStatsInTimeIntervals;eventStats.sort((a,b)=>a.timeInterval-b.timeInterval);const totalTraceBytes=eventStats.reduce((a,b)=>a+b.totalEventSizeinBytes,0);let maxEventCountPerSec=0;let maxEventBytesPerSec=0;const INTERVALS_PER_SEC=Math.floor(1000/model.stats.TIME_INTERVAL_SIZE_IN_MS);let runningEventNumPerSec=0;let runningEventBytesPerSec=0;let start=0;let end=0;while(end<eventStats.length){runningEventNumPerSec+=eventStats[end].numEvents;runningEventBytesPerSec+=eventStats[end].totalEventSizeinBytes;end++;while((eventStats[end-1].timeInterval-
+function tracingMetric(histograms,model){if(!model.stats.hasEventSizesinBytes)return;const eventStats=model.stats.allTraceEventStatsInTimeIntervals;eventStats.sort((a,b)=>a.timeInterval-b.timeInterval);const totalTraceBytes=eventStats.reduce((a,b)=>a+b.totalEventSizeinBytes,0);let maxEventCountPerSec=0;let maxEventBytesPerSec=0;const INTERVALS_PER_SEC=Math.floor(1000/model.stats.TIME_INTERVAL_SIZE_IN_MS);let runningEventNumPerSec=0;let runningEventBytesPerSec=0;let start=0;let end=0;while(end<eventStats.length){runningEventNumPerSec+=eventStats[end].numEvents;runningEventBytesPerSec+=eventStats[end].totalEventSizeinBytes;end++;while((eventStats[end-1].timeInterval-
eventStats[start].timeInterval)>=INTERVALS_PER_SEC){runningEventNumPerSec-=eventStats[start].numEvents;runningEventBytesPerSec-=eventStats[start].totalEventSizeinBytes;start++;}
maxEventCountPerSec=Math.max(maxEventCountPerSec,runningEventNumPerSec);maxEventBytesPerSec=Math.max(maxEventBytesPerSec,runningEventBytesPerSec);}
const stats=model.stats.allTraceEventStats;const categoryNamesToTotalEventSizes=(stats.reduce((map,stat)=>(map.set(stat.category,((map.get(stat.category)||0)+
stat.totalEventSizeinBytes))),new Map()));const maxCatNameAndBytes=Array.from(categoryNamesToTotalEventSizes.entries()).reduce((a,b)=>((b[1]>=a[1])?b:a));const maxEventBytesPerCategory=maxCatNameAndBytes[1];const categoryWithMaxEventBytes=maxCatNameAndBytes[0];const maxEventCountPerSecValue=new tr.v.Histogram('peak_event_rate',tr.b.Unit.byName.count_smallerIsBetter,COUNT_BOUNDARIES);maxEventCountPerSecValue.description='Max number of events per second';maxEventCountPerSecValue.customizeSummaryOptions(SUMMARY_OPTIONS);maxEventCountPerSecValue.addSample(maxEventCountPerSec);const maxEventBytesPerSecValue=new tr.v.Histogram('peak_event_size_rate',tr.b.Unit.byName.sizeInBytes_smallerIsBetter,BYTE_BOUNDARIES);maxEventBytesPerSecValue.description='Max event size in bytes per second';maxEventBytesPerSecValue.customizeSummaryOptions(SUMMARY_OPTIONS);maxEventBytesPerSecValue.addSample(maxEventBytesPerSec);const totalTraceBytesValue=new tr.v.Histogram('trace_size',tr.b.Unit.byName.sizeInBytes_smallerIsBetter,BYTE_BOUNDARIES);totalTraceBytesValue.customizeSummaryOptions(SUMMARY_OPTIONS);totalTraceBytesValue.addSample(totalTraceBytes);const biggestCategory={name:categoryWithMaxEventBytes,size_in_bytes:maxEventBytesPerCategory};totalTraceBytesValue.diagnostics.set('category_with_max_event_size',new tr.v.d.GenericSet([biggestCategory]));histograms.addHistogram(totalTraceBytesValue);maxEventCountPerSecValue.diagnostics.set('category_with_max_event_size',new tr.v.d.GenericSet([biggestCategory]));histograms.addHistogram(maxEventCountPerSecValue);maxEventBytesPerSecValue.diagnostics.set('category_with_max_event_size',new tr.v.d.GenericSet([biggestCategory]));histograms.addHistogram(maxEventBytesPerSecValue);addMemoryInfraHistograms(histograms,model,categoryNamesToTotalEventSizes);}
-tr.metrics.MetricRegistry.register(tracingMetric);return{tracingMetric,MEMORY_INFRA_TRACING_CATEGORY,};});'use strict';tr.exportTo('tr.metrics.v8',function(){const CUSTOM_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(4,200,100);function computeExecuteMetrics(histograms,model){const cpuTotalExecution=new tr.v.Histogram('v8_execution_cpu_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuTotalExecution.description='cpu total time spent in script execution';const wallTotalExecution=new tr.v.Histogram('v8_execution_wall_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallTotalExecution.description='wall total time spent in script execution';const cpuSelfExecution=new tr.v.Histogram('v8_execution_cpu_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuSelfExecution.description='cpu self time spent in script execution';const wallSelfExecution=new tr.v.Histogram('v8_execution_wall_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallSelfExecution.description='wall self time spent in script execution';for(const e of model.findTopmostSlicesNamed('V8.Execute')){cpuTotalExecution.addSample(e.cpuDuration);wallTotalExecution.addSample(e.duration);cpuSelfExecution.addSample(e.cpuSelfTime);wallSelfExecution.addSample(e.selfTime);}
+tr.metrics.MetricRegistry.register(tracingMetric);return{tracingMetric,MEMORY_INFRA_TRACING_CATEGORY,};});'use strict';tr.exportTo('tr.metrics',function(){function parseBuckets_(event,processName){const len=tr.b.Base64.getDecodedBufferLength(event.args.buckets);const buffer=new ArrayBuffer(len);const dataView=new DataView(buffer);tr.b.Base64.DecodeToTypedArray(event.args.buckets,dataView);const decoded=new Uint32Array(buffer);const sum=decoded[1]+decoded[2]*0x100000000;const bins=[];let position=4;while(position<=decoded.length-4){const min=decoded[position++];const max=decoded[position++]+decoded[position++]*0x100000000;const count=decoded[position++];const processes=new tr.v.d.Breakdown();processes.set(processName,count);const events=new tr.v.d.RelatedEventSet([event]);bins.push({min,max,count,processes,events});}
+return{sum,bins};}
+function mergeBins_(x,y){x.sum+=y.sum;const allBins=[...x.bins,...y.bins];allBins.sort((a,b)=>a.min-b.min);x.bins=[];let last=undefined;for(const bin of allBins){if(last!==undefined&&bin.min===last.min){if(last.max!==bin.max)throw new Error('Incompatible bins');if(bin.count===0)continue;last.count+=bin.count;for(const event of bin.events){last.events.add(event);}
+last.processes.addDiagnostic(bin.processes);}else{if(last!==undefined&&bin.min<last.max){throw new Error('Incompatible bins');}
+x.bins.push(bin);last=bin;}}}
+function subtractBins_(x,y){x.sum-=y.sum;let p1=0;let p2=0;while(p2<y.bins.length){while(p1<x.bins.length&&x.bins[p1].min!==y.bins[p2].min){p1++;}
+if(p1===x.bins.length)throw new Error('Cannot subtract');if(x.bins[p1].max!==y.bins[p2].max){throw new Error('Incompatible bins');}
+if(x.bins[p1].count<y.bins[p2].count){throw new Error('Cannot subtract');}
+x.bins[p1].count-=y.bins[p2].count;for(const event of y.bins[p2].events){x.bins[p1].events.add(event);}
+const processName=tr.b.getOnlyElement(x.bins[p1].processes)[0];x.bins[p1].processes.set(processName,x.bins[p1].count);p2++;}}
+function getHistogramUnit_(name){return tr.b.Unit.byName.unitlessNumber_smallerIsBetter;}
+function getHistogramBoundaries_(name){if(name.startsWith('Event.Latency.Scroll')){return tr.v.HistogramBinBoundaries.createExponential(1e3,1e5,50);}
+if(name.startsWith('Graphics.Smoothness.Throughput')){return tr.v.HistogramBinBoundaries.createLinear(0,100,101);}
+return tr.v.HistogramBinBoundaries.createExponential(1e-3,1e3,50);}
+function umaMetric(histograms,model){const histogramValues=new Map();const nameCounts=new Map();for(const process of model.getAllProcesses()){const histogramEvents=new Map();for(const event of process.instantEvents){if(event.title!=='UMAHistogramSamples')continue;const name=event.args.name;const events=histogramEvents.get(name)||[];if(!histogramEvents.has(name))histogramEvents.set(name,events);events.push(event);}
+let processName=tr.e.chrome.chrome_processes.canonicalizeProcessName(process.name);nameCounts.set(processName,(nameCounts.get(processName)||0)+1);processName=`${processName}_${nameCounts.get(processName)}`;for(const[name,events]of histogramEvents){const values=histogramValues.get(name)||{sum:0,bins:[]};if(!histogramValues.has(name))histogramValues.set(name,values);const endValues=parseBuckets_(events[events.length-1],processName);if(events.length===1){mergeBins_(values,endValues);}else if(events.length===2){subtractBins_(endValues,parseBuckets_(events[0],processName));mergeBins_(values,endValues);}else{throw new Error('There should be at most two snapshots of an UMA '+'histogram in each process');}}}
+for(const[name,values]of histogramValues){const histogram=new tr.v.Histogram(name,getHistogramUnit_(name),getHistogramBoundaries_(name));let sumOfMiddles=0;let sumOfBinLengths=0;for(const bin of values.bins){sumOfMiddles+=bin.count*(bin.min+bin.max)/2;sumOfBinLengths+=bin.count*(bin.max-bin.min);}
+const shift=(values.sum-sumOfMiddles)/sumOfBinLengths;if(Math.abs(shift)>0.5)throw new Error('Samples sum is wrong');for(const bin of values.bins){if(bin.count===0)continue;const shiftedValue=(bin.min+bin.max)/2+shift*(bin.max-bin.min);for(const[processName,count]of bin.processes){bin.processes.set(processName,shiftedValue*count/bin.count);}
+for(let i=0;i<bin.count;i++){histogram.addSample(shiftedValue,{processes:bin.processes,events:bin.events});}}
+histograms.addHistogram(histogram);}}
+tr.metrics.MetricRegistry.register(umaMetric,{requiredCategories:['benchmark'],});return{umaMetric,};});'use strict';tr.exportTo('tr.metrics.v8',function(){const CUSTOM_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(4,200,100);function computeExecuteMetrics(histograms,model){const cpuTotalExecution=new tr.v.Histogram('v8_execution_cpu_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuTotalExecution.description='cpu total time spent in script execution';const wallTotalExecution=new tr.v.Histogram('v8_execution_wall_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallTotalExecution.description='wall total time spent in script execution';const cpuSelfExecution=new tr.v.Histogram('v8_execution_cpu_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuSelfExecution.description='cpu self time spent in script execution';const wallSelfExecution=new tr.v.Histogram('v8_execution_wall_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallSelfExecution.description='wall self time spent in script execution';for(const e of model.findTopmostSlicesNamed('V8.Execute')){cpuTotalExecution.addSample(e.cpuDuration);wallTotalExecution.addSample(e.duration);cpuSelfExecution.addSample(e.cpuSelfTime);wallSelfExecution.addSample(e.selfTime);}
histograms.addHistogram(cpuTotalExecution);histograms.addHistogram(wallTotalExecution);histograms.addHistogram(cpuSelfExecution);histograms.addHistogram(wallSelfExecution);}
function computeParseLazyMetrics(histograms,model){const cpuSelfParseLazy=new tr.v.Histogram('v8_parse_lazy_cpu_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuSelfParseLazy.description='cpu self time spent performing lazy parsing';const wallSelfParseLazy=new tr.v.Histogram('v8_parse_lazy_wall_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallSelfParseLazy.description='wall self time spent performing lazy parsing';for(const e of model.findTopmostSlicesNamed('V8.ParseLazyMicroSeconds')){cpuSelfParseLazy.addSample(e.cpuSelfTime);wallSelfParseLazy.addSample(e.selfTime);}
for(const e of model.findTopmostSlicesNamed('V8.ParseLazy')){cpuSelfParseLazy.addSample(e.cpuSelfTime);wallSelfParseLazy.addSample(e.selfTime);}
@@ -8396,24 +9173,30 @@ histograms.addHistogram(cpuTotalOptimizeCode);histograms.addHistogram(wallTotalO
function computeDeoptimizeCodeMetrics(histograms,model){const cpuTotalDeoptimizeCode=new tr.v.Histogram('v8_deoptimize_code_cpu_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuTotalDeoptimizeCode.description='cpu total time spent in code deoptimization';const wallTotalDeoptimizeCode=new tr.v.Histogram('v8_deoptimize_code_wall_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallTotalDeoptimizeCode.description='wall total time spent in code deoptimization';for(const e of model.findTopmostSlicesNamed('V8.DeoptimizeCode')){cpuTotalDeoptimizeCode.addSample(e.cpuDuration);wallTotalDeoptimizeCode.addSample(e.duration);}
histograms.addHistogram(cpuTotalDeoptimizeCode);histograms.addHistogram(wallTotalDeoptimizeCode);}
function executionMetric(histograms,model){computeExecuteMetrics(histograms,model);computeParseLazyMetrics(histograms,model);computeCompileIgnitionMetrics(histograms,model);computeCompileFullCodeMetrics(histograms,model);computeRecompileMetrics(histograms,model);computeOptimizeCodeMetrics(histograms,model);computeDeoptimizeCodeMetrics(histograms,model);}
-tr.metrics.MetricRegistry.register(executionMetric);return{executionMetric,};});'use strict';tr.exportTo('tr.metrics.v8',function(){const TARGET_FPS=60;const MS_PER_SECOND=1000;const WINDOW_SIZE_MS=MS_PER_SECOND/TARGET_FPS;function gcMetric(histograms,model){addDurationOfTopEvents(histograms,model);addTotalDurationOfTopEvents(histograms,model);addDurationOfSubEvents(histograms,model);addPercentageInV8ExecuteOfTopEvents(histograms,model);addTotalPercentageInV8Execute(histograms,model);}
+tr.metrics.MetricRegistry.register(executionMetric);return{executionMetric,};});'use strict';tr.exportTo('tr.metrics.v8',function(){const TARGET_FPS=60;const MS_PER_SECOND=1000;const WINDOW_SIZE_MS=MS_PER_SECOND/TARGET_FPS;function gcMetric(histograms,model){addDurationOfTopEvents(histograms,model);addTotalDurationOfTopEvents(histograms,model);addDurationOfSubEvents(histograms,model);addPercentageInV8ExecuteOfTopEvents(histograms,model);addTotalPercentageInV8Execute(histograms,model);addMarkCompactorMutatorUtilization(histograms,model);addTotalMarkCompactorTime(histograms,model);addTotalMarkCompactorMarkingTime(histograms,model);}
tr.metrics.MetricRegistry.register(gcMetric);const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const percentage_biggerIsBetter=tr.b.Unit.byName.normalizedPercentage_biggerIsBetter;const percentage_smallerIsBetter=tr.b.Unit.byName.normalizedPercentage_smallerIsBetter;const CUSTOM_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(0,20,200).addExponentialBins(200,100);function createNumericForTopEventTime(name){const n=new tr.v.Histogram(name,timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);n.customizeSummaryOptions({avg:true,count:true,max:true,min:false,std:true,sum:true,percentile:[0.90]});return n;}
function createNumericForSubEventTime(name){const n=new tr.v.Histogram(name,timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);n.customizeSummaryOptions({avg:true,count:false,max:true,min:false,std:false,sum:false,percentile:[0.90]});return n;}
function createNumericForIdleTime(name){const n=new tr.v.Histogram(name,timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);n.customizeSummaryOptions({avg:true,count:false,max:true,min:false,std:false,sum:true,percentile:[]});return n;}
function createPercentage(name,numerator,denominator,unit){const hist=new tr.v.Histogram(name,unit);if(denominator===0){hist.addSample(0);}else{hist.addSample(numerator/denominator);}
hist.customizeSummaryOptions({avg:true,count:false,max:false,min:false,std:false,sum:false,percentile:[]});return hist;}
-function isNotForcedTopGarbageCollectionEvent(event){return tr.metrics.v8.utils.isTopGarbageCollectionEvent(event)&&!tr.metrics.v8.utils.isForcedGarbageCollectionEvent(event);}
-function isNotForcedSubGarbageCollectionEvent(event){return tr.metrics.v8.utils.isSubGarbageCollectionEvent(event)&&!tr.metrics.v8.utils.isForcedGarbageCollectionEvent(event);}
-function addDurationOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNotForcedTopGarbageCollectionEvent,tr.metrics.v8.utils.topGarbageCollectionEventName,function(name,events){const cpuDuration=createNumericForTopEventTime(name);events.forEach(function(event){cpuDuration.addSample(event.cpuDuration);});histograms.addHistogram(cpuDuration);});}
-function addTotalDurationOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNotForcedTopGarbageCollectionEvent,event=>'v8-gc-total',function(name,events){const cpuDuration=createNumericForTopEventTime(name);events.forEach(function(event){cpuDuration.addSample(event.cpuDuration);});histograms.addHistogram(cpuDuration);});}
-function addDurationOfSubEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNotForcedSubGarbageCollectionEvent,tr.metrics.v8.utils.subGarbageCollectionEventName,function(name,events){const cpuDuration=createNumericForSubEventTime(name);events.forEach(function(event){cpuDuration.addSample(event.cpuDuration);});histograms.addHistogram(cpuDuration);});}
-function addPercentageInV8ExecuteOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNotForcedTopGarbageCollectionEvent,tr.metrics.v8.utils.topGarbageCollectionEventName,function(name,events){addPercentageInV8Execute(histograms,model,name,events);});}
-function addTotalPercentageInV8Execute(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNotForcedTopGarbageCollectionEvent,event=>'v8-gc-total',function(name,events){addPercentageInV8Execute(histograms,model,name,events);});}
+function addDurationOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,tr.metrics.v8.utils.isNotForcedTopGarbageCollectionEvent,tr.metrics.v8.utils.topGarbageCollectionEventName,function(name,events){const cpuDuration=createNumericForTopEventTime(name);events.forEach(function(event){cpuDuration.addSample(event.cpuDuration);});histograms.addHistogram(cpuDuration);});}
+function addTotalDurationOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,tr.metrics.v8.utils.isNotForcedTopGarbageCollectionEvent,event=>'v8-gc-total',function(name,events){const cpuDuration=createNumericForTopEventTime(name);events.forEach(function(event){cpuDuration.addSample(event.cpuDuration);});histograms.addHistogram(cpuDuration);});}
+function isV8MarkCompactorSummary(event){return!tr.metrics.v8.utils.isForcedGarbageCollectionEvent(event)&&tr.metrics.v8.utils.isMarkCompactorSummaryEvent(event);}
+function isV8MarkCompactorMarkingSummary(event){return!tr.metrics.v8.utils.isForcedGarbageCollectionEvent(event)&&tr.metrics.v8.utils.isMarkCompactorMarkingSummaryEvent(event);}
+function createHistogramFromSummary(histograms,name,events){const foregroundDuration=createNumericForTopEventTime(name+'-foreground');const backgroundDuration=createNumericForTopEventTime(name+'-background');const totalDuration=createNumericForTopEventTime(name+'-total');const relatedNames=new tr.v.d.RelatedNameMap();relatedNames.set('foreground',foregroundDuration.name);relatedNames.set('background',backgroundDuration.name);for(const event of events){foregroundDuration.addSample(event.args.duration);backgroundDuration.addSample(event.args.background_duration);const breakdownForTotal=new tr.v.d.Breakdown();breakdownForTotal.set('foreground',event.args.duration);breakdownForTotal.set('background',event.args.background_duration);totalDuration.addSample(event.args.duration+event.args.background_duration,{breakdown:breakdownForTotal});}
+histograms.addHistogram(foregroundDuration);histograms.addHistogram(backgroundDuration);histograms.addHistogram(totalDuration,{breakdown:relatedNames});}
+function addTotalMarkCompactorTime(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isV8MarkCompactorSummary,event=>'v8-gc-mark-compactor',(name,events)=>createHistogramFromSummary(histograms,name,events));}
+function addTotalMarkCompactorMarkingTime(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isV8MarkCompactorMarkingSummary,event=>'v8-gc-mark-compactor-marking',(name,events)=>createHistogramFromSummary(histograms,name,events));}
+function addDurationOfSubEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,tr.metrics.v8.utils.isNotForcedSubGarbageCollectionEvent,tr.metrics.v8.utils.subGarbageCollectionEventName,function(name,events){const cpuDuration=createNumericForSubEventTime(name);events.forEach(function(event){cpuDuration.addSample(event.cpuDuration);});histograms.addHistogram(cpuDuration);});}
+function addPercentageInV8ExecuteOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,tr.metrics.v8.utils.isNotForcedTopGarbageCollectionEvent,tr.metrics.v8.utils.topGarbageCollectionEventName,function(name,events){addPercentageInV8Execute(histograms,model,name,events);});}
+function addTotalPercentageInV8Execute(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,tr.metrics.v8.utils.isNotForcedTopGarbageCollectionEvent,event=>'v8-gc-total',function(name,events){addPercentageInV8Execute(histograms,model,name,events);});}
function addPercentageInV8Execute(histograms,model,name,events){let cpuDurationInV8Execute=0;let cpuDurationTotal=0;events.forEach(function(event){const v8Execute=tr.metrics.v8.utils.findParent(event,tr.metrics.v8.utils.isV8ExecuteEvent);if(v8Execute){cpuDurationInV8Execute+=event.cpuDuration;}
cpuDurationTotal+=event.cpuDuration;});const percentage=createPercentage(name+'_percentage_in_v8_execute',cpuDurationInV8Execute,cpuDurationTotal,percentage_smallerIsBetter);histograms.addHistogram(percentage);}
+function addMarkCompactorMutatorUtilization(histograms,model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const rendererHelpers=Object.values(chromeHelper.rendererHelpers);tr.metrics.v8.utils.addMutatorUtilization('v8-gc-mark-compactor-mmu',tr.metrics.v8.utils.isNotForcedMarkCompactorEvent,[100],rendererHelpers,histograms);}
return{gcMetric,WINDOW_SIZE_MS,};});'use strict';tr.exportTo('tr.metrics.v8',function(){const COUNT_CUSTOM_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(1,1000000,50);const DURATION_CUSTOM_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(0.1,10000,50);const SUMMARY_OPTIONS={std:false,count:false,sum:false,min:false,max:false,};function computeDomContentLoadedTime_(model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);let domContentLoadedTime=0;for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){for(const ev of rendererHelper.mainThread.sliceGroup.childEvents()){if(ev.title==='domContentLoadedEventEnd'&&ev.start>domContentLoadedTime){domContentLoadedTime=ev.start;}}}
return domContentLoadedTime;}
-function computeInteractiveTime_(model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);let interactiveTime=0;for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){const samples=tr.metrics.sh.collectLoadingMetricsForRenderer(rendererHelper).interactiveSamples;if(samples.length===0)continue;if(interactiveTime!==0)throw new Error('Too many navigations');const diagnostics=tr.b.getOnlyElement(samples).diagnostics;interactiveTime=tr.b.getOnlyElement(diagnostics.get('Navigation infos')).eventTimestamp;}
+function computeInteractiveTime_(model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);let interactiveTime=0;for(const expectation of model.userModel.expectations){if(tr.e.chrome.CHROME_INTERNAL_URLS.includes(expectation.url)){continue;}
+if(!(expectation instanceof tr.model.um.LoadExpectation))continue;if(expectation.timeToInteractive===undefined)continue;if(interactiveTime!==0)throw new Error('Too many navigations');interactiveTime=expectation.timeToInteractive;}
return interactiveTime;}
function convertMicroToMilli_(time){return tr.b.convertUnit(time,tr.b.UnitPrefixScale.METRIC.MICRO,tr.b.UnitPrefixScale.METRIC.MILLI);}
function computeRuntimeStats(histograms,slices){const runtimeGroupCollection=new tr.e.v8.RuntimeStatsGroupCollection();runtimeGroupCollection.addSlices(slices);function addHistogramsForRuntimeGroup(runtimeGroup,optRelatedNameMaps){histograms.createHistogram(`${runtimeGroup.name}:duration`,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,{value:convertMicroToMilli_(runtimeGroup.time),diagnostics:optRelatedNameMaps?{samples:optRelatedNameMaps.durationBreakdown}:{}},{binBoundaries:DURATION_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,diagnostics:optRelatedNameMaps?{samples:optRelatedNameMaps.durationNames}:{}});histograms.createHistogram(`${runtimeGroup.name}:count`,tr.b.Unit.byName.count_smallerIsBetter,{value:runtimeGroup.count,diagnostics:optRelatedNameMaps?{samples:optRelatedNameMaps.countBreakdown}:{}},{binBoundaries:COUNT_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,diagnostics:optRelatedNameMaps?{samples:optRelatedNameMaps.countNames}:{}});}
@@ -8422,31 +9205,43 @@ addHistogramsForRuntimeGroup(runtimeGroup,{durationNames,durationBreakdown,count
for(const runtimeGroup of runtimeGroupCollection.runtimeGroups){addHistogramsForRuntimeGroup(runtimeGroup);}
const blinkGroupCollection=runtimeGroupCollection.blinkRCSGroupCollection;if(blinkGroupCollection.totalTime>0){blinkGroupCollection.runtimeGroups.forEach(addDetailedHistogramsForRuntimeGroup);}}
function runtimeStatsMetric(histograms,model){const interactiveTime=computeInteractiveTime_(model);const domContentLoadedTime=computeDomContentLoadedTime_(model);const endTime=Math.max(interactiveTime,domContentLoadedTime);const slices=[...model.getDescendantEvents()].filter(event=>event instanceof tr.e.v8.V8ThreadSlice&&event.start<=endTime);computeRuntimeStats(histograms,slices);}
-function addDurationHistogram(railStageName,runtimeGroupName,sampleValue,histograms,durationRelatedHistsByGroupName){const durationHistogram=histograms.createHistogram(`${railStageName}_${runtimeGroupName}:duration`,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,convertMicroToMilli_(sampleValue),{binBoundaries:DURATION_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,});if(durationRelatedHistsByGroupName.get(runtimeGroupName)===undefined){const durationHistogramMap=new tr.v.d.RelatedHistogramMap();durationHistogramMap.set(railStageName,durationHistogram);durationRelatedHistsByGroupName.set(runtimeGroupName,durationHistogramMap);}else{durationRelatedHistsByGroupName.get(runtimeGroupName).set(railStageName,durationHistogram);}}
-function addCountHistogram(railStageName,runtimeGroupName,sampleValue,histograms,countRelatedHistsByGroupName){const countHistogram=histograms.createHistogram(`${railStageName}_${runtimeGroupName}:count`,tr.b.Unit.byName.count_smallerIsBetter,sampleValue,{binBoundaries:COUNT_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,});if(countRelatedHistsByGroupName.get(runtimeGroupName)===undefined){const countHistogramMap=new tr.v.d.RelatedHistogramMap();countHistogramMap.set(railStageName,countHistogram);countRelatedHistsByGroupName.set(runtimeGroupName,countHistogramMap);}else{countRelatedHistsByGroupName.get(runtimeGroupName).set(railStageName,countHistogram);}}
-function addTotalDurationHistogram(histogramName,time,histograms,durationRelatedHistsByGroupName){const durationHistogram=histograms.createHistogram(`${histogramName}:duration`,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,convertMicroToMilli_(time),{binBoundaries:DURATION_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,});const durationRelatedHistogram=durationRelatedHistsByGroupName.get(histogramName);if(durationRelatedHistogram!==undefined){durationHistogram.diagnostics.set('RAIL stages',durationRelatedHistogram);}}
-function addTotalCountHistogram(histogramName,count,histograms,countRelatedHistsByGroupName){const countHistogram=histograms.createHistogram(`${histogramName}:count`,tr.b.Unit.byName.count_smallerIsBetter,count,{binBoundaries:COUNT_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,});const countRelatedHistogram=countRelatedHistsByGroupName.get(histogramName);if(countRelatedHistogram!==undefined){countHistogram.diagnostics.set('RAIL stages',countRelatedHistogram);}}
-function computeRuntimeStatsBucketOnUE(histograms,slices,v8SlicesBucketOnUEMap){const durationRelatedHistsByGroupName=new Map();const countRelatedHistsByGroupName=new Map();for(const[name,slicesUE]of v8SlicesBucketOnUEMap){const runtimeGroupCollection=new tr.e.v8.RuntimeStatsGroupCollection();runtimeGroupCollection.addSlices(slicesUE);let overallV8Time=runtimeGroupCollection.totalTime;let overallV8Count=runtimeGroupCollection.totalCount;for(const runtimeGroup of runtimeGroupCollection.runtimeGroups){addDurationHistogram(name,runtimeGroup.name,runtimeGroup.time,histograms,durationRelatedHistsByGroupName);if(runtimeGroup.name==='Blink C++'){overallV8Time-=runtimeGroup.time;}
-addCountHistogram(name,runtimeGroup.name,runtimeGroup.count,histograms,countRelatedHistsByGroupName);if(runtimeGroup.name==='Blink C++'){overallV8Count-=runtimeGroup.count;}}
-if(runtimeGroupCollection.blinkRCSGroupCollection.totalTime>0){const blinkRCSGroupCollection=runtimeGroupCollection.blinkRCSGroupCollection;for(const group of blinkRCSGroupCollection.runtimeGroups){addDurationHistogram(name,group.name,group.time,histograms,durationRelatedHistsByGroupName);addCountHistogram(name,group.name,group.count,histograms,countRelatedHistsByGroupName);}}
-addDurationHistogram(name,'V8-Only',overallV8Time,histograms,durationRelatedHistsByGroupName);addCountHistogram(name,'V8-Only',overallV8Count,histograms,countRelatedHistsByGroupName);}
-const runtimeGroupCollection=new tr.e.v8.RuntimeStatsGroupCollection();runtimeGroupCollection.addSlices(slices);let overallV8Time=runtimeGroupCollection.totalTime;let overallV8Count=runtimeGroupCollection.totalCount;for(const runtimeGroup of runtimeGroupCollection.runtimeGroups){addTotalDurationHistogram(runtimeGroup.name,runtimeGroup.time,histograms,durationRelatedHistsByGroupName);if(runtimeGroup.name==='Blink C++'){overallV8Time-=runtimeGroup.time;}
-addTotalCountHistogram(runtimeGroup.name,runtimeGroup.count,histograms,countRelatedHistsByGroupName);if(runtimeGroup.name==='Blink C++'){overallV8Count-=runtimeGroup.count;}}
-if(runtimeGroupCollection.blinkRCSGroupCollection.totalTime>0){const blinkRCSGroupCollection=runtimeGroupCollection.blinkRCSGroupCollection;for(const group of blinkRCSGroupCollection.runtimeGroups){addTotalDurationHistogram(group.name,group.time,histograms,durationRelatedHistsByGroupName);addTotalCountHistogram(group.name,group.count,histograms,countRelatedHistsByGroupName);}}
-addTotalDurationHistogram('V8-Only',overallV8Time,histograms,durationRelatedHistsByGroupName);addTotalCountHistogram('V8-Only',overallV8Count,histograms,countRelatedHistsByGroupName);}
-function runtimeStatsTotalMetric(histograms,model){const v8ThreadSlices=[...model.getDescendantEvents()].filter(event=>event instanceof tr.e.v8.V8ThreadSlice).sort((e1,e2)=>e1.start-e2.start);const v8SlicesBucketOnUEMap=new Map();for(const expectation of model.userModel.expectations){const slices=expectation.range.filterArray(v8ThreadSlices,event=>event.start);if(slices.length===0)continue;const lastSlice=slices[slices.length-1];if(!expectation.range.intersectsRangeExclusive(lastSlice.range)){slices.pop();}
+function addDurationHistogram(railStageName,runtimeGroupName,sampleValue,histograms,durationNamesByGroupName){const histName=`${railStageName}_${runtimeGroupName}:duration`;histograms.createHistogram(histName,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,convertMicroToMilli_(sampleValue),{binBoundaries:DURATION_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,});let relatedNames=durationNamesByGroupName.get(runtimeGroupName);if(!relatedNames){relatedNames=new tr.v.d.RelatedNameMap();durationNamesByGroupName.set(runtimeGroupName,relatedNames);}
+relatedNames.set(railStageName,histName);}
+function addCountHistogram(railStageName,runtimeGroupName,sampleValue,histograms,countNamesByGroupName){const histName=`${railStageName}_${runtimeGroupName}:count`;histograms.createHistogram(histName,tr.b.Unit.byName.count_smallerIsBetter,sampleValue,{binBoundaries:COUNT_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,});let relatedNames=countNamesByGroupName.get(runtimeGroupName);if(!relatedNames){relatedNames=new tr.v.d.RelatedNameMap();countNamesByGroupName.set(runtimeGroupName,relatedNames);}
+relatedNames.set(railStageName,histName);}
+function addTotalDurationHistogram(histogramName,time,histograms,relatedNames){const value=convertMicroToMilli_(time);const breakdown=new tr.v.d.Breakdown();if(relatedNames){for(const[cat,histName]of relatedNames){breakdown.set(cat,histograms.getHistogramNamed(histName).average);}}
+histograms.createHistogram(`${histogramName}:duration`,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,{value,diagnostics:{'RAIL stages':breakdown}},{binBoundaries:DURATION_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,diagnostics:{'RAIL stages':relatedNames},});}
+function addTotalCountHistogram(histogramName,value,histograms,relatedNames){const breakdown=new tr.v.d.Breakdown();if(relatedNames){for(const[cat,histName]of relatedNames){breakdown.set(cat,histograms.getHistogramNamed(histName).average);}}
+histograms.createHistogram(`${histogramName}:count`,tr.b.Unit.byName.count_smallerIsBetter,{value,diagnostics:{'RAIL stages':breakdown}},{binBoundaries:COUNT_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,diagnostics:{'RAIL stages':relatedNames},});}
+function computeRuntimeStatsBucketOnUE(histograms,slices,v8SlicesBucketOnUEMap){const durationNamesByGroupName=new Map();const countNamesByGroupName=new Map();for(const[name,slicesUE]of v8SlicesBucketOnUEMap){const runtimeGroupCollection=new tr.e.v8.RuntimeStatsGroupCollection();runtimeGroupCollection.addSlices(slicesUE);let overallV8Time=runtimeGroupCollection.totalTime;let overallV8Count=runtimeGroupCollection.totalCount;for(const runtimeGroup of runtimeGroupCollection.runtimeGroups){addDurationHistogram(name,runtimeGroup.name,runtimeGroup.time,histograms,durationNamesByGroupName);if(runtimeGroup.name==='Blink C++'){overallV8Time-=runtimeGroup.time;}
+addCountHistogram(name,runtimeGroup.name,runtimeGroup.count,histograms,countNamesByGroupName);if(runtimeGroup.name==='Blink C++'){overallV8Count-=runtimeGroup.count;}}
+if(runtimeGroupCollection.blinkRCSGroupCollection.totalTime>0){const blinkRCSGroupCollection=runtimeGroupCollection.blinkRCSGroupCollection;for(const group of blinkRCSGroupCollection.runtimeGroups){addDurationHistogram(name,group.name,group.time,histograms,durationNamesByGroupName);addCountHistogram(name,group.name,group.count,histograms,countNamesByGroupName);}}
+addDurationHistogram(name,'V8-Only',overallV8Time,histograms,durationNamesByGroupName);addCountHistogram(name,'V8-Only',overallV8Count,histograms,countNamesByGroupName);}
+const runtimeGroupCollection=new tr.e.v8.RuntimeStatsGroupCollection();runtimeGroupCollection.addSlices(slices);let overallV8Time=runtimeGroupCollection.totalTime;let overallV8Count=runtimeGroupCollection.totalCount;for(const runtimeGroup of runtimeGroupCollection.runtimeGroups){addTotalDurationHistogram(runtimeGroup.name,runtimeGroup.time,histograms,durationNamesByGroupName.get(runtimeGroup.name));if(runtimeGroup.name==='Blink C++'){overallV8Time-=runtimeGroup.time;}
+addTotalCountHistogram(runtimeGroup.name,runtimeGroup.count,histograms,countNamesByGroupName.get(runtimeGroup.name));if(runtimeGroup.name==='Blink C++'){overallV8Count-=runtimeGroup.count;}}
+if(runtimeGroupCollection.blinkRCSGroupCollection.totalTime>0){const blinkRCSGroupCollection=runtimeGroupCollection.blinkRCSGroupCollection;for(const group of blinkRCSGroupCollection.runtimeGroups){addTotalDurationHistogram(group.name,group.time,histograms,durationNamesByGroupName.get(group.name));addTotalCountHistogram(group.name,group.count,histograms,countNamesByGroupName.get(group.name));}}
+addTotalDurationHistogram('V8-Only',overallV8Time,histograms,durationNamesByGroupName.get('V8-Only'));addTotalCountHistogram('V8-Only',overallV8Count,histograms,countNamesByGroupName.get('V8-Only'));}
+function runtimeStatsTotalMetric(histograms,model){const v8ThreadSlices=[...model.getDescendantEvents()].filter(event=>event instanceof tr.e.v8.V8ThreadSlice).sort((e1,e2)=>e1.start-e2.start);const v8SlicesBucketOnUEMap=new Map();for(const expectation of model.userModel.expectations){if(tr.e.chrome.CHROME_INTERNAL_URLS.includes(expectation.url)){continue;}
+const slices=expectation.range.filterArray(v8ThreadSlices,event=>event.start);if(slices.length===0)continue;const lastSlice=slices[slices.length-1];if(!expectation.range.intersectsRangeExclusive(lastSlice.range)){slices.pop();}
if(v8SlicesBucketOnUEMap.get(expectation.stageTitle)===undefined){v8SlicesBucketOnUEMap.set(expectation.stageTitle,slices);}else{const totalSlices=v8SlicesBucketOnUEMap.get(expectation.stageTitle).concat(slices);v8SlicesBucketOnUEMap.set(expectation.stageTitle,totalSlices);}}
computeRuntimeStatsBucketOnUE(histograms,v8ThreadSlices,v8SlicesBucketOnUEMap);}
tr.metrics.MetricRegistry.register(runtimeStatsTotalMetric);tr.metrics.MetricRegistry.register(runtimeStatsMetric);return{runtimeStatsMetric,runtimeStatsTotalMetric,};});'use strict';tr.exportTo('tr.metrics.v8',function(){function v8AndMemoryMetrics(histograms,model){tr.metrics.v8.executionMetric(histograms,model);tr.metrics.v8.gcMetric(histograms,model);tr.metrics.sh.memoryMetric(histograms,model,{rangeOfInterest:tr.metrics.v8.utils.rangeForMemoryDumps(model)});}
-tr.metrics.MetricRegistry.register(v8AndMemoryMetrics);return{v8AndMemoryMetrics,};});'use strict';tr.exportTo('tr.metrics.vr',function(){function createHistograms(histograms,name,options){return{wall:histograms.createHistogram(name+'_wall',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],options),cpu:histograms.createHistogram(name+'_cpu',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],options),};}
-function frameCycleDurationMetric(histograms,model,opt_options){const histogramsByEventTitle=new Map();histogramsByEventTitle.set('VrShellGl::DrawFrame',createHistograms(histograms,'draw_frame',{description:'Duration to render one frame'}));histogramsByEventTitle.set('VrShellGl::AcquireFrame',createHistograms(histograms,'acquire_frame',{description:'Duration acquire a frame from GVR'}));histogramsByEventTitle.set('VrShellGl::UpdateController',createHistograms(histograms,'update_controller',{description:'Duration to query input from the controller'}));histogramsByEventTitle.set('VrShellGl::DrawFrameSubmitWhenReady',createHistograms(histograms,'submit_frame',{description:'Duration to submit a frame to GVR'}));histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateAnimationsAndOpacity',createHistograms(histograms,'update_animations_and_opacity',{description:'Duration to apply animation and opacity changes'}));histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateBindings',createHistograms(histograms,'update_bindings',{description:'Duration to push binding values'}));histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateTexturesAndSizes',createHistograms(histograms,'update_textures_and_sizes',{description:'Duration to redraw textures and update element sizes'}));histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateLayout',createHistograms(histograms,'update_layout',{description:'Duration to reposition elements according to their layout'}));histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateWorldSpaceTransform',createHistograms(histograms,'update_world_space_transforms',{description:'Duration to calculate element transforms in world space'}));const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);let rangeOfInterest=model.bounds;const userExpectationsOfInterest=[tr.model.um.AnimationExpectation];if(opt_options&&opt_options.rangeOfInterest){rangeOfInterest=opt_options.rangeOfInterest;userExpectationsOfInterest.push(tr.model.um.ResponseExpectation);}
+tr.metrics.MetricRegistry.register(v8AndMemoryMetrics);return{v8AndMemoryMetrics,};});'use strict';tr.exportTo('tr.metrics.vr',function(){const VR_GL_THREAD_NAME='VrShellGL';function createHistograms(histograms,name,options,hasCpuTime){const createdHistograms={wall:histograms.createHistogram(name+'_wall',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],options)};if(hasCpuTime){createdHistograms.cpu=histograms.createHistogram(name+'_cpu',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],options);}
+return createdHistograms;}
+function frameCycleDurationMetric(histograms,model,opt_options){const histogramsByEventTitle=new Map();const expectationEvents=tr.importer.VR_EXPECTATION_EVENTS;for(const eventName in expectationEvents){const extraInfo=expectationEvents[eventName];histogramsByEventTitle.set(eventName,createHistograms(histograms,extraInfo.histogramName,{description:extraInfo.description},extraInfo.hasCpuTime));}
+histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateAnimationsAndOpacity',createHistograms(histograms,'update_animations_and_opacity',{description:'Duration to apply animation and opacity changes'},true));histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateBindings',createHistograms(histograms,'update_bindings',{description:'Duration to push binding values'},true));histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateLayout',createHistograms(histograms,'update_layout',{description:'Duration to compute element sizes, layout and textures'},true));histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateWorldSpaceTransform',createHistograms(histograms,'update_world_space_transforms',{description:'Duration to calculate element transforms in world space'},true));histogramsByEventTitle.set('UiRenderer::DrawUiView',createHistograms(histograms,'draw_ui',{description:'Duration to draw the UI'},true));histogramsByEventTitle.set('UiElementRenderer::DrawTexturedQuad',createHistograms(histograms,'draw_textured_quad',{description:'Duration to draw a textured element'},true));histogramsByEventTitle.set('UiElementRenderer::DrawGradientQuad',createHistograms(histograms,'draw_gradient_quad',{description:'Duration to draw a gradient element'},true));histogramsByEventTitle.set('UiElementRenderer::DrawGradientGridQuad',createHistograms(histograms,'draw_gradient_grid_quad',{description:'Duration to draw a gradient grid element'},true));histogramsByEventTitle.set('UiElementRenderer::DrawController',createHistograms(histograms,'draw_controller',{description:'Duration to draw the controller'},true));histogramsByEventTitle.set('UiElementRenderer::DrawLaser',createHistograms(histograms,'draw_laser',{description:'Duration to draw the laser'},true));histogramsByEventTitle.set('UiElementRenderer::DrawReticle',createHistograms(histograms,'draw_reticle',{description:'Duration to draw the reticle'},true));histogramsByEventTitle.set('UiElementRenderer::DrawShadow',createHistograms(histograms,'draw_shadow',{description:'Duration to draw a shadow element'},true));histogramsByEventTitle.set('UiElementRenderer::DrawStars',createHistograms(histograms,'draw_stars',{description:'Duration to draw the stars'},true));histogramsByEventTitle.set('UiElementRenderer::DrawBackground',createHistograms(histograms,'draw_background',{description:'Duration to draw the textured background'},true));histogramsByEventTitle.set('UiElementRenderer::DrawKeyboard',createHistograms(histograms,'draw_keyboard',{description:'Duration to draw the keyboard'},true));const drawUiSubSlicesMap=new Map();const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);let rangeOfInterest=model.bounds;const userExpectationsOfInterest=[tr.model.um.AnimationExpectation];if(opt_options&&opt_options.rangeOfInterest){rangeOfInterest=opt_options.rangeOfInterest;userExpectationsOfInterest.push(tr.model.um.ResponseExpectation);}
for(const ue of model.userModel.expectations){if(ue.initiatorType!==tr.model.um.INITIATOR_TYPE.VR){continue;}
if(!userExpectationsOfInterest.some(function(ueOfInterest){return ue instanceof ueOfInterest;})){continue;}
if(!rangeOfInterest.intersectsExplicitRangeInclusive(ue.start,ue.end)){continue;}
-for(const helper of chromeHelper.browserHelpers){const glThreads=helper.process.findAllThreadsMatching(thread=>!thread.name);for(const glThread of glThreads){for(const event of glThread.getDescendantEvents()){if(!(histogramsByEventTitle.has(event.title))){continue;}
+for(const helper of chromeHelper.browserHelpers){const glThreads=helper.process.findAllThreadsNamed(VR_GL_THREAD_NAME);for(const glThread of glThreads){for(const event of glThread.getDescendantEvents()){if(!(histogramsByEventTitle.has(event.title))){continue;}
if(event.start<ue.start||event.end>ue.end){continue;}
if(event.start<rangeOfInterest.min||event.end>rangeOfInterest.max){continue;}
-const{wall:wallHist,cpu:cpuHist}=histogramsByEventTitle.get(event.title);wallHist.addSample(event.duration);cpuHist.addSample(event.cpuDuration);}}}}}
+if(event.parentSlice&&event.parentSlice.title==='UiRenderer::DrawUiView'){const guid=event.parentSlice.guid;if(!drawUiSubSlicesMap.has(guid)){drawUiSubSlicesMap.set(guid,[]);}
+drawUiSubSlicesMap.get(guid).push(event);continue;}
+const{wall:wallHist,cpu:cpuHist}=histogramsByEventTitle.get(event.title);wallHist.addSample(event.duration);if(cpuHist!==undefined){cpuHist.addSample(event.cpuDuration);}}}}}
+for(const subSlices of drawUiSubSlicesMap.values()){const eventMap=new Map();for(const event of subSlices){if(!eventMap.has(event.title)){eventMap.set(event.title,{wall:0,cpu:0});}
+eventMap.get(event.title).wall+=event.duration;eventMap.get(event.title).cpu+=event.cpuDuration;}
+for(const[title,values]of eventMap.entries()){const{wall:wallHist,cpu:cpuHist}=histogramsByEventTitle.get(title);wallHist.addSample(values.wall);if(cpuHist!==undefined){cpuHist.addSample(values.cpu);}}}}
tr.metrics.MetricRegistry.register(frameCycleDurationMetric,{supportsRangeOfInterest:true,});return{frameCycleDurationMetric,};});'use strict';tr.exportTo('tr.metrics.vr',function(){function webvrMetric(histograms,model,opt_options){const WEBVR_COUNTERS=new Map([['gpu.WebVR FPS',{name:'webvr_fps',unit:tr.b.Unit.byName.count_biggerIsBetter,samples:{},options:{description:'WebVR frame per second',binBoundaries:tr.v.HistogramBinBoundaries.createLinear(20,120,25),},}],['gpu.WebVR frame time (ms)',{name:'webvr_frame_time',unit:tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,samples:{},options:{description:'WebVR frame time in ms',binBoundaries:tr.v.HistogramBinBoundaries.createLinear(20,120,25),},}],['gpu.WebVR pose prediction (ms)',{name:'webvr_pose_prediction',unit:tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,samples:{},options:{description:'WebVR pose prediction in ms',binBoundaries:tr.v.HistogramBinBoundaries.createLinear(20,120,25),},}],]);for(const ue of model.userModel.expectations){const rangeOfInterestEnabled=opt_options&&opt_options.rangeOfInterest;if(rangeOfInterestEnabled&&!opt_options.rangeOfInterest.intersectsExplicitRangeInclusive(ue.start,ue.end)){continue;}
if(ue.initiatorType!==tr.model.um.INITIATOR_TYPE.VR)continue;if(!rangeOfInterestEnabled){if(!(ue instanceof tr.model.um.AnimationExpectation))continue;}else{if(!(ue instanceof tr.model.um.AnimationExpectation||ue instanceof tr.model.um.ResponseExpectation))continue;}
for(const counter of model.getAllCounters()){if(!(WEBVR_COUNTERS.has(counter.id)))continue;for(const series of counter.series){if(!(series.name in WEBVR_COUNTERS.get(counter.id).samples)){WEBVR_COUNTERS.get(counter.id).samples[series.name]=[];}
@@ -8456,7 +9251,18 @@ WEBVR_COUNTERS.get(counter.id).samples[series.name].push(sample.value);}}}}
if(!('value'in WEBVR_COUNTERS.get('gpu.WebVR FPS').samples)){WEBVR_COUNTERS.get('gpu.WebVR FPS').samples.value=[0];}
for(const[key,value]of WEBVR_COUNTERS){for(const[seriesName,samples]of Object.entries(value.samples)){let histogramName=value.name;if(seriesName!=='value'){histogramName=`${histogramName}_${seriesName}`;}
histograms.createHistogram(histogramName,value.unit,samples,value.options);}}}
-tr.metrics.MetricRegistry.register(webvrMetric,{supportsRangeOfInterest:true,});return{webvrMetric,};});'use strict';tr.exportTo('tr.metrics.webrtc',function(){const DISPLAY_HERTZ=60.0;const VSYNC_DURATION_US=1e6/DISPLAY_HERTZ;const SEVERITY=3;const FROZEN_FRAME_VSYNC_COUNT_THRESHOLD=6;const WEB_MEDIA_PLAYER_UPDATE_TITLE='UpdateCurrentFrame';const IDEAL_RENDER_INSTANT_NAME='Ideal Render Instant';const ACTUAL_RENDER_BEGIN_NAME='Actual Render Begin';const ACTUAL_RENDER_END_NAME='Actual Render End';const STREAM_ID_NAME='Serial';const REQUIRED_EVENT_ARGS_NAMES=[IDEAL_RENDER_INSTANT_NAME,ACTUAL_RENDER_BEGIN_NAME,ACTUAL_RENDER_END_NAME,STREAM_ID_NAME];const SUMMARY_OPTIONS=tr.v.Histogram.AVERAGE_ONLY_SUMMARY_OPTIONS;const count_smallerIsBetter=tr.b.Unit.byName.count_smallerIsBetter;const percentage_biggerIsBetter=tr.b.Unit.byName.normalizedPercentage_biggerIsBetter;const percentage_smallerIsBetter=tr.b.Unit.byName.normalizedPercentage_smallerIsBetter;const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const unitlessNumber_biggerIsBetter=tr.b.Unit.byName.unitlessNumber_biggerIsBetter;function isValidEvent(event){if(event.title!==WEB_MEDIA_PLAYER_UPDATE_TITLE||!event.args){return false;}
+tr.metrics.MetricRegistry.register(webvrMetric,{supportsRangeOfInterest:true,});return{webvrMetric,};});'use strict';tr.exportTo('tr.metrics.vr',function(){function webxrMetric(histograms,model,opt_options){const DEFAULT_BIN_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(20,120,25);const counterHistogramsByTitle=new Map();counterHistogramsByTitle.set('gpu.WebXR FPS',histograms.createHistogram('webxr_fps',tr.b.Unit.byName.count_biggerIsBetter,[],{description:'WebXR frames per second',binBoundaries:DEFAULT_BIN_BOUNDARIES,}));const instantHistogramsByTitle=new Map();const expectationEvents=tr.importer.WEBXR_INSTANT_EVENTS;for(const[eventName,eventData]of Object.entries(expectationEvents)){const argsToHistograms={};for(const[argName,argData]of Object.entries(eventData)){argsToHistograms[argName]=histograms.createHistogram(argData.histogramName,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],{description:argData.description,binBoundaries:DEFAULT_BIN_BOUNDARIES,});}
+instantHistogramsByTitle.set(eventName,argsToHistograms);}
+const rangeOfInterestEnabled=opt_options&&opt_options.rangeOfInterest;const rangeOfInterest=(rangeOfInterestEnabled?opt_options.rangeOfInterest:tr.b.math.Range.fromExplicitRange(-Infinity,Infinity));for(const ue of model.userModel.expectations){if(!rangeOfInterest.intersectsExplicitRangeInclusive(ue.start,ue.end)){continue;}
+if(ue.initiatorType!==tr.model.um.INITIATOR_TYPE.VR)continue;if(!rangeOfInterestEnabled){if(!(ue instanceof tr.model.um.AnimationExpectation))continue;}else{if(!(ue instanceof tr.model.um.AnimationExpectation||ue instanceof tr.model.um.ResponseExpectation))continue;}
+for(const counter of model.getAllCounters()){if(!(counterHistogramsByTitle.has(counter.id)))continue;for(const series of counter.series){for(const sample of series.samples){if(sample.timestamp<ue.start||sample.timestamp>=ue.end){continue;}
+if(!rangeOfInterest.intersectsExplicitRangeInclusive(sample.timestamp,sample.timestamp)){continue;}
+counterHistogramsByTitle.get(counter.id).addSample(sample.value);}}}
+for(const event of ue.associatedEvents.asSet()){if(!(instantHistogramsByTitle.has(event.title))){continue;}
+if(!rangeOfInterest.intersectsExplicitRangeInclusive(event.start,event.start)){continue;}
+const eventHistograms=instantHistogramsByTitle.get(event.title);for(const[key,value]of Object.entries(event.args)){if(key in eventHistograms){eventHistograms[key].addSample(value,{event:new tr.v.d.RelatedEventSet(event)});}}}}
+if(counterHistogramsByTitle.get('gpu.WebXR FPS').numValues===0){counterHistogramsByTitle.get('gpu.WebXR FPS').addSample(0);}}
+tr.metrics.MetricRegistry.register(webxrMetric,{supportsRangeOfInterest:true,});return{webxrMetric,};});'use strict';tr.exportTo('tr.metrics.webrtc',function(){const DISPLAY_HERTZ=60.0;const VSYNC_DURATION_US=1e6/DISPLAY_HERTZ;const SEVERITY=3;const FROZEN_FRAME_VSYNC_COUNT_THRESHOLD=6;const WEB_MEDIA_PLAYER_UPDATE_TITLE='UpdateCurrentFrame';const IDEAL_RENDER_INSTANT_NAME='Ideal Render Instant';const ACTUAL_RENDER_BEGIN_NAME='Actual Render Begin';const ACTUAL_RENDER_END_NAME='Actual Render End';const STREAM_ID_NAME='Serial';const REQUIRED_EVENT_ARGS_NAMES=[IDEAL_RENDER_INSTANT_NAME,ACTUAL_RENDER_BEGIN_NAME,ACTUAL_RENDER_END_NAME,STREAM_ID_NAME];const SUMMARY_OPTIONS=tr.v.Histogram.AVERAGE_ONLY_SUMMARY_OPTIONS;const count_smallerIsBetter=tr.b.Unit.byName.count_smallerIsBetter;const percentage_biggerIsBetter=tr.b.Unit.byName.normalizedPercentage_biggerIsBetter;const percentage_smallerIsBetter=tr.b.Unit.byName.normalizedPercentage_smallerIsBetter;const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const unitlessNumber_biggerIsBetter=tr.b.Unit.byName.unitlessNumber_biggerIsBetter;function isValidEvent(event){if(event.title!==WEB_MEDIA_PLAYER_UPDATE_TITLE||!event.args){return false;}
for(const parameter of REQUIRED_EVENT_ARGS_NAMES){if(!(parameter in event.args)){return false;}}
return true;}
function webrtcRenderingMetric(histograms,model){const modelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);let webMediaPlayerMSEvents=[];for(const rendererPid in modelHelper.rendererHelpers){const rendererHelper=modelHelper.rendererHelpers[rendererPid];const compositorThread=rendererHelper.compositorThread;if(compositorThread!==undefined){webMediaPlayerMSEvents=webMediaPlayerMSEvents.concat(compositorThread.sliceGroup.slices.filter(isValidEvent));}}
@@ -8704,7 +9510,8 @@ if(totalledArgs[argName]===undefined){totalledArgs[argName]=0;}
totalledArgs[argName]+=argVal;}}
this.untotallableArgs_=Object.keys(untotallableArgs);this.totalledArgs_=totalledArgs;}};return{MultiEventSummary,};});'use strict';Polymer({is:'tr-ui-a-multi-event-summary-table',ready(){this.showTotals_=false;this.eventsHaveDuration_=true;this.eventsHaveSubRows_=true;this.eventsByTitle_=undefined;},updateTableColumns_(rows,maxValues){let hasCpuData=false;let hasAlerts=false;rows.forEach(function(row){if(row.cpuDuration!==undefined){hasCpuData=true;}
if(row.cpuSelfTime!==undefined){hasCpuData=true;}
-if(row.numAlerts){hasAlerts=true;}});const ownerDocument=this.ownerDocument;const columns=[];columns.push({title:'Name',value(row){if(row.title==='Totals')return'Totals';const linkEl=document.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(function(){return new tr.model.EventSet(row.events);},row.title);return linkEl;},width:'350px',cmp(rowA,rowB){return rowA.title.localeCompare(rowB.title);}});if(this.eventsHaveDuration_){columns.push({title:'Wall Duration',value(row){return tr.v.ui.createScalarSpan(row.duration,{unit:tr.b.Unit.byName.timeDurationInMs,customContextRange:row.totalsRow?undefined:tr.b.math.Range.fromExplicitRange(0,maxValues.duration),ownerDocument,});},width:'<upated further down>',cmp(rowA,rowB){return rowA.duration-rowB.duration;}});}
+if(row.numAlerts){hasAlerts=true;}});const ownerDocument=this.ownerDocument;const columns=[];columns.push({title:'Name',value(row){if(row.title==='Totals')return'Totals';const container=document.createElement('div');const linkEl=document.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(function(){return new tr.model.EventSet(row.events);},row.title);container.appendChild(linkEl);if(tr.isExported('tr-ui-e-chrome-codesearch')){const link=document.createElement('tr-ui-e-chrome-codesearch');link.searchPhrase=row.title;container.appendChild(link);}
+return container;},width:'350px',cmp(rowA,rowB){return rowA.title.localeCompare(rowB.title);}});if(this.eventsHaveDuration_){columns.push({title:'Wall Duration',value(row){return tr.v.ui.createScalarSpan(row.duration,{unit:tr.b.Unit.byName.timeDurationInMs,customContextRange:row.totalsRow?undefined:tr.b.math.Range.fromExplicitRange(0,maxValues.duration),ownerDocument,});},width:'<upated further down>',cmp(rowA,rowB){return rowA.duration-rowB.duration;}});}
if(this.eventsHaveDuration_&&hasCpuData){columns.push({title:'CPU Duration',value(row){return tr.v.ui.createScalarSpan(row.cpuDuration,{unit:tr.b.Unit.byName.timeDurationInMs,customContextRange:row.totalsRow?undefined:tr.b.math.Range.fromExplicitRange(0,maxValues.cpuDuration),ownerDocument,});},width:'<upated further down>',cmp(rowA,rowB){return rowA.cpuDuration-rowB.cpuDuration;}});}
if(this.eventsHaveSubRows_&&this.eventsHaveDuration_){columns.push({title:'Self time',value(row){return tr.v.ui.createScalarSpan(row.selfTime,{unit:tr.b.Unit.byName.timeDurationInMs,customContextRange:row.totalsRow?undefined:tr.b.math.Range.fromExplicitRange(0,maxValues.selfTime),ownerDocument,});},width:'<upated further down>',cmp(rowA,rowB){return rowA.selfTime-rowB.selfTime;}});}
if(this.eventsHaveSubRows_&&this.eventsHaveDuration_&&hasCpuData){columns.push({title:'CPU Self Time',value(row){return tr.v.ui.createScalarSpan(row.cpuSelfTime,{unit:tr.b.Unit.byName.timeDurationInMs,customContextRange:row.totalsRow?undefined:tr.b.math.Range.fromExplicitRange(0,maxValues.cpuSelfTime),ownerDocument,});},width:'<upated further down>',cmp(rowA,rowB){return rowA.cpuSelfTime-rowB.cpuSelfTime;}});}
@@ -8737,14 +9544,21 @@ this.graphWidth);}
this.margin.right=Math.max(this.margin.right,xAxisTickOverhangPx);},getXForDatum_(datum,index){return index;},get xAxisTickOffset(){return 0.5;},updateXAxis_(xAxis){xAxis.selectAll('*').remove();if(this.hideXAxis)return;const nameTexts=xAxis.selectAll('text').data(this.data_);nameTexts.enter().append('text').attr('transform',(d,index)=>'translate(0, '+
this.textHeightPx_*(this.data_.length-index)+')').attr('x',(d,index)=>this.xScale_(index)).attr('y',d=>this.graphHeight).text(d=>d.x);nameTexts.exit().remove();const guideLines=xAxis.selectAll('line.guide').data(this.data_);guideLines.enter().append('line').attr('x1',(d,index)=>this.xScale_(index+this.xAxisTickOffset)).attr('x2',(d,index)=>this.xScale_(index+this.xAxisTickOffset)).attr('y1',()=>this.graphHeight).attr('y2',(d,index)=>this.graphHeight+Math.max(MIN_GUIDELINE_HEIGHT_PX,(this.textHeightPx_*(this.data_.length-index-1))));}};return{NameColumnChart,};});'use strict';tr.exportTo('tr.ui.b',function(){const LineChart=tr.ui.b.LineChart;const NameLineChart=tr.ui.b.define('name-line-chart',LineChart);NameLineChart.prototype={__proto__:LineChart.prototype,getXForDatum_(datum,index){return index;},get xAxisHeight(){return 5+(this.textHeightPx_*this.data_.length);},get xAxisTickOffset(){return 0;},updateMargins_(){tr.ui.b.NameColumnChart.prototype.updateMargins_.call(this);},updateXAxis_(xAxis){xAxis.selectAll('*').remove();if(this.hideXAxis)return;tr.ui.b.NameColumnChart.prototype.updateXAxis_.call(this,xAxis);const baseline=xAxis.selectAll('path').data([this]);baseline.enter().append('line').attr('stroke','black').attr('x1',this.xScale_(0)).attr('x2',this.xScale_(this.data_.length-1)).attr('y1',this.graphHeight).attr('y2',this.graphHeight);baseline.exit().remove();}};return{NameLineChart,};});'use strict';tr.exportTo('tr.ui.b',function(){const BoxChart=tr.ui.b.define('box-chart',tr.ui.b.NameLineChart);BoxChart.prototype={__proto__:tr.ui.b.NameLineChart.prototype,get hideLegend(){return true;},updateDataRange_(){if(this.overrideDataRange_!==undefined){return;}
this.autoDataRange_.reset();for(const datum of this.data_){this.autoDataRange_.addValue(datum.percentile_0);this.autoDataRange_.addValue(datum.percentile_100);}},updateScales_(){super.updateScales_();this.xScale_.domain([0,this.data_.length]);},get xAxisTickOffset(){return 0.5;},updateDataRange_(){if(this.overrideDataRange_!==undefined)return;this.autoDataRange_.reset();for(const datum of this.data_){this.autoDataRange_.addValue(datum.percentile_0);this.autoDataRange_.addValue(datum.percentile_100);}},updateXAxis_(xAxis){xAxis.selectAll('*').remove();if(this.hideXAxis)return;tr.ui.b.NameColumnChart.prototype.updateXAxis_.call(this,xAxis);const baseline=xAxis.selectAll('path').data([this]);baseline.enter().append('line').attr('stroke','black').attr('x1',this.xScale_(0)).attr('x2',this.xScale_(this.data_.length)).attr('y1',this.graphHeight).attr('y2',this.graphHeight);baseline.exit().remove();},updateDataContents_(dataSel){dataSel.selectAll('*').remove();const boxesSel=dataSel.selectAll('path');for(let index=0;index<this.data_.length;++index){const datum=this.data_[index];const color=datum.color||'black';let sel=boxesSel.data([datum]);sel.enter().append('rect').attr('fill',color).attr('x',this.xScale_(index+0.2)).attr('width',this.xScale_(index+0.8)-this.xScale_(index+0.2)).attr('y',this.yScale_(datum.percentile_75)).attr('height',this.yScale_(datum.percentile_25)-
-this.yScale_(datum.percentile_75));sel.exit().remove();sel=boxesSel.data([datum]);sel.enter().append('line').attr('stroke',color).attr('x1',this.xScale_(index)).attr('x2',this.xScale_(index+1)).attr('y1',this.yScale_(datum.percentile_50)).attr('y2',this.yScale_(datum.percentile_50));sel.exit().remove();sel=boxesSel.data([datum]);sel.enter().append('line').attr('stroke',color).attr('x1',this.xScale_(index+0.4)).attr('x2',this.xScale_(index+0.6)).attr('y1',this.yScale_(datum.percentile_0)).attr('y2',this.yScale_(datum.percentile_0));sel.exit().remove();sel=boxesSel.data([datum]);sel.enter().append('line').attr('stroke',color).attr('x1',this.xScale_(index+0.4)).attr('x2',this.xScale_(index+0.6)).attr('y1',this.yScale_(datum.percentile_100)).attr('y2',this.yScale_(datum.percentile_100));sel.exit().remove();sel=boxesSel.data([datum]);sel.enter().append('line').attr('stroke',color).attr('x1',this.xScale_(index+0.5)).attr('x2',this.xScale_(index+0.5)).attr('y1',this.yScale_(datum.percentile_100)).attr('y2',this.yScale_(datum.percentile_0));sel.exit().remove();}}};return{BoxChart,};});'use strict';tr.exportTo('tr.ui.b',function(){const BarChart=tr.ui.b.define('bar-chart',tr.ui.b.ColumnChart);BarChart.prototype={__proto__:tr.ui.b.ColumnChart.prototype,decorate(){super.decorate();this.verticalScale_=undefined;this.horizontalScale_=undefined;},updateScales_(){super.updateScales_();this.yScale_.range([this.graphWidth,0]);this.xScale_.range([0,this.graphHeight]);this.verticalScale_=this.isYLogScale_?d3.scale.log(10):d3.scale.linear();this.verticalScale_.domain(this.xScale_.domain());this.verticalScale_.range([this.graphHeight,0]);this.horizontalScale_=d3.scale.linear();this.horizontalScale_.domain(this.yScale_.domain());this.horizontalScale_.range([0,this.graphWidth]);},get defaultGraphHeight(){return Math.max(20,10*this.data_.length);},get defaultGraphWidth(){return 100;},get barHeight(){return this.graphHeight/this.data.length;},drawBrush_(brushRectsSel){brushRectsSel.attr('x',0).attr('width',this.graphWidth).attr('y',d=>this.verticalScale_(d.max)).attr('height',d=>this.verticalScale_(d.min)-this.verticalScale_(d.max)).attr('fill','rgb(213, 236, 229)');},getDataPointAtChartPoint_(chartPoint){const flippedPoint={x:this.graphHeight-chartPoint.y,y:this.graphWidth-chartPoint.x};return super.getDataPointAtChartPoint_(flippedPoint);},drawXAxis_(xAxis){xAxis.attr('transform','translate(0,'+this.graphHeight+')').call(d3.svg.axis().scale(this.horizontalScale_).orient('bottom'));},get yAxisWidth(){return this.computeScaleTickWidth_(this.verticalScale_);},drawYAxis_(yAxis){const axisModifier=d3.svg.axis().scale(this.verticalScale_).orient('left');yAxis.call(axisModifier);},drawHoverValueBox_(rect){const rectHoverEvent=new tr.b.Event('rect-mouseenter');rectHoverEvent.rect=rect;this.dispatchEvent(rectHoverEvent);if(!this.enableHoverBox)return;const seriesKeys=[...this.seriesByKey_.keys()];const chartAreaSel=d3.select(this.chartAreaElement);chartAreaSel.selectAll('.hover').remove();let keyWidthPx=0;let keyHeightPx=0;let xWidthPx=0;let xHeightPx=0;if(seriesKeys.length>1){keyWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,rect.key).width;keyHeightPx=this.textHeightPx_;}
-if(this.data.length>1){xWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,''+rect.datum.x).width;xHeightPx=this.textHeightPx_;}
-const valueWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,rect.value).width;const valueHeightPx=this.textHeightPx_;const hoverWidthPx=Math.min(Math.max(keyWidthPx,xWidthPx,valueWidthPx)+5,Math.max(50,rect.widthPx));const hoverTopPx=rect.topPx+(rect.heightPx/2);const hoverLeftPx=rect.leftPx+rect.widthPx-hoverWidthPx;chartAreaSel.append('rect').attr('class','hover').attr('fill','white').attr('x',hoverLeftPx).attr('y',hoverTopPx).attr('width',hoverWidthPx).attr('height',keyHeightPx+xHeightPx+valueHeightPx);if(seriesKeys.length>1){chartAreaSel.append('text').attr('class','hover').attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx-3).text(rect.key);}
-if(this.data.length>1){chartAreaSel.append('text').attr('class','hover').attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx+valueHeightPx-3).text(''+rect.datum.x);}
-chartAreaSel.append('text').attr('class','hover').attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+xHeightPx+keyHeightPx+valueHeightPx-3).text(rect.value);},flipRect_(rect){return{datum:rect.datum,index:rect.index,key:rect.key,value:rect.value,color:rect.color,topPx:this.graphHeight-rect.leftPx-rect.widthPx,leftPx:this.graphWidth-rect.topPx-rect.heightPx,widthPx:rect.heightPx,heightPx:rect.widthPx,underflow:rect.underflow,overflow:rect.overflow,};},drawRect_(rect,sel){super.drawRect_(this.flipRect_(rect),sel);},drawUnderflow_(rect,rectsSel){let sel=rectsSel.data([rect]);sel.enter().append('text').text('*').attr('fill',rect.color).attr('x',0).attr('y',this.graphHeight-rect.leftPx+
+this.yScale_(datum.percentile_75));sel.exit().remove();sel=boxesSel.data([datum]);sel.enter().append('line').attr('stroke',color).attr('x1',this.xScale_(index)).attr('x2',this.xScale_(index+1)).attr('y1',this.yScale_(datum.percentile_50)).attr('y2',this.yScale_(datum.percentile_50));sel.exit().remove();sel=boxesSel.data([datum]);sel.enter().append('line').attr('stroke',color).attr('x1',this.xScale_(index+0.4)).attr('x2',this.xScale_(index+0.6)).attr('y1',this.yScale_(datum.percentile_0)).attr('y2',this.yScale_(datum.percentile_0));sel.exit().remove();sel=boxesSel.data([datum]);sel.enter().append('line').attr('stroke',color).attr('x1',this.xScale_(index+0.4)).attr('x2',this.xScale_(index+0.6)).attr('y1',this.yScale_(datum.percentile_100)).attr('y2',this.yScale_(datum.percentile_100));sel.exit().remove();sel=boxesSel.data([datum]);sel.enter().append('line').attr('stroke',color).attr('x1',this.xScale_(index+0.5)).attr('x2',this.xScale_(index+0.5)).attr('y1',this.yScale_(datum.percentile_100)).attr('y2',this.yScale_(datum.percentile_0));sel.exit().remove();}}};return{BoxChart,};});'use strict';tr.exportTo('tr.ui.b',function(){const BarChart=tr.ui.b.define('bar-chart',tr.ui.b.ColumnChart);BarChart.prototype={__proto__:tr.ui.b.ColumnChart.prototype,decorate(){super.decorate();this.verticalScale_=undefined;this.horizontalScale_=undefined;this.isWaterfall_=false;},updateScales_(){super.updateScales_();this.yScale_.range([this.graphWidth,0]);this.xScale_.range([0,this.graphHeight]);this.verticalScale_=this.isYLogScale_?d3.scale.log(10):d3.scale.linear();this.verticalScale_.domain(this.xScale_.domain());this.verticalScale_.range([this.graphHeight,0]);this.horizontalScale_=d3.scale.linear();this.horizontalScale_.domain(this.yScale_.domain());this.horizontalScale_.range([0,this.graphWidth]);},set isWaterfall(waterfall){this.isWaterfall_=waterfall;if(waterfall){this.getDataSeries('hide').color='transparent';}
+this.updateContents_();},get isWaterfall(){return this.isWaterfall_;},get defaultGraphHeight(){return Math.max(20,10*this.data_.length);},get defaultGraphWidth(){return 100;},get barHeight(){return this.graphHeight/this.data.length;},drawBrush_(brushRectsSel){brushRectsSel.attr('x',0).attr('width',this.graphWidth).attr('y',d=>this.verticalScale_(d.max)).attr('height',d=>this.verticalScale_(d.min)-this.verticalScale_(d.max)).attr('fill','rgb(213, 236, 229)');},getDataPointAtChartPoint_(chartPoint){const flippedPoint={x:this.graphHeight-chartPoint.y,y:this.graphWidth-chartPoint.x};return super.getDataPointAtChartPoint_(flippedPoint);},drawXAxis_(xAxis){xAxis.attr('transform','translate(0,'+this.graphHeight+')').call(d3.svg.axis().scale(this.horizontalScale_).orient('bottom'));},get yAxisWidth(){return this.computeScaleTickWidth_(this.verticalScale_);},drawYAxis_(yAxis){const axisModifier=d3.svg.axis().scale(this.verticalScale_).orient('left');yAxis.call(axisModifier);},drawHoverValueBox_(rect){const rectHoverEvent=new tr.b.Event('rect-mouseenter');rectHoverEvent.rect=rect;this.dispatchEvent(rectHoverEvent);if(!this.enableHoverBox||(this.isWaterfall_&&rect.key==='hide')){return;}
+const seriesKeys=[...this.seriesByKey_.keys()];const chartAreaSel=d3.select(this.chartAreaElement);chartAreaSel.selectAll('.hover').remove();let keyWidthPx=0;let keyHeightPx=0;let xWidthPx=0;let xHeightPx=0;let groupWidthPx=0;let groupHeightPx=0;if(seriesKeys.length>1&&!this.isGrouped&&!this.isWaterfall_){keyWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,rect.key).width;keyHeightPx=this.textHeightPx_;}
+if(this.data.length>1&&!this.isWaterfall_){xWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,''+rect.datum.x).width;xHeightPx=this.textHeightPx_;}
+if(this.isGrouped&&rect.datum.group!==undefined){groupWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,rect.datum.group).width;groupHeightPx=this.textHeightPx_;}
+const valueWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,rect.value).width;const valueHeightPx=this.textHeightPx_;const maxWidthPx=Math.max(keyWidthPx,xWidthPx,groupWidthPx,valueWidthPx)+5;const hoverWidthPx=this.isGrouped?maxWidthPx:Math.min(maxWidthPx,Math.max(50,rect.widthPx));let hoverTopPx=rect.topPx;hoverTopPx=Math.min(hoverTopPx,this.getBoundingClientRect().height-
+valueHeightPx);let hoverLeftPx=rect.leftPx+(rect.widthPx/2);hoverLeftPx=Math.max(hoverLeftPx-hoverWidthPx,-this.margin.left);chartAreaSel.append('rect').attr('class','hover').attr('fill','white').attr('x',hoverLeftPx).attr('y',hoverTopPx).attr('width',hoverWidthPx).attr('height',keyHeightPx+xHeightPx+
+valueHeightPx+groupHeightPx);if(seriesKeys.length>1&&!this.isGrouped&&!this.isWaterfall_){chartAreaSel.append('text').attr('class','hover').attr('fill',rect.color==='transparent'?'#000000':rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx-3).text(rect.key);}
+if(this.data.length>1&&!this.isWaterfall_){chartAreaSel.append('text').attr('class','hover').attr('fill',rect.color==='transparent'?'#000000':rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx+valueHeightPx-3).text(''+rect.datum.x);}
+if(this.isGrouped&&rect.datum.group!==undefined){chartAreaSel.append('text').on('mouseleave',()=>this.clearHoverValueBox_(rect)).attr('class','hover').attr('fill',rect.color==='transparent'?'#000000':rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx+xHeightPx+groupHeightPx-3).text(rect.datum.group);}
+chartAreaSel.append('text').attr('class','hover').attr('fill',rect.color==='transparent'?'#000000':rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+xHeightPx+keyHeightPx+
+groupHeightPx+valueHeightPx-3).text(rect.value);},flipRect_(rect){return{datum:rect.datum,index:rect.index,key:rect.key,value:rect.value,color:rect.color,topPx:this.graphHeight-rect.leftPx-rect.widthPx,leftPx:this.graphWidth-rect.topPx-rect.heightPx,widthPx:rect.heightPx,heightPx:rect.widthPx,underflow:rect.underflow,overflow:rect.overflow,};},drawRect_(rect,sel){super.drawRect_(this.flipRect_(rect),sel);},drawUnderflow_(rect,rectsSel){let sel=rectsSel.data([rect]);sel.enter().append('text').text('*').attr('fill',rect.color).attr('x',0).attr('y',this.graphHeight-rect.leftPx+
3+(rect.widthPx/2));sel.exit().remove();sel=rectsSel.data([rect]);sel.enter().append('rect').attr('fill','rgba(0, 0, 0, 0)').attr('x',0).attr('y',this.graphHeight-rect.leftPx-rect.widthPx).attr('width',10).attr('height',rect.widthPx).on('mouseenter',()=>this.drawHoverValueBox_(this.flipRect_(rect))).on('mouseleave',()=>this.clearHoverValueBox_(rect));sel.exit().remove();},drawOverflow_(rect,sel){sel=sel.data([rect]);sel.enter().append('text').text('*').attr('fill',rect.color).attr('x',this.graphWidth).attr('y',this.graphHeight-rect.leftPx+
3+(rect.widthPx/2));sel.exit().remove();}};return{BarChart,};});'use strict';tr.exportTo('tr.ui.b',function(){const NameBarChart=tr.ui.b.define('name-bar-chart',tr.ui.b.BarChart);const Y_AXIS_PADDING=2;NameBarChart.prototype={__proto__:tr.ui.b.BarChart.prototype,getDataPointAtChartPoint_(chartPoint){return{x:tr.ui.b.BarChart.prototype.getDataPointAtChartPoint_.call(this,chartPoint).x,y:parseInt(Math.floor((this.graphHeight-chartPoint.y)/this.barHeight))};},getXForDatum_(datum,index){return index;},get yAxisWidth(){if(this.data.length===0)return 0;return Y_AXIS_PADDING+tr.b.math.Statistics.max(this.data_,d=>tr.ui.b.getSVGTextSize(this,d.x).width);},get defaultGraphHeight(){return(3+this.textHeightPx_)*this.data.length;},updateYAxis_(yAxis){if(tr.ui.b.getSVGTextSize(this,'test').width===0){tr.b.requestAnimationFrame(()=>this.updateYAxis_(yAxis));return;}
-yAxis.selectAll('*').remove();const nameTexts=yAxis.selectAll('text').data(this.data_);nameTexts.enter().append('text').attr('x',d=>-(tr.ui.b.getSVGTextSize(this,d.x).width+Y_AXIS_PADDING)).attr('y',(d,index)=>this.verticalScale_(index)).text(d=>d.x);nameTexts.exit().remove();let previousTop=undefined;for(const text of nameTexts[0]){const bbox=text.getBBox();if((previousTop===undefined)||(previousTop>(bbox.y+bbox.height))){previousTop=bbox.y;}else{text.style.opacity=0;}}}};return{NameBarChart,};});'use strict';tr.exportTo('tr.v.ui',function(){const DIAGNOSTIC_SPAN_BEHAVIOR={created(){this.diagnostic_=undefined;this.name_=undefined;this.histogram_=undefined;},attached(){if(this.diagnostic_)this.updateContents_();},get diagnostic(){return this.diagnostic_;},build(diagnostic,name,histogram){this.diagnostic_=diagnostic;this.name_=name;this.histogram_=histogram;if(this.isAttached)this.updateContents_();},updateContents_(){throw new Error('dom-modules must override updateContents_()');}};return{DIAGNOSTIC_SPAN_BEHAVIOR,};});'use strict';tr.exportTo('tr.v.ui',function(){const DEFAULT_COLOR_SCHEME=new tr.b.SinebowColorGenerator();function getHistogramName(histogram,diagnosticName,key){if(histogram===undefined)return undefined;const nameMap=histogram.diagnostics.get(diagnosticName);if(nameMap===undefined)return undefined;return nameMap.get(key);}
+yAxis.selectAll('*').remove();if(this.hideYAxis)return;const nameTexts=yAxis.selectAll('text').data(this.data_);nameTexts.enter().append('text').attr('x',d=>-(tr.ui.b.getSVGTextSize(this,d.x).width+Y_AXIS_PADDING)).attr('y',(d,index)=>this.verticalScale_(index)).text(d=>d.x);nameTexts.exit().remove();let previousTop=undefined;for(const text of nameTexts[0]){const bbox=text.getBBox();if((previousTop===undefined)||(previousTop>(bbox.y+bbox.height))){previousTop=bbox.y;}else{text.style.opacity=0;}}}};return{NameBarChart,};});'use strict';tr.exportTo('tr.v.ui',function(){const DIAGNOSTIC_SPAN_BEHAVIOR={created(){this.diagnostic_=undefined;this.name_=undefined;this.histogram_=undefined;},attached(){if(this.diagnostic_)this.updateContents_();},get diagnostic(){return this.diagnostic_;},build(diagnostic,name,histogram){this.diagnostic_=diagnostic;this.name_=name;this.histogram_=histogram;if(this.isAttached)this.updateContents_();},updateContents_(){throw new Error('dom-modules must override updateContents_()');}};return{DIAGNOSTIC_SPAN_BEHAVIOR,};});'use strict';tr.exportTo('tr.v.ui',function(){const DEFAULT_COLOR_SCHEME=new tr.b.SinebowColorGenerator();function getHistogramName(histogram,diagnosticName,key){if(histogram===undefined)return undefined;const nameMap=histogram.diagnostics.get(diagnosticName);if(nameMap===undefined)return undefined;return nameMap.get(key);}
class BreakdownTableSummaryRow{constructor(displayElement,histogramNames){this.displayElement_=displayElement;this.histogramNames_=histogramNames;this.keySpan_=undefined;}
get numberValue(){return undefined;}
get keySpan(){if(this.keySpan_===undefined){if(this.histogramNames_.length){this.keySpan_=document.createElement('tr-ui-a-analysis-link');this.keySpan_.setSelectionAndContent(this.histogramNames_,'Select All');}else{this.keySpan_='Sum';}}
@@ -8771,9 +9585,8 @@ if(other.numberValue===undefined){return-1;}
if(this.numberValue===other.numberValue){return this.name.localeCompare(other.name);}
return other.numberValue-this.numberValue;}}
Polymer({is:'tr-v-ui-breakdown-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],created(){this.chart_=new tr.ui.b.ColumnChart();this.chart_.graphHeight=130;this.chart_.isStacked=true;this.chart_.hideXAxis=true;this.chart_.hideLegend=true;this.chart_.enableHoverBox=false;this.chart_.addEventListener('rect-mouseenter',event=>this.onRectMouseEnter_(event));this.chart_.addEventListener('rect-mouseleave',event=>this.onRectMouseLeave_(event));},onRectMouseEnter_(event){for(const row of this.$.table.tableRows){if(row.name===event.rect.key){row.displayElement.style.background=event.rect.color;row.keySpan.scrollIntoViewIfNeeded();}else{row.displayElement.style.background='';}}},onRectMouseLeave_(event){for(const row of this.$.table.tableRows){row.displayElement.style.background='';}},ready(){Polymer.dom(this.$.container).appendChild(this.chart_);this.$.table.zebra=true;this.$.table.showHeader=false;this.$.table.tableColumns=[{value:row=>row.keySpan,},{value:row=>row.displayElement,align:tr.ui.b.TableFormat.ColumnAlignment.RIGHT,},{value:row=>row.stringPercent,align:tr.ui.b.TableFormat.ColumnAlignment.RIGHT,},];},updateContents_(){this.$.container.style.display='none';this.$.table.style.display='none';this.$.empty.style.display='block';if(!this.diagnostic_){this.chart_.data=[];return;}
-if(this.histogram_)this.chart_.unit=this.histogram_.unit;let colorScheme=undefined;if(this.diagnostic.colorScheme===tr.v.d.COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER){colorScheme=(name)=>{let cat=name.split(' ');cat=cat[cat.length-1];return tr.e.chrome.ChromeUserFriendlyCategoryDriver.getColor(cat);};}else if(this.diagnostic.colorScheme!==undefined){colorScheme=(name)=>tr.b.FixedColorSchemeRegistry.lookUp(this.diagnostic.colorScheme).getColor(name);}else{colorScheme=(name)=>DEFAULT_COLOR_SCHEME.colorForKey(name);}
-const tableRows=[];let tableSum=0;const histogramNames=[];for(const[key,value]of this.diagnostic){let histogramName;let row;if(value instanceof tr.v.Histogram){histogramName=value.name;row=new BreakdownTableRow(key,value.sum,histogramName,value.unit,colorScheme(key));}else{histogramName=getHistogramName(this.histogram_,this.name_,key);row=new BreakdownTableRow(key,value,histogramName,this.chart_.unit,colorScheme(key));}
-tableRows.push(row);if(row.numberValue!==undefined)tableSum+=row.numberValue;if(histogramName){histogramNames.push(histogramName);}}
+if(this.histogram_)this.chart_.unit=this.histogram_.unit;let colorScheme=undefined;if(this.diagnostic.colorScheme===tr.v.d.COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER){colorScheme=(name)=>{let cat=name.split(' ');cat=cat[cat.length-1];return tr.e.chrome.ChromeUserFriendlyCategoryDriver.getColor(cat);};}else if(this.diagnostic.colorScheme){colorScheme=(name)=>tr.b.FixedColorSchemeRegistry.lookUp(this.diagnostic.colorScheme).getColor(name);}else{colorScheme=(name)=>DEFAULT_COLOR_SCHEME.colorForKey(name);}
+const tableRows=[];let tableSum=0;const histogramNames=[];for(const[key,value]of this.diagnostic){const histogramName=getHistogramName(this.histogram_,this.name_,key);const row=new BreakdownTableRow(key,value,histogramName,this.chart_.unit,colorScheme(key));tableRows.push(row);if(row.numberValue!==undefined)tableSum+=row.numberValue;if(histogramName){histogramNames.push(histogramName);}}
tableRows.sort((x,y)=>x.compare(y));if(tableSum>0){let summaryDisplayElement=tableSum;if(this.chart_.unit!==undefined){summaryDisplayElement=this.chart_.unit.format(tableSum);}
summaryDisplayElement=tr.ui.b.createSpan({textContent:summaryDisplayElement,});tableRows.unshift(new BreakdownTableSummaryRow(summaryDisplayElement,histogramNames));}
const chartData={x:0};for(const row of tableRows){if(row.numberValue===undefined)continue;row.tableSum=tableSum;chartData[row.name]=row.numberValue;const dataSeries=this.chart_.getDataSeries(row.name);dataSeries.color=row.color;dataSeries.highlightedColor=row.highlightedColor;}
@@ -8781,18 +9594,15 @@ if(tableRows.length>0){this.$.table.style.display='block';this.$.empty.style.dis
if(Object.keys(chartData).length>1){this.$.container.style.display='block';this.$.empty.style.display='none';this.chart_.data=[chartData];}}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-collected-related-event-set-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){Polymer.dom(this).textContent='';for(const[canonicalUrl,events]of this.diagnostic){const link=document.createElement('a');if(events.length===1){const event=tr.b.getOnlyElement(events);link.textContent=event.title+' '+
tr.b.Unit.byName.timeDurationInMs.format(event.duration);}else{link.textContent=events.length+' events';}
link.href=canonicalUrl;Polymer.dom(this).appendChild(link);Polymer.dom(this).appendChild(document.createElement('br'));}}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-date-range-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){if(this.diagnostic===undefined){Polymer.dom(this).textContent='';return;}
-Polymer.dom(this).textContent=this.diagnostic.toString();}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-generic-set-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){this.$.generic.style.display='none';this.$.links.textContent='';if(this.diagnostic===undefined)return;const values=Array.from(this.diagnostic);let areAllStrings=true;let areAllNumbers=true;for(const value of values){if(typeof value!=='number'){areAllNumbers=false;if(typeof value!=='string'){areAllStrings=false;break;}}}
+Polymer.dom(this).textContent=this.diagnostic.toString();}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){function isLinkTuple(value){return((value instanceof Array)&&(value.length===2)&&(typeof value[0]==='string')&&tr.b.isUrl(value[1]));}
+Polymer({is:'tr-v-ui-generic-set-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){this.$.generic.style.display='none';this.$.links.textContent='';if(this.diagnostic===undefined)return;const values=Array.from(this.diagnostic);let areAllStrings=true;let areAllNumbers=true;for(const value of values){if(typeof value!=='number'){areAllNumbers=false;if(typeof value!=='string'&&!isLinkTuple(value)){areAllStrings=false;break;}}}
if(!areAllStrings){this.$.generic.style.display='';this.$.generic.object=values;return;}
if(areAllNumbers){values.sort((x,y)=>x-y);}else{values.sort();}
-for(const value of values){const link={textContent:''+value};if(tr.b.isUrl(value))link.href=value;if(this.name_===tr.v.d.RESERVED_NAMES.TRACE_URLS){link.textContent=value.substr(1+value.lastIndexOf('/'));}
+for(const value of values){const link={textContent:''+value};if(isLinkTuple(value)){link.textContent=value[0];link.href=value[1];}else if(tr.b.isUrl(value)){link.href=value;}
+if(this.name_===tr.v.d.RESERVED_NAMES.TRACE_URLS){link.textContent=value.substr(1+value.lastIndexOf('/'));}
const linkEl=tr.ui.b.createLink(link);if(link.href){linkEl.target='_blank';linkEl.addEventListener('click',e=>e.stopPropagation());}
this.$.links.appendChild(linkEl);}}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-related-event-set-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){Polymer.dom(this).textContent='';const events=new tr.model.EventSet([...this.diagnostic]);const link=document.createElement('tr-ui-a-analysis-link');let label=events.length+' events';if(events.length===1){const event=tr.b.getOnlyElement(events);label=event.title+' ';label+=tr.b.Unit.byName.timeDurationInMs.format(event.duration);}
-link.setSelectionAndContent(events,label);Polymer.dom(this).appendChild(link);}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-related-histogram-map-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],ready(){this.$.table.showHeader=false;this.$.table.tableColumns=[{value:row=>row[0]},{value:row=>row[1]},];},updateContents_(){Polymer.dom(this).textContent='';const rows=[];const histogramNames=new Set();for(const[name,hist]of this.diagnostic){histogramNames.add(hist.name);}
-if(histogramNames.size>1){const link=document.createElement('tr-ui-a-analysis-link');link.setSelectionAndContent(Array.from(histogramNames),'Select All');rows.push([link,'']);}
-for(const[name,hist]of this.diagnostic){const link=document.createElement('tr-ui-a-analysis-link');link.setSelectionAndContent([hist.name],name);const scalarSpan=tr.v.ui.createScalarSpan(hist);rows.push([link,scalarSpan]);}
-this.$.table.tableRows=rows;this.$.table.rebuild();}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-scalar-diagnostic-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){this.$.scalar.setValueAndUnit(this.diagnostic.value.value,this.diagnostic.value.unit);}});return{};});'use strict';Polymer({is:'tr-v-ui-tag-map-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){if(this.diagnostic===undefined){this.$.generic.object=undefined;return;}
-const obj={};for(const[tag,stories]of this.diagnostic.tagsToStoryNames){obj[tag]=Array.from(stories);}
-this.$.generic.object=obj;},onShow_(){this.$.show.style.display='none';this.$.hide.style.display='block';this.$.generic.style.display='block';},onHide_(){this.$.show.style.display='block';this.$.hide.style.display='none';this.$.generic.style.display='none';},});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-unmergeable-diagnostic-set-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){Polymer.dom(this).textContent='';for(const diagnostic of this.diagnostic){const div=document.createElement('div');div.appendChild(tr.v.ui.createDiagnosticSpan(diagnostic,this.name_,this.histogram_));Polymer.dom(this).appendChild(div);}}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){function findElementNameForDiagnostic(diagnostic){let typeInfo=undefined;let curProto=diagnostic.constructor.prototype;while(curProto){typeInfo=tr.v.d.Diagnostic.findTypeInfo(curProto.constructor);if(typeInfo&&typeInfo.metadata.elementName)break;typeInfo=undefined;curProto=curProto.__proto__;}
+link.setSelectionAndContent(events,label);Polymer.dom(this).appendChild(link);}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-scalar-diagnostic-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){this.$.scalar.setValueAndUnit(this.diagnostic.value.value,this.diagnostic.value.unit);}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-unmergeable-diagnostic-set-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){Polymer.dom(this).textContent='';for(const diagnostic of this.diagnostic){if(diagnostic instanceof tr.v.d.RelatedNameMap)continue;const div=document.createElement('div');div.appendChild(tr.v.ui.createDiagnosticSpan(diagnostic,this.name_,this.histogram_));Polymer.dom(this).appendChild(div);}}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){function findElementNameForDiagnostic(diagnostic){let typeInfo=undefined;let curProto=diagnostic.constructor.prototype;while(curProto){typeInfo=tr.v.d.Diagnostic.findTypeInfo(curProto.constructor);if(typeInfo&&typeInfo.metadata.elementName)break;typeInfo=undefined;curProto=curProto.__proto__;}
if(typeInfo===undefined){throw new Error(diagnostic.constructor.name+' or a base class must have a registered elementName');}
const tagName=typeInfo.metadata.elementName;if(tr.ui.b.isUnknownElementName(tagName)){throw new Error('Element not registered: '+tagName);}
return tagName;}
@@ -8800,7 +9610,7 @@ function createDiagnosticSpan(diagnostic,name,histogram){const tagName=findEleme
return{createDiagnosticSpan,};});'use strict';tr.exportTo('tr.v.ui',function(){function makeColumn(title,histogram){return{title,value(map){const diagnostic=map.get(title);if(!diagnostic)return'';return tr.v.ui.createDiagnosticSpan(diagnostic,title,histogram);}};}
Polymer({is:'tr-v-ui-diagnostic-map-table',created(){this.diagnosticMaps_=undefined;this.histogram_=undefined;this.isMetadata_=false;},set histogram(h){this.histogram_=h;},set isMetadata(m){this.isMetadata_=m;this.$.table.showHeader=!this.isMetadata_;},set diagnosticMaps(maps){this.diagnosticMaps_=maps;this.updateContents_();},get diagnosticMaps(){return this.diagnosticMaps_;},updateContents_(){if(this.isMetadata_&&this.diagnosticMaps_.length!==1){throw new Error('Metadata diagnostic-map-tables require exactly 1 DiagnosticMap');}
if(this.diagnosticMaps_===undefined||this.diagnosticMaps_.length===0){this.$.table.tableRows=[];this.$.table.tableColumns=[];return;}
-let names=new Set();for(const map of this.diagnosticMaps_){for(const[name,diagnostic]of map){if(diagnostic instanceof tr.v.d.UnmergeableDiagnosticSet)continue;if(diagnostic instanceof tr.v.d.CollectedRelatedEventSet)continue;if(diagnostic instanceof tr.v.d.GroupingPath)continue;names.add(name);}}
+let names=new Set();for(const map of this.diagnosticMaps_){for(const[name,diagnostic]of map){if(diagnostic instanceof tr.v.d.UnmergeableDiagnosticSet)continue;if(diagnostic instanceof tr.v.d.CollectedRelatedEventSet)continue;names.add(name);}}
names=Array.from(names).sort();const histogram=this.histogram_;if(this.isMetadata_){const diagnosticMap=this.diagnosticMaps_[0];this.$.table.tableColumns=[{value(name){return name.name;}},{value(name){const diagnostic=diagnosticMap.get(name.name);if(!diagnostic)return'';return tr.v.ui.createDiagnosticSpan(diagnostic,name.name,histogram);}},];this.$.table.tableRows=names.map(name=>{return{name};});}else{this.$.table.tableColumns=names.map(name=>makeColumn(name,histogram));this.$.table.tableRows=this.diagnosticMaps_;}
this.$.table.rebuild();}});return{};});'use strict';tr.exportTo('tr.b',function(){class Serializable{constructor(){Object.defineProperty(this,'properties_',{configurable:false,enumerable:false,value:new Map(),});}
define(name,initialValue){if(this[name]!==undefined){throw new Error(`"${name}" is already defined.`);}
@@ -8824,7 +9634,7 @@ if(Object.keys(actualDelta).length===0)return;await tr.b.dispatchSimpleEventAsyn
get updateEventName_(){return this.constructor.name+'.update';}
addUpdateListener(listener){this.addEventListener(this.updateEventName_,listener);}
removeUpdateListener(listener){this.removeEventListener(this.updateEventName_,listener);}}
-return{ViewState,};});'use strict';tr.exportTo('tr.v.ui',function(){class HistogramSetViewState extends tr.b.ViewState{constructor(){super();this.define('searchQuery','');this.define('referenceDisplayLabel','');this.define('displayStatisticName','');this.define('showAll',false);this.define('groupings',[]);this.define('sortColumnIndex',0);this.define('sortDescending',false);this.define('constrainNameColumn',true);this.define('tableRowStates',new Map());this.define('alpha',0.01);}}
+return{ViewState,};});'use strict';tr.exportTo('tr.v.ui',function(){class HistogramSetViewState extends tr.b.ViewState{constructor(){super();this.define('searchQuery','');this.define('referenceDisplayLabel','');this.define('displayStatisticName','');this.define('showAll',true);this.define('groupings',[]);this.define('sortColumnIndex',0);this.define('sortDescending',false);this.define('constrainNameColumn',true);this.define('tableRowStates',new Map());this.define('alpha',0.01);}}
tr.b.ViewState.register(HistogramSetViewState);class HistogramSetTableRowState extends tr.b.ViewState{constructor(){super();this.define('isExpanded',false);this.define('isOverviewed',false);this.define('cells',new Map());this.define('subRows',new Map());this.define('diagnosticsTab','');}
asCompactDict(){const result={};if(this.isExpanded)result.e='1';if(this.isOverviewed)result.o='1';if(this.diagnosticsTab)result.d=this.diagnosticsTab;const cells={};for(const[name,cell]of this.cells){const cellDict=cell.asCompactDict();if(cellDict===undefined)continue;cells[name]=cellDict;}
if(Object.keys(cells).length>0)result.c=cells;const subRows={};for(const[name,row]of this.subRows){const rowDict=row.asCompactDict();if(rowDict===undefined)continue;subRows[name]=rowDict;}
@@ -8860,7 +9670,7 @@ if(this.viewState.mergeSampleDiagnostics){const merged=new tr.v.d.DiagnosticMap(
maps=[merged];}
const mark=tr.b.Timing.mark('histogram-span',(this.viewState.mergeSampleDiagnostics?'merge':'split')+'SampleDiagnostics');this.$.sample_diagnostics.diagnosticMaps=maps;mark.end();if(this.anySampleDiagnostics_){this.$.diagnostics.selectedSubView=this.$.sample_diagnostics_container;}},get histogram(){return this.histogram_;},get referenceHistogram(){return this.referenceHistogram_;},getDeltaScalars_(statNames,scalarMap){if(!this.histogram.canCompare(this.referenceHistogram))return;for(const deltaStatName of tr.v.Histogram.getDeltaStatisticsNames(statNames)){if(IGNORE_DELTA_STATISTICS_NAMES.includes(deltaStatName))continue;const scalar=this.histogram.getStatisticScalar(deltaStatName,this.referenceHistogram,this.mwuResult_);if(scalar===undefined)continue;scalarMap.set(deltaStatName,scalar);}},set isYLogScale(logScale){this.chart_.isYLogScale=logScale;},async updateContents_(){this.$.chart.style.display='none';this.$.drag_handle.style.display='none';this.$.container.style.justifyContent='';while(Polymer.dom(this.$.chart).lastChild){Polymer.dom(this.$.chart).removeChild(Polymer.dom(this.$.chart).lastChild);}
if(!this.histogram)return;this.$.container.style.display='';const scalarMap=new Map();this.getDeltaScalars_(this.histogram.statisticsNames,scalarMap);for(const[name,scalar]of this.histogram.statisticsScalars){scalarMap.set(name,scalar);}
-this.$.stats.scalarMap=scalarMap;this.updateSignificance_();const metricDiagnosticMap=new tr.v.d.DiagnosticMap();const metadataDiagnosticMap=new tr.v.d.DiagnosticMap();for(const[key,diagnostic]of this.histogram.diagnostics){if(key===tr.v.d.RESERVED_NAMES.MERGED_FROM)continue;if(key===tr.v.d.RESERVED_NAMES.MERGED_TO)continue;if(diagnostic instanceof tr.v.d.GroupingPath)continue;if(diagnostic instanceof tr.v.d.RelatedNameMap)continue;if(tr.v.d.RESERVED_NAMES_SET.has(key)){metadataDiagnosticMap.set(key,diagnostic);}else{metricDiagnosticMap.set(key,diagnostic);}}
+this.$.stats.scalarMap=scalarMap;this.updateSignificance_();const metricDiagnosticMap=new tr.v.d.DiagnosticMap();const metadataDiagnosticMap=new tr.v.d.DiagnosticMap();for(const[key,diagnostic]of this.histogram.diagnostics){if(diagnostic instanceof tr.v.d.RelatedNameMap)continue;if(tr.v.d.RESERVED_NAMES_SET.has(key)){metadataDiagnosticMap.set(key,diagnostic);}else{metricDiagnosticMap.set(key,diagnostic);}}
const diagnosticTabs=[];if(metricDiagnosticMap.size){this.$.metric_diagnostics.diagnosticMaps=[metricDiagnosticMap];diagnosticTabs.push(this.$.metric_diagnostics);}
if(this.anySampleDiagnostics_){diagnosticTabs.push(this.$.sample_diagnostics_container);}
if(metadataDiagnosticMap.size){this.$.metadata_diagnostics.diagnosticMaps=[metadataDiagnosticMap];diagnosticTabs.push(this.$.metadata_diagnostics);}
@@ -8875,7 +9685,7 @@ if(binCounts[2]>0&&binCounts[1]>(binCounts[2]*2)){dataRange.max=binCounts[2]*(1+
this.chart_.overrideDataRange=dataRange;this.chart_.data=chartData;this.$.stats_container.style.maxHeight=this.chart_.getBoundingClientRect().height+'px';}});});'use strict';tr.exportTo('tr.ui.analysis',function(){const EVENT_FIELD=[{key:'start',label:'Start'},{key:'cpuDuration',label:'CPU Duration'},{key:'duration',label:'Duration'},{key:'cpuSelfTime',label:'CPU Self Time'},{key:'selfTime',label:'Self Time'}];function buildDiagnostics_(slice){const diagnostics={};for(const item of EVENT_FIELD){const fieldName=item.key;if(slice[fieldName]===undefined)continue;diagnostics[fieldName]=new tr.v.d.Scalar(new tr.b.Scalar(tr.b.Unit.byName.timeDurationInMs,slice[fieldName]));}
diagnostics.args=new tr.v.d.GenericSet([slice.args]);diagnostics.event=new tr.v.d.RelatedEventSet(slice);return diagnostics;}
Polymer({is:'tr-ui-a-multi-event-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.currentSelection_=undefined;this.eventsHaveDuration_=true;this.eventsHaveSubRows_=true;},ready(){this.$.radioPicker.style.display='none';this.$.radioPicker.items=EVENT_FIELD;this.$.radioPicker.select('cpuSelfTime');this.$.radioPicker.addEventListener('change',()=>{if(this.isAttached)this.updateContents_();});this.$.histogramSpan.graphWidth=400;this.$.histogramSpan.canMergeSampleDiagnostics=false;this.$.histogramContainer.style.display='none';},attached(){if(this.currentSelection_!==undefined)this.updateContents_();},set selection(selection){if(selection.length<=1){throw new Error('Only supports multiple items');}
-this.setSelectionWithoutErrorChecks(selection);},get selection(){return this.currentSelection_;},setSelectionWithoutErrorChecks(selection){this.currentSelection_=selection;if(this.isAttached)this.updateContents_();},get eventsHaveDuration(){return this.eventsHaveDuration_;},set eventsHaveDuration(eventsHaveDuration){this.eventsHaveDuration_=eventsHaveDuration;if(this.isAttached)this.updateContents_();},get eventsHaveSubRows(){return this.eventsHaveSubRows_;},set eventsHaveSubRows(eventsHaveSubRows){this.eventsHaveSubRows_=eventsHaveSubRows;if(this.isAttached)this.updateContents_();},buildHistogram_(selectedKey){let leftBoundary=Number.MAX_VALUE;let rightBoundary=tr.b.math.Statistics.percentile(this.currentSelection_,0.95,function(value){leftBoundary=Math.min(leftBoundary,value[selectedKey]);return value[selectedKey];});if(leftBoundary===rightBoundary)rightBoundary+=1;const histogram=new tr.v.Histogram('',tr.b.Unit.byName.timeDurationInMs,tr.v.HistogramBinBoundaries.createLinear(leftBoundary,rightBoundary,Math.ceil(Math.sqrt(this.currentSelection_.length))));histogram.customizeSummaryOptions({sum:false});for(const slice of this.currentSelection_){histogram.addSample(slice[selectedKey],buildDiagnostics_(slice));}
+this.setSelectionWithoutErrorChecks(selection);},get selection(){return this.currentSelection_;},setSelectionWithoutErrorChecks(selection){this.currentSelection_=selection;if(this.isAttached)this.updateContents_();},get eventsHaveDuration(){return this.eventsHaveDuration_;},set eventsHaveDuration(eventsHaveDuration){this.eventsHaveDuration_=eventsHaveDuration;if(this.isAttached)this.updateContents_();},get eventsHaveSubRows(){return this.eventsHaveSubRows_;},set eventsHaveSubRows(eventsHaveSubRows){this.eventsHaveSubRows_=eventsHaveSubRows;if(this.isAttached)this.updateContents_();},buildHistogram_(selectedKey){let leftBoundary=Number.MAX_VALUE;let rightBoundary=tr.b.math.Statistics.percentile(this.currentSelection_,0.95,function(value){leftBoundary=Math.min(leftBoundary,value[selectedKey]);return value[selectedKey];});if(leftBoundary===rightBoundary)rightBoundary+=1;const histogram=new tr.v.Histogram('',tr.b.Unit.byName.timeDurationInMs,tr.v.HistogramBinBoundaries.createLinear(leftBoundary,rightBoundary,Math.ceil(Math.sqrt(this.currentSelection_.length))));histogram.customizeSummaryOptions({sum:false,percentile:[0.5,0.9],});for(const slice of this.currentSelection_){histogram.addSample(slice[selectedKey],buildDiagnostics_(slice));}
return histogram;},updateContents_(){const selection=this.currentSelection_;if(!selection)return;const eventsByTitle=selection.getEventsOrganizedByTitle();const numTitles=Object.keys(eventsByTitle).length;this.$.eventSummaryTable.configure({showTotals:numTitles>1,eventsByTitle,eventsHaveDuration:this.eventsHaveDuration_,eventsHaveSubRows:this.eventsHaveSubRows_});this.$.selectionSummaryTable.selection=this.currentSelection_;if(numTitles===1){this.$.radioPicker.style.display='block';this.$.histogramContainer.style.display='flex';this.$.histogramSpan.build(this.buildHistogram_(this.$.radioPicker.selectedKey));if(this.$.histogramSpan.histogram.numValues===0){this.$.histogramContainer.style.display='none';}}else{this.$.radioPicker.style.display='none';this.$.histogramContainer.style.display='none';}}});return{};});'use strict';tr.exportTo('tr.ui.analysis',function(){const FLOW_IN=0x1;const FLOW_OUT=0x2;const FLOW_IN_OUT=FLOW_IN|FLOW_OUT;function FlowClassifier(){this.numEvents_=0;this.eventsByGUID_={};}
FlowClassifier.prototype={getFS_(event){let fs=this.eventsByGUID_[event.guid];if(fs===undefined){this.numEvents_++;fs={state:0,event};this.eventsByGUID_[event.guid]=fs;}
return fs;},addInFlow(event){const fs=this.getFS_(event);fs.state|=FLOW_IN;return event;},addOutFlow(event){const fs=this.getFS_(event);fs.state|=FLOW_OUT;return event;},hasEvents(){return this.numEvents_>0;},get inFlowEvents(){const selection=new tr.model.EventSet();for(const guid in this.eventsByGUID_){const fs=this.eventsByGUID_[guid];if(fs.state===FLOW_IN){selection.push(fs.event);}}
@@ -9150,9 +9960,9 @@ return selection;};Polymer.dom(this).appendChild(samplesTrack);},this);},collaps
h=h*0.5;}}else{for(let i=0;i<this.tracks.length;++i){this.tracks[i].height=this.tracks[0].height;this.tracks[i].style.display='';}}}};return{ThreadTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const OtherThreadsTrack=tr.ui.b.define('other-threads-track',tr.ui.tracks.OtherThreadsTrack);const SpacingTrack=tr.ui.tracks.SpacingTrack;OtherThreadsTrack.prototype={__proto__:tr.ui.tracks.ContainerTrack.prototype,decorate(viewport){tr.ui.tracks.ContainerTrack.prototype.decorate.call(this,viewport);this.header_=document.createElement('tr-ui-b-heading');this.header_.addEventListener('click',this.onHeaderClick_.bind(this));this.header_.heading='Other Threads';this.header_.tooltip='Threads with only scheduling information';this.header_.arrowVisible=true;this.threads_=[];this.expanded=false;this.collapsible_=true;},set threads(threads){this.threads_=threads;this.updateContents_();},set collapsible(collapsible){this.collapsible_=collapsible;this.updateContents_();},onHeaderClick_(e){e.stopPropagation();e.preventDefault();this.expanded=!this.expanded;},get expanded(){return this.header_.expanded;},set expanded(expanded){expanded=!!expanded;if(this.expanded===expanded)return;this.header_.expanded=expanded;this.viewport_.dispatchChangeEvent();this.updateContents_();},updateContents_(){this.detach();if(this.collapsible_){Polymer.dom(this).appendChild(this.header_);}
if(this.expanded||!this.collapsible_){for(const thread of this.threads_){const track=new tr.ui.tracks.ThreadTrack(this.viewport);track.thread=thread;if(!track.hasVisibleContent)return;Polymer.dom(this).appendChild(track);Polymer.dom(this).appendChild(new SpacingTrack(this.viewport));}}}};return{OtherThreadsTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ColorScheme=tr.b.ColorScheme;const ProcessSummaryTrack=tr.ui.b.define('process-summary-track',tr.ui.tracks.RectTrack);ProcessSummaryTrack.buildRectsFromProcess=function(process){if(!process)return[];const ops=[];const pushOp=function(isStart,time,slice){ops.push({isStart,time,slice});};for(const tid in process.threads){const sliceGroup=process.threads[tid].sliceGroup;sliceGroup.topLevelSlices.forEach(function(slice){pushOp(true,slice.start,undefined);pushOp(false,slice.end,undefined);});sliceGroup.slices.forEach(function(slice){if(slice.important){pushOp(true,slice.start,slice);pushOp(false,slice.end,slice);}});}
ops.sort(function(a,b){return a.time-b.time;});const rects=[];const genericColorId=ColorScheme.getColorIdForReservedName('generic_work');const pushRect=function(start,end,slice){rects.push(new tr.ui.tracks.Rect(slice,slice?slice.title:'',slice?slice.colorId:genericColorId,start,end-start));};let depth=0;let currentSlice=undefined;let lastStart=undefined;ops.forEach(function(op){depth+=op.isStart?1:-1;if(currentSlice){if(!op.isStart&&op.slice===currentSlice){pushRect(lastStart,op.time,currentSlice);lastStart=depth>=1?op.time:undefined;currentSlice=undefined;}}else{if(op.isStart){if(depth===1){lastStart=op.time;currentSlice=op.slice;}else if(op.slice){if(op.time!==lastStart){pushRect(lastStart,op.time,undefined);lastStart=op.time;}
-currentSlice=op.slice;}}else{if(depth===0){pushRect(lastStart,op.time,undefined);lastStart=undefined;}}}});return rects;};ProcessSummaryTrack.prototype={__proto__:tr.ui.tracks.RectTrack.prototype,decorate(viewport){tr.ui.tracks.RectTrack.prototype.decorate.call(this,viewport);},get process(){return this.process_;},set process(process){this.process_=process;this.rects=ProcessSummaryTrack.buildRectsFromProcess(process);}};return{ProcessSummaryTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ObjectSnapshotView=tr.ui.analysis.ObjectSnapshotView;const ObjectInstanceView=tr.ui.analysis.ObjectInstanceView;const SpacingTrack=tr.ui.tracks.SpacingTrack;const ProcessTrackBase=tr.ui.b.define('process-track-base',tr.ui.tracks.ContainerTrack);ProcessTrackBase.prototype={__proto__:tr.ui.tracks.ContainerTrack.prototype,decorate(viewport){tr.ui.tracks.ContainerTrack.prototype.decorate.call(this,viewport);this.processBase_=undefined;Polymer.dom(this).classList.add('process-track-base');Polymer.dom(this).classList.add('expanded');this.processNameEl_=tr.ui.b.createSpan();Polymer.dom(this.processNameEl_).classList.add('process-track-name');this.headerEl_=tr.ui.b.createDiv({className:'process-track-header'});Polymer.dom(this.headerEl_).appendChild(this.processNameEl_);this.headerEl_.addEventListener('click',this.onHeaderClick_.bind(this));Polymer.dom(this).appendChild(this.headerEl_);},get processBase(){return this.processBase_;},set processBase(processBase){this.processBase_=processBase;if(this.processBase_){const modelSettings=new tr.model.ModelSettings(this.processBase_.model);const defaultValue=this.processBase_.important;this.expanded=modelSettings.getSettingFor(this.processBase_,'expanded',defaultValue);}
-this.updateContents_();},get expanded(){return Polymer.dom(this).classList.contains('expanded');},set expanded(expanded){expanded=!!expanded;if(this.expanded===expanded)return;Polymer.dom(this).classList.toggle('expanded');this.viewport_.dispatchChangeEvent();if(!this.processBase_)return;const modelSettings=new tr.model.ModelSettings(this.processBase_.model);modelSettings.setSettingFor(this.processBase_,'expanded',expanded);this.updateContents_();this.viewport.rebuildEventToTrackMap();this.viewport.rebuildContainerToTrackMap();},get hasVisibleContent(){if(this.expanded){return this.children.length>1;}
-return true;},onHeaderClick_(e){e.stopPropagation();e.preventDefault();this.expanded=!this.expanded;},updateContents_(){this.clearTracks_();if(!this.processBase_)return;Polymer.dom(this.processNameEl_).textContent=this.processBase_.userFriendlyName;this.headerEl_.title=this.processBase_.userFriendlyDetails;this.willAppendTracks_();if(this.expanded){this.appendMemoryDumpTrack_();this.appendObjectInstanceTracks_();this.appendCounterTracks_();this.appendFrameTrack_();this.appendThreadTracks_();}else{this.appendSummaryTrack_();}
+currentSlice=op.slice;}}else{if(depth===0){pushRect(lastStart,op.time,undefined);lastStart=undefined;}}}});return rects;};ProcessSummaryTrack.prototype={__proto__:tr.ui.tracks.RectTrack.prototype,decorate(viewport){tr.ui.tracks.RectTrack.prototype.decorate.call(this,viewport);},get process(){return this.process_;},set process(process){this.process_=process;this.rects=ProcessSummaryTrack.buildRectsFromProcess(process);}};return{ProcessSummaryTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ObjectSnapshotView=tr.ui.analysis.ObjectSnapshotView;const ObjectInstanceView=tr.ui.analysis.ObjectInstanceView;const SpacingTrack=tr.ui.tracks.SpacingTrack;const ProcessTrackBase=tr.ui.b.define('process-track-base',tr.ui.tracks.ContainerTrack);ProcessTrackBase.prototype={__proto__:tr.ui.tracks.ContainerTrack.prototype,decorate(viewport){tr.ui.tracks.ContainerTrack.prototype.decorate.call(this,viewport);this.processBase_=undefined;Polymer.dom(this).classList.add('process-track-base');Polymer.dom(this).classList.add('expanded');this.processNameEl_=tr.ui.b.createSpan();Polymer.dom(this.processNameEl_).classList.add('process-track-name');this.closeEl_=tr.ui.b.createSpan();Polymer.dom(this.closeEl_).classList.add('process-track-close');this.closeEl_.textContent='X';this.headerEl_=tr.ui.b.createDiv({className:'process-track-header'});Polymer.dom(this.headerEl_).appendChild(this.processNameEl_);Polymer.dom(this.headerEl_).appendChild(this.closeEl_);this.headerEl_.addEventListener('click',this.onHeaderClick_.bind(this));Polymer.dom(this).appendChild(this.headerEl_);},get processBase(){return this.processBase_;},set processBase(processBase){this.processBase_=processBase;if(this.processBase_){const modelSettings=new tr.model.ModelSettings(this.processBase_.model);const defaultValue=this.processBase_.important;this.expanded=modelSettings.getSettingFor(this.processBase_,'expanded',defaultValue);}
+this.updateContents_();},get expanded(){return Polymer.dom(this).classList.contains('expanded');},set expanded(expanded){expanded=!!expanded;if(this.expanded===expanded)return;Polymer.dom(this).classList.toggle('expanded');this.viewport_.dispatchChangeEvent();if(!this.processBase_)return;const modelSettings=new tr.model.ModelSettings(this.processBase_.model);modelSettings.setSettingFor(this.processBase_,'expanded',expanded);this.updateContents_();this.viewport.rebuildEventToTrackMap();this.viewport.rebuildContainerToTrackMap();},set visible(visible){if(visible===this.visible)return;this.hidden=!visible;tr.b.dispatchSimpleEvent(this,'visibility');this.viewport_.dispatchChangeEvent();if(!this.processBase_)return;this.updateContents_();this.viewport.rebuildEventToTrackMap();this.viewport.rebuildContainerToTrackMap();},get visible(){return!this.hidden;},get hasVisibleContent(){if(this.expanded){return this.children.length>1;}
+return true;},onHeaderClick_(e){e.stopPropagation();e.preventDefault();if(e.target===this.closeEl_){this.visible=false;}else{this.expanded=!this.expanded;}},updateContents_(){this.clearTracks_();if(!this.processBase_)return;Polymer.dom(this.processNameEl_).textContent=this.processBase_.userFriendlyName;this.headerEl_.title=this.processBase_.userFriendlyDetails;this.willAppendTracks_();if(this.expanded){this.appendMemoryDumpTrack_();this.appendObjectInstanceTracks_();this.appendCounterTracks_();this.appendFrameTrack_();this.appendThreadTracks_();}else{this.appendSummaryTrack_();}
this.didAppendTracks_();},willAppendTracks_(){},didAppendTracks_(){},appendMemoryDumpTrack_(){},appendSummaryTrack_(){const track=new tr.ui.tracks.ProcessSummaryTrack(this.viewport);track.process=this.process;if(!track.hasVisibleContent)return;Polymer.dom(this).appendChild(track);},appendFrameTrack_(){const frames=this.process?this.process.frames:undefined;if(!frames||!frames.length)return;const track=new tr.ui.tracks.FrameTrack(this.viewport);track.frames=frames;Polymer.dom(this).appendChild(track);},appendObjectInstanceTracks_(){const instancesByTypeName=this.processBase_.objects.getAllInstancesByTypeName();const instanceTypeNames=Object.keys(instancesByTypeName);instanceTypeNames.sort();let didAppendAtLeastOneTrack=false;instanceTypeNames.forEach(function(typeName){const allInstances=instancesByTypeName[typeName];let instanceViewInfo=ObjectInstanceView.getTypeInfo(undefined,typeName);let snapshotViewInfo=ObjectSnapshotView.getTypeInfo(undefined,typeName);if(instanceViewInfo&&!instanceViewInfo.metadata.showInTrackView){instanceViewInfo=undefined;}
if(snapshotViewInfo&&!snapshotViewInfo.metadata.showInTrackView){snapshotViewInfo=undefined;}
const hasViewInfo=instanceViewInfo||snapshotViewInfo;const visibleInstances=[];for(let i=0;i<allInstances.length;i++){const instance=allInstances[i];if(instance.snapshots.length===0)continue;if(instance.hasImplicitSnapshots&&!hasViewInfo)continue;visibleInstances.push(instance);}
@@ -9167,7 +9977,7 @@ tr.ui.tracks.ContainerTrack.prototype.drawTrack.call(this,type);},drawBackground
draw=!draw;if(!draw)continue;const bounds=this.children[i].getBoundingClientRect();ctx.fillRect(0,pixelRatio*(bounds.top-canvasBounds.top),ctx.canvas.width,pixelRatio*bounds.height);}},set process(process){this.processBase=process;},get process(){return this.processBase;},get eventContainer(){return this.process;},addContainersToTrackMap(containerToTrackMap){tr.ui.tracks.ProcessTrackBase.prototype.addContainersToTrackMap.apply(this,arguments);containerToTrackMap.addContainer(this.process,this);},appendMemoryDumpTrack_(){const processMemoryDumps=this.process.memoryDumps;if(processMemoryDumps.length){const pmdt=new tr.ui.tracks.ProcessMemoryDumpTrack(this.viewport_);pmdt.memoryDumps=processMemoryDumps;Polymer.dom(this).appendChild(pmdt);}},addIntersectingEventsInRangeToSelectionInWorldSpace(loWX,hiWX,viewPixWidthWorld,selection){function onPickHit(instantEvent){selection.push(instantEvent);}
const instantEventWidth=2*viewPixWidthWorld;tr.b.iterateOverIntersectingIntervals(this.processBase.instantEvents,function(x){return x.start;},function(x){return x.duration+instantEventWidth;},loWX,hiWX,onPickHit.bind(this));tr.ui.tracks.ContainerTrack.prototype.addIntersectingEventsInRangeToSelectionInWorldSpace.apply(this,arguments);},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){this.addClosestInstantEventToSelection(this.processBase.instantEvents,worldX,worldMaxDist,selection);tr.ui.tracks.ContainerTrack.prototype.addClosestEventToSelection.apply(this,arguments);}};return{ProcessTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const SelectionState=tr.model.SelectionState;const ColorScheme=tr.b.ColorScheme;const EventPresenter=tr.ui.b.EventPresenter;const ModelTrack=tr.ui.b.define('model-track',tr.ui.tracks.ContainerTrack);ModelTrack.VSYNC_HIGHLIGHT_ALPHA=0.1;ModelTrack.VSYNC_DENSITY_TRANSPARENT=0.20;ModelTrack.VSYNC_DENSITY_OPAQUE=0.10;ModelTrack.VSYNC_DENSITY_RANGE=ModelTrack.VSYNC_DENSITY_TRANSPARENT-ModelTrack.VSYNC_DENSITY_OPAQUE;ModelTrack.generateStripes_=function(times,minTime,maxTime){if(times.length===0)return[];const lowIndex=tr.b.findLowIndexInSortedArray(times,(x=>x),minTime);let highIndex=lowIndex-1;while(times[highIndex+1]<=maxTime){highIndex++;}
const stripes=[];for(let i=lowIndex-(lowIndex%2);i<=highIndex;i+=2){const left=i<lowIndex?minTime:times[i];const right=i+1>highIndex?maxTime:times[i+1];stripes.push(tr.b.math.Range.fromExplicitRange(left,right));}
-return stripes;};ModelTrack.prototype={__proto__:tr.ui.tracks.ContainerTrack.prototype,decorate(viewport){tr.ui.tracks.ContainerTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('model-track');this.upperMode_=false;this.annotationViews_=[];this.vSyncTimes_=[];},get upperMode(){return this.upperMode_;},set upperMode(upperMode){this.upperMode_=upperMode;this.updateContents_();},detach(){tr.ui.tracks.ContainerTrack.prototype.detach.call(this);},get model(){return this.model_;},set model(model){this.model_=model;this.updateContents_();this.model_.addEventListener('annotationChange',this.updateAnnotations_.bind(this));},get hasVisibleContent(){return this.children.length>0;},updateContents_(){Polymer.dom(this).textContent='';if(!this.model_)return;if(this.upperMode_){this.updateContentsForUpperMode_();}else{this.updateContentsForLowerMode_();}},updateContentsForUpperMode_(){},updateContentsForLowerMode_(){if(this.model_.userModel.expectations.length>1){const mrt=new tr.ui.tracks.InteractionTrack(this.viewport_);mrt.model=this.model_;Polymer.dom(this).appendChild(mrt);}
+return stripes;};ModelTrack.prototype={__proto__:tr.ui.tracks.ContainerTrack.prototype,decorate(viewport){tr.ui.tracks.ContainerTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('model-track');this.upperMode_=false;this.annotationViews_=[];this.vSyncTimes_=[];},get processViews(){return Polymer.dom(this).querySelectorAll('.process-track-base');},get upperMode(){return this.upperMode_;},set upperMode(upperMode){this.upperMode_=upperMode;this.updateContents_();},detach(){tr.ui.tracks.ContainerTrack.prototype.detach.call(this);},get model(){return this.model_;},set model(model){this.model_=model;this.updateContents_();this.model_.addEventListener('annotationChange',this.updateAnnotations_.bind(this));},get hasVisibleContent(){return this.children.length>0;},updateContents_(){Polymer.dom(this).textContent='';if(!this.model_)return;if(this.upperMode_){this.updateContentsForUpperMode_();}else{this.updateContentsForLowerMode_();}},updateContentsForUpperMode_(){},updateContentsForLowerMode_(){if(this.model_.userModel.expectations.length>1){const mrt=new tr.ui.tracks.InteractionTrack(this.viewport_);mrt.model=this.model_;Polymer.dom(this).appendChild(mrt);}
if(this.model_.alerts.length){const at=new tr.ui.tracks.AlertTrack(this.viewport_);at.alerts=this.model_.alerts;Polymer.dom(this).appendChild(at);}
if(this.model_.globalMemoryDumps.length){const gmdt=new tr.ui.tracks.GlobalMemoryDumpTrack(this.viewport_);gmdt.memoryDumps=this.model_.globalMemoryDumps;Polymer.dom(this).appendChild(gmdt);}
this.appendDeviceTrack_();this.appendCpuUsageTrack_();this.appendMemoryTrack_();this.appendKernelTrack_();const processes=this.model_.getAllProcesses();processes.sort(tr.model.Process.compare);for(let i=0;i<processes.length;++i){const process=processes[i];const track=new tr.ui.tracks.ProcessTrack(this.viewport);track.process=process;if(!track.hasVisibleContent)continue;Polymer.dom(this).appendChild(track);}
@@ -9182,7 +9992,7 @@ ctx.restore();tr.ui.tracks.ContainerTrack.prototype.drawTrack.call(this,type);},
this.drawFlowArrow_(ctx,events[i],canvasBounds);}},drawFlowArrow_(ctx,flowEvent,canvasBounds){const dt=this.viewport.currentDisplayTransform;const pixelRatio=window.devicePixelRatio||1;const startTrack=this.viewport.trackForEvent(flowEvent.startSlice);const endTrack=this.viewport.trackForEvent(flowEvent.endSlice);if(startTrack===undefined||endTrack===undefined)return;const startBounds=startTrack.getBoundingClientRect();const endBounds=endTrack.getBoundingClientRect();if(flowEvent.selectionState===SelectionState.SELECTED){ctx.shadowBlur=1;ctx.shadowColor='red';ctx.shadowOffsety=2;ctx.strokeStyle=tr.b.ColorScheme.colorsAsStrings[tr.b.ColorScheme.getVariantColorId(flowEvent.colorId,tr.b.ColorScheme.properties.brightenedOffsets[0])];}else if(flowEvent.selectionState===SelectionState.HIGHLIGHTED){ctx.shadowBlur=1;ctx.shadowColor='red';ctx.shadowOffsety=2;ctx.strokeStyle=tr.b.ColorScheme.colorsAsStrings[tr.b.ColorScheme.getVariantColorId(flowEvent.colorId,tr.b.ColorScheme.properties.brightenedOffsets[0])];}else if(flowEvent.selectionState===SelectionState.DIMMED){ctx.shadowBlur=0;ctx.shadowOffsetX=0;ctx.strokeStyle=tr.b.ColorScheme.colorsAsStrings[flowEvent.colorId];}else{let hasBoost=false;const startSlice=flowEvent.startSlice;hasBoost|=startSlice.selectionState===SelectionState.SELECTED;hasBoost|=startSlice.selectionState===SelectionState.HIGHLIGHTED;const endSlice=flowEvent.endSlice;hasBoost|=endSlice.selectionState===SelectionState.SELECTED;hasBoost|=endSlice.selectionState===SelectionState.HIGHLIGHTED;if(hasBoost){ctx.shadowBlur=1;ctx.shadowColor='rgba(255, 0, 0, 0.4)';ctx.shadowOffsety=2;ctx.strokeStyle=tr.b.ColorScheme.colorsAsStrings[tr.b.ColorScheme.getVariantColorId(flowEvent.colorId,tr.b.ColorScheme.properties.brightenedOffsets[0])];}else{ctx.shadowBlur=0;ctx.shadowOffsetX=0;ctx.strokeStyle=tr.b.ColorScheme.colorsAsStrings[flowEvent.colorId];}}
const startSize=startBounds.left+startBounds.top+
startBounds.bottom+startBounds.right;const endSize=endBounds.left+endBounds.top+
-endBounds.bottom+endBounds.right;if(startSize===0&&endSize===0)return;const startY=this.calculateTrackY_(startTrack,canvasBounds);const endY=this.calculateTrackY_(endTrack,canvasBounds);const pixelStartY=pixelRatio*startY;const pixelEndY=pixelRatio*endY;const startXView=dt.xWorldToView(flowEvent.start);const endXView=dt.xWorldToView(flowEvent.end);const midXView=(startXView+endXView)/2;ctx.beginPath();ctx.moveTo(startXView,pixelStartY);ctx.bezierCurveTo(midXView,pixelStartY,midXView,pixelEndY,endXView,pixelEndY);ctx.stroke();const arrowWidth=5*pixelRatio;const distance=endXView-startXView;if(distance<=(2*arrowWidth))return;const tipX=endXView;const tipY=pixelEndY;const arrowHeight=(endBounds.height/4)*pixelRatio;tr.ui.b.drawTriangle(ctx,tipX,tipY,tipX-arrowWidth,tipY-arrowHeight,tipX-arrowWidth,tipY+arrowHeight);ctx.fill();},drawVSyncHighlight(ctx,dt,viewLWorld,viewRWorld,viewHeight){if(!this.viewport_.highlightVSync){return;}
+endBounds.bottom+endBounds.right;if(startSize===0&&endSize===0)return;const startY=this.calculateTrackY_(startTrack,canvasBounds);const endY=this.calculateTrackY_(endTrack,canvasBounds);const worldOffset=this.getBoundingClientRect().top-canvasBounds.top;const pixelStartY=pixelRatio*(startY-worldOffset);const pixelEndY=pixelRatio*(endY-worldOffset);const startXView=dt.xWorldToView(flowEvent.start);const endXView=dt.xWorldToView(flowEvent.end);const midXView=(startXView+endXView)/2;ctx.beginPath();ctx.moveTo(startXView,pixelStartY);ctx.bezierCurveTo(midXView,pixelStartY,midXView,pixelEndY,endXView,pixelEndY);ctx.stroke();const arrowWidth=5*pixelRatio;const distance=endXView-startXView;if(distance<=(2*arrowWidth))return;const tipX=endXView;const tipY=pixelEndY;const arrowHeight=(endBounds.height/4)*pixelRatio;tr.ui.b.drawTriangle(ctx,tipX,tipY,tipX-arrowWidth,tipY-arrowHeight,tipX-arrowWidth,tipY+arrowHeight);ctx.fill();},drawVSyncHighlight(ctx,dt,viewLWorld,viewRWorld,viewHeight){if(!this.viewport_.highlightVSync){return;}
const stripes=ModelTrack.generateStripes_(this.vSyncTimes_,viewLWorld,viewRWorld);if(stripes.length===0){return;}
const vSyncHighlightColor=new tr.b.Color(ColorScheme.getColorForReservedNameAsString('vsync_highlight_color'));const stripeRange=stripes[stripes.length-1].max-stripes[0].min;const stripeDensity=stripeRange?stripes.length/(dt.scaleX*stripeRange):0;const clampedStripeDensity=tr.b.math.clamp(stripeDensity,ModelTrack.VSYNC_DENSITY_OPAQUE,ModelTrack.VSYNC_DENSITY_TRANSPARENT);const opacity=(ModelTrack.VSYNC_DENSITY_TRANSPARENT-clampedStripeDensity)/ModelTrack.VSYNC_DENSITY_RANGE;if(opacity===0){return;}
ctx.fillStyle=vSyncHighlightColor.toStringWithAlphaOverride(ModelTrack.VSYNC_HIGHLIGHT_ALPHA*opacity);for(let i=0;i<stripes.length;i++){const xLeftView=dt.xWorldToView(stripes[i].min);const xRightView=dt.xWorldToView(stripes[i].max);ctx.fillRect(xLeftView,0,xRightView-xLeftView,viewHeight);}},calculateTrackY_(track,canvasBounds){const bounds=track.getBoundingClientRect();const size=bounds.left+bounds.top+bounds.bottom+bounds.right;if(size===0){return this.calculateTrackY_(Polymer.dom(track).parentNode,canvasBounds);}
@@ -9194,7 +10004,7 @@ const leftMarker=interestRange.min;const rightMarker=interestRange.max;const lef
ctx.fillStyle=displayTextColor;ctx.fillText(textToDraw,textLeftView,textPosY);ctx.strokeStyle=arrowColor;ctx.beginPath();tr.ui.b.drawLine(ctx,leftMarkerView,arrowPosY,rightMarkerView,arrowPosY);ctx.stroke();ctx.fillStyle=arrowColor;tr.ui.b.drawArrow(ctx,leftMarkerView-1.5*arrowSpacing,arrowPosY,leftMarkerView,arrowPosY,arrowLengthView,arrowWidthView);tr.ui.b.drawArrow(ctx,rightMarkerView+1.5*arrowSpacing,arrowPosY,rightMarkerView,arrowPosY,arrowLengthView,arrowWidthView);}else if(spaceForArrowsView<=distanceBetweenMarkersView){let leftArrowStart;let rightArrowStart;if(spaceForArrowsAndTextView<=distanceBetweenMarkersView){ctx.fillStyle=displayTextColor;ctx.fillText(textToDraw,textLeftView,textPosY);leftArrowStart=textLeftView-arrowSpacing;rightArrowStart=textRightView+arrowSpacing;}else{leftArrowStart=positionInMiddleOfMarkersView;rightArrowStart=positionInMiddleOfMarkersView;}
ctx.strokeStyle=arrowColor;ctx.fillStyle=arrowColor;tr.ui.b.drawArrow(ctx,leftArrowStart,arrowPosY,leftMarkerView,arrowPosY,arrowLengthView,arrowWidthView);tr.ui.b.drawArrow(ctx,rightArrowStart,arrowPosY,rightMarkerView,arrowPosY,arrowLengthView,arrowWidthView);}
ctx.restore();},drawMarkers_(viewLWorld,viewRWorld){const pixelRatio=window.devicePixelRatio||1;const trackBounds=this.getBoundingClientRect();const viewHeight=trackBounds.height*pixelRatio;if(!this.viewport.interestRange.isEmpty){this.viewport.interestRange.draw(this.context(),viewLWorld,viewRWorld,viewHeight);}},addIntersectingEventsInRangeToSelection(loVX,hiVX,loY,hiY,selection){},addAllEventsMatchingFilterToSelection(filter,selection){}};return{XAxisTrack,};});'use strict';Polymer({is:'tr-ui-timeline-track-view',ready(){this.displayTransform_=new tr.ui.TimelineDisplayTransform();this.model_=undefined;this.timelineView_=undefined;this.pollIfViewportAttachedInterval_=undefined;this.viewport_=new tr.ui.TimelineViewport(this);this.viewportDisplayTransformAtMouseDown_=undefined;this.brushingStateController_=undefined;this.rulerTrackContainer_=new tr.ui.tracks.DrawingContainer(this.viewport_);Polymer.dom(this).appendChild(this.rulerTrackContainer_);this.rulerTrackContainer_.invalidate();this.rulerTrackContainer_.style.overflowY='hidden';this.rulerTrackContainer_.style.flexShrink='0';this.rulerTrack_=new tr.ui.tracks.XAxisTrack(this.viewport_);Polymer.dom(this.rulerTrackContainer_).appendChild(this.rulerTrack_);this.upperModelTrack_=new tr.ui.tracks.ModelTrack(this.viewport_);this.upperModelTrack_.upperMode=true;Polymer.dom(this.rulerTrackContainer_).appendChild(this.upperModelTrack_);this.modelTrackContainer_=new tr.ui.tracks.DrawingContainer(this.viewport_);Polymer.dom(this).appendChild(this.modelTrackContainer_);this.modelTrackContainer_.style.display='block';this.modelTrackContainer_.style.flexGrow='1';this.modelTrackContainer_.invalidate();this.viewport_.modelTrackContainer=this.modelTrackContainer_;this.modelTrack_=new tr.ui.tracks.ModelTrack(this.viewport_);Polymer.dom(this.modelTrackContainer_).appendChild(this.modelTrack_);this.timingTool_=new tr.ui.b.TimingTool(this.viewport_,this);this.initMouseModeSelector();this.hideDragBox_();this.initHintText_();this.onSelectionChanged_=this.onSelectionChanged_.bind(this);this.onDblClick_=this.onDblClick_.bind(this);this.addEventListener('dblclick',this.onDblClick_);this.onMouseWheel_=this.onMouseWheel_.bind(this);this.addEventListener('mousewheel',this.onMouseWheel_);this.onMouseDown_=this.onMouseDown_.bind(this);this.addEventListener('mousedown',this.onMouseDown_);this.onMouseMove_=this.onMouseMove_.bind(this);this.addEventListener('mousemove',this.onMouseMove_);this.onTouchStart_=this.onTouchStart_.bind(this);this.addEventListener('touchstart',this.onTouchStart_);this.onTouchMove_=this.onTouchMove_.bind(this);this.addEventListener('touchmove',this.onTouchMove_);this.onTouchEnd_=this.onTouchEnd_.bind(this);this.addEventListener('touchend',this.onTouchEnd_);this.addHotKeys_();this.mouseViewPosAtMouseDown_={x:0,y:0};this.lastMouseViewPos_={x:0,y:0};this.lastTouchViewPositions_=[];this.alert_=undefined;this.isPanningAndScanning_=false;this.isZooming_=false;},initMouseModeSelector(){this.mouseModeSelector_=document.createElement('tr-ui-b-mouse-mode-selector');this.mouseModeSelector_.targetElement=this;Polymer.dom(this).appendChild(this.mouseModeSelector_);this.mouseModeSelector_.addEventListener('beginpan',this.onBeginPanScan_.bind(this));this.mouseModeSelector_.addEventListener('updatepan',this.onUpdatePanScan_.bind(this));this.mouseModeSelector_.addEventListener('endpan',this.onEndPanScan_.bind(this));this.mouseModeSelector_.addEventListener('beginselection',this.onBeginSelection_.bind(this));this.mouseModeSelector_.addEventListener('updateselection',this.onUpdateSelection_.bind(this));this.mouseModeSelector_.addEventListener('endselection',this.onEndSelection_.bind(this));this.mouseModeSelector_.addEventListener('beginzoom',this.onBeginZoom_.bind(this));this.mouseModeSelector_.addEventListener('updatezoom',this.onUpdateZoom_.bind(this));this.mouseModeSelector_.addEventListener('endzoom',this.onEndZoom_.bind(this));this.mouseModeSelector_.addEventListener('entertiming',this.timingTool_.onEnterTiming.bind(this.timingTool_));this.mouseModeSelector_.addEventListener('begintiming',this.timingTool_.onBeginTiming.bind(this.timingTool_));this.mouseModeSelector_.addEventListener('updatetiming',this.timingTool_.onUpdateTiming.bind(this.timingTool_));this.mouseModeSelector_.addEventListener('endtiming',this.timingTool_.onEndTiming.bind(this.timingTool_));this.mouseModeSelector_.addEventListener('exittiming',this.timingTool_.onExitTiming.bind(this.timingTool_));const m=tr.ui.b.MOUSE_SELECTOR_MODE;this.mouseModeSelector_.supportedModeMask=m.SELECTION|m.PANSCAN|m.ZOOM|m.TIMING;this.mouseModeSelector_.settingsKey='timelineTrackView.mouseModeSelector';this.mouseModeSelector_.setKeyCodeForMode(m.PANSCAN,'2'.charCodeAt(0));this.mouseModeSelector_.setKeyCodeForMode(m.SELECTION,'1'.charCodeAt(0));this.mouseModeSelector_.setKeyCodeForMode(m.ZOOM,'3'.charCodeAt(0));this.mouseModeSelector_.setKeyCodeForMode(m.TIMING,'4'.charCodeAt(0));this.mouseModeSelector_.setModifierForAlternateMode(m.SELECTION,tr.ui.b.MODIFIER.SHIFT);this.mouseModeSelector_.setModifierForAlternateMode(m.PANSCAN,tr.ui.b.MODIFIER.SPACE);},get brushingStateController(){return this.brushingStateController_;},set brushingStateController(brushingStateController){if(this.brushingStateController_){this.brushingStateController_.removeEventListener('change',this.onSelectionChanged_);}
-this.brushingStateController_=brushingStateController;if(this.brushingStateController_){this.brushingStateController_.addEventListener('change',this.onSelectionChanged_);}},set timelineView(view){this.timelineView_=view;},onSelectionChanged_(){this.showHintText_('Press \'m\' to mark current selection');this.viewport_.dispatchChangeEvent();},set selection(selection){throw new Error('DO NOT CALL THIS');},set highlight(highlight){throw new Error('DO NOT CALL THIS');},detach(){this.modelTrack_.detach();this.upperModelTrack_.detach();if(this.pollIfViewportAttachedInterval_){window.clearInterval(this.pollIfViewportAttachedInterval_);this.pollIfViewportAttachedInterval_=undefined;}
+this.brushingStateController_=brushingStateController;if(this.brushingStateController_){this.brushingStateController_.addEventListener('change',this.onSelectionChanged_);}},set timelineView(view){this.timelineView_=view;},get processViews(){return this.modelTrack_.processViews;},onSelectionChanged_(){this.showHintText_('Press \'m\' to mark current selection');this.viewport_.dispatchChangeEvent();},set selection(selection){throw new Error('DO NOT CALL THIS');},set highlight(highlight){throw new Error('DO NOT CALL THIS');},detach(){this.modelTrack_.detach();this.upperModelTrack_.detach();if(this.pollIfViewportAttachedInterval_){window.clearInterval(this.pollIfViewportAttachedInterval_);this.pollIfViewportAttachedInterval_=undefined;}
this.viewport_.detach();},get viewport(){return this.viewport_;},get model(){return this.model_;},set model(model){if(!model){throw new Error('Model cannot be undefined');}
const modelInstanceChanged=this.model_!==model;this.model_=model;this.modelTrack_.model=model;this.upperModelTrack_.model=model;if(modelInstanceChanged){this.pollIfViewportAttachedInterval_=window.setInterval(this.pollIfViewportAttached_.bind(this),250);}},get hasVisibleContent(){return this.modelTrack_.hasVisibleContent||this.upperModelTrack_.hasVisibleContent;},pollIfViewportAttached_(){if(!this.viewport_.isAttachedToDocumentOrInTestMode||this.viewport_.clientWidth===0){return;}
window.addEventListener('resize',this.viewport_.dispatchChangeEvent);window.clearInterval(this.pollIfViewportAttachedInterval_);this.pollIfViewportAttachedInterval_=undefined;this.setInitialViewport_();},setInitialViewport_(){this.modelTrackContainer_.updateCanvasSizeIfNeeded_();const w=this.modelTrackContainer_.canvas.width;let min;let range;if(this.model_.bounds.isEmpty){min=0;range=1000;}else if(this.model_.bounds.range===0){min=this.model_.bounds.min;range=1000;}else{min=this.model_.bounds.min;range=this.model_.bounds.range;}
@@ -9270,13 +10080,14 @@ if(previouslyActivePanelType&&supportedPanelTypes.includes(previouslyActivePanel
Polymer.dom(this).removeAttribute('expanded');}},get rangeOfInterest(){return this.rangeOfInterest_;},set rangeOfInterest(range){if(range===undefined){throw new Error('Must not be undefined');}
this.rangeOfInterest_=range;if(this.activePanel){this.activePanel.rangeOfInterest=range;}}});'use strict';Polymer({is:'tr-ui-timeline-view-help-overlay',ready(){const mod=tr.isMac?'cmd ':'ctrl';const spans=Polymer.dom(this.root).querySelectorAll('span.mod');for(let i=0;i<spans.length;i++){Polymer.dom(spans[i]).textContent=mod;}}});'use strict';Polymer({is:'tr-ui-timeline-view-metadata-overlay',created(){this.metadata_=undefined;},ready(){this.$.table.tableColumns=[{title:'name',value:d=>d.name,},{title:'value',value:d=>{const gov=document.createElement('tr-ui-a-generic-object-view');gov.object=d.value;return gov;},}];},get metadata(){return this.metadata_;},set metadata(metadata){this.metadata_=metadata;this.$.table.tableRows=this.metadata_;this.$.table.rebuild();}});'use strict';Polymer({is:'tr-v-ui-preferred-display-unit',ready(){this.preferredTimeDisplayMode_=undefined;},attached(){tr.b.Unit.didPreferredTimeDisplayUnitChange();},detached(){tr.b.Unit.didPreferredTimeDisplayUnitChange();},get preferredTimeDisplayMode(){return this.preferredTimeDisplayMode_;},set preferredTimeDisplayMode(v){if(this.preferredTimeDisplayMode_===v)return;this.preferredTimeDisplayMode_=v;tr.b.Unit.didPreferredTimeDisplayUnitChange();}});'use strict';Polymer({is:'tr-ui-timeline-view',created(){this.trackViewContainer_=undefined;this.queuedModel_=undefined;this.builtPromise_=undefined;this.doneBuilding_=undefined;},attached(){this.async(function(){this.trackViewContainer_=Polymer.dom(this).querySelector('#track_view_container');if(!this.trackViewContainer_){throw new Error('missing trackviewContainer');}
if(this.queuedModel_)this.updateContents_();});},ready(){this.tabIndex=0;this.titleEl_=this.$.title;this.leftControlsEl_=this.$.left_controls;this.rightControlsEl_=this.$.right_controls;this.collapsingControlsEl_=this.$.collapsing_controls;this.sidePanelContainer_=this.$.side_panel_container;this.brushingStateController_=new tr.c.BrushingStateController(this);this.findCtl_=this.$.view_find_control;this.findCtl_.controller=new tr.ui.FindController(this.brushingStateController_);this.scriptingCtl_=document.createElement('tr-ui-scripting-control');this.scriptingCtl_.controller=new tr.c.ScriptingController(this.brushingStateController_);this.sidePanelContainer_.brushingStateController=this.brushingStateController_;if(window.tr.metrics&&window.tr.metrics.sh&&window.tr.metrics.sh.SystemHealthMetric){this.railScoreSpan_=document.createElement('tr-metrics-ui-sh-system-health-span');Polymer.dom(this.rightControls).appendChild(this.railScoreSpan_);}else{this.railScoreSpan_=undefined;}
-this.optionsDropdown_=this.$.view_options_dropdown;Polymer.dom(this.optionsDropdown_.iconElement).textContent='View Options';this.showFlowEvents_=false;Polymer.dom(this.optionsDropdown_).appendChild(tr.ui.b.createCheckBox(this,'showFlowEvents','tr.ui.TimelineView.showFlowEvents',false,'Flow events'));this.highlightVSync_=false;this.highlightVSyncCheckbox_=tr.ui.b.createCheckBox(this,'highlightVSync','tr.ui.TimelineView.highlightVSync',false,'Highlight VSync');Polymer.dom(this.optionsDropdown_).appendChild(this.highlightVSyncCheckbox_);this.initMetadataButton_();this.initConsoleButton_();this.initHelpButton_();Polymer.dom(this.collapsingControls).appendChild(this.scriptingCtl_);this.dragEl_=this.$.drag_handle;this.analysisEl_=this.$.analysis;this.analysisEl_.brushingStateController=this.brushingStateController_;this.addEventListener('requestSelectionChange',function(e){const sc=this.brushingStateController_;sc.changeSelectionFromRequestSelectionChangeEvent(e.selection);}.bind(this));this.onViewportChanged_=this.onViewportChanged_.bind(this);this.bindKeyListeners_();this.dragEl_.target=this.analysisEl_;},get globalMode(){return this.hotkeyController.globalMode;},set globalMode(globalMode){globalMode=!!globalMode;this.brushingStateController_.historyEnabled=globalMode;this.hotkeyController.globalMode=globalMode;},get hotkeyController(){return this.$.hkc;},updateDocumentFavicon(){let hue;if(!this.model){hue='blue';}else{hue=this.model.faviconHue;}
+this.processFilter_=this.$.process_filter_dropdown;this.optionsDropdown_=this.$.view_options_dropdown;Polymer.dom(this.optionsDropdown_.iconElement).textContent='View Options';this.showFlowEvents_=false;Polymer.dom(this.optionsDropdown_).appendChild(tr.ui.b.createCheckBox(this,'showFlowEvents','tr.ui.TimelineView.showFlowEvents',false,'Flow events'));this.highlightVSync_=false;this.highlightVSyncCheckbox_=tr.ui.b.createCheckBox(this,'highlightVSync','tr.ui.TimelineView.highlightVSync',false,'Highlight VSync');Polymer.dom(this.optionsDropdown_).appendChild(this.highlightVSyncCheckbox_);this.initMetadataButton_();this.initConsoleButton_();this.initHelpButton_();Polymer.dom(this.collapsingControls).appendChild(this.scriptingCtl_);this.dragEl_=this.$.drag_handle;this.analysisEl_=this.$.analysis;this.analysisEl_.brushingStateController=this.brushingStateController_;this.addEventListener('requestSelectionChange',function(e){const sc=this.brushingStateController_;sc.changeSelectionFromRequestSelectionChangeEvent(e.selection);}.bind(this));this.onViewportChanged_=this.onViewportChanged_.bind(this);this.bindKeyListeners_();this.dragEl_.target=this.analysisEl_;},get globalMode(){return this.hotkeyController.globalMode;},set globalMode(globalMode){globalMode=!!globalMode;this.brushingStateController_.historyEnabled=globalMode;this.hotkeyController.globalMode=globalMode;},get hotkeyController(){return this.$.hkc;},updateDocumentFavicon(){let hue;if(!this.model){hue='blue';}else{hue=this.model.faviconHue;}
let faviconData=tr.ui.b.FaviconsByHue[hue];if(faviconData===undefined){faviconData=tr.ui.b.FaviconsByHue.blue;}
let link=Polymer.dom(document.head).querySelector('link[rel="shortcut icon"]');if(!link){link=document.createElement('link');link.rel='shortcut icon';Polymer.dom(document.head).appendChild(link);}
link.href=faviconData;},get showFlowEvents(){return this.showFlowEvents_;},set showFlowEvents(showFlowEvents){this.showFlowEvents_=showFlowEvents;if(!this.trackView_)return;this.trackView_.viewport.showFlowEvents=showFlowEvents;},get highlightVSync(){return this.highlightVSync_;},set highlightVSync(highlightVSync){this.highlightVSync_=highlightVSync;if(!this.trackView_)return;this.trackView_.viewport.highlightVSync=highlightVSync;},initHelpButton_(){const helpButtonEl=this.$.view_help_button;const dlg=new tr.ui.b.Overlay();dlg.title='Chrome Tracing Help';dlg.visible=false;dlg.appendChild(document.createElement('tr-ui-timeline-view-help-overlay'));function onClick(e){dlg.visible=!dlg.visible;e.stopPropagation();}
helpButtonEl.addEventListener('click',onClick.bind(this));},initConsoleButton_(){const toggleEl=this.$.view_console_button;function onClick(e){this.scriptingCtl_.toggleVisibility();e.stopPropagation();return false;}
toggleEl.addEventListener('click',onClick.bind(this));},initMetadataButton_(){const showEl=this.$.view_metadata_button;function onClick(e){const dlg=new tr.ui.b.Overlay();dlg.title='Metadata for trace';const metadataOverlay=document.createElement('tr-ui-timeline-view-metadata-overlay');metadataOverlay.metadata=this.model.metadata;Polymer.dom(dlg).appendChild(metadataOverlay);dlg.visible=true;e.stopPropagation();return false;}
-showEl.addEventListener('click',onClick.bind(this));this.updateMetadataButtonVisibility_();},updateMetadataButtonVisibility_(){const showEl=this.$.view_metadata_button;showEl.style.display=(this.model&&this.model.metadata.length)?'':'none';},get leftControls(){return this.leftControlsEl_;},get rightControls(){return this.rightControlsEl_;},get collapsingControls(){return this.collapsingControlsEl_;},get viewTitle(){return Polymer.dom(this.titleEl_).textContent.substring(Polymer.dom(this.titleEl_).textContent.length-2);},set viewTitle(text){if(text===undefined){Polymer.dom(this.titleEl_).textContent='';this.titleEl_.hidden=true;return;}
+showEl.addEventListener('click',onClick.bind(this));this.updateMetadataButtonVisibility_();},updateMetadataButtonVisibility_(){const showEl=this.$.view_metadata_button;showEl.style.display=(this.model&&this.model.metadata.length)?'':'none';},updateProcessList_(){const dropdown=Polymer.dom(this.processFilter_);while(dropdown.firstChild){dropdown.removeChild(dropdown.firstChild);}
+if(!this.model)return;const trackView=this.trackViewContainer_.querySelector('tr-ui-timeline-track-view');const processViews=trackView.processViews;const cboxes=[];const updateAll=(checked)=>{for(const cbox of cboxes){cbox.checked=checked;}};dropdown.appendChild(tr.ui.b.createButton('All',()=>updateAll(true)));dropdown.appendChild(tr.ui.b.createButton('None',()=>updateAll(false)));for(const view of processViews){const cbox=tr.ui.b.createCheckBox(undefined,undefined,undefined,true,view.processBase.userFriendlyName,()=>view.visible=cbox.checked);cbox.checked=view.visible;cboxes.push(cbox);view.addEventListener('visibility',()=>cbox.checked=view.visible);dropdown.appendChild(cbox);}},get leftControls(){return this.leftControlsEl_;},get rightControls(){return this.rightControlsEl_;},get collapsingControls(){return this.collapsingControlsEl_;},get viewTitle(){return Polymer.dom(this.titleEl_).textContent.substring(Polymer.dom(this.titleEl_).textContent.length-2);},set viewTitle(text){if(text===undefined){Polymer.dom(this.titleEl_).textContent='';this.titleEl_.hidden=true;return;}
this.titleEl_.hidden=false;Polymer.dom(this.titleEl_).textContent=text;},get model(){if(this.trackView_){return this.trackView_.model;}
return undefined;},set model(model){this.build(model);},async build(model){this.queuedModel_=model;this.builtPromise_=new Promise((resolve,reject)=>{this.doneBuilding_=resolve;});if(this.trackViewContainer_)await this.updateContents_();},get builtPromise(){return this.builtPromise_;},async updateContents_(){if(this.trackViewContainer_===undefined){throw new Error('timeline-view.updateContents_ requires trackViewContainer_');}
const model=this.queuedModel_;this.queuedModel_=undefined;const modelInstanceChanged=model!==this.model;const modelValid=model&&!model.bounds.isEmpty;const importWarningsEl=Polymer.dom(this.root).querySelector('#import-warnings');Polymer.dom(importWarningsEl).textContent='';if(modelInstanceChanged){if(this.railScoreSpan_){this.railScoreSpan_.model=undefined;}
@@ -9286,7 +10097,7 @@ if(modelValid&&!this.trackView_){this.trackView_=document.createElement('tr-ui-t
if(modelValid){this.trackView_.model=model;this.trackView_.viewport.showFlowEvents=this.showFlowEvents;this.trackView_.viewport.highlightVSync=this.highlightVSync;if(this.railScoreSpan_){this.railScoreSpan_.model=model;}
this.$.display_unit.preferredTimeDisplayMode=model.intrinsicTimeUnit;}
if(model){for(const warning of model.importWarningsThatShouldBeShownToUser){importWarningsEl.addMessage(`Import Warning: ${warning.type}: ${warning.message}`,[{buttonText:'Dismiss',onClick(event,infobar){infobar.visible=false;}}]);}}
-if(modelInstanceChanged){this.updateMetadataButtonVisibility_();this.brushingStateController_.modelDidChange();this.onViewportChanged_();}
+if(modelInstanceChanged){this.updateProcessList_();this.updateMetadataButtonVisibility_();this.brushingStateController_.modelDidChange();this.onViewportChanged_();}
this.doneBuilding_();},get brushingStateController(){return this.brushingStateController_;},get trackView(){return this.trackView_;},get settings(){if(!this.settings_){this.settings_=new tr.b.Settings();}
return this.settings_;},set focusElement(value){throw new Error('This is deprecated. Please set globalMode to true.');},bindKeyListeners_(){const hkc=this.hotkeyController;hkc.addHotKey(new tr.ui.b.HotKey({eventType:'keypress',keyCode:'`'.charCodeAt(0),useCapture:true,thisArg:this,callback(e){this.scriptingCtl_.toggleVisibility();if(!this.scriptingCtl_.hasFocus){this.focus();}
e.stopPropagation();}}));hkc.addHotKey(new tr.ui.b.HotKey({eventType:'keypress',keyCode:'/'.charCodeAt(0),useCapture:true,thisArg:this,callback(e){if(this.scriptingCtl_.hasFocus)return;if(this.findCtl_.hasFocus){this.focus();}else{this.findCtl_.focus();}
@@ -9333,19 +10144,21 @@ const numFunctionsNow=FunctionRegistry.allFunctions.length;if(numFunctionsNow!==
return FunctionRegistry.allFunctions[numFunctionsNow-1];};FunctionHandle.fromDict=function(handleDict){const options=handleDict.options;let modulesToLoad;if(handleDict.modules_to_load!==undefined){modulesToLoad=handleDict.modules_to_load.map(function(module){return ModuleToLoad.fromDict(module);});}
return new FunctionHandle(modulesToLoad,handleDict.function_name,options);};return{FunctionHandle,ModuleToLoad,FunctionRegistry,};});'use strict';tr.exportTo('tr.metrics',function(){function runMetrics(model,options,addFailureCb){if(options===undefined){throw new Error('Options are required.');}
const metricNames=options.metrics;if(!metricNames){throw new Error('Metric names should be specified.');}
-const categories=getTraceCategories(model);const histograms=new tr.v.HistogramSet();for(const metricName of metricNames){const metric=tr.metrics.MetricRegistry.findTypeInfoWithName(metricName);if(metric===undefined){throw new Error(`"${metricName}" is not a registered metric.`);}
-validateTraceCategories(metric.metadata.requiredCategories,categories);try{metric.constructor(histograms,model,options);}catch(e){const err=tr.b.normalizeException(e);addFailureCb(new tr.mre.Failure(undefined,'metricMapFunction',model.canonicalUrl,err.typeName,err.message,err.stack));}}
-validateDiagnosticNames(histograms);return histograms;}
+const allMetricsStart=new Date();const durationBreakdown=new tr.v.d.Breakdown();const categories=getTraceCategories(model);const histograms=new tr.v.HistogramSet();histograms.createHistogram('trace_import_duration',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,model.stats.traceImportDurationMs,{binBoundaries:tr.v.HistogramBinBoundaries.createExponential(1e-3,1e5,30),description:'Duration that trace viewer required to import the trace',summaryOptions:tr.v.Histogram.AVERAGE_ONLY_SUMMARY_OPTIONS,});for(const metricName of metricNames){const metricStart=new Date();const metric=tr.metrics.MetricRegistry.findTypeInfoWithName(metricName);if(metric===undefined){throw new Error(`"${metricName}" is not a registered metric.`);}
+validateTraceCategories(metric.metadata.requiredCategories,categories);try{metric.constructor(histograms,model,options);}catch(e){const err=tr.b.normalizeException(e);addFailureCb(new tr.mre.Failure(undefined,'metricMapFunction',model.canonicalUrl,err.typeName,err.message,err.stack));}
+const metricMs=new Date()-metricStart;histograms.createHistogram(metricName+'_duration',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[metricMs]);durationBreakdown.set(metricName,metricMs);}
+validateDiagnosticNames(histograms);const allMetricsMs=new Date()-allMetricsStart+
+model.stats.traceImportDurationMs;durationBreakdown.set('traceImport',model.stats.traceImportDurationMs);durationBreakdown.set('other',allMetricsMs-tr.b.math.Statistics.sum(durationBreakdown,([metricName,metricMs])=>metricMs));const breakdownNames=tr.v.d.RelatedNameMap.fromEntries(new Map(metricNames.map(metricName=>[metricName,metricName+'_duration'])));breakdownNames.set('traceImport','trace_import_duration');histograms.createHistogram('metrics_duration',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[{value:allMetricsMs,diagnostics:{breakdown:durationBreakdown},},],{diagnostics:{breakdown:breakdownNames},});return histograms;}
function getTraceCategories(model){for(const metadata of model.metadata){let config;if(metadata.name==='TraceConfig'&&metadata.value){config=metadata.value;}
if(metadata.name==='metadata'&&metadata.value&&metadata.value['trace-config']&&metadata.value['trace-config']!=='__stripped__'){config=JSON.parse(metadata.value['trace-config']);}
if(config){return{excluded:config.excluded_categories||[],included:config.included_categories||[],};}}}
function validateTraceCategories(requiredCategories,categories){if(!requiredCategories)return;if(!categories)throw new Error('Missing trace config metadata');for(const cat of requiredCategories){const isDisabledByDefault=(cat.indexOf('disabled-by-default')===0);let missing=false;if(isDisabledByDefault){if(!categories.included.includes(cat)){missing=true;}}else if(categories.excluded.includes(cat)){missing=true;}
if(missing){throw new Error(`Trace is missing required category "${cat}"`);}}}
function validateDiagnosticNames(histograms){for(const hist of histograms){for(const name of hist.diagnostics.keys()){if(tr.v.d.RESERVED_NAMES_SET.has(name)){throw new Error(`Illegal diagnostic name "${name}" on Histogram "${hist.name}"`);}}}}
-function addTelemetryInfo(histograms,model){for(const metadata of model.metadata){if(!metadata.value||!metadata.value.telemetry)continue;const traceUrls=metadata.value.telemetry[tr.v.d.RESERVED_NAMES.TRACE_URLS];if(traceUrls&&model.canonicalUrl!==traceUrls[0]){throw new Error(`canonicalUrl "${model.canonicalUrl}" != `+`traceUrl "${traceUrls[0]}"`);}
-for(const[name,value]of Object.entries(metadata.value.telemetry)){const type=tr.v.d.RESERVED_NAMES_TO_TYPES.get(name);if(type===undefined){throw new Error(`Unexpected telemetry.${name}`);}
+function addTelemetryInfo(histograms,model){for(const metadata of model.metadata){if(!metadata.value||!metadata.value.telemetry)continue;for(const[name,value]of Object.entries(metadata.value.telemetry)){const type=tr.v.d.RESERVED_NAMES_TO_TYPES.get(name);if(type===undefined){throw new Error(`Unexpected telemetry.${name}`);}
histograms.addSharedDiagnosticToAllHistograms(name,new type(value));}}}
-function metricMapFunction(result,model,options){const histograms=runMetrics(model,options,result.addFailure.bind(result));addTelemetryInfo(histograms,model);result.addPair('histograms',histograms.asDicts());const scalarDicts=[];for(const value of histograms){for(const[statName,scalar]of value.statisticsScalars){scalarDicts.push({name:value.name+'_'+statName,numeric:scalar.asDict(),description:value.description,});}}
+function metricMapFunction(result,model,options){const histograms=runMetrics(model,options,result.addFailure.bind(result));addTelemetryInfo(histograms,model);if(model.canonicalUrl!==undefined){const info=tr.v.d.RESERVED_INFOS.TRACE_URLS;histograms.addSharedDiagnosticToAllHistograms(info.name,new info.type([model.canonicalUrl]));}
+result.addPair('histograms',histograms.asDicts());const scalarDicts=[];for(const value of histograms){for(const[statName,scalar]of value.statisticsScalars){scalarDicts.push({name:value.name+'_'+statName,numeric:scalar.asDict(),description:value.description,});}}
result.addPair('scalars',scalarDicts);}
tr.mre.FunctionRegistry.register(metricMapFunction);return{metricMapFunction,runMetrics,};});'use strict';tr.exportTo('tr.mre',function(){class MreResult{constructor(failures,pairs){if(failures===undefined){failures=[];}
if(pairs===undefined){pairs={};}
@@ -9386,7 +10199,7 @@ changeAnalysisViewRelatedEvents(eventSet){if(this.parentController&&(eventSet in
changeAnalysisLinkHoveredEvents(eventSet){if(this.parentController&&(eventSet instanceof tr.model.EventSet)){this.parentController.changeAnalysisLinkHoveredEvents(eventSet);}}
getViewSpecificBrushingState(viewId){if(this.parentController){this.parentController.getViewSpecificBrushingState(viewId);}}
changeViewSpecificBrushingState(viewId,newState){if(this.parentController){this.parentController.changeViewSpecificBrushingState(viewId,newState);}}}
-return{NullBrushingStateController,};});'use strict';tr.exportTo('tr.v',function(){const IGNORE_GROUPING_KEYS=['name','storyTags',];class CSVBuilder{constructor(histograms){this.histograms_=histograms;this.table_=[];this.statisticsNames_=new Set();this.groupings_=[];}
+return{NullBrushingStateController,};});'use strict';tr.exportTo('tr.v',function(){const IGNORE_GROUPING_KEYS=['name','storyTags','testPath',];class CSVBuilder{constructor(histograms){this.histograms_=histograms;this.table_=[];this.statisticsNames_=new Set();this.groupings_=[];}
build(){this.prepare_();this.buildHeader_();this.buildTable_();}
prepare_(){for(const[key,grouping]of tr.v.HistogramGrouping.BY_KEY){if(IGNORE_GROUPING_KEYS.includes(key))continue;this.groupings_.push(grouping);}
this.groupings_.push(new tr.v.GenericSetGrouping(tr.v.d.RESERVED_NAMES.TRACE_URLS));this.groupings_.sort((a,b)=>a.key.localeCompare(b.key));for(const hist of this.histograms_){for(const name of hist.statisticsNames){this.statisticsNames_.add(name);}}
@@ -9401,20 +10214,21 @@ let cell=''+row[i];cell=cell.replace(/\n/g,' ');if(cell.indexOf(',')>=0||cell.in
str+=cell;}
str+='\n';}
return str;}}
-return{CSVBuilder,};});'use strict';tr.exportTo('tr.v',function(){const getDisplayLabel=tr.v.HistogramGrouping.DISPLAY_LABEL.callback;const DEFAULT_POSSIBLE_GROUPS=[];DEFAULT_POSSIBLE_GROUPS.push(new tr.v.HistogramGrouping(tr.v.HistogramGrouping.HISTOGRAM_NAME.key,h=>h.shortName||h.name));const EXCLUDED_GROUPING_KEYS=[tr.v.HistogramGrouping.HISTOGRAM_NAME.key,tr.v.HistogramGrouping.DISPLAY_LABEL.key,];for(const group of tr.v.HistogramGrouping.BY_KEY.values()){if(EXCLUDED_GROUPING_KEYS.includes(group.key))continue;DEFAULT_POSSIBLE_GROUPS.push(group);}
+return{CSVBuilder,};});'use strict';tr.exportTo('tr.v',function(){const getDisplayLabel=tr.v.HistogramGrouping.DISPLAY_LABEL.callback;const DEFAULT_POSSIBLE_GROUPS=[];const EXCLUDED_GROUPING_KEYS=[tr.v.HistogramGrouping.DISPLAY_LABEL.key,];for(const group of tr.v.HistogramGrouping.BY_KEY.values()){if(EXCLUDED_GROUPING_KEYS.includes(group.key))continue;DEFAULT_POSSIBLE_GROUPS.push(group);}
class HistogramParameterCollector{constructor(){this.statisticNames_=new Set(['avg']);this.labelsToStartTimes_=new Map();this.keysToGroupings_=new Map(DEFAULT_POSSIBLE_GROUPS.map(g=>[g.key,g]));this.keysToValues_=new Map(DEFAULT_POSSIBLE_GROUPS.map(g=>[g.key,new Set()]));this.keysToValues_.delete(tr.v.HistogramGrouping.HISTOGRAM_NAME.key);}
process(histograms){const allStoryTags=new Set();let maxSampleCount=0;for(const hist of histograms){maxSampleCount=Math.max(maxSampleCount,hist.numValues);for(const statName of hist.statisticsNames){this.statisticNames_.add(statName);}
let startTime=hist.diagnostics.get(tr.v.d.RESERVED_NAMES.BENCHMARK_START);if(startTime!==undefined)startTime=startTime.minDate.getTime();const displayLabel=getDisplayLabel(hist);if(this.labelsToStartTimes_.has(displayLabel)){startTime=Math.min(startTime,this.labelsToStartTimes_.get(displayLabel));}
this.labelsToStartTimes_.set(displayLabel,startTime);for(const[groupingKey,values]of this.keysToValues_){const grouping=this.keysToGroupings_.get(groupingKey);const value=grouping.callback(hist);if(!value)continue;values.add(value);if(values.size>1){this.keysToValues_.delete(groupingKey);}}
const storyTags=hist.diagnostics.get(tr.v.d.RESERVED_NAMES.STORY_TAGS);for(const tag of(storyTags||[])){allStoryTags.add(tag);}}
tr.b.Timing.instant('HistogramParameterCollector','maxSampleCount',maxSampleCount);for(const tagGrouping of tr.v.HistogramGrouping.buildFromTags(allStoryTags,tr.v.d.RESERVED_NAMES.STORY_TAGS)){const values=new Set();for(const hist of histograms){values.add(tagGrouping.callback(hist));}
-if(values.size>1){this.keysToGroupings_.set(tagGrouping.key,tagGrouping);this.keysToValues_.set(tagGrouping.key,values);}}}
+if(values.size>1){this.keysToGroupings_.set(tagGrouping.key,tagGrouping);this.keysToValues_.set(tagGrouping.key,values);}}
+this.statisticNames_.add('pct_090');}
get statisticNames(){return Array.from(this.statisticNames_);}
get labels(){const displayLabels=Array.from(this.labelsToStartTimes_.keys());displayLabels.sort((x,y)=>this.labelsToStartTimes_.get(x)-this.labelsToStartTimes_.get(y));return displayLabels;}
get possibleGroupings(){for(const[key,values]of this.keysToValues_){if(values.size>=2)continue;this.keysToGroupings_.delete(key);}
return Array.from(this.keysToGroupings_.values());}}
-return{HistogramParameterCollector,};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-histogram-set-controls-export',exportRawCsv_(){this.export_(false,'csv');},exportRawJson_(){this.export_(false,'json');},exportMergedCsv_(){this.export_(true,'csv');},exportMergedJson_(){this.export_(true,'json');},export_(merged,format){tr.b.dispatchSimpleEvent(this,'export',true,true,{merged,format});},});return{};});'use strict';tr.exportTo('tr.v.ui',function(){const ALPHA_OPTIONS=[];for(let i=1;i<10;++i)ALPHA_OPTIONS.push(i*1e-3);for(let i=1;i<10;++i)ALPHA_OPTIONS.push(i*1e-2);ALPHA_OPTIONS.push(0.1);Polymer({is:'tr-v-ui-histogram-set-controls',properties:{searchQuery:{type:String,value:'',observer:'onUserChange_',},showAll:{type:Boolean,value:false,observer:'onUserChange_',},referenceDisplayLabel:{type:String,value:'',observer:'onUserChange_',},displayStatisticName:{type:String,value:'',observer:'onUserChange_',},alphaString:{type:String,computed:'getAlphaString_(alphaIndex)',},alphaIndex:{type:Number,value:9,observer:'onUserChange_',},},created(){this.viewState_=undefined;this.rowListener_=this.onRowViewStateUpdate_.bind(this);this.baseStatisticNames_=[];this.isInOnViewStateUpdate_=false;},ready(){this.$.picker.addEventListener('current-groups-changed',this.onGroupsChanged_.bind(this));},get viewState(){return this.viewState_;},set viewState(vs){if(this.viewState_){throw new Error('viewState must be set exactly once.');}
-this.viewState_=vs;this.viewState.addUpdateListener(this.onViewStateUpdate_.bind(this));},async onUserChange_(){if(!this.viewState)return;if(this.isInOnViewStateUpdate_)return;const marks=[];if(this.searchQuery!==this.viewState.searchQuery){marks.push(tr.b.Timing.mark('histogram-set-controls','search'));}
+return{HistogramParameterCollector,};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-histogram-set-controls-export',exportRawCsv_(){this.export_(false,'csv');},exportRawJson_(){this.export_(false,'json');},exportMergedCsv_(){this.export_(true,'csv');},exportMergedJson_(){this.export_(true,'json');},export_(merged,format){tr.b.dispatchSimpleEvent(this,'export',true,true,{merged,format});},});return{};});'use strict';tr.exportTo('tr.v.ui',function(){const ALPHA_OPTIONS=[];for(let i=1;i<10;++i)ALPHA_OPTIONS.push(i*1e-3);for(let i=1;i<10;++i)ALPHA_OPTIONS.push(i*1e-2);ALPHA_OPTIONS.push(0.1);Polymer({is:'tr-v-ui-histogram-set-controls',properties:{searchQuery:{type:String,value:'',observer:'onSearchQueryChange_',},showAll:{type:Boolean,value:true,observer:'onUserChange_',},referenceDisplayLabel:{type:String,value:'',observer:'onUserChange_',},displayStatisticName:{type:String,value:'',observer:'onUserChange_',},alphaString:{type:String,computed:'getAlphaString_(alphaIndex)',},alphaIndex:{type:Number,value:9,observer:'onUserChange_',},},created(){this.viewState_=undefined;this.rowListener_=this.onRowViewStateUpdate_.bind(this);this.baseStatisticNames_=[];this.isInOnViewStateUpdate_=false;this.searchQueryDebounceMs=200;},ready(){this.$.picker.addEventListener('current-groups-changed',this.onGroupsChanged_.bind(this));},get viewState(){return this.viewState_;},set viewState(vs){if(this.viewState_){throw new Error('viewState must be set exactly once.');}
+this.viewState_=vs;this.viewState.addUpdateListener(this.onViewStateUpdate_.bind(this));},async onSearchQueryChange_(){if(this.searchQueryDebounceMs===0)return this.onUserChange_();this.debounce('onSearchQueryDebounce',this.onUserChange_,this.searchQueryDebounceMs);},async onUserChange_(){if(!this.viewState)return;if(this.isInOnViewStateUpdate_)return;const marks=[];if(this.searchQuery!==this.viewState.searchQuery){marks.push(tr.b.Timing.mark('histogram-set-controls','search'));}
if(this.showAll!==this.viewState.showAll){marks.push(tr.b.Timing.mark('histogram-set-controls','showAll'));}
if(this.referenceDisplayLabel!==this.viewState.referenceDisplayLabel){marks.push(tr.b.Timing.mark('histogram-set-controls','referenceColumn'));}
if(this.displayStatisticName!==this.viewState.displayStatisticName){marks.push(tr.b.Timing.mark('histogram-set-controls','statistic'));}
@@ -9439,35 +10253,20 @@ for(const name of names){const option=document.createElement('option');option.te
if(names.includes(this.viewState.displayStatisticName)){this.displayStatisticName=this.viewState.displayStatisticName;this.$.statistic.value=this.displayStatisticName;}else{this.viewState.displayStatisticName=names[0]||'';}},get anyOverviewCharts_(){for(const row of tr.v.ui.HistogramSetTableRowState.walkAll(this.viewState.tableRowStates.values())){if(row.isOverviewed)return true;}
return false;},async toggleOverviewLineCharts_(){const showOverviews=!this.anyOverviewCharts_;const mark=tr.b.Timing.mark('histogram-set-controls',(showOverviews?'show':'hide')+'OverviewCharts');for(const row of tr.v.ui.HistogramSetTableRowState.walkAll(this.viewState.tableRowStates.values())){await row.update({isOverviewed:showOverviews});}
this.$.hide_overview.style.display=showOverviews?'inline':'none';this.$.show_overview.style.display=showOverviews?'none':'inline';await tr.b.animationFrame();mark.end();},set helpHref(href){this.$.help.href=href;this.$.help.style.display='inline';},set feedbackHref(href){this.$.feedback.href=href;this.$.feedback.style.display='inline';},clearSearch_(){this.set('searchQuery','');this.$.search.focus();},getAlphaString_(alphaIndex){return(''+ALPHA_OPTIONS[alphaIndex]).substr(0,5);},openAlphaSlider_(){const alphaButtonRect=this.$.alpha.getBoundingClientRect();this.$.alpha_slider_container.style.display='flex';this.$.alpha_slider_container.style.top=alphaButtonRect.bottom+'px';this.$.alpha_slider_container.style.left=alphaButtonRect.left+'px';this.$.alpha_slider.focus();},closeAlphaSlider_(){this.$.alpha_slider_container.style.display='';},updateAlpha_(){this.alphaIndex=this.$.alpha_slider.value;},getAlphaIndexFromViewState_(){for(let i=0;i<ALPHA_OPTIONS.length;++i){if(ALPHA_OPTIONS[i]>=this.viewState.alpha)return i;}
-return ALPHA_OPTIONS.length-1;},});return{};});'use strict';tr.exportTo('tr.v',function(){function deleteMergedToDiagnostics(histogramArrayMap){for(const[name,histograms]of histogramArrayMap){if(histograms instanceof Array){for(const histogram of histograms){histogram.diagnostics.delete(tr.v.d.RESERVED_NAMES.MERGED_TO);}}else if(histograms instanceof Map){deleteMergedToDiagnostics(histograms);}}}
-class HistogramSetHierarchy{constructor(name){this.name=name;this.description='';this.depth=0;this.subRows=[];this.columns=new Map();this.mergeRelationshipsForColumn_=new Map();}*walk(){yield this;for(const row of this.subRows)yield*row.walk();}
+return ALPHA_OPTIONS.length-1;},set enableVisualization(enable){this.$.show_visualization.style.display=enable?'inline':'none';},loadVisualization_(){tr.b.dispatchSimpleEvent(this,'loadVisualization',true,true,{});},});return{};});'use strict';tr.exportTo('tr.v',function(){class HistogramSetHierarchy{constructor(name){this.name=name;this.description='';this.depth=0;this.subRows=[];this.columns=new Map();}*walk(){yield this;for(const row of this.subRows)yield*row.walk();}
static*walkAll(rootRows){for(const rootRow of rootRows)yield*rootRow.walk();}
static build(histogramArrayMap){const rootRows=[];HistogramSetHierarchy.buildInternal_(histogramArrayMap,[],rootRows);const histograms=new tr.v.HistogramSet();for(const row of HistogramSetHierarchy.walkAll(rootRows)){for(const hist of row.columns.values()){if(!(hist instanceof tr.v.Histogram))continue;histograms.addHistogram(hist);}}
-histograms.deduplicateDiagnostics();for(const row of HistogramSetHierarchy.walkAll(rootRows)){for(const[name,hist]of row.columns){if(!(hist instanceof tr.v.Histogram))continue;if(!row.mergeRelationshipsForColumn_.get(name))continue;hist.diagnostics.mergeRelationships(hist);}}
-deleteMergedToDiagnostics(histogramArrayMap);for(const row of HistogramSetHierarchy.walkAll(rootRows)){row.maybeRebin_();}
+histograms.deduplicateDiagnostics();for(const row of HistogramSetHierarchy.walkAll(rootRows)){row.maybeRebin_();}
return rootRows;}
maybeRebin_(){const dataRange=new tr.b.math.Range();for(const hist of this.columns.values()){if(!(hist instanceof tr.v.Histogram))continue;if(hist.allBins.length>1)return;if(hist.numValues===0)continue;dataRange.addValue(hist.min);dataRange.addValue(hist.max);}
dataRange.addValue(tr.b.math.lesserWholeNumber(dataRange.min));dataRange.addValue(tr.b.math.greaterWholeNumber(dataRange.max));if(dataRange.min===dataRange.max)return;const boundaries=tr.v.HistogramBinBoundaries.createLinear(dataRange.min,dataRange.max,tr.v.DEFAULT_REBINNED_COUNT);for(const[name,hist]of this.columns){if(!(hist instanceof tr.v.Histogram))continue;this.columns.set(name,hist.rebin(boundaries));}}
-static mergeHistogramDownHierarchy_(histogram,hierarchy,columnName){let groupingPath=undefined;for(const row of hierarchy){if(groupingPath!==undefined){groupingPath.push(row.name);}else if(row.name===histogram.name){groupingPath=[];}
-if(!row.description){row.description=histogram.description;}
-const existing=row.columns.get(columnName);if(existing===undefined){const clone=histogram.clone();if(groupingPath!==undefined){new tr.v.d.GroupingPath(groupingPath).addToHistogram(clone);}
-row.columns.set(columnName,clone);row.mergeRelationshipsForColumn_.set(columnName,true);continue;}
+static mergeHistogramDownHierarchy_(histogram,hierarchy,columnName){for(const row of hierarchy){if(!row.description){row.description=histogram.description;}
+const existing=row.columns.get(columnName);if(existing===undefined){row.columns.set(columnName,histogram.clone());continue;}
if(existing instanceof tr.v.HistogramSet){existing.addHistogram(histogram);continue;}
-if(!existing.canAddHistogram(histogram)){const unmergeableHistograms=new tr.v.HistogramSet([histogram]);const mergedFrom=existing.diagnostics.get(tr.v.d.RESERVED_NAMES.MERGED_FROM);if(mergedFrom!==undefined){for(const[unusedName,origHist]of mergedFrom){unmergeableHistograms.addHistogram(origHist);}}
-row.columns.set(columnName,unmergeableHistograms);continue;}
-if(existing.name!==histogram.name){row.mergeRelationshipsForColumn_.set(name,false);}
+if(!existing.canAddHistogram(histogram)){const unmergeableHistograms=new tr.v.HistogramSet([histogram]);row.columns.set(columnName,unmergeableHistograms);continue;}
existing.addHistogram(histogram);}}
-static buildInternal_(histogramArrayMap,hierarchy,rootRows){for(const[name,histograms]of histogramArrayMap){if(histograms instanceof Array){for(const histogram of histograms){HistogramSetHierarchy.mergeHistogramDownHierarchy_(histogram,hierarchy,name);}}else if(histograms instanceof Map){const row=new HistogramSetHierarchy(name);row.depth=hierarchy.length;hierarchy.push(row);HistogramSetHierarchy.buildInternal_(histograms,hierarchy,rootRows);hierarchy.pop();if(hierarchy.length===0){rootRows.push(row);}else{const parentRow=hierarchy[hierarchy.length-1];parentRow.subRows.push(row);}}}}
-static filter(rows,histograms){const results=[];for(const row of rows){let filteredSubRows=[];if(row.subRows.length>0){filteredSubRows=HistogramSetHierarchy.filter(row.subRows,histograms);if(filteredSubRows.length===0)continue;}else{let found=false;for(const testHist of row.columns.values()){if(testHist instanceof tr.v.HistogramSet){for(const origHist of testHist){if(histograms.lookupHistogram(origHist.guid)!==undefined){found=true;break;}}
-if(found)break;continue;}
-if(!(testHist instanceof tr.v.Histogram)){throw new Error('Cells can only contain Histogram or HistogramSet');}
-if(histograms.lookupHistogram(testHist.guid)!==undefined){found=true;break;}
-const mergedFrom=testHist.diagnostics.get(tr.v.d.RESERVED_NAMES.MERGED_FROM);if(mergedFrom!==undefined){for(const[unusedName,origHist]of mergedFrom){if(histograms.lookupHistogram(origHist.guid)!==undefined){found=true;break;}}}
-if(found)break;}
-if(!found)continue;}
-const clone=new HistogramSetHierarchy(row.name);clone.description=row.description;clone.depth=row.depth;clone.subRows=filteredSubRows;clone.columns=row.columns;results.push(clone);}
-return results;}}
-return{HistogramSetHierarchy,};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-histogram-set-table-cell',created(){this.viewState_=undefined;this.rootListener_=this.onRootStateUpdate_.bind(this);this.row_=undefined;this.displayLabel_='';this.histogram_=undefined;this.histogramSpan_=undefined;this.overviewChart_=undefined;this.mwuResult_=undefined;},ready(){this.addEventListener('click',this.onClick_.bind(this));},attached(){if(this.row){this.row.rootViewState.addUpdateListener(this.rootListener_);}},detached(){this.row.rootViewState.removeUpdateListener(this.rootListener_);},updateMwu_(){const referenceHistogram=this.referenceHistogram;this.mwuResult_=undefined;if(!(this.histogram instanceof tr.v.Histogram))return;if(!this.histogram.canCompare(referenceHistogram))return;this.mwuResult_=tr.b.math.Statistics.mwu(this.histogram.sampleValues,referenceHistogram.sampleValues,this.row.rootViewState.alpha);},build(row,displayLabel,viewState){this.row_=row;this.displayLabel_=displayLabel;this.viewState_=viewState;this.histogram_=this.row.columns.get(displayLabel);if(this.viewState){this.viewState.addUpdateListener(this.onViewStateUpdate_.bind(this));}
+static buildInternal_(histogramArrayMap,hierarchy,rootRows){for(const[name,histograms]of histogramArrayMap){if(histograms instanceof Array){for(const histogram of histograms){HistogramSetHierarchy.mergeHistogramDownHierarchy_(histogram,hierarchy,name);}}else if(histograms instanceof Map){const row=new HistogramSetHierarchy(name);row.depth=hierarchy.length;hierarchy.push(row);HistogramSetHierarchy.buildInternal_(histograms,hierarchy,rootRows);hierarchy.pop();if(hierarchy.length===0){rootRows.push(row);}else{const parentRow=hierarchy[hierarchy.length-1];parentRow.subRows.push(row);}}}}}
+return{HistogramSetHierarchy};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-histogram-set-table-cell',created(){this.viewState_=undefined;this.rootListener_=this.onRootStateUpdate_.bind(this);this.row_=undefined;this.displayLabel_='';this.histogram_=undefined;this.histogramSpan_=undefined;this.overviewChart_=undefined;this.mwuResult_=undefined;},ready(){this.addEventListener('click',this.onClick_.bind(this));},attached(){if(this.row){this.row.rootViewState.addUpdateListener(this.rootListener_);}},detached(){this.row.rootViewState.removeUpdateListener(this.rootListener_);},updateMwu_(){const referenceHistogram=this.referenceHistogram;this.mwuResult_=undefined;if(!(this.histogram instanceof tr.v.Histogram))return;if(!this.histogram.canCompare(referenceHistogram))return;this.mwuResult_=tr.b.math.Statistics.mwu(this.histogram.sampleValues,referenceHistogram.sampleValues,this.row.rootViewState.alpha);},build(row,displayLabel,viewState){this.row_=row;this.displayLabel_=displayLabel;this.viewState_=viewState;this.histogram_=this.row.columns.get(displayLabel);if(this.viewState){this.viewState.addUpdateListener(this.onViewStateUpdate_.bind(this));}
this.row.viewState.addUpdateListener(this.onRowStateUpdate_.bind(this));if(this.isAttached){this.row.rootViewState.addUpdateListener(this.rootListener_);}
this.updateMwu_();this.updateContents_();},updateSignificance_(){if(!this.mwuResult_)return;this.$.scalar.significance=this.mwuResult_.significance;},get viewState(){return this.viewState_;},get row(){return this.row_;},get histogram(){return this.histogram_;},get referenceHistogram(){const referenceDisplayLabel=this.row.rootViewState.referenceDisplayLabel;if(!referenceDisplayLabel)return undefined;if(referenceDisplayLabel===this.displayLabel_)return undefined;return this.row.columns.get(referenceDisplayLabel);},get isHistogramOpen(){return(this.histogramSpan_!==undefined)&&(this.$.histogram.style.display==='block');},set isHistogramOpen(open){if(!(this.histogram instanceof tr.v.Histogram)||(this.histogram.numValues===0)){return;}
this.$.scalar.style.display=open?'none':'flex';this.$.open_histogram.style.display=open?'none':'block';this.$.close_histogram.style.display=open?'block':'none';this.$.histogram.style.display=open?'block':'none';if(open&&this.histogramSpan_===undefined){this.histogramSpan_=document.createElement('tr-v-ui-histogram-span');this.histogramSpan_.viewState=this.viewState;this.histogramSpan_.rowState=this.row.viewState;this.histogramSpan_.rootState=this.row.rootViewState;this.histogramSpan_.build(this.histogram,this.referenceHistogram);this.$.histogram.appendChild(this.histogramSpan_);}
@@ -9516,9 +10315,10 @@ get nameCell(){if(this.nameCell_===undefined){this.nameCell_=document.createElem
return this.nameCell_;}
getCell(columnName){if(this.cells.has(columnName))return this.cells.get(columnName);const cell=document.createElement('tr-v-ui-histogram-set-table-cell');cell.build(this,columnName,this.viewState.cells.get(columnName));this.cells.set(columnName,cell);return cell;}
compareNames(other){return this.name.localeCompare(other.name);}
-compareCells(other,displayLabel){const cellA=this.columns.get(displayLabel);const cellB=other.columns.get(displayLabel);if(!(cellA instanceof tr.v.Histogram)||!(cellB instanceof tr.v.Histogram)){return undefined;}
-let referenceCellA;let referenceCellB;const referenceDisplayLabel=this.rootViewState.referenceDisplayLabel;if(referenceDisplayLabel&&referenceDisplayLabel!==displayLabel){referenceCellA=this.columns.get(referenceDisplayLabel);referenceCellB=other.columns.get(referenceDisplayLabel);}
-const statisticA=cellA.getAvailableStatisticName(this.rootViewState.displayStatisticName,referenceCellA);const statisticB=cellB.getAvailableStatisticName(this.rootViewState.displayStatisticName,referenceCellB);const scalarA=cellA.getStatisticScalar(statisticA,referenceCellA);const scalarB=cellB.getStatisticScalar(statisticB,referenceCellB);const valueA=scalarA?scalarA.value:undefined;const valueB=scalarB?scalarB.value:undefined;return valueA-valueB;}
+compareCells(other,displayLabel){const referenceDisplayLabel=this.rootViewState.referenceDisplayLabel;let referenceCellA;let referenceCellB;if(referenceDisplayLabel&&referenceDisplayLabel!==displayLabel){referenceCellA=this.columns.get(referenceDisplayLabel);referenceCellB=other.columns.get(referenceDisplayLabel);}
+const cellA=this.columns.get(displayLabel);let valueA=0;if(cellA instanceof tr.v.Histogram){const statisticA=cellA.getAvailableStatisticName(this.rootViewState.displayStatisticName,referenceCellA);const scalarA=cellA.getStatisticScalar(statisticA,referenceCellA);if(scalarA){valueA=scalarA.value;}}
+const cellB=other.columns.get(displayLabel);let valueB=0;if(cellB instanceof tr.v.Histogram){const statisticB=cellB.getAvailableStatisticName(this.rootViewState.displayStatisticName,referenceCellB);const scalarB=cellB.getStatisticScalar(statisticB,referenceCellB);if(scalarB){valueB=scalarB.value;}}
+return valueA-valueB;}
onViewStateUpdate_(event){if(event.delta.isExpanded){this.baseTable_.setExpandedForTableRow(this,this.viewState.isExpanded);}
if(event.delta.subRows){throw new Error('HistogramSetTableRow.subRows must not be reassigned.');}
if(event.delta.cells){for(const[displayLabel,cell]of this.cells){if(cell.viewState!==this.viewState.cells.get(displayLabel)){throw new Error('Only HistogramSetTableRow may update cells');}}}}
@@ -9526,32 +10326,71 @@ async restoreState(vs){await this.viewState.update({isExpanded:vs.isExpanded,isO
for(const row of this.subRows){const previousState=vs.subRows.get(row.name);if(!previousState)continue;await row.restoreState(previousState);}}
sortSubRows(){const sortColumn=this.baseTable_.tableColumns[this.rootViewState_.sortColumnIndex];if(sortColumn===undefined)return;this.subRows_.sort(sortColumn.cmp);if(this.rootViewState_.sortDescending){this.subRows_.reverse();}}}
return{HistogramSetTableRow,};});'use strict';tr.exportTo('tr.v.ui',function(){const MIDLINE_HORIZONTAL_ELLIPSIS=String.fromCharCode(0x22ef);function escapeRegExp(str){return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,'\\$&');}
-Polymer({is:'tr-v-ui-histogram-set-table',created(){this.viewState_=undefined;this.progress_=()=>Promise.resolve();this.nameColumnTitle_=undefined;this.displayLabels_=[];this.histograms_=undefined;this.sourceHistograms_=undefined;this.groupedHistograms_=undefined;this.hierarchies_=undefined;this.tableRows_=undefined;this.sortColumnChangedListener_=e=>this.onSortColumnChanged_(e);},ready(){this.$.table.zebra=true;this.addEventListener('sort-column-changed',this.sortColumnChangedListener_);this.addEventListener('requestSelectionChange',this.onRequestSelectionChange_.bind(this));this.addEventListener('row-expanded-changed',this.onRowExpandedChanged_.bind(this));},get viewState(){return this.viewState_;},set viewState(vs){if(this.viewState_){throw new Error('viewState must be set exactly once.');}
-this.viewState_=vs;this.viewState.addUpdateListener(this.onViewStateUpdate_.bind(this));},get histograms(){return this.histograms_;},async build(histograms,sourceHistograms,displayLabels,opt_progress){this.histograms_=histograms;this.sourceHistograms_=sourceHistograms;this.groupedHistograms_=undefined;this.displayLabels_=displayLabels;if(opt_progress!==undefined)this.progress_=opt_progress;if(histograms.length===0){throw new Error('histogram-set-table requires non-empty HistogramSet.');}
+Polymer({is:'tr-v-ui-histogram-set-table',created(){this.viewState_=undefined;this.progress_=()=>Promise.resolve();this.nameColumnTitle_=undefined;this.displayLabels_=[];this.histograms_=undefined;this.sourceHistograms_=undefined;this.filteredHistograms_=undefined;this.groupedHistograms_=undefined;this.hierarchies_=undefined;this.tableRows_=undefined;this.sortColumnChangedListener_=e=>this.onSortColumnChanged_(e);},ready(){this.$.table.zebra=true;this.addEventListener('sort-column-changed',this.sortColumnChangedListener_);this.addEventListener('requestSelectionChange',this.onRequestSelectionChange_.bind(this));this.addEventListener('row-expanded-changed',this.onRowExpandedChanged_.bind(this));},get viewState(){return this.viewState_;},set viewState(vs){if(this.viewState_){throw new Error('viewState must be set exactly once.');}
+this.viewState_=vs;this.viewState.addUpdateListener(this.onViewStateUpdate_.bind(this));},get histograms(){return this.histograms_;},async build(histograms,sourceHistograms,displayLabels,opt_progress){this.histograms_=histograms;this.sourceHistograms_=sourceHistograms;this.filteredHistograms_=undefined;this.groupedHistograms_=undefined;this.displayLabels_=displayLabels;if(opt_progress!==undefined)this.progress_=opt_progress;if(histograms.length===0){throw new Error('histogram-set-table requires non-empty HistogramSet.');}
await this.progress_('Building columns...');this.$.table.tableColumns=[{title:this.buildNameColumnTitle_(),value:row=>row.nameCell,cmp:(a,b)=>a.compareNames(b),}].concat(displayLabels.map(l=>this.buildColumn_(l)));tr.b.Timing.instant('histogram-set-table','columnCount',this.$.table.tableColumns.length);await this.updateContents_();this.fire('display-ready');this.progress_=()=>Promise.resolve();this.checkNameColumnOverflow_(tr.v.ui.HistogramSetTableRow.walkAll(this.$.table.tableRows));},buildNameColumnTitle_(){this.nameColumnTitle_=document.createElement('span');this.nameColumnTitle_.style.display='inline-flex';const nameEl=document.createElement('span');nameEl.textContent='Name';this.nameColumnTitle_.appendChild(nameEl);const toggleWidthEl=document.createElement('span');toggleWidthEl.style.fontWeight='bold';toggleWidthEl.style.background='#bbb';toggleWidthEl.style.color='#333';toggleWidthEl.style.padding='0px 3px';toggleWidthEl.style.marginRight='8px';toggleWidthEl.style.display='none';toggleWidthEl.textContent=MIDLINE_HORIZONTAL_ELLIPSIS;toggleWidthEl.addEventListener('click',this.toggleNameColumnWidth_.bind(this));this.nameColumnTitle_.appendChild(toggleWidthEl);return this.nameColumnTitle_;},toggleNameColumnWidth_(opt_event){this.viewState.update({constrainNameColumn:!this.viewState.constrainNameColumn,});if(opt_event!==undefined){opt_event.stopPropagation();opt_event.preventDefault();tr.b.Timing.instant('histogram-set-table','nameColumn'+
-(this.viewState.constrainNameColumn?'Constrained':'Unconstrained'));}},buildColumn_(displayLabel){const title=document.createElement('span');title.textContent=displayLabel;title.style.whiteSpace='pre';return{displayLabel,title,value:row=>row.getCell(displayLabel),cmp:(rowA,rowB)=>rowA.compareCells(rowB,displayLabel),};},async updateContents_(){if(this.groupedHistograms_===undefined){await this.progress_('Grouping Histograms...');this.groupHistograms_();}
-if(this.hierarchies_===undefined){await this.progress_('Merging Histograms...');this.hierarchies_=tr.v.HistogramSetHierarchy.build(this.groupedHistograms_);this.tableRows_=undefined;}
-const tableRowsDirty=this.tableRows_===undefined;const previousRowStates=this.viewState.tableRowStates;if(tableRowsDirty){await this.progress_('Filtering rows...');let filteredHistograms=this.viewState.showAll?this.histograms:this.sourceHistograms_;if(this.viewState.searchQuery){let query=undefined;try{query=new RegExp(this.viewState.searchQuery);}catch(e){}
-if(query!==undefined){filteredHistograms=new tr.v.HistogramSet([...filteredHistograms].filter(hist=>hist.name.match(query)));if(filteredHistograms.length===0&&!this.viewState.showAll){await this.viewState.update({showAll:true});return;}}}
-const filteredHierarchies=tr.v.HistogramSetHierarchy.filter(this.hierarchies_,filteredHistograms);this.tableRows_=filteredHierarchies.map(hierarchy=>new tr.v.ui.HistogramSetTableRow(hierarchy,this.$.table,this.viewState));tr.b.Timing.instant('histogram-set-table','rootRowCount',this.tableRows_.length);const namesToRowStates=new Map();for(const row of this.tableRows_){namesToRowStates.set(row.name,row.viewState);}
+(this.viewState.constrainNameColumn?'Constrained':'Unconstrained'));}},buildColumn_(displayLabel){const title=document.createElement('span');title.textContent=displayLabel;title.style.whiteSpace='pre';return{displayLabel,title,value:row=>row.getCell(displayLabel),cmp:(rowA,rowB)=>rowA.compareCells(rowB,displayLabel),};},async updateContents_(){const previousRowStates=this.viewState.tableRowStates;if(!this.filteredHistograms_){await this.progress_('Filtering rows...');this.filteredHistograms_=this.viewState.showAll?this.histograms:this.sourceHistograms_;if(this.viewState.searchQuery){let query;try{query=new RegExp(this.viewState.searchQuery);}catch(e){}
+if(query!==undefined){this.filteredHistograms_=new tr.v.HistogramSet([...this.filteredHistograms_].filter(hist=>hist.name.match(query)));if(this.filteredHistograms_.length===0&&!this.viewState.showAll){await this.viewState.update({showAll:true});return;}}}
+this.groupedHistograms_=undefined;}
+if(!this.groupedHistograms_){await this.progress_('Grouping Histograms...');this.groupHistograms_();}
+if(!this.hierarchies_){await this.progress_('Merging Histograms...');this.hierarchies_=tr.v.HistogramSetHierarchy.build(this.groupedHistograms_);this.tableRows_=undefined;}
+const tableRowsDirty=this.tableRows_===undefined;if(tableRowsDirty){this.tableRows_=this.hierarchies_.map(hierarchy=>new tr.v.ui.HistogramSetTableRow(hierarchy,this.$.table,this.viewState));tr.b.Timing.instant('histogram-set-table','rootRowCount',this.tableRows_.length);const namesToRowStates=new Map();for(const row of this.tableRows_){namesToRowStates.set(row.name,row.viewState);}
await this.viewState.update({tableRowStates:namesToRowStates});}
await this.progress_('Configuring table...');this.nameColumnTitle_.children[1].style.filter=this.viewState.constrainNameColumn?'invert(100%)':'';const referenceDisplayLabelIndex=this.displayLabels_.indexOf(this.viewState.referenceDisplayLabel);this.$.table.selectedTableColumnIndex=(referenceDisplayLabelIndex<0)?undefined:(1+referenceDisplayLabelIndex);this.removeEventListener('sort-column-changed',this.sortColumnChangedListener_);this.$.table.sortColumnIndex=this.viewState.sortColumnIndex;this.$.table.sortDescending=this.viewState.sortDescending;this.addEventListener('sort-column-changed',this.sortColumnChangedListener_);if(tableRowsDirty){await this.progress_('Building DOM...');this.$.table.tableRows=this.tableRows_;for(const row of this.tableRows_){const previousState=previousRowStates.get(row.name);if(!previousState)continue;await row.restoreState(previousState);}}
this.$.table.rebuild();},async onRowExpandedChanged_(event){event.row.viewState.isExpanded=this.$.table.getExpandedForTableRow(event.row);tr.b.Timing.instant('histogram-set-table','row'+(event.row.viewState.isExpanded?'Expanded':'Collapsed'));if(this.nameColumnTitle_.children[1].style.display==='block')return;await tr.b.animationFrame();this.checkNameColumnOverflow_(event.row.subRows);},checkNameColumnOverflow_(rows){for(const row of rows){if(!row.nameCell.isOverflowing)continue;const[nameSpan,dots]=this.nameColumnTitle_.children;dots.style.display='block';const labelWidthPx=tr.v.ui.NAME_COLUMN_WIDTH_PX-
dots.getBoundingClientRect().width;nameSpan.style.width=labelWidthPx+'px';return;}},groupHistograms_(){const groupings=this.viewState.groupings.slice();groupings.push(tr.v.HistogramGrouping.DISPLAY_LABEL);function canSkipGrouping(grouping,groupedHistograms){if(groupedHistograms.size>1)return false;if(grouping.key===groupings[0].key)return false;if(grouping.key===tr.v.HistogramGrouping.DISPLAY_LABEL.key){return false;}
return true;}
-this.groupedHistograms_=this.histograms.groupHistogramsRecursively(groupings,canSkipGrouping);this.hierarchies_=undefined;},async onViewStateUpdate_(event){if(this.histograms_===undefined)return;if(event.delta.groupings!==undefined){this.groupedHistograms_=undefined;}
-if(event.delta.searchQuery!==undefined||event.delta.showAll!==undefined){this.tableRows_=undefined;}
+this.groupedHistograms_=this.filteredHistograms_.groupHistogramsRecursively(groupings,canSkipGrouping);this.hierarchies_=undefined;},async onViewStateUpdate_(event){if(this.histograms_===undefined)return;if(event.delta.searchQuery!==undefined||event.delta.showAll!==undefined){this.filteredHistograms_=undefined;}
+if(event.delta.groupings!==undefined){this.groupedHistograms_=undefined;}
if(event.delta.displayStatistic!==undefined&&this.$.table.sortColumnIndex>0){this.$.table.sortColumnIndex=undefined;}
if(event.delta.referenceDisplayLabel!==undefined||event.delta.displayStatisticName!==undefined){this.$.table.tableRows=this.$.table.tableRows;}
if(event.delta.tableRowStates){if(this.tableRows_.length!==this.viewState.tableRowStates.size){throw new Error('Only histogram-set-table may update tableRowStates');}
-for(const row of this.tableRows_){if(this.viewState.tableRowStates.get(row.name)!==row.viewState){throw new Error('Only histogram-set-table may update tableRowStates');}}}
+for(const row of this.tableRows_){if(this.viewState.tableRowStates.get(row.name)!==row.viewState){throw new Error('Only histogram-set-table may update tableRowStates');}}
+return;}
await this.updateContents_();},onSortColumnChanged_(event){tr.b.Timing.instant('histogram-set-table','sortColumn');this.viewState.update({sortColumnIndex:event.sortColumnIndex,sortDescending:event.sortDescending,});},onRequestSelectionChange_(event){if(event.selection instanceof tr.model.EventSet)return;event.stopPropagation();tr.b.Timing.instant('histogram-set-table','selectHistogramNames');let histogramNames=event.selection;histogramNames.sort();histogramNames=histogramNames.map(escapeRegExp).join('|');this.viewState.update({showAll:true,searchQuery:`^(${histogramNames})$`,});},get leafHistograms(){const histograms=new tr.v.HistogramSet();for(const row of
tr.v.ui.HistogramSetTableRow.walkAll(this.$.table.tableRows)){if(row.subRows.length)continue;for(const hist of row.columns.values()){if(!(hist instanceof tr.v.Histogram))continue;histograms.addHistogram(hist);}}
-return histograms;}});return{MIDLINE_HORIZONTAL_ELLIPSIS,};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-histogram-set-view',listeners:{export:'onExport_',},created(){this.brushingStateController_=new tr.ui.NullBrushingStateController();this.viewState_=new tr.v.ui.HistogramSetViewState();},ready(){this.$.table.viewState=this.viewState;this.$.controls.viewState=this.viewState;},attached(){this.brushingStateController.parentController=tr.c.BrushingStateController.getControllerForElement(this.parentNode);},get brushingStateController(){return this.brushingStateController_;},get viewState(){return this.viewState_;},get histograms(){return this.$.table.histograms;},async build(histograms,opt_options){const options=opt_options||{};const progress=options.progress||(()=>Promise.resolve());if(options.helpHref)this.$.controls.helpHref=options.helpHref;if(options.feedbackHref){this.$.controls.feedbackHref=options.feedbackHref;}
+return histograms;}});return{MIDLINE_HORIZONTAL_ELLIPSIS,};});'use strict';tr.exportTo('tr.v.ui',function(){const PAGE_BREAKDOWN_KEY='pageBreakdown';Polymer({is:'tr-v-ui-metrics-visualization',created(){this.charts_=new Map();},ready(){this.$.start.addEventListener('keydown',(e)=>{if(e.key==='Enter')this.filterByPercentile_();});this.$.end.addEventListener('keydown',(e)=>{if(e.key==='Enter')this.filterByPercentile_();});this.$.search_page.addEventListener('keydown',(e)=>{if(e.key==='Enter')this.searchByPage_();});},build(chartData){this.title_=chartData.title;this.aggregateData_=chartData.aggregate;this.data_=chartData.page;this.submetricsData_=chartData.submetrics;this.benchmarkCount_=chartData.aggregate.length;const aggregateChart=this.initializeColumnChart(this.title_);Polymer.dom(this.$.aggregateContainer).appendChild(aggregateChart);this.charts_.set(tr.v.ui.AGGREGATE_KEY,aggregateChart);this.setChartColors_(tr.v.ui.AGGREGATE_KEY);aggregateChart.data=chartData.aggregate;this.setChartSize_(tr.v.ui.AGGREGATE_KEY);const newChart=this.initializeColumnChart(this.title_+' Breakdown');newChart.enableToolTip=true;newChart.toolTipCallBack=(rect)=>this.openChildChart_(rect);Polymer.dom(this.$.pageByPageContainer).appendChild(newChart);this.charts_.set(PAGE_BREAKDOWN_KEY,newChart);this.setChartColors_(PAGE_BREAKDOWN_KEY);newChart.data=this.data_;this.setChartSize_(PAGE_BREAKDOWN_KEY);},setChartSize_(page){const chart=this.charts_.get(page);const pageCount=chart.data.length;chart.graphHeight=tr.b.math.clamp(pageCount*20,400,600);chart.graphWidth=tr.b.math.clamp(pageCount*30,200,1000);},setChartColors_(page){const chart=this.charts_.get(page);const metrics=tr.v.ui.METRICS.get(this.title_);for(let i=0;i<this.benchmarkCount_;++i){for(let j=0;j<metrics.length;++j){const mainColorIndex=j%tr.v.ui.COLORS.length;const subColorIndex=i%tr.v.ui.COLORS[mainColorIndex].length;const color=tr.v.ui.COLORS[mainColorIndex][subColorIndex];const series=metrics[j]+'-'+this.aggregateData_[i].x;chart.getDataSeries(series).color=color;if(i===0){chart.getDataSeries(series).title=metrics[j];}else{chart.getDataSeries(series).title='';}}}},initializeColumnChart(title){const newChart=new tr.ui.b.NameColumnChart();newChart.hideLegend=false;newChart.isStacked=true;newChart.yAxisLabel='ms';newChart.hideXAxis=true;newChart.displayXInHover=true;newChart.isGrouped=true;newChart.showTitleInLegend=true;newChart.chartTitle=title;newChart.titleHeight='14pt';return newChart;},initializeChildChart_(title,height,width){const div=document.createElement('div');div.classList.add('container');Polymer.dom(this.$.submetricsContainer).insertBefore(div,this.$.submetricsContainer.firstChild);const childChart=new tr.ui.b.NameBarChart();childChart.xAxisLabel='ms';childChart.chartTitle=title;childChart.graphHeight=height;childChart.graphWidth=width;childChart.titleHeight='14pt';childChart.isStacked=true;childChart.hideLegend=true;childChart.isGrouped=true;childChart.isWaterfall=true;div.appendChild(childChart);const button=this.initializeCloseButton_(div,this.$.submetricsContainer);div.appendChild(button);return childChart;},initializeCloseButton_(div,parent){const button=this.$.close.cloneNode(true);button.style.display='inline-block';button.addEventListener('click',()=>{Polymer.dom(parent).removeChild(div);});return button;},openChildChart_(rect){const metrics=tr.v.ui.METRICS.get(this.title_);let metric;let metricIndex;for(let i=0;i<metrics.length;++i){if(rect.key.startsWith(metrics[i])){metric=metrics[i];metricIndex=i;break;}}
+const page=rect.datum.group;const title=this.title_+' '+metric+': '+page;const submetrics=this.submetricsData_.get(page).get(metric);const width=tr.b.math.clamp(submetrics.size*150,300,700);const height=tr.b.math.clamp(submetrics.size*this.benchmarkCount_*50,300,700);const childChart=this.initializeChildChart_(title,height,width);childChart.data=this.processSubmetrics_(childChart,submetrics,0,metricIndex).data;},processSubmetrics_(chart,submetrics,hideValue,metricIndex){const finalData=[];let submetricIndex=0;for(const submetric of submetrics.values()){let benchmarkIndex=0;for(const benchmark of submetric.values()){benchmark.hide=!hideValue?0:hideValue;const series=benchmark.x+'-'+benchmark.group;const mainColorIndex=metricIndex%tr.v.ui.COLORS.length;const subColorIndex=benchmarkIndex%tr.v.ui.COLORS[mainColorIndex].length;chart.getDataSeries(series).color=tr.v.ui.COLORS[mainColorIndex][subColorIndex];if(benchmarkIndex===(this.benchmarkCount_-1)){hideValue+=benchmark[series];}
+finalData.push(benchmark);benchmarkIndex++;}
+submetricIndex++;}
+return{data:finalData,hide:hideValue};},filterByPercentile_(){const startPercentile=this.$.start.value;const endPercentile=this.$.end.value;if(startPercentile===''||endPercentile==='')return;const length=this.data_.length/(this.benchmarkCount_+1);const startIndex=this.getPercentileIndex_(startPercentile,length);const endIndex=this.getPercentileIndex_(endPercentile,length);this.charts_.get(PAGE_BREAKDOWN_KEY).data=this.data_.slice(startIndex,endIndex);},getPercentileIndex_(percentile,arrayLength){const index=Math.ceil(arrayLength*(percentile/100.0));if(index===-1)return 0;if(index>=arrayLength)return arrayLength;return index*this.benchmarkCount_;},searchByPage_(){const criteria=this.$.search_page.value;if(criteria==='')return;const query=new RegExp(criteria);const filteredData=[...this.data_].filter(group=>{if(group.group)return group.group.match(query);return false;});if(filteredData.length<1){this.$.search_error.style.display='block';return;}
+const page=filteredData[0].group;const title=this.title_+' Breakdown: '+page;const metricToSubmetricMap=this.submetricsData_.get(page);let totalSubmetrics=0;for(const submetrics of metricToSubmetricMap.values()){for(const benchmark of submetrics.values()){totalSubmetrics+=benchmark.length;}}
+const width=tr.b.math.clamp(totalSubmetrics*150,300,700);const height=tr.b.math.clamp(totalSubmetrics*this.benchmarkCount_*30,300,700);const childChart=this.initializeChildChart_(title,height,width);const childData=[];let hide=0;let metricIndex=0;for(const submetrics of metricToSubmetricMap.values()){const submetricsData=this.processSubmetrics_(childChart,submetrics,hide,metricIndex);childData.push(...submetricsData.data);hide=submetricsData.hide;metricIndex++;}
+childChart.data=childData;},});});'use strict';Polymer({is:'tr-v-ui-raster-visualization',ready(){this.$.pageSelector.addEventListener('click',()=>{this.selectPage_();});this.$.search_page.addEventListener('keydown',(e)=>{if(e.key==='Enter')this.searchByPage_();});this.$.search_button.addEventListener('click',()=>{this.searchByPage_();});},build(chartData){this.data_=chartData;const aggregateChart=this.createChart_('Aggregate Data by Run');Polymer.dom(this.$.aggregateContainer).appendChild(aggregateChart);aggregateChart.enableToolTip=true;aggregateChart.toolTipCallBack=(rect)=>this.openBenchmarkChart_(rect);this.setChartColors_(aggregateChart,this.data_.get(tr.v.ui.AGGREGATE_KEY));aggregateChart.data=this.data_.get(tr.v.ui.AGGREGATE_KEY);this.setChartSize_(aggregateChart,this.data_.get(tr.v.ui.AGGREGATE_KEY).length);for(const page of this.data_.keys()){if(page===tr.v.ui.AGGREGATE_KEY)continue;const option=document.createElement('option');option.textContent=page;option.value=page;this.$.pageSelector.appendChild(option);}},setChartSize_(chart,pageCount,dataLength){chart.graphHeight=tr.b.math.clamp(pageCount*25,175,1000);chart.graphWidth=tr.b.math.clamp(pageCount*25,500,1000);},setChartColors_(chart,data){const metrics=new Map();let count=0;for(const thread of tr.v.ui.FRAME.values()){for(const metric of thread.keys()){metrics.set(metric,count);count++;}}
+for(let i=0;i<Math.floor(data.length/tr.v.ui.FRAME.length);++i){let j=0;for(const[threadName,thread]of tr.v.ui.FRAME.entries()){for(const metric of thread.keys()){let color='transparent';if(thread.get(metric)){const mainColorIndex=metrics.get(metric)%tr.v.ui.COLORS.length;const subColorIndex=i%tr.v.ui.COLORS[mainColorIndex].length;color=tr.v.ui.COLORS[mainColorIndex][subColorIndex];}
+const series=metric+'-'+data[i*2+j].x+'-'+threadName;chart.getDataSeries(series).color=color;chart.getDataSeries(series).title=!i?metric:'';}
+j++;}}},createChart_(title){const newChart=new tr.ui.b.NameBarChart();newChart.chartTitle=title;newChart.xAxisLabel='ms';newChart.hideLegend=false;newChart.showTitleInLegend=true;newChart.hideYAxis=true;newChart.isStacked=true;newChart.displayXInHover=true;newChart.isGrouped=true;return newChart;},openBenchmarkChart_(rect){const benchmarkIndex=Math.floor(rect.index/tr.v.ui.FRAME.length);const title=rect.datum.x;const div=document.createElement('div');Polymer.dom(this.$.pageContainer).insertBefore(div,this.$.pageContainer.firstChild);const chart=this.createChart_(title);div.appendChild(chart);const button=this.initializeCloseButton_(div,this.$.pageContainer);div.appendChild(button);const newDataSet=[];for(const page of this.data_.keys()){if(page===tr.v.ui.AGGREGATE_KEY)continue;for(let i=0;i<tr.v.ui.FRAME.length;i++){newDataSet.push(this.data_.get(page)[benchmarkIndex*tr.v.ui.FRAME.length+i]);}}
+this.setChartColors_(chart,newDataSet);chart.data=newDataSet;this.setChartSize_(chart,newDataSet.length);},selectPage_(){const div=document.createElement('div');const page=this.$.pageSelector.value;if(page==='')return;Polymer.dom(this.$.pageContainer).insertBefore(div,this.$.pageContainer.firstChild);const pageChart=this.createChart_(page);div.appendChild(pageChart);const button=this.initializeCloseButton_(div,this.$.pageContainer);div.appendChild(button);const pageData=this.data_.get(page);this.setChartColors_(pageChart,pageData);pageChart.data=pageData;this.setChartSize_(pageChart,pageData.length);},searchByPage_(){const criteria=this.$.search_page.value;if(criteria==='')return;const query=new RegExp(criteria);const filteredData=[...this.data_.keys()].filter(page=>page.match(query));if(filteredData.length<1){this.$.search_error.style.display='block';return;}
+const page=filteredData[0];const div=document.createElement('div');Polymer.dom(this.$.pageContainer).insertBefore(div,this.$.pageContainer.firstChild);const pageChart=this.createChart_(page);div.appendChild(pageChart);const button=this.initializeCloseButton_(div,this.$.pageContainer);div.appendChild(button);const pageData=this.data_.get(page);this.setChartColors_(pageChart,pageData);pageChart.data=pageData;this.setChartSize_(pageChart,pageData.length);},initializeCloseButton_(div,parent){const button=this.$.close.cloneNode(true);button.style.display='inline-block';button.addEventListener('click',()=>{Polymer.dom(parent).removeChild(div);});return button;},});'use strict';tr.exportTo('tr.v.ui',function(){const STATISTICS_KEY='statistics';const SUBMETRICS_KEY='submetrics';const AGGREGATE_KEY='aggregate';const RASTER_START_METRIC_KEY='pipeline:begin_frame_to_raster_start';const COLORS=[['#FFD740','#FFC400','#FFAB00','#E29800'],['#FF6E40','#FF3D00','#DD2C00','#A32000'],['#40C4FF','#00B0FF','#0091EA','#006DAF'],['#89C641','#54B503','#4AA510','#377A0D'],['#B388FF','#7C4DFF','#651FFF','#6200EA'],['#FF80AB','#FF4081','#F50057','#C51162'],['#FFAB40','#FF9100','#FF6D00','#D65C02'],['#8C9EFF','#536DFE','#3D5AFE','#304FFE']];const FRAME=[new Map([['pipeline:begin_frame_to_raster_start',false],['pipeline:begin_frame_to_raster_end',true]]),new Map([['pipeline:begin_frame_transport',true],['pipeline:begin_frame_to_frame_submission',true],['pipeline:frame_submission_to_display',true],['pipeline:draw',true]])];const METRICS=new Map([['Pipeline',['pipeline:begin_frame_transport','pipeline:begin_frame_to_frame_submission','pipeline:frame_submission_to_display','pipeline:draw']],['Thread',['thread_browser_cpu_time_per_frame','thread_display_compositor_cpu_time_per_frame','thread_GPU_cpu_time_per_frame','thread_IO_cpu_time_per_frame','thread_other_cpu_time_per_frame','thread_raster_cpu_time_per_frame','thread_renderer_compositor_cpu_time_per_frame','thread_renderer_main_cpu_time_per_frame']]]);function getValueFromMap(key,map){let retrievedValue=map.get(key);if(!retrievedValue){retrievedValue=new Map();map.set(key,retrievedValue);}
+return retrievedValue;}
+Polymer({is:'tr-v-ui-visualizations-data-container',created(){this.orderedBenchmarks_=[];this.groupedData_=new Map();},build(leafHistograms,histograms){if(!leafHistograms||leafHistograms.length<1||!histograms||histograms.length<1){this.$.data_error.style.display='block';return;}
+this.processHistograms_(this.groupHistograms_(histograms),this.groupHistograms_(leafHistograms));this.buildCharts_();},processHistograms_(histograms,leafHistograms){const benchmarkStartGrouping=tr.v.HistogramGrouping.BY_KEY.get(tr.v.d.RESERVED_NAMES.BENCHMARK_START);const benchmarkToStartTime=new Map();for(const[metric,benchmarks]of histograms.entries()){for(const[benchmark,pages]of leafHistograms.get(metric).entries()){for(const[page,histograms]of pages.entries()){for(const histogram of histograms){const aggregateToBenchmarkMap=getValueFromMap(AGGREGATE_KEY,this.groupedData_);const benchmarkToMetricMap=getValueFromMap(benchmark,aggregateToBenchmarkMap);benchmarkToMetricMap.set(metric,new Map([[STATISTICS_KEY,histogram.running]]));}}}
+for(const[benchmark,pages]of benchmarks.entries()){for(const[page,histograms]of pages.entries()){for(const histogram of histograms){if(!benchmarkToStartTime.get(benchmark)){benchmarkToStartTime.set(benchmark,benchmarkStartGrouping.callback(histogram));}
+const pageToBenchmarkMap=getValueFromMap(page,this.groupedData_);const benchmarkToMetricMap=getValueFromMap(benchmark,pageToBenchmarkMap);const mergedSubmetrics=new tr.v.d.DiagnosticMap();for(const bin of histogram.allBins){for(const map of bin.diagnosticMaps){mergedSubmetrics.addDiagnostics(map);}}
+if(benchmarkToMetricMap.get(metric))continue;benchmarkToMetricMap.set(metric,new Map([[STATISTICS_KEY,histogram.running],[SUBMETRICS_KEY,mergedSubmetrics.get('breakdown')]]));}}}}
+this.orderedBenchmarks_=this.sortBenchmarks_(benchmarkToStartTime);},groupHistograms_(histograms){const groupings=[tr.v.HistogramGrouping.HISTOGRAM_NAME,tr.v.HistogramGrouping.DISPLAY_LABEL,tr.v.HistogramGrouping.BY_KEY.get(tr.v.d.RESERVED_NAMES.STORIES)];return histograms.groupHistogramsRecursively(groupings);},sortBenchmarks_(benchmarks){return Array.from(benchmarks.keys()).sort((a,b)=>{Date.parse(benchmarks.get(a))-Date.parse(benchmarks.get(b));});},getSeriesKey_(metric,benchmark){return metric+'-'+benchmark;},buildCharts_(){const rasterDataToBePassed=this.buildRasterChart_();this.$.rasterVisualization.build(rasterDataToBePassed);for(const chartName of METRICS.keys()){const metricsDataToBePassed=this.buildMetricsData_(chartName);const newChart=this.$.metricsVisualization.cloneNode(true);newChart.style.display='block';Polymer.dom(this.$.metrics_container).appendChild(newChart);newChart.build(metricsDataToBePassed);}},buildRasterChart_(){const orderedPages=[...this.groupedData_.keys()].filter((page)=>this.filterPagesWithoutRasterMetric_(page)).sort((a,b)=>this.sortByRasterStart_(a,b));const allChartData=new Map();for(const page of orderedPages){const pageMap=this.groupedData_.get(page);let chartData=[];for(const benchmark of this.orderedBenchmarks_){if(!pageMap.has(benchmark))continue;const benchmarkMap=pageMap.get(benchmark);const benchmarkData=[];if(benchmarkMap.get(RASTER_START_METRIC_KEY)===undefined){continue;}
+for(const[threadName,thread]of FRAME.entries()){const data={x:benchmark,hide:0};if(page!==AGGREGATE_KEY)data.group=page;let rasterBegin=0;for(const metric of thread.keys()){const metricMap=benchmarkMap.get(metric);const key=this.getSeriesKey_(metric,data.x+'-'+threadName);const stats=metricMap.get(STATISTICS_KEY);const mean=stats?stats.mean:0;let roundedMean=Math.round(mean*100)/100;if(metric===RASTER_START_METRIC_KEY){rasterBegin=roundedMean;}else if(metric==='pipeline:begin_frame_to_raster_end'){roundedMean-=rasterBegin;}
+data[key]=roundedMean;}
+benchmarkData.push(data);}
+chartData=chartData.concat(benchmarkData);}
+allChartData.set(page,chartData);}
+return allChartData;},buildMetricsData_(chartName){const orderedPages=[...this.groupedData_.keys()].sort((a,b)=>this.sortByTotal_(a,b,chartName));const chartData=[];const aggregateChart=[];for(const page of orderedPages){const pageMap=this.groupedData_.get(page);for(const benchmark of this.orderedBenchmarks_){if(!pageMap.has(benchmark))continue;const data={x:benchmark,group:page};const benchmarkMap=pageMap.get(benchmark);for(const metric of METRICS.get(chartName)){const metricMap=benchmarkMap.get(metric);const key=this.getSeriesKey_(metric,benchmark);const stats=metricMap.get(STATISTICS_KEY);const mean=stats?stats.mean:0;data[key]=Math.round(mean*100)/100;}
+if(page===AGGREGATE_KEY){aggregateChart.push(data);}else{chartData.push(data);}}
+chartData.push({});}
+chartData.shift();return{title:chartName,aggregate:aggregateChart,page:chartData,submetrics:this.processSubmetricsData_(chartName)};},submetricsHelper_(submetric,value,benchmark,metricToSubmetricMap){let submetricToBenchmarkMap=metricToSubmetricMap.get(submetric);if(!submetricToBenchmarkMap){submetricToBenchmarkMap=[];metricToSubmetricMap.set(submetric,submetricToBenchmarkMap);}
+const data={x:submetric,hide:0,group:benchmark};const mean=value;const roundedMean=Math.round(mean*100)/100;if(!roundedMean)return;data[this.getSeriesKey_(submetric,benchmark)]=roundedMean;submetricToBenchmarkMap.push(data);},processSubmetricsData_(chartName){const submetrics=new Map();for(const[page,pageMap]of this.groupedData_.entries()){if(page===AGGREGATE_KEY)continue;const pageToMetricMap=getValueFromMap(page,submetrics);for(const benchmark of this.orderedBenchmarks_){const benchmarkMap=pageMap.get(benchmark);if(!benchmarkMap)continue;for(const metric of METRICS.get(chartName)){const metricMap=benchmarkMap.get(metric);const metricToSubmetricMap=getValueFromMap(metric,pageToMetricMap);const submetrics=metricMap.get(SUBMETRICS_KEY);if(!submetrics){this.submetricsHelper_(metric,metricMap.get(STATISTICS_KEY),benchmark,metricToSubmetricMap);continue;}
+for(const[submetric,value]of[...submetrics]){this.submetricsHelper_(submetric,value,benchmark,metricToSubmetricMap);}}}}
+return submetrics;},sortByTotal_(a,b,chartName){if(a===AGGREGATE_KEY)return-1;if(b===AGGREGATE_KEY)return 1;let aValue=0;const aMap=this.groupedData_.get(a);if(aMap.get(this.orderedBenchmarks_[0])!==undefined){for(const metric of METRICS.get(chartName)){const aMetricMap=aMap.get(this.orderedBenchmarks_[0]).get(metric);const aStats=aMetricMap.get(STATISTICS_KEY);aValue+=aStats?aStats.mean:0;}}
+let bValue=0;const bMap=this.groupedData_.get(b);if(bMap.get(this.orderedBenchmarks_[0])!==undefined){for(const metric of METRICS.get(chartName)){const bMetricMap=bMap.get(this.orderedBenchmarks_[0]).get(metric);const bStats=bMetricMap.get(STATISTICS_KEY);bValue+=bStats?bStats.mean:0;}}
+return aValue-bValue;},filterPagesWithoutRasterMetric_(page){const pageMap=this.groupedData_.get(page);for(const benchmark of this.orderedBenchmarks_){const pageMetricMap=pageMap.get(benchmark);if(!pageMetricMap)continue;const wantedMetric=pageMetricMap.get(RASTER_START_METRIC_KEY);if(wantedMetric!==undefined)return true;}
+return false;},sortByRasterStart_(a,b){if(a===AGGREGATE_KEY)return 1;if(b===AGGREGATE_KEY)return-1;let aValue=0;const aMap=this.groupedData_.get(a);if(aMap.get(this.orderedBenchmarks_[0])!==undefined){const aMetricMap=aMap.get(this.orderedBenchmarks_[0]).get(RASTER_START_METRIC_KEY);const aStats=aMetricMap.get(STATISTICS_KEY);aValue=aStats?aStats.mean:0;}
+let bValue=0;const bMap=this.groupedData_.get(b);if(bMap.get(this.orderedBenchmarks_[0])!==undefined){const bMetricMap=bMap.get(this.orderedBenchmarks_[0]).get(RASTER_START_METRIC_KEY);const bStats=bMetricMap.get(STATISTICS_KEY);bValue=bStats?bStats.mean:0;}
+return bValue-aValue;},});return{STATISTICS_KEY,SUBMETRICS_KEY,AGGREGATE_KEY,COLORS,FRAME,METRICS,getValueFromMap,};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-histogram-set-view',listeners:{export:'onExport_',loadVisualization:'onLoadVisualization_'},created(){this.brushingStateController_=new tr.ui.NullBrushingStateController();this.viewState_=new tr.v.ui.HistogramSetViewState();this.visualizationLoaded_=false;},ready(){this.$.table.viewState=this.viewState;this.$.controls.viewState=this.viewState;},attached(){this.brushingStateController.parentController=tr.c.BrushingStateController.getControllerForElement(this.parentNode);},get brushingStateController(){return this.brushingStateController_;},get viewState(){return this.viewState_;},get histograms(){return this.$.table.histograms;},async build(histograms,opt_options){const options=opt_options||{};const progress=options.progress||(()=>Promise.resolve());if(options.helpHref)this.$.controls.helpHref=options.helpHref;if(options.feedbackHref){this.$.controls.feedbackHref=options.feedbackHref;}
if(histograms===undefined||histograms.length===0){this.$.container.style.display='none';this.$.zero.style.display='block';this.style.display='block';return;}
-this.$.zero.style.display='none';this.$.container.style.display='block';this.$.container.style.maxHeight=(window.innerHeight-16)+'px';const buildMark=tr.b.Timing.mark('histogram-set-view','build');await progress('Finding important Histograms...');const sourceHistogramsMark=tr.b.Timing.mark('histogram-set-view','sourceHistograms');const sourceHistograms=histograms.sourceHistograms;sourceHistogramsMark.end();this.$.controls.showAllEnabled=(sourceHistograms.length!==histograms.length);await progress('Collecting parameters...');const collectParametersMark=tr.b.Timing.mark('histogram-set-view','collectParameters');const parameterCollector=new tr.v.HistogramParameterCollector();parameterCollector.process(histograms);this.$.controls.baseStatisticNames=parameterCollector.statisticNames;this.$.controls.possibleGroupings=parameterCollector.possibleGroupings;const displayLabels=parameterCollector.labels;this.$.controls.displayLabels=displayLabels;collectParametersMark.end();await this.$.table.build(histograms,sourceHistograms,displayLabels,progress);buildMark.end();},onExport_(event){const mark=tr.b.Timing.mark('histogram-set-view','export'+
+this.$.zero.style.display='none';this.$.container.style.display='block';this.$.container.style.maxHeight=(window.innerHeight-16)+'px';const buildMark=tr.b.Timing.mark('histogram-set-view','build');await progress('Finding important Histograms...');const sourceHistogramsMark=tr.b.Timing.mark('histogram-set-view','sourceHistograms');const sourceHistograms=histograms.sourceHistograms;sourceHistogramsMark.end();this.$.controls.showAllEnabled=(sourceHistograms.length!==histograms.length);await progress('Collecting parameters...');const collectParametersMark=tr.b.Timing.mark('histogram-set-view','collectParameters');const parameterCollector=new tr.v.HistogramParameterCollector();parameterCollector.process(histograms);this.$.controls.baseStatisticNames=parameterCollector.statisticNames;this.$.controls.possibleGroupings=parameterCollector.possibleGroupings;const displayLabels=parameterCollector.labels;this.$.controls.displayLabels=displayLabels;collectParametersMark.end();const hist=[...histograms][0];const benchmarks=hist.diagnostics.get(tr.v.d.RESERVED_NAMES.BENCHMARKS);let enable=false;if(benchmarks!==undefined&&benchmarks.length>0){for(const benchmark of benchmarks){if(benchmark.includes('rendering')){enable=true;break;}}}
+this.$.controls.enableVisualization=enable;await this.$.table.build(histograms,sourceHistograms,displayLabels,progress);buildMark.end();},onExport_(event){const mark=tr.b.Timing.mark('histogram-set-view','export'+
(event.merged?'Merged':'Raw')+event.format.toUpperCase());const histograms=event.merged?this.$.table.leafHistograms:this.histograms;let blob;if(event.format==='csv'){const csv=new tr.v.CSVBuilder(histograms);csv.build();blob=new window.Blob([csv.toString()],{type:'text/csv'});}else if(event.format==='json'){blob=new window.Blob([JSON.stringify(histograms.asDicts())],{type:'text/json'});}else{throw new Error(`Unable to export format "${event.format}"`);}
-const path=window.location.pathname.split('/');const basename=path[path.length-1].split('.')[0]||'histograms';const anchor=document.createElement('a');anchor.download=`${basename}.${event.format}`;anchor.href=window.URL.createObjectURL(blob);anchor.click();mark.end();},});return{};});'use strict';tr.exportTo('tr.ui',function(){Polymer({is:'tr-ui-sp-metrics-side-panel',behaviors:[tr.ui.behaviors.SidePanel],ready(){this.model_=undefined;this.rangeOfInterest_=undefined;this.metricLatenciesMs_=[];this.metrics_=[];tr.metrics.MetricRegistry.getAllRegisteredTypeInfos().forEach(function(m){if(m.constructor.name==='sampleMetric')return;this.metrics_.push({label:m.constructor.name,value:m.constructor.name});},this);this.metrics_.sort((x,y)=>x.label.localeCompare(y.label));this.settingsKey_='metrics-side-panel-metric-name';this.currentMetricName_='responsivenessMetric';const metricSelector=tr.ui.b.createSelector(this,'currentMetricName_',this.settingsKey_,this.currentMetricName_,this.metrics_);Polymer.dom(this.$.top_left_controls).appendChild(metricSelector);metricSelector.addEventListener('change',this.onMetricChange_.bind(this));this.currentMetricTypeInfo_=tr.metrics.MetricRegistry.findTypeInfoWithName(this.currentMetricName_);this.recomputeButton_=tr.ui.b.createButton('Recompute',this.onRecompute_,this);Polymer.dom(this.$.top_left_controls).appendChild(this.recomputeButton_);this.$.results.addEventListener('display-ready',()=>{this.$.results.style.display='';});},async build(model){this.model_=model;await this.updateContents_();},get metricLatencyMs(){return tr.b.math.Statistics.mean(this.metricLatenciesMs_);},onMetricChange_(){this.currentMetricTypeInfo_=tr.metrics.MetricRegistry.findTypeInfoWithName(this.currentMetricName_);this.metricLatenciesMs_=[];this.updateContents_();},onRecompute_(){this.updateContents_();},get textLabel(){return'Metrics';},supportsModel(m){if(!m){return{supported:false,reason:'No model available'};}
+const path=window.location.pathname.split('/');const basename=path[path.length-1].split('.')[0]||'histograms';const anchor=document.createElement('a');anchor.download=`${basename}.${event.format}`;anchor.href=window.URL.createObjectURL(blob);anchor.click();mark.end();},onLoadVisualization_(event){if(!this.visualizationLoaded_){this.$.visualizations.style.display='block';this.$.visualizations.build(this.$.table.leafHistograms,this.histograms);this.visualizationLoaded_=true;}else if(this.$.visualizations.style.display==='none'){this.$.visualizations.style.display='block';}else{this.$.visualizations.style.display='none';}},});return{};});'use strict';tr.exportTo('tr.ui',function(){Polymer({is:'tr-ui-sp-metrics-side-panel',behaviors:[tr.ui.behaviors.SidePanel],ready(){this.model_=undefined;this.rangeOfInterest_=undefined;this.metricLatenciesMs_=[];this.metrics_=[];tr.metrics.MetricRegistry.getAllRegisteredTypeInfos().forEach(function(m){if(m.constructor.name==='sampleMetric')return;this.metrics_.push({label:m.constructor.name,value:m.constructor.name});},this);this.metrics_.sort((x,y)=>x.label.localeCompare(y.label));this.settingsKey_='metrics-side-panel-metric-name';this.currentMetricName_='responsivenessMetric';const metricSelector=tr.ui.b.createSelector(this,'currentMetricName_',this.settingsKey_,this.currentMetricName_,this.metrics_);Polymer.dom(this.$.top_left_controls).appendChild(metricSelector);metricSelector.addEventListener('change',this.onMetricChange_.bind(this));this.currentMetricTypeInfo_=tr.metrics.MetricRegistry.findTypeInfoWithName(this.currentMetricName_);this.recomputeButton_=tr.ui.b.createButton('Recompute',this.onRecompute_,this);Polymer.dom(this.$.top_left_controls).appendChild(this.recomputeButton_);this.$.results.addEventListener('display-ready',()=>{this.$.results.style.display='';});},async build(model){this.model_=model;await this.updateContents_();},get metricLatencyMs(){return tr.b.math.Statistics.mean(this.metricLatenciesMs_);},onMetricChange_(){this.currentMetricTypeInfo_=tr.metrics.MetricRegistry.findTypeInfoWithName(this.currentMetricName_);this.metricLatenciesMs_=[];this.updateContents_();},onRecompute_(){this.updateContents_();},get textLabel(){return'Metrics';},supportsModel(m){if(!m){return{supported:false,reason:'No model available'};}
return{supported:true};},get model(){return this.model_;},set model(model){this.build(model);},get selection(){},set selection(_){},get rangeOfInterest(){return this.rangeOfInterest_;},set rangeOfInterest(range){this.rangeOfInterest_=range;if(this.currentMetricTypeInfo_&&this.currentMetricTypeInfo_.metadata.supportsRangeOfInterest){if((this.metricLatencyMs===undefined)||(this.metricLatencyMs<100)){this.updateContents_();}else{this.recomputeButton_.style.background='red';}}},async updateContents_(){Polymer.dom(this.$.error).textContent='';this.$.results.style.display='none';if(!this.model_){Polymer.dom(this.$.error).textContent='Missing model';return;}
const options={metrics:[this.currentMetricName_]};if(this.currentMetricTypeInfo_&&this.currentMetricTypeInfo_.metadata.supportsRangeOfInterest&&this.rangeOfInterest&&!this.rangeOfInterest.isEmpty){options.rangeOfInterest=this.rangeOfInterest;}
const startDate=new Date();const addFailureCb=failure=>{Polymer.dom(this.$.error).textContent=failure.description;};const histograms=tr.metrics.runMetrics(this.model_,options,addFailureCb);this.metricLatenciesMs_.push(new Date()-startDate);while(this.metricLatenciesMs_.length>20){this.metricLatenciesMs_.shift();}
diff --git a/systrace/catapult/systrace/systrace/test_data/battor_test_data.txt b/systrace/catapult/systrace/systrace/test_data/battor_test_data.txt
deleted file mode 100644
index 9672736..0000000
--- a/systrace/catapult/systrace/systrace/test_data/battor_test_data.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-# BattOr
-# voltage_range [-6079.7, 6196.8] mV
-# current_range [-6057.3, 5764.1] mA
-# sample_rate 10000 Hz, gain 10.1x
-0.00 6.5 4307.7
-0.10 15.1 4313.7
-0.20 15.1 4313.7
-0.30 12.2 4310.7
-0.40 12.2 4307.7
-0.50 18.0 4334.7
-0.60 15.1 4334.7
-0.70 18.0 4337.7
-0.80 18.0 4337.7
-0.90 20.9 4331.7
-1.00 9.3 4334.7
-1.10 9.3 4307.7
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/agents_unittest.py b/systrace/catapult/systrace/systrace/tracing_agents/agents_unittest.py
index 4071caf..b9596ef 100644
--- a/systrace/catapult/systrace/systrace/tracing_agents/agents_unittest.py
+++ b/systrace/catapult/systrace/systrace/tracing_agents/agents_unittest.py
@@ -19,7 +19,7 @@ class BaseAgentTest(unittest.TestCase):
self.device = devices[0]
curr_browser = self.GetChromeProcessID()
- if curr_browser == None:
+ if curr_browser is None:
self.StartBrowser()
def tearDown(self):
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent.py b/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent.py
index 47ed3fa..caf78f4 100644
--- a/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent.py
+++ b/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent.py
@@ -4,12 +4,13 @@
import optparse
import platform
-import py_utils
import re
import sys
import threading
import zlib
+import py_utils
+
from devil.android import device_utils
from devil.android.sdk import version_codes
from py_trace_event import trace_time as trace_time_module
@@ -139,6 +140,11 @@ def _construct_atrace_args(config, categories):
if (config.trace_buf_size is not None) and (config.trace_buf_size > 0):
atrace_args.extend(['-b', str(config.trace_buf_size)])
+ elif 'webview' in categories and 'sched' in categories:
+ # https://crbug.com/814330: webview_startup sometimes exceeds the buffer
+ # limit, so doubling this.
+ atrace_args.extend(['-b', '8192'])
+
elif 'sched' in categories:
# 'sched' is a high-volume tag, double the default buffer size
# to accommodate that
@@ -235,19 +241,28 @@ class AtraceAgent(tracing_agents.TracingAgent):
def _stop_collect_trace(self):
"""Stops atrace.
- Note that prior to Api 23, --async-stop may not actually stop tracing.
- Thus, this uses a fallback method of running a zero-length synchronous
- trace if tracing is still on."""
- result = self._device_utils.RunShellCommand(
- self._tracer_args + ['--async_stop'], raw_output=True,
- large_output=True, check_return=True, timeout=ADB_LARGE_OUTPUT_TIMEOUT)
- is_trace_enabled_file = '/sys/kernel/debug/tracing/tracing_on'
-
+ Note that prior to Api 23, --async-stop isn't working correctly. It
+ doesn't stop tracing and clears trace buffer before dumping it rendering
+ results unusable."""
if self._device_sdk_version < version_codes.MARSHMALLOW:
- if int(self._device_utils.ReadFile(is_trace_enabled_file)):
- # tracing was incorrectly left on, disable it
- self._device_utils.RunShellCommand(
- self._tracer_args + ['-t 0'], check_return=True)
+ is_trace_enabled_file = '/sys/kernel/debug/tracing/tracing_on'
+ # Stop tracing first so new data won't arrive while dump is performed (it
+ # may take a non-trivial time and tracing buffer may overflow).
+ self._device_utils.WriteFile(is_trace_enabled_file, '0')
+ result = self._device_utils.RunShellCommand(
+ self._tracer_args + ['--async_dump'], raw_output=True,
+ large_output=True, check_return=True,
+ timeout=ADB_LARGE_OUTPUT_TIMEOUT)
+ # Run synchronous tracing for 0 seconds to stop tracing, clear buffers
+ # and other state.
+ self._device_utils.RunShellCommand(
+ self._tracer_args + ['-t 0'], check_return=True)
+ else:
+ # On M+ --async_stop does everything necessary
+ result = self._device_utils.RunShellCommand(
+ self._tracer_args + ['--async_stop'], raw_output=True,
+ large_output=True, check_return=True,
+ timeout=ADB_LARGE_OUTPUT_TIMEOUT)
return result
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent_unittest.py b/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent_unittest.py
index 9ccc6e3..203e846 100755
--- a/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent_unittest.py
+++ b/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent_unittest.py
@@ -16,6 +16,7 @@ from systrace.tracing_agents import atrace_agent
from devil.android import device_utils
from devil.android.sdk import intent
+from py_utils import tempfile_ext
DEVICE_SERIAL = 'AG8404EC0444AGC'
@@ -50,9 +51,7 @@ class AtraceAgentTest(unittest.TestCase):
devices = device_utils.DeviceUtils.HealthyDevices()
package_info = util.get_supported_browsers()['stable']
device = devices[0]
- output_file_name = util.generate_random_filename_for_test()
-
- try:
+ with tempfile_ext.TemporaryFileName() as output_file_name:
# Launch the browser before tracing.
device.StartActivity(
intent.Intent(activity=package_info.activity,
@@ -76,12 +75,7 @@ class AtraceAgentTest(unittest.TestCase):
# Verify results.
with open(output_file_name, 'r') as f:
full_trace = f.read()
- self.assertTrue('CPU#'in full_trace)
- except:
- raise
- finally:
- if os.path.exists(output_file_name):
- os.remove(output_file_name)
+ self.assertTrue('CPU#' in full_trace)
@decorators.HostOnlyTest
def test_construct_atrace_args(self):
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent.py b/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent.py
index 2a4e781..4765e73 100644
--- a/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent.py
+++ b/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent.py
@@ -3,8 +3,13 @@
# found in the LICENSE file.
import os
-import py_utils
import re
+import stat
+import subprocess
+import sys
+import urllib2
+
+import py_utils
from systrace import trace_result
from systrace import tracing_agents
@@ -16,13 +21,57 @@ TRACE_START_REGEXP = r'TRACE\:'
# Text that ADB sends, but does not need to be displayed to the user.
ADB_IGNORE_REGEXP = r'^capturing trace\.\.\. done|^capturing trace\.\.\.'
+T2T_OUTPUT = 'trace.systrace'
def try_create_agent(options):
if options.from_file is not None:
+ with open(options.from_file, 'rb') as f_in:
+ if is_perfetto(f_in):
+ if convert_perfetto_trace(options.from_file):
+ options.from_file = T2T_OUTPUT
+ else:
+ print ('Perfetto trace file: ' + options.from_file +
+ ' could not be converted.')
+ sys.exit(1)
return AtraceFromFileAgent(options)
else:
return False
+def convert_perfetto_trace(in_file):
+ traceconv_path = os.path.abspath(os.path.join(os.path.dirname(__file__),
+ '../traceconv'))
+ try:
+ traceconv = urllib2.urlopen('https://get.perfetto.dev/traceconv')
+ with open(traceconv_path, 'w') as out:
+ out.write(traceconv.read())
+ except urllib2.URLError:
+ print 'Could not download traceconv to convert the Perfetto trace.'
+ sys.exit(1)
+ os.chmod(traceconv_path, stat.S_IXUSR | stat.S_IRUSR | stat.S_IWUSR)
+ return subprocess.call([traceconv_path, 'systrace', in_file, T2T_OUTPUT]) == 0
+
+def is_perfetto(from_file):
+ # Starts with a preamble for field ID=1 (TracePacket)
+ if ord(from_file.read(1)) != 0x0a:
+ return False
+ for _ in range(10): # Check the first 10 packets are structured correctly
+ # Then a var int that specifies field size
+ field_size = 0
+ shift = 0
+ while True:
+ c = ord(from_file.read(1))
+ field_size |= (c & 0x7f) << shift
+ shift += 7
+ if not c & 0x80:
+ break
+ # The packet itself
+ from_file.seek(field_size, os.SEEK_CUR)
+ # The preamble for the next field ID=1 (TracePacket)
+ if ord(from_file.read(1)) != 0x0a:
+ return False
+ # Go back to the beginning of the file
+ from_file.seek(0)
+ return True
class AtraceFromFileConfig(tracing_agents.TracingConfig):
def __init__(self, from_file):
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent_unittest.py b/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent_unittest.py
index 610b570..53e7943 100755
--- a/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent_unittest.py
+++ b/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent_unittest.py
@@ -8,10 +8,11 @@ import contextlib
import os
import unittest
+from py_utils import tempfile_ext
from systrace import decorators
from systrace import run_systrace
from systrace import update_systrace_trace_viewer
-from systrace import util
+
TEST_DIR = os.path.join(os.path.dirname(__file__), '..', 'test_data')
@@ -20,32 +21,29 @@ DECOMPRESSED_ATRACE_DATA = os.path.join(TEST_DIR,
'decompressed_atrace_data.txt')
NON_EXISTENT_DATA = os.path.join(TEST_DIR, 'THIS_FILE_DOES_NOT_EXIST.txt')
+
class AtraceFromFileAgentTest(unittest.TestCase):
@decorators.HostOnlyTest
def test_from_file(self):
update_systrace_trace_viewer.update(force_update=True)
self.assertTrue(os.path.exists(
update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE))
- output_file_name = util.generate_random_filename_for_test()
try:
- # use from-file to create a specific expected output
- run_systrace.main_impl(['./run_systrace.py',
- '--from-file',
- COMPRESSED_ATRACE_DATA,
- '-o',
- output_file_name])
- # and verify file contents
- with contextlib.nested(open(output_file_name, 'r'),
- open(DECOMPRESSED_ATRACE_DATA, 'r')) as (f1, f2):
- full_trace = f1.read()
- expected_contents = f2.read()
- self.assertTrue(expected_contents in full_trace)
- except:
- raise
+ with tempfile_ext.TemporaryFileName() as output_file_name:
+ # use from-file to create a specific expected output
+ run_systrace.main_impl(['./run_systrace.py',
+ '--from-file',
+ COMPRESSED_ATRACE_DATA,
+ '-o',
+ output_file_name])
+ # and verify file contents
+ with contextlib.nested(open(output_file_name, 'r'),
+ open(DECOMPRESSED_ATRACE_DATA, 'r')) as (f1, f2):
+ full_trace = f1.read()
+ expected_contents = f2.read()
+ self.assertTrue(expected_contents in full_trace)
finally:
os.remove(update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)
- if os.path.exists(output_file_name):
- os.remove(output_file_name)
@decorators.HostOnlyTest
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent.py b/systrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent.py
deleted file mode 100644
index a591b13..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent.py
+++ /dev/null
@@ -1,165 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import atexit
-import logging
-import optparse
-import py_utils
-
-from battor import battor_wrapper
-from devil.android import battery_utils
-from devil.android import device_utils
-from devil.utils import battor_device_mapping
-from devil.utils import find_usb_devices
-from py_trace_event import trace_time
-from systrace import trace_result
-from systrace import tracing_agents
-
-
-def try_create_agent(config):
- if config.from_file is not None:
- return None
- if config.battor:
- return BattOrTraceAgent()
- return None
-
-
-class BattOrConfig(tracing_agents.TracingConfig):
- def __init__(self, battor_categories, serial_map, battor_path,
- battor, target, from_file, device_serial_number):
- tracing_agents.TracingConfig.__init__(self)
- self.battor_categories = battor_categories
- self.serial_map = serial_map
- self.battor_path = battor_path
- self.battor = battor
- self.target = target
- self.from_file = from_file
- self.device_serial_number = device_serial_number
-
-
-def add_options(parser):
- options = optparse.OptionGroup(parser, 'BattOr trace options')
- options.add_option('--battor-categories', dest='battor_categories',
- help='Select battor categories with a comma-delimited '
- 'list, e.g. --battor-categories=cat1,cat2,cat3')
- options.add_option('--serial-map', dest='serial_map',
- default='serial_map.json',
- help='File containing pregenerated map of phone serial '
- 'numbers to BattOr serial numbers.')
- options.add_option('--battor-path', dest='battor_path', default=None,
- type='string', help='specify a BattOr path to use')
- options.add_option('--battor', dest='battor', default=False,
- action='store_true', help='Use the BattOr tracing agent.')
- return options
-
-def get_config(options):
- return BattOrConfig(
- options.battor_categories, options.serial_map, options.battor_path,
- options.battor, options.target, options.from_file,
- options.device_serial_number)
-
-def _reenable_charging_if_needed(battery):
- if not battery.GetCharging():
- battery.SetCharging(True)
- logging.info('Charging status checked at exit.')
-
-
-class BattOrTraceAgent(tracing_agents.TracingAgent):
- # Class representing tracing agent that gets data from a BattOr.
- # BattOrs are high-frequency power monitors used for battery testing.
- def __init__(self):
- super(BattOrTraceAgent, self).__init__()
- self._collection_process = None
- self._recording_error = None
- self._battor_wrapper = None
- self._battery_utils = None
-
- @staticmethod
- def _FindBattOrPath(config):
- battor_path = config.battor_path
- if not config.battor_path and not config.serial_map:
- device_tree = find_usb_devices.GetBusNumberToDeviceTreeMap()
- battors = battor_device_mapping.GetBattOrList(device_tree)
- assert len(battors) == 1, ('Must specify BattOr path if there is not '
- 'exactly one')
- battor_path = battors[0]
- return battor_path
-
- @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
- def StartAgentTracing(self, config, timeout=None):
- """Starts tracing.
-
- Args:
- config: Tracing config.
-
- Raises:
- RuntimeError: If trace already in progress.
- AssertionError: If There is no BattOr path given and more
- than one BattOr is attached.
- """
- battor_path = self._FindBattOrPath(config)
- self._battor_wrapper = battor_wrapper.BattOrWrapper(
- target_platform=config.target,
- android_device=config.device_serial_number,
- battor_path=battor_path,
- battor_map_file=config.serial_map)
-
- dev_utils = device_utils.DeviceUtils(config.device_serial_number)
- self._battery_utils = battery_utils.BatteryUtils(dev_utils)
- self._battery_utils.SetCharging(False)
- atexit.register(_reenable_charging_if_needed, self._battery_utils)
- self._battor_wrapper.StartShell()
- self._battor_wrapper.StartTracing()
- return True
-
- @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
- def StopAgentTracing(self, timeout=None):
- """Stops tracing and collects the results asynchronously.
-
- Creates a new process that stops the tracing and collects the results.
- Returns immediately after the process is created (does not wait for
- trace results to be collected).
- """
- self._battor_wrapper.StopTracing()
- self._battery_utils.SetCharging(True)
- return True
-
- def SupportsExplicitClockSync(self):
- """Returns whether this function supports explicit clock sync."""
- return self._battor_wrapper.SupportsExplicitClockSync()
-
- def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback):
- """Records a clock sync marker.
-
- Args:
- sync_id: ID string for clock sync marker.
- did_record_sync_marker_callback: Callback function to call after
- the clock sync marker is recorded.
- """
- ts = trace_time.Now()
- self._battor_wrapper.RecordClockSyncMarker(sync_id)
- did_record_sync_marker_callback(ts, sync_id)
-
- @py_utils.Timeout(tracing_agents.GET_RESULTS_TIMEOUT)
- def GetResults(self, timeout=None):
- """Waits until data collection is completed and get the trace data.
-
- The trace data is the data that comes out of the BattOr, and is in the
- format with the following lines:
-
- time current voltage <sync_id>
-
- where the sync_id is only there if a clock sync marker was recorded
- during that sample.
-
- time = time since start of trace (ms)
- current = current through battery (mA) - this can be negative if the
- battery is charging
- voltage = voltage of battery (mV)
-
- Returns:
- The trace data.
- """
- return trace_result.TraceResult(
- 'powerTraceAsString', self._battor_wrapper.CollectTraceData())
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent_unittest.py b/systrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent_unittest.py
deleted file mode 100755
index 6347161..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent_unittest.py
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from collections import namedtuple
-import unittest
-import logging
-
-from systrace import decorators
-from systrace.tracing_agents import battor_trace_agent
-from battor import battor_wrapper
-from devil.android import battery_utils
-from devil.utils import battor_device_mapping
-from devil.utils import find_usb_devices
-
-
-mock_opts = namedtuple('mock_opts', ['target', 'device_serial_number',
- 'battor_path', 'serial_map'])
-OPTIONS = mock_opts('android', 'Phn2', None, __file__)
-CATEGORIES = None
-_DEFAULT_BATTOR_LIST = ['dev/ttyUSB0']
-
-def raise_error(*args, **kwargs):
- del args
- del kwargs
- raise RuntimeError('Should not call this function in the test')
-
-battor_device_mapping.GenerateSerialMapFile = raise_error
-
-def setup_battor_test(StartShell_error, StartTracing_error,
- StopTracing_error, CollectTraceData_error,
- battor_paths=None):
- wrapper = MockBattOrWrapper(StartShell_error, StartTracing_error,
- StopTracing_error, CollectTraceData_error)
- def wrapper_maker(*args, **kwargs):
- del args
- del kwargs
- return wrapper
- battor_wrapper.BattOrWrapper = wrapper_maker
- find_usb_devices.GetBusNumberToDeviceTreeMap = lambda: None
- if battor_paths is None:
- battor_paths = _DEFAULT_BATTOR_LIST
- battor_device_mapping.GetBattOrList = lambda x: battor_paths
-
-
-class MockBattOrWrapper(object):
- def __init__(self, StartShell_error=False, StartTracing_error=False,
- StopTracing_error=False, CollectTraceData_error=False):
- self._StartShell_error = StartShell_error
- self._StartTracing_error = StartTracing_error
- self._StopTracing_error = StopTracing_error
- self._CollectTraceData_error = CollectTraceData_error
- self._running = False
- self._tracing = False
- self._output = False
-
- def IsShellRunning(self):
- return self._running
-
- def StartShell(self):
- assert not self._running
- if self._StartShell_error:
- raise RuntimeError('Simulated error in StartShell')
- self._running = True
-
- def StartTracing(self):
- assert self._running
- assert not self._tracing
- if self._StartTracing_error:
- raise RuntimeError('Simulated error in StartTracing')
- self._tracing = True
-
- def StopTracing(self):
- assert self._running
- assert self._tracing
- if self._StopTracing_error:
- raise RuntimeError('Simulated error in StopTracing')
- self._running = False
- self._tracing = False
- self._output = True
-
- def CollectTraceData(self):
- assert self._output
- if self._CollectTraceData_error:
- raise RuntimeError('Simulated error in CollectTraceData')
- return 'traceout1\ntraceout2'
-
-
-class MockBatteryUtils(object):
- def __init__(self, _):
- self._is_charging = True
-
- def GetCharging(self):
- return self._is_charging
-
- def SetCharging(self, value):
- self._is_charging = value
-
-
-battery_utils.BatteryUtils = MockBatteryUtils
-
-
-class BattOrAgentTest(unittest.TestCase):
-
- @decorators.HostOnlyTest
- def test_trace_double_start(self):
- setup_battor_test(StartShell_error=False, StartTracing_error=False,
- StopTracing_error=False, CollectTraceData_error=False)
- agent = battor_trace_agent.BattOrTraceAgent()
- agent.StartAgentTracing(OPTIONS, CATEGORIES)
- self.assertRaises(AssertionError,
- lambda: agent.StartAgentTracing(OPTIONS, CATEGORIES))
-
- @decorators.HostOnlyTest
- def test_trace_error_start_shell(self):
- setup_battor_test(StartShell_error=True, StartTracing_error=False,
- StopTracing_error=False, CollectTraceData_error=False)
- agent = battor_trace_agent.BattOrTraceAgent()
- self.assertRaises(RuntimeError,
- lambda: agent.StartAgentTracing(OPTIONS, CATEGORIES))
-
- @decorators.HostOnlyTest
- def test_trace_error_start_tracing(self):
- setup_battor_test(StartShell_error=False, StartTracing_error=True,
- StopTracing_error=False, CollectTraceData_error=False)
- agent = battor_trace_agent.BattOrTraceAgent()
- self.assertRaises(RuntimeError,
- lambda: agent.StartAgentTracing(OPTIONS, CATEGORIES))
-
- @decorators.HostOnlyTest
- def test_trace_error_stop_tracing(self):
- setup_battor_test(StartShell_error=False, StartTracing_error=False,
- StopTracing_error=True, CollectTraceData_error=False)
- agent = battor_trace_agent.BattOrTraceAgent()
- agent.StartAgentTracing(OPTIONS, CATEGORIES)
- self.assertRaises(RuntimeError, agent.StopAgentTracing)
-
- @decorators.HostOnlyTest
- def test_trace_error_get_results(self):
- setup_battor_test(StartShell_error=False, StartTracing_error=False,
- StopTracing_error=False, CollectTraceData_error=True)
- agent = battor_trace_agent.BattOrTraceAgent()
- agent.StartAgentTracing(OPTIONS, CATEGORIES)
- agent.StopAgentTracing()
- self.assertRaises(RuntimeError, agent.GetResults)
-
- @decorators.HostOnlyTest
- def test_trace_complete(self):
- setup_battor_test(StartShell_error=False, StartTracing_error=False,
- StopTracing_error=False, CollectTraceData_error=False)
- agent = battor_trace_agent.BattOrTraceAgent()
- agent.StartAgentTracing(OPTIONS, CATEGORIES)
- agent.StopAgentTracing()
- x = agent.GetResults()
- self.assertEqual(x.raw_data, 'traceout1\ntraceout2')
-
- @decorators.HostOnlyTest
- def test_trace_error_no_battor(self):
- setup_battor_test(StartShell_error=False, StartTracing_error=False,
- StopTracing_error=False, CollectTraceData_error=False,
- battor_paths=[])
- agent = battor_trace_agent.BattOrTraceAgent()
- options = mock_opts('android', 'Phn2', None, None)
- with self.assertRaises(AssertionError):
- agent.StartAgentTracing(options, CATEGORIES)
-
- @decorators.HostOnlyTest
- def test_trace_error_multiple_battors_no_battor_path(self):
- setup_battor_test(StartShell_error=False, StartTracing_error=False,
- StopTracing_error=False, CollectTraceData_error=False,
- battor_paths=['a', 'b'])
- agent = battor_trace_agent.BattOrTraceAgent()
- options = mock_opts('android', 'Phn2', None, None)
- with self.assertRaises(AssertionError):
- agent.StartAgentTracing(options, CATEGORIES)
-
-
-if __name__ == "__main__":
- logging.getLogger().setLevel(logging.DEBUG)
- unittest.main(verbosity=2)
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/walt_agent.py b/systrace/catapult/systrace/systrace/tracing_agents/walt_agent.py
index 72d84b5..6ff6061 100644
--- a/systrace/catapult/systrace/systrace/tracing_agents/walt_agent.py
+++ b/systrace/catapult/systrace/systrace/tracing_agents/walt_agent.py
@@ -2,10 +2,11 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import py_utils
import optparse
import threading
+import py_utils
+
from devil.android import device_utils
from systrace import trace_result
from systrace import tracing_agents
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/walt_agent_unittest.py b/systrace/catapult/systrace/systrace/tracing_agents/walt_agent_unittest.py
index b4fcaf7..3bd7135 100644
--- a/systrace/catapult/systrace/systrace/tracing_agents/walt_agent_unittest.py
+++ b/systrace/catapult/systrace/systrace/tracing_agents/walt_agent_unittest.py
@@ -15,9 +15,9 @@ from systrace.tracing_agents import walt_agent
class WaltAgentTest(unittest.TestCase):
"""
The WALT agent pulls the trace log from the Android phone, and does not
- communicate with the WALT device directly. This makes the agent more similar
- to atrace than BattOr. Since the host only connects to the Android phone,
- more exhaustive testing would require mocking DeviceUtils.
+ communicate with the WALT device directly. This makes the agent similar
+ to atrace. Since the host only connects to the Android phone, more exhaustive
+ testing would require mocking DeviceUtils.
"""
@decorators.HostOnlyTest
diff --git a/systrace/catapult/systrace/systrace/tracing_controller.py b/systrace/catapult/systrace/systrace/tracing_controller.py
index d0d2d7c..86f1310 100644
--- a/systrace/catapult/systrace/systrace/tracing_controller.py
+++ b/systrace/catapult/systrace/systrace/tracing_controller.py
@@ -12,10 +12,11 @@ manages the clock sync process.
import ast
import json
import sys
-import py_utils
import tempfile
import uuid
+import py_utils
+
from systrace import trace_result
from systrace import tracing_agents
from py_trace_event import trace_event
@@ -280,7 +281,7 @@ def CreateAgentsWithConfig(options, modules):
class TracingControllerConfig(tracing_agents.TracingConfig):
def __init__(self, output_file, trace_time, write_json,
link_assets, asset_dir, timeout, collection_timeout,
- device_serial_number, target):
+ device_serial_number, target, trace_buf_size):
tracing_agents.TracingConfig.__init__(self)
self.output_file = output_file
self.trace_time = trace_time
@@ -291,6 +292,7 @@ class TracingControllerConfig(tracing_agents.TracingConfig):
self.collection_timeout = collection_timeout
self.device_serial_number = device_serial_number
self.target = target
+ self.trace_buf_size = trace_buf_size
def GetControllerConfig(options):
@@ -298,9 +300,10 @@ def GetControllerConfig(options):
options.write_json,
options.link_assets, options.asset_dir,
options.timeout, options.collection_timeout,
- options.device_serial_number, options.target)
+ options.device_serial_number, options.target,
+ options.trace_buf_size)
def GetChromeStartupControllerConfig(options):
return TracingControllerConfig(None, options.trace_time,
options.write_json, None, None, None, None,
- None, None)
+ None, None, options.trace_buf_size)
diff --git a/systrace/catapult/systrace/systrace/update_systrace_trace_viewer.py b/systrace/catapult/systrace/systrace/update_systrace_trace_viewer.py
index 72878a4..8460852 100755
--- a/systrace/catapult/systrace/systrace/update_systrace_trace_viewer.py
+++ b/systrace/catapult/systrace/systrace/update_systrace_trace_viewer.py
@@ -15,6 +15,8 @@ _CATAPULT_PATH = os.path.abspath(
os.path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir))
sys.path.append(os.path.join(_CATAPULT_PATH, 'tracing'))
+# this import needs to be after the change to sys.path above
+#pylint: disable=wrong-import-position
from tracing_build import vulcanize_trace_viewer
diff --git a/systrace/catapult/systrace/systrace/util.py b/systrace/catapult/systrace/systrace/util.py
index 61dc475..c9571b6 100644
--- a/systrace/catapult/systrace/systrace/util.py
+++ b/systrace/catapult/systrace/systrace/util.py
@@ -4,12 +4,10 @@
import optparse
import os
-import random
-import string
-import subprocess
import sys
from devil.android.constants import chrome
+from devil.android import device_utils, device_errors
class OptionParserIgnoreErrors(optparse.OptionParser):
"""Wrapper for OptionParser that ignores errors and produces no output."""
@@ -30,61 +28,6 @@ class OptionParserIgnoreErrors(optparse.OptionParser):
pass
-def add_adb_serial(adb_command, device_serial):
- """Add serial number to ADB shell command.
-
- ADB shell command is given as list, e.g.
- ['adb','shell','some_command','some_args'].
- This replaces it with:
- ['adb','shell',-s',device_serial,'some_command','some_args']
-
- Args:
- adb_command: ADB command list.
- device_serial: Device serial number.
-
- Returns:
- ADB command list with serial number added.
- """
- if device_serial is not None:
- adb_command.insert(1, device_serial)
- adb_command.insert(1, '-s')
-
-
-def construct_adb_shell_command(shell_args, device_serial):
- """Construct an ADB shell command with given device serial and arguments.
-
- Args:
- shell_args: array of arguments to pass to adb shell.
- device_serial: if not empty, will add the appropriate command-line
- parameters so that adb targets the given device.
- """
- adb_command = ['adb', 'shell', ' '.join(shell_args)]
- add_adb_serial(adb_command, device_serial)
- return adb_command
-
-
-def run_adb_command(adb_command):
- adb_output = []
- adb_return_code = 0
- try:
- adb_output = subprocess.check_output(adb_command, stderr=subprocess.STDOUT,
- shell=False, universal_newlines=True)
- except OSError as error:
- # This usually means that the adb executable was not found in the path.
- print >> sys.stderr, ('\nThe command "%s" failed with the following error:'
- % ' '.join(adb_command))
- print >> sys.stderr, ' %s' % str(error)
- print >> sys.stderr, 'Is adb in your path?'
- adb_return_code = error.errno
- adb_output = error
- except subprocess.CalledProcessError as error:
- # The process exited with an error.
- adb_return_code = error.returncode
- adb_output = error.output
-
- return (adb_output, adb_return_code)
-
-
def run_adb_shell(shell_args, device_serial):
"""Runs "adb shell" with the given arguments.
@@ -96,8 +39,17 @@ def run_adb_shell(shell_args, device_serial):
A tuple containing the adb output (stdout & stderr) and the return code
from adb. Will exit if adb fails to start.
"""
- adb_command = construct_adb_shell_command(shell_args, device_serial)
- return run_adb_command(adb_command)
+ adb_output = []
+ adb_return_code = 0
+ device = device_utils.DeviceUtils.HealthyDevices(device_arg=device_serial)[0]
+ try:
+ adb_output = device.RunShellCommand(shell_args, shell=False,
+ check_return=True, raw_output=True)
+ except device_errors.AdbShellCommandFailedError as error:
+ adb_return_code = error.status
+ adb_output = error.output
+
+ return (adb_output, adb_return_code)
def get_device_sdk_version():
@@ -135,23 +87,12 @@ def get_device_sdk_version():
success = True
if not success:
- sys.exit(1)
+ print >> sys.stderr, adb_output
+ raise Exception("Failed to get device sdk version")
return version
-def generate_random_filename_for_test():
- """Used for temporary files used in tests.
-
- Files created from 'NamedTemporaryFile' have inconsistent reuse support across
- platforms, so it's not guaranteed that they can be reopened. Since many tests
- communicate files via path, we typically use this method, as well as
- manual file removal."""
- name = ''.join(random.choice(string.ascii_uppercase +
- string.digits) for _ in range(10))
- return os.path.abspath(name)
-
-
def get_supported_browsers():
"""Returns the package names of all supported browsers."""
# Add aliases for backwards compatibility.
@@ -202,9 +143,6 @@ def get_main_options(parser):
'comma-separated list of app cmdlines')
parser.add_option('-t', '--time', dest='trace_time', type='int',
help='trace for N seconds', metavar='N')
- parser.add_option('--target', dest='target', default='android',
- type='string', help='choose tracing target (android or '
- ' linux)')
parser.add_option('-b', '--buf-size', dest='trace_buf_size',
type='int', help='use a trace buffer size '
' of N KB', metavar='N')
diff --git a/systrace/catapult/systrace/systrace/util_unittest.py b/systrace/catapult/systrace/systrace/util_unittest.py
deleted file mode 100644
index e88f835..0000000
--- a/systrace/catapult/systrace/systrace/util_unittest.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import unittest
-
-from systrace import decorators
-from systrace import util
-
-
-DEVICE_SERIAL = 'AG8404EC0444AGC'
-LIST_TMP_ARGS = ['ls', '/data/local/tmp']
-ATRACE_ARGS = ['atrace', '-z', '-t', '10', '-b', '4096']
-ADB_SHELL = ['adb', '-s', DEVICE_SERIAL, 'shell']
-
-
-class UtilTest(unittest.TestCase):
-
- @decorators.HostOnlyTest
- def test_construct_adb_shell_command(self):
- command = util.construct_adb_shell_command(LIST_TMP_ARGS, None)
- self.assertEqual(' '.join(command), 'adb shell ls /data/local/tmp')
-
- command = util.construct_adb_shell_command(LIST_TMP_ARGS, DEVICE_SERIAL)
- self.assertEqual(' '.join(command),
- 'adb -s AG8404EC0444AGC shell ls /data/local/tmp')
-
- command = util.construct_adb_shell_command(ATRACE_ARGS, DEVICE_SERIAL)
- self.assertEqual(' '.join(command),
- 'adb -s AG8404EC0444AGC shell atrace -z -t 10 -b 4096')
diff --git a/systrace/catapult/tracing/tracing/trace_data/trace_data.py b/systrace/catapult/tracing/tracing/trace_data/trace_data.py
index 8d6f624..ae658a2 100644
--- a/systrace/catapult/tracing/tracing/trace_data/trace_data.py
+++ b/systrace/catapult/tracing/tracing/trace_data/trace_data.py
@@ -2,29 +2,38 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import copy
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+import collections
+import gzip
import json
import logging
import os
import shutil
import subprocess
import tempfile
+import time
+import six
+
+
+try:
+ StringTypes = six.string_types # pylint: disable=invalid-name
+except NameError:
+ StringTypes = str
_TRACING_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)),
os.path.pardir, os.path.pardir)
_TRACE2HTML_PATH = os.path.join(_TRACING_DIR, 'bin', 'trace2html')
-
-class NonSerializableTraceData(Exception):
- """Raised when raw trace data cannot be serialized to TraceData."""
- pass
-
+MIB = 1024 * 1024
class TraceDataPart(object):
- """TraceData can have a variety of events.
+ """Trace data can come from a variety of tracing agents.
- These are called "parts" and are accessed by the following fixed field names.
+ Data from each agent is collected into a trace "part" and accessed by the
+ following fixed field names.
"""
def __init__(self, raw_field_name):
self._raw_field_name = raw_field_name
@@ -46,295 +55,242 @@ class TraceDataPart(object):
ANDROID_PROCESS_DATA_PART = TraceDataPart('androidProcessDump')
ATRACE_PART = TraceDataPart('systemTraceEvents')
ATRACE_PROCESS_DUMP_PART = TraceDataPart('atraceProcessDump')
-BATTOR_TRACE_PART = TraceDataPart('powerTraceAsString')
CHROME_TRACE_PART = TraceDataPart('traceEvents')
CPU_TRACE_DATA = TraceDataPart('cpuSnapshots')
-INSPECTOR_TRACE_PART = TraceDataPart('inspectorTimelineEvents')
-SURFACE_FLINGER_PART = TraceDataPart('surfaceFlinger')
-TAB_ID_PART = TraceDataPart('tabIds')
TELEMETRY_PART = TraceDataPart('telemetry')
WALT_TRACE_PART = TraceDataPart('waltTraceEvents')
ALL_TRACE_PARTS = {ANDROID_PROCESS_DATA_PART,
ATRACE_PART,
ATRACE_PROCESS_DUMP_PART,
- BATTOR_TRACE_PART,
CHROME_TRACE_PART,
CPU_TRACE_DATA,
- INSPECTOR_TRACE_PART,
- SURFACE_FLINGER_PART,
- TAB_ID_PART,
TELEMETRY_PART}
-ALL_TRACE_PARTS_RAW_NAMES = set(k.raw_field_name for k in ALL_TRACE_PARTS)
-
-def _HasTraceFor(part, raw):
- assert isinstance(part, TraceDataPart)
- if part.raw_field_name not in raw:
- return False
- return len(raw[part.raw_field_name]) > 0
-
-def _GetFilePathForTrace(trace, dir_path):
- """ Return path to a file that contains |trace|.
+class _TraceData(object):
+ """Provides read access to traces collected from multiple tracing agents.
- Note: if |trace| is an instance of TraceFileHandle, this reuses the trace path
- that the trace file handle holds. Otherwise, it creates a new trace file
- in |dir_path| directory.
+ Instances are created by calling the AsData() method on a TraceDataWriter.
"""
- if isinstance(trace, TraceFileHandle):
- return trace.file_path
- with tempfile.NamedTemporaryFile(mode='w', dir=dir_path, delete=False) as fp:
- if isinstance(trace, basestring):
- fp.write(trace)
- elif isinstance(trace, dict) or isinstance(trace, list):
- json.dump(trace, fp)
- else:
- raise TypeError('Trace is of unknown type.')
- return fp.name
-
-
-class TraceData(object):
- """ TraceData holds a collection of traces from multiple sources.
-
- A TraceData can have multiple active parts. Each part represents traces
- collected from a different trace agent.
- """
- def __init__(self):
- """Creates TraceData from the given data."""
- self._raw_data = {}
- self._events_are_safely_mutable = False
-
- def _SetFromBuilder(self, d):
- self._raw_data = d
- self._events_are_safely_mutable = True
-
- @property
- def events_are_safely_mutable(self):
- """Returns true if the events in this value are completely sealed.
-
- Some importers want to take complex fields out of the TraceData and add
- them to the model, changing them subtly as they do so. If the TraceData
- was constructed with data that is shared with something outside the trace
- data, for instance a test harness, then this mutation is unexpected. But,
- if the values are sealed, then mutating the events is a lot faster.
-
- We know if events are sealed if the value came from a string, or if the
- value came from a TraceDataBuilder.
- """
- return self._events_are_safely_mutable
-
- @property
- def active_parts(self):
- return {p for p in ALL_TRACE_PARTS if p.raw_field_name in self._raw_data}
+ def __init__(self, raw_data):
+ self._raw_data = raw_data
def HasTracesFor(self, part):
- return _HasTraceFor(part, self._raw_data)
+ return bool(self.GetTracesFor(part))
def GetTracesFor(self, part):
- """ Return the list of traces for |part| in string or dictionary forms.
-
- Note: since this API return the traces that can be directly accessed in
- memory, it may require lots of memory usage as some of the trace can be
- very big.
- For references, we have cases where Telemetry is OOM'ed because the memory
- required for processing the trace in Python is too big (crbug.com/672097).
- """
- assert isinstance(part, TraceDataPart)
- if not self.HasTracesFor(part):
- return []
- traces_list = self._raw_data[part.raw_field_name]
- # Since this API return the traces in memory form, and since the memory
- # bottleneck of Telemetry is for keeping trace in memory, there is no uses
- # in keeping the on-disk form of tracing beyond this point. Hence we convert
- # all traces for part of form TraceFileHandle to the JSON form.
- for i, data in enumerate(traces_list):
- if isinstance(data, TraceFileHandle):
- traces_list[i] = data.AsTraceData()
- return traces_list
+ """Return the list of traces for |part| in string or dictionary forms."""
+ if not isinstance(part, TraceDataPart):
+ raise TypeError('part must be a TraceDataPart instance')
+ return self._raw_data.get(part.raw_field_name, [])
def GetTraceFor(self, part):
- assert isinstance(part, TraceDataPart)
traces = self.GetTracesFor(part)
assert len(traces) == 1
return traces[0]
- def CleanUpAllTraces(self):
- """ Remove all the traces that this has handles to.
- Those include traces stored in memory & on disk. After invoking this,
- one can no longer uses this object for collecting the traces.
- """
- for traces_list in self._raw_data.itervalues():
- for trace in traces_list:
- if isinstance(trace, TraceFileHandle):
- trace.Clean()
- self._raw_data = {}
+_TraceItem = collections.namedtuple(
+ '_TraceItem', ['part_name', 'handle', 'compressed'])
- def Serialize(self, file_path, trace_title=''):
- """Serializes the trace result to |file_path|.
- """
- if not self._raw_data:
- logging.warning('No traces to convert to html.')
- return
- temp_dir = tempfile.mkdtemp()
- trace_files = []
- try:
- trace_size_data = {}
- for part, traces_list in self._raw_data.iteritems():
- for trace in traces_list:
- path = _GetFilePathForTrace(trace, temp_dir)
- trace_size_data.setdefault(part, 0)
- trace_size_data[part] += os.path.getsize(path)
- trace_files.append(path)
- logging.info('Trace sizes in bytes: %s', trace_size_data)
-
- cmd = (['python', _TRACE2HTML_PATH] + trace_files +
- ['--output', file_path] + ['--title', trace_title])
- subprocess.check_output(cmd)
- finally:
- shutil.rmtree(temp_dir)
-
-
-class TraceFileHandle(object):
- """A trace file handle object allows storing trace data on disk.
-
- TraceFileHandle API allows one to collect traces from Chrome into disk instead
- of keeping them in memory. This is important for keeping memory usage of
- Telemetry low to avoid OOM (see:
- https://github.com/catapult-project/catapult/issues/3119).
-
- The fact that this uses a file underneath to store tracing data means the
- callsite is repsonsible for discarding the file when they no longer need the
- tracing data. Call TraceFileHandle.Clean when you done using this object.
+class TraceDataBuilder(object):
+ """TraceDataBuilder helps build up a trace from multiple trace agents.
+
+ Note: the collected trace data is maintained in a set of temporary files to
+ be later processed e.g. by the Serialize() method. To ensure proper clean up
+ of such files clients must call the CleanUpTraceData() method or, even easier,
+ use the context manager API, e.g.:
+
+ with trace_data.TraceDataBuilder() as builder:
+ builder.AddTraceFor(trace_part, data)
+ builder.Serialize(output_file)
"""
def __init__(self):
- self._backing_file = None
- self._file_path = None
- self._trace_data = None
+ self._traces = []
+ self._frozen = False
+ self._temp_dir = tempfile.mkdtemp()
- def Open(self):
- assert not self._backing_file and not self._file_path
- self._backing_file = tempfile.NamedTemporaryFile(delete=False, mode='a')
+ def __enter__(self):
+ return self
- def AppendTraceData(self, partial_trace_data):
- assert isinstance(partial_trace_data, basestring)
- self._backing_file.write(partial_trace_data)
+ def __exit__(self, *args):
+ self.CleanUpTraceData()
- @property
- def file_path(self):
- assert self._file_path, (
- 'Either the handle need to be closed first or this handle is cleaned')
- return self._file_path
+ def OpenTraceHandleFor(self, part, compressed=False):
+ """Open a file handle for writing trace data into it.
+
+ Args:
+ part: A TraceDataPart instance.
+ compressed: An optional Boolean, indicates whether the written data is
+ gzipped. Note, this information is currently only used by the AsData()
+ method in order to be able to open and read the written data.
+ """
+ if not isinstance(part, TraceDataPart):
+ raise TypeError('part must be a TraceDataPart instance')
+ if self._frozen:
+ raise RuntimeError('trace data builder is no longer open for writing')
+ trace = _TraceItem(
+ part_name=part.raw_field_name,
+ handle=tempfile.NamedTemporaryFile(delete=False, dir=self._temp_dir),
+ compressed=compressed)
+ self._traces.append(trace)
+ return trace.handle
+
+ def AddTraceFileFor(self, part, trace_file):
+ """Move a file with trace data into this builder.
+
+ This is useful for situations where a client might want to start collecting
+ trace data into a file, even before the TraceDataBuilder itself is created.
+
+ Args:
+ part: A TraceDataPart instance.
+ trace_file: A path to a file containing trace data. Note: for efficiency
+ the file is moved rather than copied into the builder. Therefore the
+ source file will no longer exist after calling this method; and the
+ lifetime of the trace data will thereafter be managed by this builder.
+ """
+ with self.OpenTraceHandleFor(part) as handle:
+ pass
+ if os.name == 'nt':
+ # On windows os.rename won't overwrite, so the destination path needs to
+ # be removed first.
+ os.remove(handle.name)
+ os.rename(trace_file, handle.name)
+
+ def AddTraceFor(self, part, data, allow_unstructured=False):
+ """Record new trace data into this builder.
+
+ Args:
+ part: A TraceDataPart instance.
+ data: The trace data to write: a json-serializable dict, or unstructured
+ text data as a string.
+ allow_unstructured: This must be set to True to allow passing
+ unstructured text data as input. Note: the use of this flag is
+ discouraged and only exists to support legacy clients; new tracing
+ agents should all produce structured trace data (e.g. proto or json).
+ """
+ if isinstance(data, StringTypes):
+ if not allow_unstructured:
+ raise ValueError('must pass allow_unstructured=True for text data')
+ do_write = lambda d, f: f.write(d)
+ elif isinstance(data, dict):
+ do_write = json.dump
+ else:
+ raise TypeError('invalid trace data type')
+ with self.OpenTraceHandleFor(part) as handle:
+ do_write(data, handle)
+
+ def Freeze(self):
+ """Do not allow writing any more data into this builder."""
+ self._frozen = True
+ return self
+
+ def CleanUpTraceData(self):
+ """Clean up resources used by the data builder."""
+ if self._traces is None:
+ return # Already cleaned up.
+ self.Freeze()
+ for trace in self._traces:
+ # Make sure all trace handles are closed. It's fine if we close some
+ # of them multiple times.
+ trace.handle.close()
+ shutil.rmtree(self._temp_dir)
+ self._temp_dir = None
+ self._traces = None
+
+ def Serialize(self, file_path, trace_title=None):
+ """Serialize the trace data to a file in HTML format."""
+ self.Freeze()
+ assert self._traces, 'trace data has already been cleaned up'
+
+ trace_files = [trace.handle.name for trace in self._traces]
+ SerializeAsHtml(trace_files, file_path, trace_title)
- def Close(self):
- assert self._backing_file
- self._backing_file.close()
- self._file_path = self._backing_file.name
- self._backing_file = None
+ def AsData(self):
+ """Allow in-memory access to read the collected JSON trace data.
- def AsTraceData(self):
- """Get the object form of trace data that this handle manages.
+ This method is only provided for writing tests which require read access
+ to the collected trace data (e.g. for tracing agents to test they correctly
+ write data), and to support legacy TBMv1 metric computation. Only traces
+ in JSON format are supported.
- *Warning: this can have large memory footprint if the trace data is big.
+ Be careful: this may require a lot of memory if the traces to process are
+ very large. This has lead in the past to OOM errors (e.g. crbug/672097).
- Since this requires the in-memory form of the trace, it is no longer useful
- to still keep the backing file underneath, invoking this will also discard
- the file to avoid the risk of leaking the backing trace file.
+ TODO(crbug/928278): Ideally, this method should be removed when it can be
+ entirely replaced by calls to an external trace processor.
"""
- if self._trace_data:
- return self._trace_data
- assert self._file_path
- with open(self._file_path) as f:
- self._trace_data = json.load(f)
- self.Clean()
- return self._trace_data
-
- def Clean(self):
- """Remove the backing file used for storing trace on disk.
-
- This should be called when and only when you no longer need to use
- TraceFileHandle.
+ self.Freeze()
+ assert self._traces, 'trace data has already been cleaned up'
+
+ raw_data = {}
+ for trace in self._traces:
+ traces_for_part = raw_data.setdefault(trace.part_name, [])
+ opener = gzip.open if trace.compressed else open
+ with opener(trace.handle.name, 'rb') as f:
+ traces_for_part.append(json.load(f))
+ return _TraceData(raw_data)
+
+ def IterTraceParts(self):
+ """Iterates over trace parts.
+
+ Return value: iterator over pairs (part_name, file_path).
"""
- assert self._file_path
- os.remove(self._file_path)
- self._file_path = None
+ for trace in self._traces:
+ yield trace.part_name, trace.handle.name
-class TraceDataBuilder(object):
- """TraceDataBuilder helps build up a trace from multiple trace agents.
+def CreateTestTrace(number=1):
+ """Convenient helper method to create trace data objects for testing.
- TraceData is supposed to be immutable, but it is useful during recording to
- have a mutable version. That is TraceDataBuilder.
- """
- def __init__(self):
- self._raw_data = {}
+ Objects are created via the usual trace data writing route, so clients are
+ also responsible for cleaning up trace data themselves.
- def AsData(self):
- if self._raw_data == None:
- raise Exception('Can only AsData once')
- data = TraceData()
- data._SetFromBuilder(self._raw_data)
- self._raw_data = None
- return data
-
- def AddTraceFor(self, part, trace):
- assert isinstance(part, TraceDataPart), part
- if part == CHROME_TRACE_PART:
- assert (isinstance(trace, dict) or
- isinstance(trace, list) or
- isinstance(trace, TraceFileHandle))
- else:
- assert (isinstance(trace, basestring) or
- isinstance(trace, dict) or
- isinstance(trace, list))
+ Clients are meant to treat these test traces as opaque. No guarantees are
+ made about their contents, which they shouldn't try to read.
+ """
+ builder = TraceDataBuilder()
+ builder.AddTraceFor(CHROME_TRACE_PART, {'traceEvents': [{'test': number}]})
+ return builder.Freeze()
- if self._raw_data == None:
- raise Exception('Already called AsData() on this builder.')
- self._raw_data.setdefault(part.raw_field_name, [])
- self._raw_data[part.raw_field_name].append(trace)
+def CreateFromRawChromeEvents(events):
+ """Convenient helper to create trace data objects from raw Chrome events.
- def HasTracesFor(self, part):
- return _HasTraceFor(part, self._raw_data)
+ This bypasses trace data writing, going directly to the in-memory json trace
+ representation, so there is no need for trace file cleanup.
+ This is used only for testing legacy clients that still read trace data.
+ """
+ assert isinstance(events, list)
+ return _TraceData({
+ CHROME_TRACE_PART.raw_field_name: [{'traceEvents': events}]})
-def CreateTraceDataFromRawData(raw_data):
- """Convenient method for creating a TraceData object from |raw_data|.
- This is mostly used for testing.
- Args:
- raw_data can be:
- + A dictionary that repsents multiple trace parts. Keys of the
- dictionary must always contain 'traceEvents', as chrome trace
- must always present.
- + A list that represents Chrome trace events.
- + JSON string of either above.
+def SerializeAsHtml(trace_files, html_file, trace_title=None):
+ """Serialize a set of traces to a single file in HTML format.
+ Args:
+ trace_files: a list of file names, each containing a trace from
+ one of the tracing agents.
+ html_file: a name of the output file.
+ trace_title: optional. A title for the resulting trace.
"""
- raw_data = copy.deepcopy(raw_data)
- if isinstance(raw_data, basestring):
- json_data = json.loads(raw_data)
- else:
- json_data = raw_data
-
- b = TraceDataBuilder()
- if not json_data:
- return b.AsData()
- if isinstance(json_data, dict):
- assert 'traceEvents' in json_data, 'Only raw chrome trace is supported'
- trace_parts_keys = []
- for k in json_data:
- if k != 'traceEvents' and k in ALL_TRACE_PARTS_RAW_NAMES:
- trace_parts_keys.append(k)
- b.AddTraceFor(TraceDataPart(k), json_data[k])
- # Delete the data for extra keys to form trace data for Chrome part only.
- for k in trace_parts_keys:
- del json_data[k]
- b.AddTraceFor(CHROME_TRACE_PART, json_data)
- elif isinstance(json_data, list):
- b.AddTraceFor(CHROME_TRACE_PART, {'traceEvents': json_data})
- else:
- raise NonSerializableTraceData('Unrecognized data format.')
- return b.AsData()
+ if not trace_files:
+ raise ValueError('trace files list is empty')
+
+ input_size = sum(os.path.getsize(trace_file) for trace_file in trace_files)
+
+ cmd = ['python', _TRACE2HTML_PATH]
+ cmd.extend(trace_files)
+ cmd.extend(['--output', html_file])
+ if trace_title is not None:
+ cmd.extend(['--title', trace_title])
+
+ start_time = time.time()
+ subprocess.check_output(cmd)
+ elapsed_time = time.time() - start_time
+ logging.info('trace2html processed %.01f MiB of trace data in %.02f seconds.',
+ 1.0 * input_size / MIB, elapsed_time)
diff --git a/systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py b/systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py
index b065b4f..fdc48e2 100644
--- a/systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py
+++ b/systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py
@@ -2,102 +2,113 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import datetime
-import exceptions
+import base64
+import json
import os
-import shutil
import tempfile
import unittest
+from py_utils import tempfile_ext
from tracing.trace_data import trace_data
-from tracing_build import html2trace
class TraceDataTest(unittest.TestCase):
- def testSerialize(self):
- test_dir = tempfile.mkdtemp()
- trace_path = os.path.join(test_dir, 'test_trace.json')
- try:
- ri = trace_data.CreateTraceDataFromRawData({'traceEvents': [1, 2, 3]})
- ri.Serialize(trace_path)
- with open(trace_path) as f:
- json_traces = html2trace.ReadTracesFromHTMLFilePath(f)
- self.assertEqual(json_traces, [{'traceEvents': [1, 2, 3]}])
- finally:
- shutil.rmtree(test_dir)
-
- def testEmptyArrayValue(self):
- # We can import empty lists and empty string.
- d = trace_data.CreateTraceDataFromRawData([])
- self.assertFalse(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
-
- def testInvalidTrace(self):
- with self.assertRaises(AssertionError):
- trace_data.CreateTraceDataFromRawData({'hello': 1})
-
- def testListForm(self):
- d = trace_data.CreateTraceDataFromRawData([{'ph': 'B'}])
+ def testHasTracesForChrome(self):
+ d = trace_data.CreateFromRawChromeEvents([{'ph': 'B'}])
self.assertTrue(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
- events = d.GetTracesFor(trace_data.CHROME_TRACE_PART)[0].get(
- 'traceEvents', [])
- self.assertEquals(1, len(events))
- def testStringForm(self):
- d = trace_data.CreateTraceDataFromRawData('[{"ph": "B"}]')
- self.assertTrue(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
- events = d.GetTracesFor(trace_data.CHROME_TRACE_PART)[0].get(
- 'traceEvents', [])
- self.assertEquals(1, len(events))
-
-
-class TraceDataBuilderTest(unittest.TestCase):
- def testBasicChrome(self):
- builder = trace_data.TraceDataBuilder()
- builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
- {'traceEvents': [1, 2, 3]})
- builder.AddTraceFor(trace_data.TAB_ID_PART, ['tab-7'])
- builder.AddTraceFor(trace_data.BATTOR_TRACE_PART, 'battor data here')
-
- d = builder.AsData()
- self.assertTrue(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
- self.assertTrue(d.HasTracesFor(trace_data.TAB_ID_PART))
- self.assertTrue(d.HasTracesFor(trace_data.BATTOR_TRACE_PART))
-
- self.assertRaises(Exception, builder.AsData)
+ def testHasNotTracesForCpu(self):
+ d = trace_data.CreateFromRawChromeEvents([{'ph': 'B'}])
+ self.assertFalse(d.HasTracesFor(trace_data.CPU_TRACE_DATA))
- def testSetTraceFor(self):
- telemetry_trace = {
- 'traceEvents': [1, 2, 3],
- 'metadata': {
- 'field1': 'value1'
- }
- }
+ def testGetTracesForChrome(self):
+ d = trace_data.CreateFromRawChromeEvents([{'ph': 'B'}])
+ ts = d.GetTracesFor(trace_data.CHROME_TRACE_PART)
+ self.assertEqual(len(ts), 1)
+ self.assertEqual(ts[0], {'traceEvents': [{'ph': 'B'}]})
- builder = trace_data.TraceDataBuilder()
- builder.AddTraceFor(trace_data.TELEMETRY_PART, telemetry_trace)
- d = builder.AsData()
+ def testGetNoTracesForCpu(self):
+ d = trace_data.CreateFromRawChromeEvents([{'ph': 'B'}])
+ ts = d.GetTracesFor(trace_data.CPU_TRACE_DATA)
+ self.assertEqual(ts, [])
- self.assertEqual(d.GetTracesFor(trace_data.TELEMETRY_PART),
- [telemetry_trace])
- def testSetTraceForRaisesWithInvalidPart(self):
- builder = trace_data.TraceDataBuilder()
-
- self.assertRaises(exceptions.AssertionError,
- lambda: builder.AddTraceFor('not_a_trace_part', {}))
-
- def testSetTraceForRaisesWithInvalidTrace(self):
- builder = trace_data.TraceDataBuilder()
-
- self.assertRaises(
- exceptions.AssertionError,
- lambda: builder.AddTraceFor(trace_data.TELEMETRY_PART,
- datetime.time.min))
-
- def testSetTraceForRaisesAfterAsData(self):
- builder = trace_data.TraceDataBuilder()
- builder.AsData()
-
- self.assertRaises(
- exceptions.Exception,
- lambda: builder.AddTraceFor(trace_data.TELEMETRY_PART, {}))
+class TraceDataBuilderTest(unittest.TestCase):
+ def testAddTraceDataAndSerialize(self):
+ with tempfile_ext.TemporaryFileName() as trace_path:
+ with trace_data.TraceDataBuilder() as builder:
+ builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
+ {'traceEvents': [1, 2, 3]})
+ builder.Serialize(trace_path)
+ self.assertTrue(os.path.exists(trace_path))
+ self.assertGreater(os.stat(trace_path).st_size, 0) # File not empty.
+
+ def testAddTraceForRaisesWithInvalidPart(self):
+ with trace_data.TraceDataBuilder() as builder:
+ with self.assertRaises(TypeError):
+ builder.AddTraceFor('not_a_trace_part', {})
+
+ def testAddTraceWithUnstructuredData(self):
+ with trace_data.TraceDataBuilder() as builder:
+ builder.AddTraceFor(trace_data.TELEMETRY_PART, 'unstructured trace',
+ allow_unstructured=True)
+
+ def testAddTraceRaisesWithImplicitUnstructuredData(self):
+ with trace_data.TraceDataBuilder() as builder:
+ with self.assertRaises(ValueError):
+ builder.AddTraceFor(trace_data.TELEMETRY_PART, 'unstructured trace')
+
+ def testAddTraceFileFor(self):
+ original_data = {'msg': 'The answer is 42'}
+ with tempfile.NamedTemporaryFile(delete=False) as source:
+ json.dump(original_data, source)
+ with trace_data.TraceDataBuilder() as builder:
+ builder.AddTraceFileFor(trace_data.CHROME_TRACE_PART, source.name)
+ self.assertFalse(os.path.exists(source.name))
+ out_data = builder.AsData().GetTraceFor(trace_data.CHROME_TRACE_PART)
+
+ self.assertEqual(original_data, out_data)
+
+ def testOpenTraceHandleFor(self):
+ original_data = {'msg': 'The answer is 42'}
+ with trace_data.TraceDataBuilder() as builder:
+ with builder.OpenTraceHandleFor(trace_data.CHROME_TRACE_PART) as handle:
+ handle.write(json.dumps(original_data))
+ out_data = builder.AsData().GetTraceFor(trace_data.CHROME_TRACE_PART)
+
+ # Trace handle should be cleaned up.
+ self.assertFalse(os.path.exists(handle.name))
+ self.assertEqual(original_data, out_data)
+
+ def testOpenTraceHandleForCompressedData(self):
+ original_data = {'msg': 'The answer is 42'}
+ # gzip.compress() does not work in python 2, so hardcode the encoded data.
+ compressed_data = base64.b64decode(
+ 'H4sIAIDMblwAA6tWyi1OV7JSUArJSFVIzCsuTy1SyCxWMDFSquUCAA4QMtscAAAA')
+ with trace_data.TraceDataBuilder() as builder:
+ with builder.OpenTraceHandleFor(
+ trace_data.CHROME_TRACE_PART, compressed=True) as handle:
+ handle.write(compressed_data)
+ out_data = builder.AsData().GetTraceFor(trace_data.CHROME_TRACE_PART)
+
+ # Trace handle should be cleaned up.
+ self.assertFalse(os.path.exists(handle.name))
+ self.assertEqual(original_data, out_data)
+
+ def testCantWriteAfterCleanup(self):
+ with trace_data.TraceDataBuilder() as builder:
+ builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
+ {'traceEvents': [1, 2, 3]})
+ builder.CleanUpTraceData()
+ with self.assertRaises(RuntimeError):
+ builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
+ {'traceEvents': [1, 2, 3]})
+
+ def testCantWriteAfterFreeze(self):
+ with trace_data.TraceDataBuilder() as builder:
+ builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
+ {'traceEvents': [1, 2, 3]})
+ builder.Freeze()
+ with self.assertRaises(RuntimeError):
+ builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
+ {'traceEvents': [1, 2, 3]})
diff --git a/systrace/catapult/tracing/tracing_project.py b/systrace/catapult/tracing/tracing_project.py
index 633b98b..b4475b9 100644
--- a/systrace/catapult/tracing/tracing_project.py
+++ b/systrace/catapult/tracing/tracing_project.py
@@ -83,6 +83,7 @@ class TracingProject(object):
jszip_path = os.path.join(tracing_third_party_path, 'jszip')
pako_path = os.path.join(tracing_third_party_path, 'pako')
+ jpegjs_path = os.path.join(tracing_third_party_path, 'jpeg-js')
glmatrix_path = os.path.join(
tracing_third_party_path, 'gl-matrix', 'dist')
@@ -120,6 +121,7 @@ class TracingProject(object):
self.source_paths.append(self.mre_path)
self.source_paths.append(self.jszip_path)
self.source_paths.append(self.pako_path)
+ self.source_paths.append(self.jpegjs_path)
self.source_paths.append(self.glmatrix_path)
self.source_paths.append(self.mannwhitneyu_path)
self.source_paths.append(self.d3_path)