summaryrefslogtreecommitdiffstats
path: root/python/mozperftest
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozperftest')
-rw-r--r--python/mozperftest/.ruff.toml4
-rw-r--r--python/mozperftest/README.rst6
-rw-r--r--python/mozperftest/mozperftest/.coveragerc10
-rw-r--r--python/mozperftest/mozperftest/__init__.py13
-rw-r--r--python/mozperftest/mozperftest/argparser.py481
-rw-r--r--python/mozperftest/mozperftest/environment.py106
-rw-r--r--python/mozperftest/mozperftest/fzf/__init__.py3
-rw-r--r--python/mozperftest/mozperftest/fzf/fzf.py116
-rw-r--r--python/mozperftest/mozperftest/fzf/preview.py90
-rw-r--r--python/mozperftest/mozperftest/hooks.py63
-rw-r--r--python/mozperftest/mozperftest/layers.py177
-rw-r--r--python/mozperftest/mozperftest/mach_commands.py302
-rw-r--r--python/mozperftest/mozperftest/metadata.py44
-rw-r--r--python/mozperftest/mozperftest/metrics/__init__.py23
-rw-r--r--python/mozperftest/mozperftest/metrics/common.py356
-rw-r--r--python/mozperftest/mozperftest/metrics/consoleoutput.py59
-rw-r--r--python/mozperftest/mozperftest/metrics/exceptions.py53
-rw-r--r--python/mozperftest/mozperftest/metrics/notebook/__init__.py7
-rw-r--r--python/mozperftest/mozperftest/metrics/notebook/constant.py31
-rw-r--r--python/mozperftest/mozperftest/metrics/notebook/notebook-sections/compare85
-rw-r--r--python/mozperftest/mozperftest/metrics/notebook/notebook-sections/header12
-rw-r--r--python/mozperftest/mozperftest/metrics/notebook/notebook-sections/scatterplot15
-rw-r--r--python/mozperftest/mozperftest/metrics/notebook/perftestetl.py167
-rw-r--r--python/mozperftest/mozperftest/metrics/notebook/perftestnotebook.py79
-rw-r--r--python/mozperftest/mozperftest/metrics/notebook/template_upload_file.html39
-rw-r--r--python/mozperftest/mozperftest/metrics/notebook/transformer.py228
-rw-r--r--python/mozperftest/mozperftest/metrics/notebook/transforms/__init__.py0
-rw-r--r--python/mozperftest/mozperftest/metrics/notebook/transforms/logcattime.py121
-rw-r--r--python/mozperftest/mozperftest/metrics/notebook/transforms/single_json.py56
-rw-r--r--python/mozperftest/mozperftest/metrics/notebook/utilities.py63
-rw-r--r--python/mozperftest/mozperftest/metrics/notebookupload.py115
-rw-r--r--python/mozperftest/mozperftest/metrics/perfboard/__init__.py3
-rw-r--r--python/mozperftest/mozperftest/metrics/perfboard/dashboard.json56
-rw-r--r--python/mozperftest/mozperftest/metrics/perfboard/grafana.py87
-rw-r--r--python/mozperftest/mozperftest/metrics/perfboard/influx.py188
-rw-r--r--python/mozperftest/mozperftest/metrics/perfboard/panel.json81
-rw-r--r--python/mozperftest/mozperftest/metrics/perfboard/target.json20
-rw-r--r--python/mozperftest/mozperftest/metrics/perfherder.py374
-rw-r--r--python/mozperftest/mozperftest/metrics/utils.py149
-rw-r--r--python/mozperftest/mozperftest/metrics/visualmetrics.py221
-rw-r--r--python/mozperftest/mozperftest/runner.py299
-rw-r--r--python/mozperftest/mozperftest/schemas/intermediate-results-schema.json113
-rw-r--r--python/mozperftest/mozperftest/schemas/transformer_schema.json55
-rw-r--r--python/mozperftest/mozperftest/script.py334
-rw-r--r--python/mozperftest/mozperftest/system/__init__.py35
-rw-r--r--python/mozperftest/mozperftest/system/android.py238
-rw-r--r--python/mozperftest/mozperftest/system/android_perf_tuner.py144
-rw-r--r--python/mozperftest/mozperftest/system/android_startup.py414
-rw-r--r--python/mozperftest/mozperftest/system/example.zipbin0 -> 6588776 bytes
-rw-r--r--python/mozperftest/mozperftest/system/macos.py121
-rw-r--r--python/mozperftest/mozperftest/system/pingserver.py94
-rw-r--r--python/mozperftest/mozperftest/system/profile.py122
-rw-r--r--python/mozperftest/mozperftest/system/proxy.py246
-rw-r--r--python/mozperftest/mozperftest/test/__init__.py28
-rw-r--r--python/mozperftest/mozperftest/test/androidlog.py62
-rw-r--r--python/mozperftest/mozperftest/test/browsertime/__init__.py19
-rw-r--r--python/mozperftest/mozperftest/test/browsertime/package-lock.json1874
-rw-r--r--python/mozperftest/mozperftest/test/browsertime/package.json12
-rw-r--r--python/mozperftest/mozperftest/test/browsertime/runner.py471
-rw-r--r--python/mozperftest/mozperftest/test/browsertime/visualtools.py277
-rw-r--r--python/mozperftest/mozperftest/test/functionaltestrunner.py82
-rw-r--r--python/mozperftest/mozperftest/test/mochitest.py217
-rw-r--r--python/mozperftest/mozperftest/test/noderunner.py75
-rw-r--r--python/mozperftest/mozperftest/test/webpagetest.py414
-rw-r--r--python/mozperftest/mozperftest/test/xpcshell.py184
-rw-r--r--python/mozperftest/mozperftest/tests/__init__.py1
-rw-r--r--python/mozperftest/mozperftest/tests/conftest.py152
-rw-r--r--python/mozperftest/mozperftest/tests/data/WPT_fakekey.txt0
-rw-r--r--python/mozperftest/mozperftest/tests/data/browsertime-results-video/browsertime.json991
-rw-r--r--python/mozperftest/mozperftest/tests/data/browsertime-results-video/pages/www.bbc.com/data/video/1.mp4bin0 -> 212135 bytes
-rw-r--r--python/mozperftest/mozperftest/tests/data/browsertime-results-video/pages/www.bbc.com/news/world-middle-east-53598965/data/video/1.mp4bin0 -> 841128 bytes
-rw-r--r--python/mozperftest/mozperftest/tests/data/browsertime-results-video/pages/www.bbc.com/news/world-us-canada-53599363/data/video/1.mp4bin0 -> 510158 bytes
-rw-r--r--python/mozperftest/mozperftest/tests/data/browsertime-results/browsertime.json1
-rw-r--r--python/mozperftest/mozperftest/tests/data/failing-samples/perftest_doc_failure_example.js40
-rw-r--r--python/mozperftest/mozperftest/tests/data/firefox.dmgbin0 -> 18561 bytes
-rw-r--r--python/mozperftest/mozperftest/tests/data/home_activity.txt2806
-rw-r--r--python/mozperftest/mozperftest/tests/data/hook.py7
-rw-r--r--python/mozperftest/mozperftest/tests/data/hook_raises.py3
-rw-r--r--python/mozperftest/mozperftest/tests/data/hook_resume.py3
-rw-r--r--python/mozperftest/mozperftest/tests/data/hooks_iteration.py2
-rw-r--r--python/mozperftest/mozperftest/tests/data/hooks_state.py11
-rw-r--r--python/mozperftest/mozperftest/tests/data/logcat5511
-rw-r--r--python/mozperftest/mozperftest/tests/data/mozinfo.json1
-rw-r--r--python/mozperftest/mozperftest/tests/data/multiple_transforms_error/test_transformer_1.py6
-rw-r--r--python/mozperftest/mozperftest/tests/data/multiple_transforms_error/test_transformer_1_copy.py6
-rw-r--r--python/mozperftest/mozperftest/tests/data/perftestetl_plugin/test_transformer_perftestetl_plugin_1.py6
-rw-r--r--python/mozperftest/mozperftest/tests/data/perftestetl_plugin/test_transformer_perftestetl_plugin_2.py6
-rw-r--r--python/mozperftest/mozperftest/tests/data/samples/head.js7
-rw-r--r--python/mozperftest/mozperftest/tests/data/samples/perftest_example.js46
-rw-r--r--python/mozperftest/mozperftest/tests/data/samples/test_mochitest.html33
-rw-r--r--python/mozperftest/mozperftest/tests/data/samples/test_mochitest_multiscript.html36
-rw-r--r--python/mozperftest/mozperftest/tests/data/samples/test_perftest_WPT_init_file.js113
-rw-r--r--python/mozperftest/mozperftest/tests/data/samples/test_perftest_android_startup.js34
-rw-r--r--python/mozperftest/mozperftest/tests/data/samples/test_xpcshell.js39
-rw-r--r--python/mozperftest/mozperftest/tests/data/samples/test_xpcshell_flavor2.js35
-rw-r--r--python/mozperftest/mozperftest/tests/data/samples/xpcshell.ini5
-rw-r--r--python/mozperftest/mozperftest/tests/data/xpcshell1
-rw-r--r--python/mozperftest/mozperftest/tests/fetched_artifact.zipbin0 -> 728 bytes
-rw-r--r--python/mozperftest/mozperftest/tests/support.py122
-rw-r--r--python/mozperftest/mozperftest/tests/test_android.py331
-rw-r--r--python/mozperftest/mozperftest/tests/test_android_startup.py285
-rw-r--r--python/mozperftest/mozperftest/tests/test_androidlog.py81
-rw-r--r--python/mozperftest/mozperftest/tests/test_argparser.py159
-rw-r--r--python/mozperftest/mozperftest/tests/test_browsertime.py364
-rw-r--r--python/mozperftest/mozperftest/tests/test_change_detector.py113
-rw-r--r--python/mozperftest/mozperftest/tests/test_consoleoutput.py36
-rw-r--r--python/mozperftest/mozperftest/tests/test_constant.py13
-rw-r--r--python/mozperftest/mozperftest/tests/test_environment.py158
-rw-r--r--python/mozperftest/mozperftest/tests/test_functionaltestrunner.py57
-rw-r--r--python/mozperftest/mozperftest/tests/test_fzf.py59
-rw-r--r--python/mozperftest/mozperftest/tests/test_influx.py121
-rw-r--r--python/mozperftest/mozperftest/tests/test_ir_schema.py103
-rw-r--r--python/mozperftest/mozperftest/tests/test_layers.py88
-rw-r--r--python/mozperftest/mozperftest/tests/test_logcat_transformer.py125
-rw-r--r--python/mozperftest/mozperftest/tests/test_mach_commands.py331
-rw-r--r--python/mozperftest/mozperftest/tests/test_macos.py94
-rw-r--r--python/mozperftest/mozperftest/tests/test_metrics_utils.py97
-rw-r--r--python/mozperftest/mozperftest/tests/test_mochitest.py221
-rw-r--r--python/mozperftest/mozperftest/tests/test_notebookupload.py123
-rw-r--r--python/mozperftest/mozperftest/tests/test_perfherder.py620
-rw-r--r--python/mozperftest/mozperftest/tests/test_perftestetl.py106
-rw-r--r--python/mozperftest/mozperftest/tests/test_perftestnotebook.py75
-rw-r--r--python/mozperftest/mozperftest/tests/test_pingserver.py38
-rw-r--r--python/mozperftest/mozperftest/tests/test_profile.py52
-rw-r--r--python/mozperftest/mozperftest/tests/test_proxy.py232
-rw-r--r--python/mozperftest/mozperftest/tests/test_runner.py51
-rw-r--r--python/mozperftest/mozperftest/tests/test_script.py127
-rw-r--r--python/mozperftest/mozperftest/tests/test_single_json_transformer.py80
-rw-r--r--python/mozperftest/mozperftest/tests/test_transformer.py161
-rw-r--r--python/mozperftest/mozperftest/tests/test_utils.py270
-rw-r--r--python/mozperftest/mozperftest/tests/test_visualmetrics.py103
-rw-r--r--python/mozperftest/mozperftest/tests/test_visualtools.py47
-rw-r--r--python/mozperftest/mozperftest/tests/test_webpagetest.py271
-rw-r--r--python/mozperftest/mozperftest/tests/test_xpcshell.py165
-rw-r--r--python/mozperftest/mozperftest/tools.py148
-rw-r--r--python/mozperftest/mozperftest/utils.py634
-rw-r--r--python/mozperftest/perfdocs/config.yml49
-rw-r--r--python/mozperftest/perfdocs/developing.rst154
-rw-r--r--python/mozperftest/perfdocs/index.rst20
-rw-r--r--python/mozperftest/perfdocs/running.rst51
-rw-r--r--python/mozperftest/perfdocs/tools.rst21
-rw-r--r--python/mozperftest/perfdocs/vision.rst66
-rw-r--r--python/mozperftest/perfdocs/writing.rst228
-rw-r--r--python/mozperftest/setup.cfg2
-rw-r--r--python/mozperftest/setup.py37
145 files changed, 26824 insertions, 0 deletions
diff --git a/python/mozperftest/.ruff.toml b/python/mozperftest/.ruff.toml
new file mode 100644
index 0000000000..10338e3dbc
--- /dev/null
+++ b/python/mozperftest/.ruff.toml
@@ -0,0 +1,4 @@
+extend = "../../pyproject.toml"
+
+[isort]
+known-first-party = ["mozperftest"]
diff --git a/python/mozperftest/README.rst b/python/mozperftest/README.rst
new file mode 100644
index 0000000000..383530146b
--- /dev/null
+++ b/python/mozperftest/README.rst
@@ -0,0 +1,6 @@
+===========
+mozperftest
+===========
+
+**mozperftest** can be used to run performance tests against browsers.
+See the docs directory.
diff --git a/python/mozperftest/mozperftest/.coveragerc b/python/mozperftest/mozperftest/.coveragerc
new file mode 100644
index 0000000000..a3cdafa52c
--- /dev/null
+++ b/python/mozperftest/mozperftest/.coveragerc
@@ -0,0 +1,10 @@
+[run]
+omit =
+ python/mozperftest/mozperftest/tests/*
+include =
+ python/mozperftest/*
+
+[report]
+sort = Cover
+show_missing = True
+fail_under = 91
diff --git a/python/mozperftest/mozperftest/__init__.py b/python/mozperftest/mozperftest/__init__.py
new file mode 100644
index 0000000000..3d12258de5
--- /dev/null
+++ b/python/mozperftest/mozperftest/__init__.py
@@ -0,0 +1,13 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import mozlog
+
+from mozperftest.argparser import ( # noqa
+ PerftestArgumentParser,
+ PerftestToolsArgumentParser,
+)
+from mozperftest.environment import MachEnvironment # noqa
+from mozperftest.metadata import Metadata # noqa
+
+logger = mozlog.commandline.setup_logging("mozperftest", {})
diff --git a/python/mozperftest/mozperftest/argparser.py b/python/mozperftest/mozperftest/argparser.py
new file mode 100644
index 0000000000..40b3cfc277
--- /dev/null
+++ b/python/mozperftest/mozperftest/argparser.py
@@ -0,0 +1,481 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import copy
+import os
+from argparse import ArgumentParser, Namespace
+
+import mozlog
+
+here = os.path.abspath(os.path.dirname(__file__))
+try:
+ from mozbuild.base import MachCommandConditions as conditions
+ from mozbuild.base import MozbuildObject
+
+ build_obj = MozbuildObject.from_environment(cwd=here)
+except Exception:
+ build_obj = None
+ conditions = None
+
+from mozperftest.metrics import get_layers as metrics_layers # noqa
+from mozperftest.system import get_layers as system_layers # noqa
+from mozperftest.test import get_layers as test_layers # noqa
+from mozperftest.utils import convert_day # noqa
+
+FLAVORS = (
+ "desktop-browser",
+ "mobile-browser",
+ "doc",
+ "xpcshell",
+ "webpagetest",
+ "mochitest",
+)
+
+
+class Options:
+ general_args = {
+ "--flavor": {
+ "choices": FLAVORS,
+ "metavar": "{{{}}}".format(", ".join(FLAVORS)),
+ "default": "desktop-browser",
+ "help": "Only run tests of this flavor.",
+ },
+ "tests": {
+ "nargs": "*",
+ "metavar": "TEST",
+ "default": [],
+ "help": "Test to run. Can be a single test file or URL or a directory"
+ " of tests (to run recursively). If omitted, the entire suite is run.",
+ },
+ "--test-iterations": {
+ "type": int,
+ "default": 1,
+ "help": "Number of times the whole test is executed",
+ },
+ "--output": {
+ "type": str,
+ "default": "artifacts",
+ "help": "Path to where data will be stored, defaults to a top-level "
+ "`artifacts` folder.",
+ },
+ "--hooks": {
+ "type": str,
+ "default": None,
+ "help": "Script containing hooks. Can be a path or a URL.",
+ },
+ "--verbose": {"action": "store_true", "default": False, "help": "Verbose mode"},
+ "--push-to-try": {
+ "action": "store_true",
+ "default": False,
+ "help": "Pushin the test to try",
+ },
+ "--try-platform": {
+ "nargs": "*",
+ "type": str,
+ "default": "linux",
+ "help": "Platform to use on try",
+ "choices": ["linux", "mac", "win"],
+ },
+ "--on-try": {
+ "action": "store_true",
+ "default": False,
+ "help": "Running the test on try",
+ },
+ "--test-date": {
+ "type": convert_day,
+ "default": "today",
+ "help": "Used in multi-commit testing, it specifies the day to get test builds from. "
+ "Must follow the format `YYYY.MM.DD` or be `today` or `yesterday`.",
+ },
+ }
+
+ args = copy.deepcopy(general_args)
+
+
+for layer in system_layers() + test_layers() + metrics_layers():
+ if layer.activated:
+ # add an option to deactivate it
+ option_name = "--no-%s" % layer.name
+ option_help = "Deactivates the %s layer" % layer.name
+ else:
+ option_name = "--%s" % layer.name
+ option_help = "Activates the %s layer" % layer.name
+
+ Options.args[option_name] = {
+ "action": "store_true",
+ "default": False,
+ "help": option_help,
+ }
+
+ for option, value in layer.arguments.items():
+ parsed_option = "--%s-%s" % (layer.name, option.replace("_", "-"))
+ if parsed_option in Options.args:
+ raise KeyError("%s option already defined!" % parsed_option)
+ Options.args[parsed_option] = value
+
+
+class PerftestArgumentParser(ArgumentParser):
+ """%(prog)s [options] [test paths]"""
+
+ def __init__(self, app=None, **kwargs):
+ ArgumentParser.__init__(
+ self, usage=self.__doc__, conflict_handler="resolve", **kwargs
+ )
+ # XXX see if this list will vary depending on the flavor & app
+ self.oldcwd = os.getcwd()
+ self.app = app
+ if not self.app and build_obj:
+ if conditions.is_android(build_obj):
+ self.app = "android"
+ if not self.app:
+ self.app = "generic"
+ for name, options in Options.args.items():
+ self.add_argument(name, **options)
+
+ mozlog.commandline.add_logging_group(self)
+ self.set_by_user = []
+
+ def parse_helper(self, args):
+ for arg in args:
+ arg_part = arg.partition("--")[-1].partition("-")
+ layer_name = f"--{arg_part[0]}"
+ layer_exists = arg_part[1] and layer_name in Options.args
+ if layer_exists:
+ args.append(layer_name)
+
+ def get_user_args(self, args):
+ # suppress args that were not provided by the user.
+ res = {}
+ for key, value in args.items():
+ if key not in self.set_by_user:
+ continue
+ res[key] = value
+ return res
+
+ def _parse_known_args(self, arg_strings, namespace):
+ # at this point, the namespace is filled with default values
+ # defined in the args
+
+ # let's parse what the user really gave us in the CLI
+ # in a new namespace
+ user_namespace, extras = super()._parse_known_args(arg_strings, Namespace())
+
+ self.set_by_user = list([name for name, value in user_namespace._get_kwargs()])
+
+ # we can now merge both
+ for key, value in user_namespace._get_kwargs():
+ setattr(namespace, key, value)
+
+ return namespace, extras
+
+ def parse_args(self, args=None, namespace=None):
+ self.parse_helper(args)
+ return super().parse_args(args, namespace)
+
+ def parse_known_args(self, args=None, namespace=None):
+ self.parse_helper(args)
+ return super().parse_known_args(args, namespace)
+
+
+class SideBySideOptions:
+ args = [
+ [
+ ["-t", "--test-name"],
+ {
+ "type": str,
+ "required": True,
+ "dest": "test_name",
+ "help": "The name of the test task to get videos from.",
+ },
+ ],
+ [
+ ["--new-test-name"],
+ {
+ "type": str,
+ "default": None,
+ "help": "The name of the test task to get videos from in the new revision.",
+ },
+ ],
+ [
+ ["--base-revision"],
+ {
+ "type": str,
+ "required": True,
+ "help": "The base revision to compare a new revision to.",
+ },
+ ],
+ [
+ ["--new-revision"],
+ {
+ "type": str,
+ "required": True,
+ "help": "The base revision to compare a new revision to.",
+ },
+ ],
+ [
+ ["--base-branch"],
+ {
+ "type": str,
+ "default": "autoland",
+ "help": "Branch to search for the base revision.",
+ },
+ ],
+ [
+ ["--new-branch"],
+ {
+ "type": str,
+ "default": "autoland",
+ "help": "Branch to search for the new revision.",
+ },
+ ],
+ [
+ ["--base-platform"],
+ {
+ "type": str,
+ "required": True,
+ "dest": "platform",
+ "help": "Platform to return results for.",
+ },
+ ],
+ [
+ ["--new-platform"],
+ {
+ "type": str,
+ "default": None,
+ "help": "Platform to return results for in the new revision.",
+ },
+ ],
+ [
+ ["-o", "--overwrite"],
+ {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, the downloaded task group data will be deleted before "
+ + "it gets re-downloaded.",
+ },
+ ],
+ [
+ ["--cold"],
+ {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, we'll only look at cold pageload tests.",
+ },
+ ],
+ [
+ ["--warm"],
+ {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, we'll only look at warm pageload tests.",
+ },
+ ],
+ [
+ ["--most-similar"],
+ {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, we'll search for a video pairing that is the most similar.",
+ },
+ ],
+ [
+ ["--search-crons"],
+ {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, we will search for the tasks within the cron jobs as well. ",
+ },
+ ],
+ [
+ ["--skip-download"],
+ {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, we won't try to download artifacts again and we'll "
+ + "try using what already exists in the output folder.",
+ },
+ ],
+ [
+ ["--output"],
+ {
+ "type": str,
+ "default": None,
+ "help": "This is where the data will be saved. Defaults to CWD. "
+ + "You can include a name for the file here, otherwise it will "
+ + "default to side-by-side.mp4.",
+ },
+ ],
+ [
+ ["--metric"],
+ {
+ "type": str,
+ "default": "speedindex",
+ "help": "Metric to use for side-by-side comparison.",
+ },
+ ],
+ [
+ ["--vismetPath"],
+ {
+ "type": str,
+ "default": False,
+ "help": "Paths to visualmetrics.py for step chart generation.",
+ },
+ ],
+ [
+ ["--original"],
+ {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, use the original videos in the side-by-side instead "
+ + "of the postprocessed videos.",
+ },
+ ],
+ [
+ ["--skip-slow-gif"],
+ {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, the slow-motion GIFs won't be produced.",
+ },
+ ],
+ ]
+
+
+class ChangeDetectorOptions:
+ args = [
+ # TODO: Move the common tool arguments to a common
+ # argument class.
+ [
+ ["--task-name"],
+ {
+ "type": str,
+ "nargs": "*",
+ "default": [],
+ "dest": "task_names",
+ "help": "The full name of the test task to get data from e.g. "
+ "test-android-hw-a51-11-0-aarch64-shippable-qr/opt-"
+ "browsertime-tp6m-geckoview-sina-nofis.",
+ },
+ ],
+ [
+ ["-t", "--test-name"],
+ {
+ "type": str,
+ "default": None,
+ "dest": "test_name",
+ "help": "The name of the test task to get data from e.g. "
+ "browsertime-tp6m-geckoview-sina-nofis.",
+ },
+ ],
+ [
+ ["--platform"],
+ {
+ "type": str,
+ "default": None,
+ "help": "Platform to analyze e.g. "
+ "test-android-hw-a51-11-0-aarch64-shippable-qr/opt.",
+ },
+ ],
+ [
+ ["--new-test-name"],
+ {
+ "type": str,
+ "help": "The name of the test task to get data from in the "
+ "base revision e.g. browsertime-tp6m-geckoview-sina-nofis.",
+ },
+ ],
+ [
+ ["--new-platform"],
+ {
+ "type": str,
+ "help": "Platform to analyze in base revision e.g. "
+ "test-android-hw-a51-11-0-aarch64-shippable-qr/opt.",
+ },
+ ],
+ [
+ ["--depth"],
+ {
+ "type": int,
+ "default": None,
+ "help": "This sets how the change detector should run. "
+ "Default is None, which is a direct comparison between the "
+ "revisions. -1 will autocompute the number of revisions to "
+ "look at between the base, and new. Any other positive integer "
+ "acts as a maximum number to look at.",
+ },
+ ],
+ [
+ ["--base-revision"],
+ {
+ "type": str,
+ "required": True,
+ "help": "The base revision to compare a new revision to.",
+ },
+ ],
+ [
+ ["--new-revision"],
+ {
+ "type": str,
+ "required": True,
+ "help": "The new revision to compare a base revision to.",
+ },
+ ],
+ [
+ ["--base-branch"],
+ {
+ "type": str,
+ "default": "try",
+ "help": "Branch to search for the base revision.",
+ },
+ ],
+ [
+ ["--new-branch"],
+ {
+ "type": str,
+ "default": "try",
+ "help": "Branch to search for the new revision.",
+ },
+ ],
+ [
+ ["--skip-download"],
+ {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, we won't try to download artifacts again and we'll "
+ + "try using what already exists in the output folder.",
+ },
+ ],
+ [
+ ["-o", "--overwrite"],
+ {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, the downloaded task group data will be deleted before "
+ + "it gets re-downloaded.",
+ },
+ ],
+ ]
+
+
+class ToolingOptions:
+ args = {
+ "side-by-side": SideBySideOptions.args,
+ "change-detector": ChangeDetectorOptions.args,
+ }
+
+
+class PerftestToolsArgumentParser(ArgumentParser):
+ """%(prog)s [options] [test paths]"""
+
+ tool = None
+
+ def __init__(self, *args, **kwargs):
+ ArgumentParser.__init__(
+ self, usage=self.__doc__, conflict_handler="resolve", **kwargs
+ )
+
+ if PerftestToolsArgumentParser.tool is None:
+ raise SystemExit("No tool specified, cannot continue parsing")
+ else:
+ for name, options in ToolingOptions.args[PerftestToolsArgumentParser.tool]:
+ self.add_argument(*name, **options)
diff --git a/python/mozperftest/mozperftest/environment.py b/python/mozperftest/mozperftest/environment.py
new file mode 100644
index 0000000000..7be0f1f639
--- /dev/null
+++ b/python/mozperftest/mozperftest/environment.py
@@ -0,0 +1,106 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import contextlib
+import copy
+
+from mozperftest.argparser import FLAVORS
+from mozperftest.hooks import Hooks
+from mozperftest.layers import Layers, StopRunError
+from mozperftest.metrics import pick_metrics
+from mozperftest.system import pick_system
+from mozperftest.test import pick_test
+from mozperftest.utils import MachLogger
+
+SYSTEM, TEST, METRICS = 0, 1, 2
+
+
+class MachEnvironment(MachLogger):
+ def __init__(self, mach_cmd, flavor="desktop-browser", hooks=None, **kwargs):
+ MachLogger.__init__(self, mach_cmd)
+ self._mach_cmd = mach_cmd
+ self._mach_args = dict(
+ [(self._normalize(key), value) for key, value in kwargs.items()]
+ )
+ self.layers = []
+ if flavor not in FLAVORS:
+ raise NotImplementedError(flavor)
+ for layer in (pick_system, pick_test, pick_metrics):
+ self.add_layer(layer(self, flavor, mach_cmd))
+ if hooks is None:
+ # we just load an empty Hooks instance
+ hooks = Hooks(mach_cmd)
+ self.hooks = hooks
+
+ @contextlib.contextmanager
+ def frozen(self):
+ self.freeze()
+ try:
+ # used to trigger __enter__/__exit__
+ with self:
+ yield self
+ finally:
+ self.unfreeze()
+
+ def _normalize(self, name):
+ if name.startswith("--"):
+ name = name[2:]
+ return name.replace("-", "_")
+
+ def set_arg(self, name, value):
+ """Sets the argument"""
+ # see if we want to restrict to existing keys
+ self._mach_args[self._normalize(name)] = value
+
+ def get_arg(self, name, default=None, layer=None):
+ name = self._normalize(name)
+ marker = object()
+ res = self._mach_args.get(name, marker)
+ if res is marker:
+ # trying with the name prefixed with the layer name
+ if layer is not None and not name.startswith(layer.name):
+ name = "%s_%s" % (layer.name, name)
+ return self._mach_args.get(name, default)
+ return default
+ return res
+
+ def get_layer(self, name):
+ for layer in self.layers:
+ if isinstance(layer, Layers):
+ found = layer.get_layer(name)
+ if found is not None:
+ return found
+ elif layer.name == name:
+ return layer
+ return None
+
+ def add_layer(self, layer):
+ self.layers.append(layer)
+
+ def freeze(self):
+ # freeze args (XXX do we need to freeze more?)
+ self._saved_mach_args = copy.deepcopy(self._mach_args)
+
+ def unfreeze(self):
+ self._mach_args = self._saved_mach_args
+ self._saved_mach_args = None
+
+ def run(self, metadata):
+ # run the system and test layers
+ try:
+ with self.layers[SYSTEM] as syslayer, self.layers[TEST] as testlayer:
+ metadata = testlayer(syslayer(metadata))
+
+ # then run the metrics layers
+ with self.layers[METRICS] as metrics:
+ metadata = metrics(metadata)
+ except StopRunError:
+ # ends the cycle but without bubbling up the error
+ pass
+ return metadata
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, type, value, traceback):
+ return
diff --git a/python/mozperftest/mozperftest/fzf/__init__.py b/python/mozperftest/mozperftest/fzf/__init__.py
new file mode 100644
index 0000000000..6fbe8159b2
--- /dev/null
+++ b/python/mozperftest/mozperftest/fzf/__init__.py
@@ -0,0 +1,3 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
diff --git a/python/mozperftest/mozperftest/fzf/fzf.py b/python/mozperftest/mozperftest/fzf/fzf.py
new file mode 100644
index 0000000000..993c6e4e23
--- /dev/null
+++ b/python/mozperftest/mozperftest/fzf/fzf.py
@@ -0,0 +1,116 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import json
+import os
+import subprocess
+import sys
+from pathlib import Path
+from shutil import which
+
+from mach.util import get_state_dir
+from mozterm import Terminal
+
+HERE = Path(__file__).parent.resolve()
+SRC_ROOT = (HERE / ".." / ".." / ".." / "..").resolve()
+PREVIEW_SCRIPT = HERE / "preview.py"
+FZF_HEADER = """
+Please select a performance test to execute.
+{shortcuts}
+""".strip()
+
+fzf_shortcuts = {
+ "ctrl-t": "toggle-all",
+ "alt-bspace": "beginning-of-line+kill-line",
+ "?": "toggle-preview",
+}
+
+fzf_header_shortcuts = [
+ ("select", "tab"),
+ ("accept", "enter"),
+ ("cancel", "ctrl-c"),
+ ("cursor-up", "up"),
+ ("cursor-down", "down"),
+]
+
+
+def run_fzf(cmd, tasks):
+ env = dict(os.environ)
+ env.update(
+ {"PYTHONPATH": os.pathsep.join([p for p in sys.path if "requests" in p])}
+ )
+ proc = subprocess.Popen(
+ cmd,
+ stdout=subprocess.PIPE,
+ stdin=subprocess.PIPE,
+ env=env,
+ universal_newlines=True,
+ )
+ out = proc.communicate("\n".join(tasks))[0].splitlines()
+ selected = []
+ query = None
+ if out:
+ query = out[0]
+ selected = out[1:]
+ return query, selected
+
+
+def format_header():
+ terminal = Terminal()
+ shortcuts = []
+ for action, key in fzf_header_shortcuts:
+ shortcuts.append(
+ "{t.white}{action}{t.normal}: {t.yellow}<{key}>{t.normal}".format(
+ t=terminal, action=action, key=key
+ )
+ )
+ return FZF_HEADER.format(shortcuts=", ".join(shortcuts), t=terminal)
+
+
+def select(test_objects):
+ mozbuild_dir = Path(Path.home(), ".mozbuild")
+ os.makedirs(str(mozbuild_dir), exist_ok=True)
+ cache_file = Path(mozbuild_dir, ".perftestfuzzy")
+
+ with cache_file.open("w") as f:
+ f.write(json.dumps(test_objects))
+
+ def _display(task):
+ from mozperftest.script import ScriptInfo
+
+ path = Path(task["path"])
+ script_info = ScriptInfo(str(path))
+ flavor = script_info.script_type.name
+ if flavor == "browsertime":
+ flavor = "bt"
+ tags = script_info.get("tags", [])
+
+ location = str(path.parent).replace(str(SRC_ROOT), "").strip("/")
+ if len(tags) > 0:
+ return f"[{flavor}][{','.join(tags)}] {path.name} in {location}"
+ return f"[{flavor}] {path.name} in {location}"
+
+ candidate_tasks = [_display(t) for t in test_objects]
+
+ fzf_bin = which("fzf", path=str(Path(get_state_dir(), "fzf", "bin"))) or which(
+ "fzf"
+ )
+ if not fzf_bin:
+ raise AssertionError("Unable to find fzf")
+
+ key_shortcuts = [k + ":" + v for k, v in fzf_shortcuts.items()]
+
+ base_cmd = [
+ fzf_bin,
+ "-m",
+ "--bind",
+ ",".join(key_shortcuts),
+ "--header",
+ format_header(),
+ "--preview-window=right:50%",
+ "--print-query",
+ "--preview",
+ sys.executable + ' {} -t "{{+f}}"'.format(str(PREVIEW_SCRIPT)),
+ ]
+ query_str, tasks = run_fzf(base_cmd, sorted(candidate_tasks))
+ return tasks
diff --git a/python/mozperftest/mozperftest/fzf/preview.py b/python/mozperftest/mozperftest/fzf/preview.py
new file mode 100644
index 0000000000..d6441becbd
--- /dev/null
+++ b/python/mozperftest/mozperftest/fzf/preview.py
@@ -0,0 +1,90 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+"""
+This file is executed by fzf through the command line and needs to
+work in a standalone way on any Python 3 environment.
+
+This is why it alters PATH,making the assumption it's executed
+from within a source tree. Do not add dependencies unless they
+are in the source tree and added in SEARCH_PATHS.
+"""
+import argparse
+import importlib.util
+import json
+import sys
+from pathlib import Path
+
+HERE = Path(__file__).parent.resolve()
+SRC_ROOT = (HERE / ".." / ".." / ".." / "..").resolve()
+# make sure esprima is in the path
+SEARCH_PATHS = [
+ ("third_party", "python", "esprima"),
+]
+
+for path in SEARCH_PATHS:
+ path = Path(SRC_ROOT, *path)
+ if path.exists():
+ sys.path.insert(0, str(path))
+
+
+def get_test_objects():
+ """Loads .perftestfuzzy and returns its content.
+
+ The cache file is produced by the main fzf script and is used
+ as a way to let the preview script grab test_objects from the
+ mach command
+ """
+ cache_file = Path(Path.home(), ".mozbuild", ".perftestfuzzy")
+ with cache_file.open() as f:
+ return json.loads(f.read())
+
+
+def plain_display(taskfile):
+ """Preview window display.
+
+ Returns the reST summary for the perf test script.
+ """
+ # Lame way to catch the ScriptInfo class without loading mozperftest
+ script_info = HERE / ".." / "script.py"
+ spec = importlib.util.spec_from_file_location(
+ name="script.py", location=str(script_info)
+ )
+ module = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(module)
+ ScriptInfo = module.ScriptInfo
+
+ with open(taskfile) as f:
+ tasklist = [line.strip() for line in f]
+
+ tags, script_name, __, location = tasklist[0].split(" ")
+ script_path = Path(SRC_ROOT, location, script_name).resolve()
+
+ for ob in get_test_objects():
+ if ob["path"] == str(script_path):
+ print(ScriptInfo(ob["path"]))
+ return
+
+
+def process_args(args):
+ """Process preview arguments."""
+ argparser = argparse.ArgumentParser()
+ argparser.add_argument(
+ "-t",
+ "--tasklist",
+ type=str,
+ default=None,
+ help="Path to temporary file containing the selected tasks",
+ )
+ return argparser.parse_args(args=args)
+
+
+def main(args=None):
+ if args is None:
+ args = sys.argv[1:]
+ args = process_args(args)
+ plain_display(args.tasklist)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/python/mozperftest/mozperftest/hooks.py b/python/mozperftest/mozperftest/hooks.py
new file mode 100644
index 0000000000..b3491bc915
--- /dev/null
+++ b/python/mozperftest/mozperftest/hooks.py
@@ -0,0 +1,63 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import importlib
+import shutil
+import tempfile
+from pathlib import Path
+
+from mozperftest.utils import MachLogger, download_file
+
+_LOADED_MODULES = {}
+
+
+class Hooks(MachLogger):
+ def __init__(self, mach_cmd, hook_module=None):
+ MachLogger.__init__(self, mach_cmd)
+ self.tmp_dir = tempfile.mkdtemp()
+
+ if hook_module is None:
+ self._hooks = None
+ return
+
+ if not isinstance(hook_module, Path):
+ if hook_module.startswith("http"):
+ target = Path(self.tmp_dir, hook_module.split("/")[-1])
+ hook_module = download_file(hook_module, target)
+ else:
+ hook_module = Path(hook_module)
+
+ if hook_module.exists():
+ path = str(hook_module)
+ if path not in _LOADED_MODULES:
+ spec = importlib.util.spec_from_file_location("hooks", path)
+ hook_module = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(hook_module)
+ _LOADED_MODULES[path] = hook_module
+ self._hooks = _LOADED_MODULES[path]
+ else:
+ raise IOError("Could not find hook module. %s" % str(hook_module))
+
+ def cleanup(self):
+ if self.tmp_dir is None:
+ return
+ shutil.rmtree(self.tmp_dir)
+ self.tmp_dir = None
+
+ def exists(self, name):
+ if self._hooks is None:
+ return False
+ return hasattr(self._hooks, name)
+
+ def get(self, name):
+ if self._hooks is None:
+ return False
+ return getattr(self._hooks, name)
+
+ def run(self, name, *args, **kw):
+ if self._hooks is None:
+ return
+ if not hasattr(self._hooks, name):
+ return
+ self.debug("Running hook %s" % name)
+ return getattr(self._hooks, name)(*args, **kw)
diff --git a/python/mozperftest/mozperftest/layers.py b/python/mozperftest/mozperftest/layers.py
new file mode 100644
index 0000000000..08bc835bb8
--- /dev/null
+++ b/python/mozperftest/mozperftest/layers.py
@@ -0,0 +1,177 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import traceback
+
+from mozperftest.utils import MachLogger
+
+
+class StopRunError(Exception):
+ pass
+
+
+class Layer(MachLogger):
+ # layer name
+ name = "unset"
+
+ # activated by default ?
+ activated = False
+
+ # list of arguments grabbed by PerftestArgumentParser
+ arguments = {}
+
+ # If true, calls on_exception() on errors
+ user_exception = False
+
+ def __init__(self, env, mach_command):
+ MachLogger.__init__(self, mach_command)
+ self.return_code = 0
+ self.mach_cmd = mach_command
+ self.run_process = mach_command.run_process
+ self.env = env
+
+ def _normalize_arg(self, name):
+ if name.startswith("--"):
+ name = name[2:]
+ if not name.startswith(self.name):
+ name = "%s-%s" % (self.name, name)
+ return name.replace("-", "_")
+
+ def get_arg_names(self):
+ return [self._normalize_arg(arg) for arg in self.arguments]
+
+ def set_arg(self, name, value):
+ """Sets the argument"""
+ name = self._normalize_arg(name)
+ if name not in self.get_arg_names():
+ raise KeyError(
+ "%r tried to set %r, but does not own it" % (self.name, name)
+ )
+ return self.env.set_arg(name, value)
+
+ def get_arg(self, name, default=None):
+ return self.env.get_arg(name, default, self)
+
+ def __enter__(self):
+ self.info("Running %s:setup" % self.name)
+ self.setup()
+ return self
+
+ def __exit__(self, type, value, traceback):
+ # XXX deal with errors here
+ self.info("Running %s:teardown" % self.name)
+ self.teardown()
+
+ def __call__(self, metadata):
+ has_exc_handler = self.env.hooks.exists("on_exception")
+ self.info("Running %s:run" % self.name)
+ try:
+ metadata = self.run(metadata)
+ except Exception as e:
+ if self.user_exception and has_exc_handler:
+ self.error("User handled error")
+ for line in traceback.format_exc().splitlines():
+ self.error(line)
+ resume_run = self.env.hooks.run("on_exception", self.env, self, e)
+ if resume_run:
+ return metadata
+ raise StopRunError()
+ else:
+ raise
+ return metadata
+
+ def setup(self):
+ pass
+
+ def teardown(self):
+ pass
+
+ def run(self, metadata):
+ return metadata
+
+
+class Layers(Layer):
+ def __init__(self, env, mach_command, factories):
+ super(Layers, self).__init__(env, mach_command)
+
+ def _active(layer):
+ # if it's activated by default, see if we need to deactivate
+ # it by looking for the --no-layername option
+ if layer.activated:
+ return not env.get_arg("no-" + layer.name, False)
+ # if it's deactivated by default, we look for --layername
+ return env.get_arg(layer.name, False)
+
+ self.layers = [
+ factory(env, mach_command) for factory in factories if _active(factory)
+ ]
+ self.env = env
+ self._counter = -1
+
+ def _normalize_arg(self, name):
+ if name.startswith("--"):
+ name = name[2:]
+ return name.replace("-", "_")
+
+ def get_layer(self, name):
+ for layer in self.layers:
+ if layer.name == name:
+ return layer
+ return None
+
+ @property
+ def name(self):
+ return " + ".join([l.name for l in self.layers])
+
+ def __iter__(self):
+ self._counter = -1
+ return self
+
+ def __next__(self):
+ self._counter += 1
+ try:
+ return self.layers[self._counter]
+ except IndexError:
+ raise StopIteration
+
+ def __enter__(self):
+ self.setup()
+ return self
+
+ def __exit__(self, type, value, traceback):
+ # XXX deal with errors here
+ self.teardown()
+
+ def setup(self):
+ for layer in self.layers:
+ self.debug("Running %s:setup" % layer.name)
+ layer.setup()
+
+ def teardown(self):
+ for layer in self.layers:
+ self.debug("Running %s:teardown" % layer.name)
+ layer.teardown()
+
+ def __call__(self, metadata):
+ for layer in self.layers:
+ metadata = layer(metadata)
+ return metadata
+
+ def set_arg(self, name, value):
+ """Sets the argument"""
+ name = self._normalize_arg(name)
+ found = False
+ for layer in self.layers:
+ if name in layer.get_arg_names():
+ found = True
+ break
+
+ if not found:
+ raise KeyError(
+ "%r tried to set %r, but does not own it" % (self.name, name)
+ )
+
+ return self.env.set_arg(name, value)
+
+ def get_arg(self, name, default=None):
+ return self.env.get_arg(name, default)
diff --git a/python/mozperftest/mozperftest/mach_commands.py b/python/mozperftest/mozperftest/mach_commands.py
new file mode 100644
index 0000000000..4ac39d6a9e
--- /dev/null
+++ b/python/mozperftest/mozperftest/mach_commands.py
@@ -0,0 +1,302 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import json
+import os
+import sys
+from functools import partial
+
+from mach.decorators import Command, CommandArgument, SubCommand
+from mozbuild.base import MachCommandConditions as conditions
+
+_TRY_PLATFORMS = {
+ "linux-xpcshell": "perftest-linux-try-xpcshell",
+ "mac-xpcshell": "perftest-macosx-try-xpcshell",
+ "linux-browsertime": "perftest-linux-try-browsertime",
+ "mac-browsertime": "perftest-macosx-try-browsertime",
+ "win-browsertimee": "perftest-windows-try-browsertime",
+}
+
+
+HERE = os.path.dirname(__file__)
+
+
+def get_perftest_parser():
+ from mozperftest import PerftestArgumentParser
+
+ return PerftestArgumentParser
+
+
+def get_perftest_tools_parser(tool):
+ def tools_parser_func():
+ from mozperftest import PerftestToolsArgumentParser
+
+ PerftestToolsArgumentParser.tool = tool
+ return PerftestToolsArgumentParser
+
+ return tools_parser_func
+
+
+def get_parser():
+ return run_perftest._mach_command._parser
+
+
+@Command(
+ "perftest",
+ category="testing",
+ conditions=[partial(conditions.is_buildapp_in, apps=["firefox", "android"])],
+ description="Run any flavor of perftest",
+ parser=get_perftest_parser,
+)
+def run_perftest(command_context, **kwargs):
+ # original parser that brought us there
+ original_parser = get_parser()
+
+ from pathlib import Path
+
+ from mozperftest.script import ParseError, ScriptInfo, ScriptType
+
+ # user selection with fuzzy UI
+ from mozperftest.utils import ON_TRY
+
+ if not ON_TRY and kwargs.get("tests", []) == []:
+ from moztest.resolve import TestResolver
+
+ from mozperftest.fzf.fzf import select
+
+ resolver = command_context._spawn(TestResolver)
+ test_objects = list(resolver.resolve_tests(paths=None, flavor="perftest"))
+ selected = select(test_objects)
+
+ def full_path(selection):
+ __, script_name, __, location = selection.split(" ")
+ return str(
+ Path(
+ command_context.topsrcdir.rstrip(os.sep),
+ location.strip(os.sep),
+ script_name,
+ )
+ )
+
+ kwargs["tests"] = [full_path(s) for s in selected]
+
+ if kwargs["tests"] == []:
+ print("\nNo selection. Bye!")
+ return
+
+ if len(kwargs["tests"]) > 1:
+ print("\nSorry no support yet for multiple local perftest")
+ return
+
+ sel = "\n".join(kwargs["tests"])
+ print("\nGood job! Best selection.\n%s" % sel)
+ # if the script is xpcshell, we can force the flavor here
+ # XXX on multi-selection, what happens if we have seeveral flavors?
+ try:
+ script_info = ScriptInfo(kwargs["tests"][0])
+ except ParseError as e:
+ if e.exception is IsADirectoryError:
+ script_info = None
+ else:
+ raise
+ else:
+ if script_info.script_type == ScriptType.xpcshell:
+ kwargs["flavor"] = script_info.script_type.name
+ else:
+ # we set the value only if not provided (so "mobile-browser"
+ # can be picked)
+ if "flavor" not in kwargs:
+ kwargs["flavor"] = "desktop-browser"
+
+ push_to_try = kwargs.pop("push_to_try", False)
+ if push_to_try:
+ sys.path.append(str(Path(command_context.topsrcdir, "tools", "tryselect")))
+
+ from tryselect.push import push_to_try
+
+ perftest_parameters = {}
+ args = script_info.update_args(**original_parser.get_user_args(kwargs))
+ platform = args.pop("try_platform", "linux")
+ if isinstance(platform, str):
+ platform = [platform]
+
+ platform = ["%s-%s" % (plat, script_info.script_type.name) for plat in platform]
+
+ for plat in platform:
+ if plat not in _TRY_PLATFORMS:
+ # we can extend platform support here: linux, win, macOs
+ # by adding more jobs in taskcluster/ci/perftest/kind.yml
+ # then picking up the right one here
+ raise NotImplementedError(
+ "%r doesn't exist or is not yet supported" % plat
+ )
+
+ def relative(path):
+ if path.startswith(command_context.topsrcdir):
+ return path[len(command_context.topsrcdir) :].lstrip(os.sep)
+ return path
+
+ for name, value in args.items():
+ # ignore values that are set to default
+ if original_parser.get_default(name) == value:
+ continue
+ if name == "tests":
+ value = [relative(path) for path in value]
+ perftest_parameters[name] = value
+
+ parameters = {
+ "try_task_config": {
+ "tasks": [_TRY_PLATFORMS[plat] for plat in platform],
+ "perftest-options": perftest_parameters,
+ },
+ "try_mode": "try_task_config",
+ }
+
+ task_config = {"parameters": parameters, "version": 2}
+ if args.get("verbose"):
+ print("Pushing run to try...")
+ print(json.dumps(task_config, indent=4, sort_keys=True))
+
+ push_to_try("perftest", "perftest", try_task_config=task_config)
+ return
+
+ from mozperftest.runner import run_tests
+
+ run_tests(command_context, kwargs, original_parser.get_user_args(kwargs))
+
+ print("\nFirefox. Fast For Good.\n")
+
+
+@Command(
+ "perftest-test",
+ category="testing",
+ description="Run perftest tests",
+ virtualenv_name="perftest-test",
+)
+@CommandArgument(
+ "tests", default=None, nargs="*", help="Tests to run. By default will run all"
+)
+@CommandArgument(
+ "-s",
+ "--skip-linters",
+ action="store_true",
+ default=False,
+ help="Skip flake8 and black",
+)
+@CommandArgument(
+ "-v", "--verbose", action="store_true", default=False, help="Verbose mode"
+)
+def run_tests(command_context, **kwargs):
+ from pathlib import Path
+
+ from mozperftest.utils import temporary_env
+
+ with temporary_env(
+ COVERAGE_RCFILE=str(Path(HERE, ".coveragerc")), RUNNING_TESTS="YES"
+ ):
+ _run_tests(command_context, **kwargs)
+
+
+def _run_tests(command_context, **kwargs):
+ from pathlib import Path
+
+ from mozperftest.utils import ON_TRY, checkout_python_script, checkout_script
+
+ venv = command_context.virtualenv_manager
+ skip_linters = kwargs.get("skip_linters", False)
+ verbose = kwargs.get("verbose", False)
+
+ if not ON_TRY and not skip_linters:
+ cmd = "./mach lint "
+ if verbose:
+ cmd += " -v"
+ cmd += " " + str(HERE)
+ if not checkout_script(cmd, label="linters", display=verbose, verbose=verbose):
+ raise AssertionError("Please fix your code.")
+
+ # running pytest with coverage
+ # coverage is done in three steps:
+ # 1/ coverage erase => erase any previous coverage data
+ # 2/ coverage run pytest ... => run the tests and collect info
+ # 3/ coverage report => generate the report
+ tests_dir = Path(HERE, "tests").resolve()
+ tests = kwargs.get("tests", [])
+ if tests == []:
+ tests = str(tests_dir)
+ run_coverage_check = not skip_linters
+ else:
+ run_coverage_check = False
+
+ def _get_test(test):
+ if Path(test).exists():
+ return str(test)
+ return str(tests_dir / test)
+
+ tests = " ".join([_get_test(test) for test in tests])
+
+ # on macOS + try we skip the coverage
+ # because macOS workers prevent us from installing
+ # packages from PyPI
+ if sys.platform == "darwin" and ON_TRY:
+ run_coverage_check = False
+
+ options = "-xs"
+ if kwargs.get("verbose"):
+ options += "v"
+
+ if run_coverage_check:
+ assert checkout_python_script(
+ venv, "coverage", ["erase"], label="remove old coverage data"
+ )
+ args = ["run", "-m", "pytest", options, "--durations", "10", tests]
+ assert checkout_python_script(
+ venv, "coverage", args, label="running tests", verbose=verbose
+ )
+ if run_coverage_check and not checkout_python_script(
+ venv, "coverage", ["report"], display=True
+ ):
+ raise ValueError("Coverage is too low!")
+
+
+@Command(
+ "perftest-tools",
+ category="testing",
+ description="Run perftest tools",
+)
+def run_tools(command_context, **kwargs):
+ """
+ Runs various perftest tools such as the side-by-side generator.
+ """
+ print("Runs various perftest tools such as the side-by-side generator.")
+
+
+@SubCommand(
+ "perftest-tools",
+ "side-by-side",
+ description="This tool can be used to generate a side-by-side visualization of two videos. "
+ "When using this tool, make sure that the `--test-name` is an exact match, i.e. if you are "
+ "comparing the task `test-linux64-shippable-qr/opt-browsertime-tp6-firefox-linkedin-e10s` "
+ "between two revisions, then use `browsertime-tp6-firefox-linkedin-e10s` as the suite name "
+ "and `test-linux64-shippable-qr/opt` as the platform.",
+ parser=get_perftest_tools_parser("side-by-side"),
+)
+def run_side_by_side(command_context, **kwargs):
+ from mozperftest.runner import run_tools
+
+ kwargs["tool"] = "side-by-side"
+ run_tools(command_context, kwargs)
+
+
+@SubCommand(
+ "perftest-tools",
+ "change-detector",
+ description="This tool can be used to determine if there are differences between two "
+ "revisions. It can do either direct comparisons, or searching for regressions in between "
+ "two revisions (with a maximum or autocomputed depth).",
+ parser=get_perftest_tools_parser("change-detector"),
+)
+def run_change_detector(command_context, **kwargs):
+ from mozperftest.runner import run_tools
+
+ kwargs["tool"] = "change-detector"
+ run_tools(command_context, kwargs)
diff --git a/python/mozperftest/mozperftest/metadata.py b/python/mozperftest/mozperftest/metadata.py
new file mode 100644
index 0000000000..95864e14e2
--- /dev/null
+++ b/python/mozperftest/mozperftest/metadata.py
@@ -0,0 +1,44 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+from collections import defaultdict
+
+from mozperftest.utils import MachLogger
+
+
+class Metadata(MachLogger):
+ def __init__(self, mach_cmd, env, flavor, script):
+ MachLogger.__init__(self, mach_cmd)
+ self._mach_cmd = mach_cmd
+ self.flavor = flavor
+ self.options = defaultdict(dict)
+ self._results = []
+ self._output = None
+ self._env = env
+ self.script = script
+
+ def run_hook(self, name, *args, **kw):
+ # this bypasses layer restrictions on args,
+ # which is fine since it's a user script
+ return self._env.hooks.run(name, *args, **kw)
+
+ def set_output(self, output):
+ self._output = output
+
+ def get_output(self):
+ return self._output
+
+ def add_result(self, result):
+ self._results.append(result)
+
+ def get_results(self):
+ return self._results
+
+ def clear_results(self):
+ self._results = []
+
+ def update_options(self, name, options):
+ self.options[name].update(options)
+
+ def get_options(self, name):
+ return self.options[name]
diff --git a/python/mozperftest/mozperftest/metrics/__init__.py b/python/mozperftest/mozperftest/metrics/__init__.py
new file mode 100644
index 0000000000..1ca5f7e408
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/__init__.py
@@ -0,0 +1,23 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+from mozperftest.layers import Layers
+from mozperftest.metrics.consoleoutput import ConsoleOutput
+from mozperftest.metrics.notebookupload import Notebook
+from mozperftest.metrics.perfboard.influx import Influx
+from mozperftest.metrics.perfherder import Perfherder
+from mozperftest.metrics.visualmetrics import VisualMetrics
+
+
+def get_layers():
+ return VisualMetrics, Perfherder, ConsoleOutput, Notebook, Influx
+
+
+def pick_metrics(env, flavor, mach_cmd):
+ if flavor in ("desktop-browser", "mobile-browser"):
+ layers = get_layers()
+ else:
+ # we don't need VisualMetrics for xpcshell
+ layers = Perfherder, ConsoleOutput, Notebook, Influx
+
+ return Layers(env, mach_cmd, layers)
diff --git a/python/mozperftest/mozperftest/metrics/common.py b/python/mozperftest/mozperftest/metrics/common.py
new file mode 100644
index 0000000000..3598cd378a
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/common.py
@@ -0,0 +1,356 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+from collections import defaultdict
+from pathlib import Path
+
+from mozperftest.metrics.exceptions import (
+ MetricsMissingResultsError,
+ MetricsMultipleTransformsError,
+)
+from mozperftest.metrics.notebook import PerftestETL
+from mozperftest.metrics.utils import metric_fields, validate_intermediate_results
+
+COMMON_ARGS = {
+ "metrics": {
+ "type": metric_fields,
+ "nargs": "*",
+ "default": [],
+ "help": "The metrics that should be retrieved from the data.",
+ },
+ "prefix": {"type": str, "default": "", "help": "Prefix used by the output files."},
+ "split-by": {
+ "type": str,
+ "default": None,
+ "help": "A metric name to use for splitting the data. For instance, "
+ "using browserScripts.pageinfo.url will split the data by the unique "
+ "URLs that are found.",
+ },
+ "simplify-names": {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, metric names will be simplified to a single word. The PerftestETL "
+ "combines dictionary keys by `.`, and the final key contains that value of the data. "
+ "That final key becomes the new name of the metric.",
+ },
+ "simplify-exclude": {
+ "nargs": "*",
+ "default": ["statistics"],
+ "help": "When renaming/simplifying metric names, entries with these strings "
+ "will be ignored and won't get simplified. These options are only used when "
+ "--simplify-names is set.",
+ },
+ "transformer": {
+ "type": str,
+ "default": None,
+ "help": "The path to the file containing the custom transformer, "
+ "or the module to import along with the class name, "
+ "e.g. mozperftest.test.xpcshell:XpcShellTransformer",
+ },
+}
+
+
+class MetricsStorage(object):
+ """Holds data that is commonly used across all metrics layers.
+
+ An instance of this class represents data for a given and output
+ path and prefix.
+ """
+
+ def __init__(self, output_path, prefix, logger):
+ self.prefix = prefix
+ self.output_path = output_path
+ self.stddata = {}
+ self.ptnb_config = {}
+ self.results = []
+ self.logger = logger
+
+ p = Path(output_path)
+ p.mkdir(parents=True, exist_ok=True)
+
+ def _parse_results(self, results):
+ if isinstance(results, dict):
+ return [results]
+ res = []
+ # XXX we need to embrace pathlib everywhere.
+ if isinstance(results, (str, Path)):
+ # Expecting a single path or a directory
+ p = Path(results)
+ if not p.exists():
+ self.logger.warning("Given path does not exist: {}".format(results))
+ elif p.is_dir():
+ files = [f for f in p.glob("**/*.json") if not f.is_dir()]
+ res.extend(self._parse_results(files))
+ else:
+ res.append(p.as_posix())
+ if isinstance(results, list):
+ # Expecting a list of paths
+ for path in results:
+ res.extend(self._parse_results(path))
+ return res
+
+ def set_results(self, results):
+ """Processes and sets results provided by the metadata.
+
+ `results` can be a path to a file or a directory. Every
+ file is scanned and we build a list. Alternatively, it
+ can be a mapping containing the results, in that case
+ we just use it direcly, but keep it in a list.
+
+ :param results list/dict/str: Path, or list of paths to the data
+ (or the data itself in a dict) of the data to be processed.
+ """
+ # Parse the results into files (for now) and the settings
+ self.results = defaultdict(lambda: defaultdict(list))
+ self.settings = defaultdict(dict)
+ for res in results:
+ # Ensure that the results are valid before continuing
+ validate_intermediate_results(res)
+
+ name = res["name"]
+ if isinstance(res["results"], dict):
+ # XXX Implement subtest based parsing
+ raise NotImplementedError(
+ "Subtest-based processing is not implemented yet"
+ )
+
+ # Merge all entries with the same name into one
+ # result, if separation is needed use unique names
+ self.results[name]["files"].extend(self._parse_results(res["results"]))
+
+ suite_settings = self.settings[name]
+ for key, val in res.items():
+ if key == "results":
+ continue
+ suite_settings[key] = val
+
+ # Check the transform definitions
+ currtrfm = self.results[name]["transformer"]
+ if not currtrfm:
+ self.results[name]["transformer"] = res.get(
+ "transformer", "SingleJsonRetriever"
+ )
+ elif currtrfm != res.get("transformer", "SingleJsonRetriever"):
+ raise MetricsMultipleTransformsError(
+ f"Only one transformer allowed per data name! Found multiple for {name}: "
+ f"{[currtrfm, res['transformer']]}"
+ )
+
+ # Get the transform options if available
+ self.results[name]["options"] = res.get("transformer-options", {})
+
+ if not self.results:
+ self.return_code = 1
+ raise MetricsMissingResultsError("Could not find any results to process.")
+
+ def get_standardized_data(self, group_name="firefox", transformer=None):
+ """Returns a parsed, standardized results data set.
+
+ The dataset is computed once then cached unless overwrite is used.
+ The transformer dictates how the data will be parsed, by default it uses
+ a JSON transformer that flattens the dictionary while merging all the
+ common metrics together.
+
+ :param group_name str: The name for this results group.
+ :param transformer str: The name of the transformer to use
+ when parsing the data. Currently, only SingleJsonRetriever
+ is available.
+ :param overwrite str: if True, we recompute the results
+ :return dict: Standardized notebook data with containing the
+ requested metrics.
+ """
+ if self.stddata:
+ return self.stddata
+
+ for data_type, data_info in self.results.items():
+ tfm = transformer if transformer is not None else data_info["transformer"]
+ prefix = data_type
+ if self.prefix:
+ prefix = "{}-{}".format(self.prefix, data_type)
+
+ # Primarily used to store the transformer used on the data
+ # so that it can also be used for generating things
+ # like summary values for suites, and subtests.
+ self.ptnb_config[data_type] = {
+ "output": self.output_path,
+ "prefix": prefix,
+ "custom_transformer": tfm,
+ "file_groups": {data_type: data_info["files"]},
+ }
+
+ ptnb = PerftestETL(
+ file_groups=self.ptnb_config[data_type]["file_groups"],
+ config=self.ptnb_config[data_type],
+ prefix=self.prefix,
+ logger=self.logger,
+ custom_transform=tfm,
+ )
+ r = ptnb.process(**data_info["options"])
+ self.stddata[data_type] = r["data"]
+
+ return self.stddata
+
+ def filtered_metrics(
+ self,
+ group_name="firefox",
+ transformer=None,
+ metrics=None,
+ exclude=None,
+ split_by=None,
+ simplify_names=False,
+ simplify_exclude=["statistics"],
+ ):
+ """Filters the metrics to only those that were requested by `metrics`.
+
+ If metrics is Falsey (None, empty list, etc.) then no metrics
+ will be filtered. The entries in metrics are pattern matched with
+ the subtests in the standardized data (not a regular expression).
+ For example, if "firstPaint" is in metrics, then all subtests which
+ contain this string in their name will be kept.
+
+ :param metrics list: List of metrics to keep.
+ :param exclude list: List of string matchers to exclude from the metrics
+ gathered/reported.
+ :param split_by str: The name of a metric to use to split up data by.
+ :param simplify_exclude list: List of string matchers to exclude
+ from the naming simplification process.
+ :return dict: Standardized notebook data containing the
+ requested metrics.
+ """
+ results = self.get_standardized_data(
+ group_name=group_name, transformer=transformer
+ )
+ if not metrics:
+ return results
+ if not exclude:
+ exclude = []
+ if not simplify_exclude:
+ simplify_exclude = []
+
+ # Get the field to split the results by (if any)
+ if split_by is not None:
+ splitting_entry = None
+ for data_type, data_info in results.items():
+ for res in data_info:
+ if split_by in res["subtest"]:
+ splitting_entry = res
+ break
+ if splitting_entry is not None:
+ split_by = defaultdict(list)
+ for c, entry in enumerate(splitting_entry["data"]):
+ split_by[entry["value"]].append(c)
+
+ # Filter metrics
+ filtered = {}
+ for data_type, data_info in results.items():
+ newresults = []
+ for res in data_info:
+ if any([met["name"] in res["subtest"] for met in metrics]) and not any(
+ [met in res["subtest"] for met in exclude]
+ ):
+ res["transformer"] = self.ptnb_config[data_type][
+ "custom_transformer"
+ ]
+ newresults.append(res)
+ filtered[data_type] = newresults
+
+ # Simplify the filtered metric names
+ if simplify_names:
+
+ def _simplify(name):
+ if any([met in name for met in simplify_exclude]):
+ return None
+ return name.split(".")[-1]
+
+ self._alter_name(filtered, res, filter=_simplify)
+
+ # Split the filtered results
+ if split_by is not None:
+ newfilt = {}
+ total_iterations = sum([len(inds) for _, inds in split_by.items()])
+ for data_type in filtered:
+ if not filtered[data_type]:
+ # Ignore empty data types
+ continue
+
+ newresults = []
+ newfilt[data_type] = newresults
+ for split, indices in split_by.items():
+ for res in filtered[data_type]:
+ if len(res["data"]) != total_iterations:
+ # Skip data that cannot be split
+ continue
+ splitres = {key: val for key, val in res.items()}
+ splitres["subtest"] += " " + split
+ splitres["data"] = [res["data"][i] for i in indices]
+ splitres["transformer"] = self.ptnb_config[data_type][
+ "custom_transformer"
+ ]
+
+ newresults.append(splitres)
+
+ filtered = newfilt
+
+ return filtered
+
+ def _alter_name(self, filtered, res, filter):
+ previous = []
+ for data_type, data_info in filtered.items():
+ for res in data_info:
+ new = filter(res["subtest"])
+ if new is None:
+ continue
+ if new in previous:
+ self.logger.warning(
+ f"Another metric which ends with `{new}` was already found. "
+ f"{res['subtest']} will not be simplified."
+ )
+ continue
+ res["subtest"] = new
+ previous.append(new)
+
+
+_metrics = {}
+
+
+def filtered_metrics(
+ metadata,
+ path,
+ prefix,
+ group_name="firefox",
+ transformer=None,
+ metrics=None,
+ settings=False,
+ exclude=None,
+ split_by=None,
+ simplify_names=False,
+ simplify_exclude=["statistics"],
+):
+ """Returns standardized data extracted from the metadata instance.
+
+ We're caching an instance of MetricsStorage per metrics/storage
+ combination and compute the data only once when this function is called.
+ """
+ key = path, prefix
+ if key not in _metrics:
+ storage = _metrics[key] = MetricsStorage(path, prefix, metadata)
+ storage.set_results(metadata.get_results())
+ else:
+ storage = _metrics[key]
+
+ results = storage.filtered_metrics(
+ group_name=group_name,
+ transformer=transformer,
+ metrics=metrics,
+ exclude=exclude,
+ split_by=split_by,
+ simplify_names=simplify_names,
+ simplify_exclude=simplify_exclude,
+ )
+
+ # XXX returning two different types is a problem
+ # in case settings is false, we should return None for it
+ # and always return a 2-tuple
+ if settings:
+ return results, storage.settings
+ return results
diff --git a/python/mozperftest/mozperftest/metrics/consoleoutput.py b/python/mozperftest/mozperftest/metrics/consoleoutput.py
new file mode 100644
index 0000000000..a4d544f3ef
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/consoleoutput.py
@@ -0,0 +1,59 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import os
+
+from mozperftest.layers import Layer
+from mozperftest.metrics.common import COMMON_ARGS, filtered_metrics
+
+RESULTS_TEMPLATE = """\
+
+==========================================================
+ Results ({})
+==========================================================
+
+{}
+
+"""
+
+
+class ConsoleOutput(Layer):
+ """Output metrics in the console."""
+
+ name = "console"
+ # By default activate the console layer when running locally.
+ activated = "MOZ_AUTOMATION" not in os.environ
+ arguments = COMMON_ARGS
+
+ def run(self, metadata):
+ # Get filtered metrics
+ results = filtered_metrics(
+ metadata,
+ self.get_arg("output"),
+ self.get_arg("prefix"),
+ metrics=self.get_arg("metrics"),
+ transformer=self.get_arg("transformer"),
+ split_by=self.get_arg("split-by"),
+ simplify_names=self.get_arg("simplify-names"),
+ simplify_exclude=self.get_arg("simplify-exclude"),
+ )
+
+ if not results:
+ self.warning("No results left after filtering")
+ return metadata
+
+ for name, res in results.items():
+ # Make a nicer view of the data
+ subtests = [
+ "{}: {}".format(r["subtest"], [v["value"] for v in r["data"]])
+ for r in res
+ ]
+
+ # Output the data to console
+ self.info(
+ "\n==========================================================\n"
+ "= Results =\n"
+ "=========================================================="
+ "\n" + "\n".join(subtests) + "\n"
+ )
+ return metadata
diff --git a/python/mozperftest/mozperftest/metrics/exceptions.py b/python/mozperftest/mozperftest/metrics/exceptions.py
new file mode 100644
index 0000000000..dcac64ded9
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/exceptions.py
@@ -0,0 +1,53 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+
+class MetricsMultipleTransformsError(Exception):
+ """Raised when more than one transformer was specified.
+
+ This is because intermediate results with the same data
+ name are merged when being processed.
+ """
+
+ pass
+
+
+class MetricsMissingResultsError(Exception):
+ """Raised when no results could be found after parsing the intermediate results."""
+
+ pass
+
+
+class PerfherderValidDataError(Exception):
+ """Raised when no valid data (int/float) can be found to build perfherder blob."""
+
+ pass
+
+
+class NotebookInvalidTransformError(Exception):
+ """Raised when an invalid custom transformer is set."""
+
+ pass
+
+
+class NotebookTransformOptionsError(Exception):
+ """Raised when an invalid option is given to a transformer."""
+
+ pass
+
+
+class NotebookTransformError(Exception):
+ """Raised on generic errors within the transformers."""
+
+
+class NotebookDuplicateTransformsError(Exception):
+ """Raised when a directory contains more than one transformers have the same class name."""
+
+ pass
+
+
+class NotebookInvalidPathError(Exception):
+ """Raised when an invalid path is given."""
+
+ pass
diff --git a/python/mozperftest/mozperftest/metrics/notebook/__init__.py b/python/mozperftest/mozperftest/metrics/notebook/__init__.py
new file mode 100644
index 0000000000..8d69182664
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebook/__init__.py
@@ -0,0 +1,7 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+from .perftestetl import PerftestETL
+from .perftestnotebook import PerftestNotebook
+
+__all__ = ["PerftestETL", "PerftestNotebook"]
diff --git a/python/mozperftest/mozperftest/metrics/notebook/constant.py b/python/mozperftest/mozperftest/metrics/notebook/constant.py
new file mode 100644
index 0000000000..ca40d289d4
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebook/constant.py
@@ -0,0 +1,31 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import os
+import pathlib
+from types import MappingProxyType
+
+from .transformer import get_transformers
+
+
+class Constant(object):
+ """A singleton class to store all constants."""
+
+ __instance = None
+
+ def __new__(cls, *args, **kw):
+ if cls.__instance is None:
+ cls.__instance = object.__new__(cls, *args, **kw)
+ return cls.__instance
+
+ def __init__(self):
+ self.__here = pathlib.Path(os.path.dirname(os.path.abspath(__file__)))
+ self.__predefined_transformers = get_transformers(self.__here / "transforms")
+
+ @property
+ def predefined_transformers(self):
+ return MappingProxyType(self.__predefined_transformers).copy()
+
+ @property
+ def here(self):
+ return self.__here
diff --git a/python/mozperftest/mozperftest/metrics/notebook/notebook-sections/compare b/python/mozperftest/mozperftest/metrics/notebook/notebook-sections/compare
new file mode 100644
index 0000000000..f6870f0246
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebook/notebook-sections/compare
@@ -0,0 +1,85 @@
+%% md
+<div id="table-wrapper">
+ <table id="compareTable" border="1"></table>
+</div>
+
+%% py
+from js import document, data_object
+import json
+import numpy as np
+
+split_data = {}
+dir_names = set()
+subtests = set()
+newest_run_name = ""
+for element in data_object:
+ name = element["name"]
+ if "- newest run" in name:
+ newest_run_name = name
+ subtest = element["subtest"]
+ dir_names.add(name)
+ subtests.add(subtest)
+
+ data = [p["value"] for p in element["data"]]
+ split_data.setdefault(name, {}).update({
+ subtest:{
+ "data":data,
+ "stats":{
+ "Mean": np.round(np.mean(data),2),
+ "Median": np.median(data),
+ "Std. Dev.": np.round(np.std(data),2)
+ }
+ }
+ })
+
+table = document.getElementById("compareTable")
+table.innerHTML=''
+
+# build table head
+thead = table.createTHead()
+throw = thead.insertRow()
+for name in ["Metrics", "Statistics"] + list(dir_names):
+ th = document.createElement("th")
+ th.appendChild(document.createTextNode(name))
+ throw.appendChild(th)
+
+def fillRow(row, subtest, stat):
+ row.insertCell().appendChild(document.createTextNode(stat))
+ newest_run_val = split_data[newest_run_name][subtest]["stats"][stat]
+ for name in dir_names:
+ cell_val = split_data[name][subtest]["stats"][stat]
+ diff = np.round((cell_val - newest_run_val * 1.0)/newest_run_val * 100, 2)
+ color = "red" if diff>0 else "green"
+ row.insertCell().innerHTML = f"{cell_val}\n(<span style=\"color:{color}\">{diff}</span>%)"
+
+# build table body
+tbody = document.createElement("tbody")
+for subtest in subtests:
+ row1 = tbody.insertRow()
+ cell0 = row1.insertCell()
+ cell0.appendChild(document.createTextNode(subtest))
+ cell0.rowSpan = 3;
+ a = split_data
+ fillRow(row1, subtest, "Mean")
+
+ row2 = tbody.insertRow()
+ fillRow(row2, subtest, "Median")
+
+ row3 = tbody.insertRow()
+ fillRow(row3, subtest, "Std. Dev.")
+
+table.appendChild(tbody)
+
+%% css
+#table-wrapper {
+ height: 600px;
+ overflow: auto;
+}
+
+#table {
+ display: table;
+}
+
+td {
+ white-space:pre-line;
+}
diff --git a/python/mozperftest/mozperftest/metrics/notebook/notebook-sections/header b/python/mozperftest/mozperftest/metrics/notebook/notebook-sections/header
new file mode 100644
index 0000000000..1a0f659e54
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebook/notebook-sections/header
@@ -0,0 +1,12 @@
+%% md
+# Welcome to PerftestNotebook
+
+press the :fast_forward: button on your top left corner to run whole notebook
+
+%% fetch
+
+text: data_string = http://127.0.0.1:5000/data
+
+%% js
+
+var data_object = JSON.parse(data_string);
diff --git a/python/mozperftest/mozperftest/metrics/notebook/notebook-sections/scatterplot b/python/mozperftest/mozperftest/metrics/notebook/notebook-sections/scatterplot
new file mode 100644
index 0000000000..f68b540236
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebook/notebook-sections/scatterplot
@@ -0,0 +1,15 @@
+%% py
+from js import data_object
+import matplotlib.pyplot as plt
+
+plt.figure()
+
+for element in data_object:
+ data_array = element["data"]
+ x = [x["xaxis"] for x in data_array]
+ y = [x["value"] for x in data_array]
+ label = element["name"]+"\n"+element["subtest"]
+ plt.scatter(x,y,label=label)
+
+plt.legend()
+plt.show()
diff --git a/python/mozperftest/mozperftest/metrics/notebook/perftestetl.py b/python/mozperftest/mozperftest/metrics/notebook/perftestetl.py
new file mode 100644
index 0000000000..bd28d9be6d
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebook/perftestetl.py
@@ -0,0 +1,167 @@
+#!/usr/bin/env python3
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import json
+import os
+import pathlib
+from collections import OrderedDict
+
+from .constant import Constant
+from .transformer import SimplePerfherderTransformer, Transformer, get_transformer
+
+
+class PerftestETL(object):
+ """Controller class for the PerftestETL."""
+
+ def __init__(
+ self,
+ file_groups,
+ config,
+ prefix,
+ logger,
+ custom_transform=None,
+ sort_files=False,
+ ):
+ """Initializes PerftestETL.
+
+ :param dict file_groups: A dict of file groupings. The value
+ of each of the dict entries is the name of the data that
+ will be produced.
+ :param str custom_transform: The class name of a custom transformer.
+ """
+ self.fmt_data = {}
+ self.file_groups = file_groups
+ self.config = config
+ self.sort_files = sort_files
+ self.const = Constant()
+ self.prefix = prefix
+ self.logger = logger
+
+ # Gather the available transformers
+ tfms_dict = self.const.predefined_transformers
+
+ # XXX NOTEBOOK_PLUGIN functionality is broken at the moment.
+ # This code block will raise an exception if it detects it in
+ # the environment.
+ plugin_path = os.getenv("NOTEBOOK_PLUGIN")
+ if plugin_path:
+ raise Exception("NOTEBOOK_PLUGIN is currently broken.")
+
+ # Initialize the requested transformer
+ if custom_transform:
+ # try to load it directly, and fallback to registry
+ try:
+ tfm_cls = get_transformer(custom_transform)
+ except ImportError:
+ tfm_cls = tfms_dict.get(custom_transform)
+
+ if tfm_cls:
+ self.transformer = Transformer(
+ files=[],
+ custom_transformer=tfm_cls(),
+ logger=self.logger,
+ prefix=self.prefix,
+ )
+ self.logger.info(f"Found {custom_transform} transformer", self.prefix)
+ else:
+ raise Exception(f"Could not get a {custom_transform} transformer.")
+ else:
+ self.transformer = Transformer(
+ files=[],
+ custom_transformer=SimplePerfherderTransformer(),
+ logger=self.logger,
+ prefix=self.prefix,
+ )
+
+ def parse_file_grouping(self, file_grouping):
+ """Handles differences in the file_grouping definitions.
+
+ It can either be a path to a folder containing the files, a list of files,
+ or it can contain settings from an artifact_downloader instance.
+
+ :param file_grouping: A file grouping entry.
+ :return: A list of files to process.
+ """
+ files = []
+ if isinstance(file_grouping, list):
+ # A list of files was provided
+ files = file_grouping
+ elif isinstance(file_grouping, dict):
+ # A dictionary of settings from an artifact_downloader instance
+ # was provided here
+ raise Exception(
+ "Artifact downloader tooling is disabled for the time being."
+ )
+ elif isinstance(file_grouping, str):
+ # Assume a path to files was given
+ filepath = file_grouping
+ newf = [f.resolve().as_posix() for f in pathlib.Path(filepath).rglob("*")]
+ files = newf
+ else:
+ raise Exception(
+ "Unknown file grouping type provided here: %s" % file_grouping
+ )
+
+ if self.sort_files:
+ if isinstance(files, list):
+ files.sort()
+ else:
+ for _, file_list in files.items():
+ file_list.sort()
+ files = OrderedDict(sorted(files.items(), key=lambda entry: entry[0]))
+
+ if not files:
+ raise Exception(
+ "Could not find any files in this configuration: %s" % file_grouping
+ )
+
+ return files
+
+ def parse_output(self):
+ # XXX Fix up this function, it should only return a directory for output
+ # not a directory or a file. Or remove it completely, it's not very useful.
+ prefix = "" if "prefix" not in self.config else self.config["prefix"]
+ filepath = f"{prefix}std-output.json"
+
+ if "output" in self.config:
+ filepath = self.config["output"]
+ if os.path.isdir(filepath):
+ filepath = os.path.join(filepath, f"{prefix}std-output.json")
+
+ return filepath
+
+ def process(self, **kwargs):
+ """Process the file groups and return the results of the requested analyses.
+
+ :return: All the results in a dictionary. The field names are the Analyzer
+ funtions that were called.
+ """
+ fmt_data = []
+
+ for name, files in self.file_groups.items():
+ files = self.parse_file_grouping(files)
+ if isinstance(files, dict):
+ raise Exception(
+ "Artifact downloader tooling is disabled for the time being."
+ )
+ else:
+ # Transform the data
+ self.transformer.files = files
+ trfm_data = self.transformer.process(name, **kwargs)
+
+ if isinstance(trfm_data, list):
+ fmt_data.extend(trfm_data)
+ else:
+ fmt_data.append(trfm_data)
+
+ self.fmt_data = fmt_data
+
+ # Write formatted data output to filepath
+ output_data_filepath = self.parse_output()
+
+ print("Writing results to %s" % output_data_filepath)
+ with open(output_data_filepath, "w") as f:
+ json.dump(self.fmt_data, f, indent=4, sort_keys=True)
+
+ return {"data": self.fmt_data, "file-output": output_data_filepath}
diff --git a/python/mozperftest/mozperftest/metrics/notebook/perftestnotebook.py b/python/mozperftest/mozperftest/metrics/notebook/perftestnotebook.py
new file mode 100644
index 0000000000..99c3766b42
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebook/perftestnotebook.py
@@ -0,0 +1,79 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import json
+import webbrowser
+from http.server import BaseHTTPRequestHandler, HTTPServer
+
+from .constant import Constant
+
+
+class PerftestNotebook(object):
+ """Controller class for PerftestNotebook."""
+
+ def __init__(self, data, logger, prefix):
+ """Initialize the PerftestNotebook.
+
+ :param dict data: Standardized data, post-transformation.
+ """
+ self.data = data
+ self.logger = logger
+ self.prefix = prefix
+ self.const = Constant()
+
+ def get_notebook_section(self, func):
+ """Fetch notebook content based on analysis name.
+
+ :param str func: analysis or notebook section name
+ """
+ template_path = self.const.here / "notebook-sections" / func
+ if not template_path.exists():
+ self.logger.warning(
+ f"Could not find the notebook-section called {func}", self.prefix
+ )
+ return ""
+ with template_path.open() as f:
+ return f.read()
+
+ def post_to_iodide(self, analysis=None, start_local_server=True):
+ """Build notebook and post it to iodide.
+
+ :param list analysis: notebook section names, analysis to perform in iodide
+ """
+ data = self.data
+ notebook_sections = ""
+
+ template_header_path = self.const.here / "notebook-sections" / "header"
+ with template_header_path.open() as f:
+ notebook_sections += f.read()
+
+ if analysis:
+ for func in analysis:
+ notebook_sections += self.get_notebook_section(func)
+
+ template_upload_file_path = self.const.here / "template_upload_file.html"
+ with template_upload_file_path.open() as f:
+ html = f.read().replace("replace_me", repr(notebook_sections))
+
+ upload_file_path = self.const.here / "upload_file.html"
+ with upload_file_path.open("w") as f:
+ f.write(html)
+
+ # set up local server. Iodide will fetch data from localhost:5000/data
+ class DataRequestHandler(BaseHTTPRequestHandler):
+ def do_GET(self):
+ if self.path == "/data":
+ self.send_response(200)
+ self.send_header("Content-type", "application/json")
+ self.send_header("Access-Control-Allow-Origin", "*")
+ self.end_headers()
+ self.wfile.write(bytes(json.dumps(data).encode("utf-8")))
+
+ PORT_NUMBER = 5000
+ server = HTTPServer(("", PORT_NUMBER), DataRequestHandler)
+ if start_local_server:
+ webbrowser.open_new_tab(str(upload_file_path))
+ try:
+ server.serve_forever()
+ finally:
+ server.server_close()
diff --git a/python/mozperftest/mozperftest/metrics/notebook/template_upload_file.html b/python/mozperftest/mozperftest/metrics/notebook/template_upload_file.html
new file mode 100644
index 0000000000..2400be4e87
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebook/template_upload_file.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+ <body>
+ Redirecting to Iodide...
+ <script>
+ function post(path, params, method='post') {
+ const form = document.createElement('form');
+ form.method = method;
+ form.action = path;
+ form.id = 'uploadform';
+
+ for (const key in params) {
+ if (params.hasOwnProperty(key)) {
+ const textarea = document.createElement('textarea');
+ textarea.name = key;
+ textarea.value = params[key];
+ textarea.style.display = "none";
+ form.appendChild(textarea);
+ }
+ }
+
+
+ document.body.appendChild(form);
+ form.submit();
+ }
+
+ // TODO Need to escape all `'`,
+ // Otherwsie, this will result in javascript failures.
+ var template = replace_me
+
+ // Create a form object, and send it
+ // after release, change back to https://alpha.iodide.io/from-template/
+ post("https://alpha.iodide.io/from-template/", {"iomd": template})
+ </script>
+ </body>
+</html>
diff --git a/python/mozperftest/mozperftest/metrics/notebook/transformer.py b/python/mozperftest/mozperftest/metrics/notebook/transformer.py
new file mode 100644
index 0000000000..b4596d7ca6
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebook/transformer.py
@@ -0,0 +1,228 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import importlib.util
+import inspect
+import json
+import pathlib
+
+from jsonschema import validate
+
+from mozperftest.metrics.exceptions import (
+ NotebookDuplicateTransformsError,
+ NotebookInvalidPathError,
+ NotebookInvalidTransformError,
+)
+from mozperftest.runner import HERE
+from mozperftest.utils import load_class
+
+
+class Transformer(object):
+ """Abstract class for data transformers."""
+
+ def __init__(self, files=None, custom_transformer=None, logger=None, prefix=None):
+ """Initialize the transformer with files.
+
+ :param list files: A list of files containing data to transform.
+ :param object custom_transformer: A custom transformer instance.
+ Must implement `transform` and `merge` methods.
+ """
+ self._files = files
+ self.logger = logger
+ self.prefix = prefix
+
+ if custom_transformer:
+ valid = (
+ hasattr(custom_transformer, "transform")
+ and hasattr(custom_transformer, "merge")
+ and callable(custom_transformer.transform)
+ and callable(custom_transformer.merge)
+ )
+
+ if not valid:
+ raise NotebookInvalidTransformError(
+ "The custom transformer must contain `transform` and `merge` methods."
+ )
+
+ self._custom_transformer = custom_transformer
+
+ with pathlib.Path(HERE, "schemas", "transformer_schema.json").open() as f:
+ self.schema = json.load(f)
+
+ @property
+ def files(self):
+ return self._files
+
+ @files.setter
+ def files(self, val):
+ if not isinstance(val, list):
+ self.logger.warning(
+ "`files` must be a list, got %s" % type(val), self.prefix
+ )
+ return
+ self._files = val
+
+ @property
+ def custom_transformer(self):
+ return self._custom_transformer
+
+ def open_data(self, file):
+ """Opens a file of data.
+
+ If it's not a JSON file, then the data
+ will be opened as a text file.
+
+ :param str file: Path to the data file.
+ :return: Data contained in the file.
+ """
+ with open(file) as f:
+ if file.endswith(".json"):
+ return json.load(f)
+ return f.readlines()
+
+ def process(self, name, **kwargs):
+ """Process all the known data into a merged, and standardized data format.
+
+ :param str name: Name of the merged data.
+ :return dict: Merged data.
+ """
+ trfmdata = []
+
+ for file in self.files:
+ data = {}
+
+ # Open data
+ try:
+ if hasattr(self._custom_transformer, "open_data"):
+ data = self._custom_transformer.open_data(file)
+ else:
+ data = self.open_data(file)
+ except Exception as e:
+ self.logger.warning(
+ "Failed to open file %s, skipping" % file, self.prefix
+ )
+ self.logger.warning("%s %s" % (e.__class__.__name__, e), self.prefix)
+
+ # Transform data
+ try:
+ data = self._custom_transformer.transform(data, **kwargs)
+ if not isinstance(data, list):
+ data = [data]
+ for entry in data:
+ for ele in entry["data"]:
+ if "file" not in ele:
+ ele.update({"file": file})
+ trfmdata.extend(data)
+ except Exception as e:
+ self.logger.warning(
+ "Failed to transform file %s, skipping" % file, self.prefix
+ )
+ self.logger.warning("%s %s" % (e.__class__.__name__, e), self.prefix)
+
+ merged = self._custom_transformer.merge(trfmdata)
+
+ if isinstance(merged, dict):
+ merged["name"] = name
+ else:
+ for e in merged:
+ e["name"] = name
+
+ validate(instance=merged, schema=self.schema)
+ return merged
+
+
+class SimplePerfherderTransformer:
+ """Transforms perfherder data into the standardized data format."""
+
+ entry_number = 0
+
+ def transform(self, data):
+ self.entry_number += 1
+ return {
+ "data": [{"value": data["suites"][0]["value"], "xaxis": self.entry_number}]
+ }
+
+ def merge(self, sde):
+ merged = {"data": []}
+ for entry in sde:
+ if isinstance(entry["data"], list):
+ merged["data"].extend(entry["data"])
+ else:
+ merged["data"].append(entry["data"])
+
+ self.entry_number = 0
+ return merged
+
+
+def get_transformer(path, ret_members=False):
+ """This function returns a Transformer class with the given path.
+
+ :param str path: The path points to the custom transformer.
+ :param bool ret_members: If true then return inspect.getmembers().
+ :return Transformer if not ret_members else inspect.getmembers().
+ """
+ file = pathlib.Path(path)
+
+ if file.suffix != ".py":
+ return load_class(path)
+
+ if not file.exists():
+ raise NotebookInvalidPathError(f"The path {path} does not exist.")
+
+ # Importing a source file directly
+ spec = importlib.util.spec_from_file_location(name=file.name, location=path)
+ module = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(module)
+
+ members = inspect.getmembers(
+ module,
+ lambda c: inspect.isclass(c)
+ and hasattr(c, "transform")
+ and hasattr(c, "merge")
+ and callable(c.transform)
+ and callable(c.merge),
+ )
+
+ if not members and not ret_members:
+ raise NotebookInvalidTransformError(
+ f"The path {path} was found but it was not a valid transformer."
+ )
+
+ return members if ret_members else members[0][-1]
+
+
+def get_transformers(dirpath=None):
+ """This function returns a dict of transformers under the given path.
+
+ If more than one transformers have the same class name, an exception will be raised.
+
+ :param pathlib.Path dirpath: Path to a directory containing the transformers.
+ :return dict: {"Transformer class name": Transformer class}.
+ """
+
+ ret = {}
+
+ if not dirpath.exists():
+ raise NotebookInvalidPathError(f"The path {dirpath.as_posix()} does not exist.")
+
+ if not dirpath.is_dir():
+ raise NotebookInvalidPathError(
+ f"Path given is not a directory: {dirpath.as_posix()}"
+ )
+
+ tfm_files = list(dirpath.glob("*.py"))
+ importlib.machinery.SOURCE_SUFFIXES.append("")
+
+ for file in tfm_files:
+ members = get_transformer(file.resolve().as_posix(), True)
+
+ for name, tfm_class in members:
+ if name in ret:
+ raise NotebookDuplicateTransformsError(
+ f"Duplicated transformer {name} "
+ + f"is found in the directory {dirpath.as_posix()}."
+ + "Please define each transformer class with a unique class name.",
+ )
+ ret.update({name: tfm_class})
+
+ return ret
diff --git a/python/mozperftest/mozperftest/metrics/notebook/transforms/__init__.py b/python/mozperftest/mozperftest/metrics/notebook/transforms/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebook/transforms/__init__.py
diff --git a/python/mozperftest/mozperftest/metrics/notebook/transforms/logcattime.py b/python/mozperftest/mozperftest/metrics/notebook/transforms/logcattime.py
new file mode 100644
index 0000000000..184b327540
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebook/transforms/logcattime.py
@@ -0,0 +1,121 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import re
+from datetime import datetime, timedelta
+
+from mozperftest.metrics.exceptions import (
+ NotebookTransformError,
+ NotebookTransformOptionsError,
+)
+
+TIME_MATCHER = re.compile(r"(\s+[\d.:]+\s+)")
+
+
+class LogCatTimeTransformer:
+ """Used for parsing times/durations from logcat logs."""
+
+ def open_data(self, file):
+ with open(file) as f:
+ return f.read()
+
+ def _get_duration(self, startline, endline):
+ """Parse duration between two logcat lines.
+
+ Expecting lines with a prefix like:
+ 05-26 11:45:41.226 ...
+
+ We only parse the hours, minutes, seconds, and milliseconds here
+ because we have no use for the days and other times.
+ """
+ match = TIME_MATCHER.search(startline)
+ if not match:
+ return None
+ start = match.group(1).strip()
+
+ match = TIME_MATCHER.search(endline)
+ if not match:
+ return None
+ end = match.group(1).strip()
+
+ sdt = datetime.strptime(start, "%H:%M:%S.%f")
+ edt = datetime.strptime(end, "%H:%M:%S.%f")
+
+ # If the ending is less than the start, we rolled into a new
+ # day, so we add 1 day to the end time to handle this
+ if sdt > edt:
+ edt += timedelta(1)
+
+ return (edt - sdt).total_seconds() * 1000
+
+ def _parse_logcat(self, logcat, first_ts, second_ts=None, processor=None):
+ """Parse data from logcat lines.
+
+ If two regexes are provided (first_ts, and second_ts), then the elapsed
+ time between those lines will be measured. Otherwise, if only `first_ts`
+ is defined then, we expect a number as the first group from the
+ match. Optionally, a `processor` function can be provided to process
+ all the groups that were obtained from the match, allowing users to
+ customize what the result is.
+
+ :param list logcat: The logcat lines to parse.
+ :param str first_ts: Regular expression for the first matching line.
+ :param str second_ts: Regular expression for the second matching line.
+ :param func processor: Function to process the groups from the first_ts
+ regular expression.
+ :return list: Returns a list of durations/times parsed.
+ """
+ full_re = r"(" + first_ts + r"\n)"
+ if second_ts:
+ full_re += r".+(?:\n.+)+?(\n" + second_ts + r"\n)"
+
+ durations = []
+ for match in re.findall(full_re, logcat, re.MULTILINE):
+ if isinstance(match, str):
+ raise NotebookTransformOptionsError(
+ "Only one regex was provided, and it has no groups to process."
+ )
+
+ if second_ts is not None:
+ if len(match) != 2:
+ raise NotebookTransformError(
+ "More than 2 groups found. It's unclear which "
+ "to use for calculating the durations."
+ )
+ val = self._get_duration(match[0], match[1])
+ elif processor is not None:
+ # Ignore the first match (that is the full line)
+ val = processor(match[1:])
+ else:
+ val = match[1]
+
+ if val is not None:
+ durations.append(float(val))
+
+ return durations
+
+ def transform(self, data, **kwargs):
+ alltimes = self._parse_logcat(
+ data,
+ kwargs.get("first-timestamp"),
+ second_ts=kwargs.get("second-timestamp"),
+ processor=kwargs.get("processor"),
+ )
+ subtest = kwargs.get("transform-subtest-name")
+ return [
+ {
+ "data": [{"value": val, "xaxis": c} for c, val in enumerate(alltimes)],
+ "subtest": subtest if subtest else "logcat-metric",
+ }
+ ]
+
+ def merge(self, sde):
+ grouped_data = {}
+
+ for entry in sde:
+ subtest = entry["subtest"]
+ data = grouped_data.get(subtest, [])
+ data.extend(entry["data"])
+ grouped_data.update({subtest: data})
+
+ return [{"data": v, "subtest": k} for k, v in grouped_data.items()]
diff --git a/python/mozperftest/mozperftest/metrics/notebook/transforms/single_json.py b/python/mozperftest/mozperftest/metrics/notebook/transforms/single_json.py
new file mode 100644
index 0000000000..375615fb23
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebook/transforms/single_json.py
@@ -0,0 +1,56 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+from mozperftest.metrics.notebook.utilities import flat
+
+
+class SingleJsonRetriever:
+ """Transforms perfherder data into the standardized data format."""
+
+ entry_number = 0
+
+ def transform(self, data):
+ self.entry_number += 1
+
+ # flat(data, ()) returns a dict that have one key per dictionary path
+ # in the original data.
+ return [
+ {
+ "data": [{"value": i, "xaxis": self.entry_number} for i in v],
+ "subtest": k,
+ }
+ for k, v in flat(data, ()).items()
+ ]
+
+ def merge(self, sde):
+ grouped_data = {}
+ for entry in sde:
+ subtest = entry["subtest"]
+ data = grouped_data.get(subtest, [])
+ data.extend(entry["data"])
+ grouped_data.update({subtest: data})
+
+ merged_data = [{"data": v, "subtest": k} for k, v in grouped_data.items()]
+
+ self.entry_number = 0
+ return merged_data
+
+ def summary(self, suite):
+ """Summarize a suite of perfherder data into a single value.
+
+ Returning None means that there's no summary. Otherwise, an integer
+ or float must be returned.
+
+ Only available in the Perfherder layer.
+ """
+ return None
+
+ def subtest_summary(self, subtest):
+ """Summarize a set of replicates for a given subtest.
+
+ By default, it returns a None so we fall back to using the
+ average of the replicates which is the default.
+
+ Only available in the Perfherder layer.
+ """
+ return None
diff --git a/python/mozperftest/mozperftest/metrics/notebook/utilities.py b/python/mozperftest/mozperftest/metrics/notebook/utilities.py
new file mode 100644
index 0000000000..7fd97fa3fa
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebook/utilities.py
@@ -0,0 +1,63 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+from collections.abc import Iterable
+
+
+def flat(data, parent_dir):
+ """
+ Converts a dictionary with nested entries like this
+ {
+ "dict1": {
+ "dict2": {
+ "key1": value1,
+ "key2": value2,
+ ...
+ },
+ ...
+ },
+ ...
+ "dict3": {
+ "key3": value3,
+ "key4": value4,
+ ...
+ }
+ ...
+ }
+
+ to a "flattened" dictionary like this that has no nested entries:
+ {
+ "dict1.dict2.key1": value1,
+ "dict1.dict2.key2": value2,
+ ...
+ "dict3.key3": value3,
+ "dict3.key4": value4,
+ ...
+ }
+
+ :param Iterable data : json data.
+ :param tuple parent_dir: json fields.
+
+ :return dict: {subtest: value}
+ """
+ result = {}
+
+ if not data:
+ return result
+
+ if isinstance(data, list):
+ for item in data:
+ for k, v in flat(item, parent_dir).items():
+ result.setdefault(k, []).extend(v)
+
+ if isinstance(data, dict):
+ for k, v in data.items():
+ current_dir = parent_dir + (k,)
+ subtest = ".".join(current_dir)
+ if isinstance(v, Iterable) and not isinstance(v, str):
+ for x, y in flat(v, current_dir).items():
+ result.setdefault(x, []).extend(y)
+ elif v or v == 0:
+ result.setdefault(subtest, []).append(v)
+
+ return result
diff --git a/python/mozperftest/mozperftest/metrics/notebookupload.py b/python/mozperftest/mozperftest/metrics/notebookupload.py
new file mode 100644
index 0000000000..ec53af2b7f
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/notebookupload.py
@@ -0,0 +1,115 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import pathlib
+
+from mozperftest.layers import Layer
+from mozperftest.metrics.common import COMMON_ARGS, filtered_metrics
+from mozperftest.metrics.notebook import PerftestNotebook
+from mozperftest.metrics.utils import is_number
+
+
+class Notebook(Layer):
+ """Post standarized data to iodide and run analysis."""
+
+ name = "notebook"
+ activated = False
+
+ arguments = COMMON_ARGS
+ arguments.update(
+ {
+ "analysis": {
+ "nargs": "*",
+ "default": [],
+ "help": "List of analyses to run in Iodide.",
+ },
+ "analyze-strings": {
+ "action": "store_true",
+ "default": False,
+ "help": (
+ "If set, strings won't be filtered out of the results to analyze in Iodide."
+ ),
+ },
+ "no-server": {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, the data won't be opened in Iodide.",
+ },
+ "compare-to": {
+ "nargs": "*",
+ "default": [],
+ "help": (
+ "Compare the results from this test to the historical data in the folder(s) "
+ "specified through this option. Only JSON data can be processed for the "
+ "moment. Each folder containing those JSONs is considered as a distinct "
+ "data point to compare with the newest run."
+ ),
+ },
+ "stats": {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, browsertime statistics will be reported.",
+ },
+ }
+ )
+
+ def run(self, metadata):
+ exclusions = None
+ if not self.get_arg("stats"):
+ exclusions = ["statistics."]
+
+ for result in metadata.get_results():
+ result["name"] += "- newest run"
+
+ analysis = self.get_arg("analysis")
+ dir_list = self.get_arg("compare-to")
+ if dir_list:
+ analysis.append("compare")
+ for directory in dir_list:
+ dirpath = pathlib.Path(directory)
+ if not dirpath.exists():
+ raise Exception(f"{dirpath} does not exist.")
+ if not dirpath.is_dir():
+ raise Exception(f"{dirpath} is not a directory")
+ # TODO: Handle more than just JSON data.
+ for jsonfile in dirpath.rglob("*.json"):
+ metadata.add_result(
+ {
+ "results": str(jsonfile.resolve()),
+ "name": jsonfile.parent.name,
+ }
+ )
+
+ results = filtered_metrics(
+ metadata,
+ self.get_arg("output"),
+ self.get_arg("prefix"),
+ metrics=self.get_arg("metrics"),
+ transformer=self.get_arg("transformer"),
+ exclude=exclusions,
+ split_by=self.get_arg("split-by"),
+ simplify_names=self.get_arg("simplify-names"),
+ simplify_exclude=self.get_arg("simplify-exclude"),
+ )
+
+ if not results:
+ self.warning("No results left after filtering")
+ return metadata
+
+ data_to_post = []
+ for name, res in results.items():
+ for r in res:
+ val = r["data"][0]["value"]
+ if is_number(val):
+ data_to_post.append(r)
+ elif self.get_arg("analyze-strings"):
+ data_to_post.append(r)
+
+ self.ptnb = PerftestNotebook(
+ data=data_to_post, logger=metadata, prefix=self.get_arg("prefix")
+ )
+ self.ptnb.post_to_iodide(
+ analysis, start_local_server=not self.get_arg("no-server")
+ )
+
+ return metadata
diff --git a/python/mozperftest/mozperftest/metrics/perfboard/__init__.py b/python/mozperftest/mozperftest/metrics/perfboard/__init__.py
new file mode 100644
index 0000000000..6fbe8159b2
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/perfboard/__init__.py
@@ -0,0 +1,3 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
diff --git a/python/mozperftest/mozperftest/metrics/perfboard/dashboard.json b/python/mozperftest/mozperftest/metrics/perfboard/dashboard.json
new file mode 100644
index 0000000000..804b880b55
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/perfboard/dashboard.json
@@ -0,0 +1,56 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": "-- Grafana --",
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "gnetId": null,
+ "graphTooltip": 0,
+ "id": 1,
+ "links": [],
+ "panels": [],
+ "refresh": false,
+ "schemaVersion": 22,
+ "style": "dark",
+ "tags": [
+ "component"
+ ],
+ "templating": {
+ "list": []
+ },
+ "time": {
+ "from": "now-30d",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "5s",
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h",
+ "2h",
+ "1d"
+ ]
+ },
+ "timezone": "",
+ "title": "?",
+ "uid": null,
+ "id": null,
+ "variables": {
+ "list": []
+ },
+ "version": 13
+}
diff --git a/python/mozperftest/mozperftest/metrics/perfboard/grafana.py b/python/mozperftest/mozperftest/metrics/perfboard/grafana.py
new file mode 100644
index 0000000000..1fa76ea991
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/perfboard/grafana.py
@@ -0,0 +1,87 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import json
+import os
+
+from grafana_api.grafana_face import GrafanaFace
+
+HERE = os.path.dirname(__file__)
+
+
+with open(os.path.join(HERE, "dashboard.json")) as f:
+ template = json.loads(f.read())
+
+with open(os.path.join(HERE, "panel.json")) as f:
+ panel_template = json.loads(f.read())
+
+with open(os.path.join(HERE, "target.json")) as f:
+ target_template = json.loads(f.read())
+
+
+class Grafana:
+ def __init__(self, layer, key, host="perfboard.dev.mozaws.net", port=3000):
+ self.client = GrafanaFace(host=host, port=port, auth=key)
+ self.layer = layer
+
+ def get_dashboard(self, title):
+ existing = self.client.search.search_dashboards(tag="component")
+ existing = dict(
+ [(dashboard["title"].lower(), dashboard["uid"]) for dashboard in existing]
+ )
+ if title in existing:
+ return self.client.dashboard.get_dashboard(existing[title])
+ self.layer.debug(f"Creating dashboard {title}")
+ d = dict(template)
+ d["title"] = title.capitalize()
+ res = self.client.dashboard.update_dashboard(
+ dashboard={"dashboard": d, "folderId": 0, "overwrite": False}
+ )
+
+ return self.client.dashboard.get_dashboard(res["uid"])
+
+ def _add_panel(self, dashboard, panel_title, metrics):
+ found = None
+ ids = []
+ for panel in dashboard["dashboard"]["panels"]:
+ ids.append(panel["id"])
+
+ if panel["title"] == panel_title:
+ found = panel
+
+ ids.sort()
+
+ need_update = False
+ if found is None:
+ # create the panel
+ panel = panel_template
+ panel["title"] = panel_title
+ if ids != []:
+ panel["id"] = ids[-1] + 1
+ else:
+ panel["id"] = 1
+ self.layer.debug("Creating panel")
+ dashboard["dashboard"]["panels"].append(panel)
+ need_update = True
+ else:
+ self.layer.debug("Panel exists")
+ panel = found
+
+ # check the metrics
+ existing = [target["measurement"] for target in panel["targets"]]
+
+ for metric in metrics:
+ if metric in existing:
+ continue
+ m = dict(target_template)
+ m["measurement"] = metric
+ panel["targets"].append(m)
+ need_update = True
+
+ if need_update:
+ self.layer.debug("Updating dashboard")
+ self.client.dashboard.update_dashboard(dashboard=dashboard)
+
+ def add_panel(self, dashboard, panel, metrics):
+ dashboard = self.get_dashboard(dashboard)
+ self._add_panel(dashboard, panel, metrics)
diff --git a/python/mozperftest/mozperftest/metrics/perfboard/influx.py b/python/mozperftest/mozperftest/metrics/perfboard/influx.py
new file mode 100644
index 0000000000..4f7e27072c
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/perfboard/influx.py
@@ -0,0 +1,188 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import datetime
+import statistics
+from collections import defaultdict
+
+from mozperftest import utils
+from mozperftest.layers import Layer
+from mozperftest.metrics.common import COMMON_ARGS, filtered_metrics
+from mozperftest.utils import get_tc_secret, install_package
+
+
+class Influx(Layer):
+ """Sends the metrics to an InfluxDB server"""
+
+ name = "perfboard"
+ activated = False
+ arguments = COMMON_ARGS
+ arguments.update(
+ {
+ "dashboard": {
+ "type": str,
+ "default": None,
+ "help": "Name of the dashboard - defaults to the script"
+ " `component` metadata. When not set, falls back to"
+ " `perftest`",
+ },
+ "influx-host": {
+ "type": str,
+ "default": "perfboard.dev.mozaws.net",
+ },
+ "influx-user": {
+ "type": str,
+ "default": "admin",
+ },
+ "influx-port": {
+ "type": int,
+ "default": 8086,
+ },
+ "influx-password": {
+ "type": str,
+ "default": None,
+ },
+ "influx-db": {
+ "type": str,
+ "default": "perf",
+ },
+ "grafana-host": {
+ "type": str,
+ "default": "perfboard.dev.mozaws.net",
+ },
+ "grafana-key": {
+ "type": str,
+ "default": None,
+ },
+ "grafana-port": {
+ "type": int,
+ "default": 3000,
+ },
+ }
+ )
+
+ def _setup(self):
+ venv = self.mach_cmd.virtualenv_manager
+ try:
+ from influxdb import InfluxDBClient
+ except ImportError:
+ install_package(venv, "influxdb", ignore_failure=False)
+ from influxdb import InfluxDBClient
+
+ try:
+ from mozperftest.metrics.perfboard.grafana import Grafana
+ except ImportError:
+ install_package(venv, "grafana_api", ignore_failure=False)
+ from mozperftest.metrics.perfboard.grafana import Grafana
+
+ if utils.ON_TRY:
+ secret = get_tc_secret()
+ i_host = secret["influx_host"]
+ i_port = secret["influx_port"]
+ i_user = secret["influx_user"]
+ i_password = secret["influx_password"]
+ i_dbname = secret["influx_db"]
+ g_key = secret["grafana_key"]
+ g_host = secret["grafana_host"]
+ g_port = secret["grafana_port"]
+ else:
+ i_host = self.get_arg("influx-host")
+ i_port = self.get_arg("influx-port")
+ i_user = self.get_arg("influx-user")
+ i_password = self.get_arg("influx-password")
+ if i_password is None:
+ raise Exception("You need to set --perfboard-influx-password")
+ i_dbname = self.get_arg("influx-db")
+ g_key = self.get_arg("grafana-key")
+ if g_key is None:
+ raise Exception("You need to set --perfboard-grafana-key")
+ g_host = self.get_arg("grafana-host")
+ g_port = self.get_arg("grafana-port")
+
+ self.client = InfluxDBClient(i_host, i_port, i_user, i_password, i_dbname)
+ # this will error out if the server is unreachable
+ self.client.ping()
+ self.grafana = Grafana(self, g_key, g_host, g_port)
+
+ def _build_point(self, name, component, values, date):
+ value = statistics.mean(values)
+ return {
+ "measurement": name,
+ "tags": {
+ "component": component,
+ },
+ "time": date,
+ "fields": {"Float_value": float(value)},
+ }
+
+ def run(self, metadata):
+ when = datetime.datetime.utcnow()
+ date = when.isoformat()
+ metrics = self.get_arg("metrics")
+
+ # Get filtered metrics
+ results = filtered_metrics(
+ metadata,
+ self.get_arg("output"),
+ self.get_arg("prefix"),
+ metrics=metrics,
+ transformer=self.get_arg("transformer"),
+ split_by=self.get_arg("split-by"),
+ simplify_names=self.get_arg("simplify-names"),
+ simplify_exclude=self.get_arg("simplify-exclude"),
+ )
+
+ if not results:
+ self.warning("No results left after filtering")
+ return metadata
+
+ # there's one thing we don't do yet is getting a timestamp
+ # for each measure that is happening in browsertime or xpcshell
+ # if we had it, we could send all 13/25 samples, each one with
+ # their timestamp, to InfluxDB, and let Grafana handle the
+ # mean() or median() part.
+ #
+ # Until we have this, here we convert the series to
+ # a single value and timestamp
+ self._setup()
+ component = self.get_arg("dashboard")
+ if component is None:
+ component = metadata.script.get("component", "perftest")
+
+ data = defaultdict(list)
+ for name, res in results.items():
+ for line in res:
+ if "subtest" not in line:
+ continue
+ metric_name = line["subtest"]
+ short_name = metric_name.split(".")[-1]
+ short_name = short_name.lower()
+ if metrics and not any(
+ [m.lower().startswith(short_name.lower()) for m in metrics]
+ ):
+ continue
+ values = [v["value"] for v in line["data"]]
+ data[short_name].extend(values)
+
+ if not data:
+ self.warning("No results left after filtering")
+ return data
+
+ points = []
+ for metric_name, values in data.items():
+ try:
+ point = self._build_point(metric_name, component, values, date)
+ except TypeError:
+ continue
+ points.append(point)
+
+ self.info("Sending data to InfluxDB")
+ self.client.write_points(points)
+
+ # making sure we expose it in Grafana
+ test_name = self.get_arg("tests")[0]
+ test_name = test_name.split("/")[-1]
+ for metric_name in data:
+ self.grafana.add_panel(component, test_name, metric_name)
+
+ return metadata
diff --git a/python/mozperftest/mozperftest/metrics/perfboard/panel.json b/python/mozperftest/mozperftest/metrics/perfboard/panel.json
new file mode 100644
index 0000000000..61deeaad8f
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/perfboard/panel.json
@@ -0,0 +1,81 @@
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": null,
+ "fill": 1,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 11,
+ "x": 0,
+ "y": 0
+ },
+ "hiddenSeries": false,
+ "legend": {
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "nullPointMode": "null",
+ "options": {
+ "dataLinks": []
+ },
+ "percentage": false,
+ "pointradius": 2,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "BBC Link perftest",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ }
diff --git a/python/mozperftest/mozperftest/metrics/perfboard/target.json b/python/mozperftest/mozperftest/metrics/perfboard/target.json
new file mode 100644
index 0000000000..ad96488840
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/perfboard/target.json
@@ -0,0 +1,20 @@
+
+{
+ "groupBy": [],
+ "measurement": "rumSpeedIndex",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "Float_value"
+ ],
+ "type": "field"
+ }
+ ]
+ ],
+ "tags": []
+ }
diff --git a/python/mozperftest/mozperftest/metrics/perfherder.py b/python/mozperftest/mozperftest/metrics/perfherder.py
new file mode 100644
index 0000000000..0521e2a205
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/perfherder.py
@@ -0,0 +1,374 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import json
+import os
+import pathlib
+import statistics
+import sys
+
+import jsonschema
+
+from mozperftest.layers import Layer
+from mozperftest.metrics.common import COMMON_ARGS, filtered_metrics
+from mozperftest.metrics.exceptions import PerfherderValidDataError
+from mozperftest.metrics.notebook.constant import Constant
+from mozperftest.metrics.notebook.transformer import get_transformer
+from mozperftest.metrics.utils import has_callable_method, is_number, write_json
+from mozperftest.utils import strtobool
+
+PERFHERDER_SCHEMA = pathlib.Path(
+ "testing", "mozharness", "external_tools", "performance-artifact-schema.json"
+)
+
+
+class Perfherder(Layer):
+ """Output data in the perfherder format."""
+
+ name = "perfherder"
+ activated = False
+
+ arguments = COMMON_ARGS
+ arguments.update(
+ {
+ "app": {
+ "type": str,
+ "default": "firefox",
+ "choices": [
+ "firefox",
+ "chrome-m",
+ "chrome",
+ "chromium",
+ "fennec",
+ "geckoview",
+ "fenix",
+ "refbrow",
+ ],
+ "help": (
+ "Shorthand name of application that is "
+ "being tested (used in perfherder data)."
+ ),
+ },
+ "stats": {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, browsertime statistics will be reported.",
+ },
+ "timestamp": {
+ "type": float,
+ "default": None,
+ "help": (
+ "Timestamp to use for the perfherder data. Can be the "
+ "current date or a past date if needed."
+ ),
+ },
+ }
+ )
+
+ def run(self, metadata):
+ """Processes the given results into a perfherder-formatted data blob.
+
+ If the `--perfherder` flag isn't provided, then the
+ results won't be processed into a perfherder-data blob. If the
+ flavor is unknown to us, then we assume that it comes from
+ browsertime.
+
+ XXX If needed, make a way to do flavor-specific processing
+
+ :param results list/dict/str: Results to process.
+ :param perfherder bool: True if results should be processed
+ into a perfherder-data blob.
+ :param flavor str: The flavor that is being processed.
+ """
+ prefix = self.get_arg("prefix")
+ output = self.get_arg("output")
+
+ # XXX Make an arugment for exclusions from metrics
+ # (or go directly to regex's for metrics)
+ exclusions = None
+ if not self.get_arg("stats"):
+ exclusions = ["statistics."]
+
+ # Get filtered metrics
+ metrics = self.get_arg("metrics")
+ results, fullsettings = filtered_metrics(
+ metadata,
+ output,
+ prefix,
+ metrics=metrics,
+ transformer=self.get_arg("transformer"),
+ settings=True,
+ exclude=exclusions,
+ split_by=self.get_arg("split-by"),
+ simplify_names=self.get_arg("simplify-names"),
+ simplify_exclude=self.get_arg("simplify-exclude"),
+ )
+
+ if not any([results[name] for name in results]):
+ self.warning("No results left after filtering")
+ return metadata
+
+ # XXX Add version info into this data
+ app_info = {"name": self.get_arg("app", default="firefox")}
+
+ # converting the metrics list into a mapping where
+ # keys are the metrics nane
+ if metrics is not None:
+ metrics = dict([(m["name"], m) for m in metrics])
+ else:
+ metrics = {}
+
+ all_perfherder_data = None
+ for name, res in results.items():
+ settings = dict(fullsettings[name])
+ # updating the settings with values provided in metrics, if any
+ if name in metrics:
+ settings.update(metrics[name])
+
+ # XXX Instead of just passing replicates here, we should build
+ # up a partial perfherder data blob (with options) and subtest
+ # overall values.
+ subtests = {}
+ for r in res:
+ vals = [v["value"] for v in r["data"] if is_number(v["value"])]
+ if vals:
+ subtests[r["subtest"]] = vals
+
+ perfherder_data = self._build_blob(
+ subtests,
+ name=name,
+ extra_options=settings.get("extraOptions"),
+ should_alert=strtobool(settings.get("shouldAlert", False)),
+ application=app_info,
+ alert_threshold=float(settings.get("alertThreshold", 2.0)),
+ lower_is_better=strtobool(settings.get("lowerIsBetter", True)),
+ unit=settings.get("unit", "ms"),
+ summary=settings.get("value"),
+ framework=settings.get("framework"),
+ metrics_info=metrics,
+ transformer=res[0].get("transformer", None),
+ )
+
+ if all_perfherder_data is None:
+ all_perfherder_data = perfherder_data
+ else:
+ all_perfherder_data["suites"].extend(perfherder_data["suites"])
+
+ if prefix:
+ # If a prefix was given, store it in the perfherder data as well
+ all_perfherder_data["prefix"] = prefix
+
+ timestamp = self.get_arg("timestamp")
+ if timestamp is not None:
+ all_perfherder_data["pushTimestamp"] = timestamp
+
+ # Validate the final perfherder data blob
+ with pathlib.Path(metadata._mach_cmd.topsrcdir, PERFHERDER_SCHEMA).open() as f:
+ schema = json.load(f)
+ jsonschema.validate(all_perfherder_data, schema)
+
+ file = "perfherder-data.json"
+ if prefix:
+ file = "{}-{}".format(prefix, file)
+ self.info("Writing perfherder results to {}".format(os.path.join(output, file)))
+
+ # XXX "suites" key error occurs when using self.info so a print
+ # is being done for now.
+
+ # print() will produce a BlockingIOError on large outputs, so we use
+ # sys.stdout
+ sys.stdout.write("PERFHERDER_DATA: ")
+ json.dump(all_perfherder_data, sys.stdout)
+ sys.stdout.write("\n")
+ sys.stdout.flush()
+
+ metadata.set_output(write_json(all_perfherder_data, output, file))
+ return metadata
+
+ def _build_blob(
+ self,
+ subtests,
+ name="browsertime",
+ test_type="pageload",
+ extra_options=None,
+ should_alert=False,
+ subtest_should_alert=None,
+ suiteshould_alert=False,
+ framework=None,
+ application=None,
+ alert_threshold=2.0,
+ lower_is_better=True,
+ unit="ms",
+ summary=None,
+ metrics_info=None,
+ transformer=None,
+ ):
+ """Build a PerfHerder data blob from the given subtests.
+
+ NOTE: This is a WIP, see the many TODOs across this file.
+
+ Given a dictionary of subtests, and the values. Build up a
+ perfherder data blob. Note that the naming convention for
+ these arguments is different then the rest of the scripts
+ to make it easier to see where they are going to in the perfherder
+ data.
+
+ For the `should_alert` field, if should_alert is True but `subtest_should_alert`
+ is empty, then all subtests along with the suite will generate alerts.
+ Otherwise, if the subtest_should_alert contains subtests to alert on, then
+ only those will alert and nothing else (including the suite). If the
+ suite value should alert, then set `suiteshould_alert` to True.
+
+ :param subtests dict: A dictionary of subtests and the values.
+ XXX TODO items for subtests:
+ (1) Allow it to contain replicates and individual settings
+ for each of the subtests.
+ (2) The geomean of the replicates will be taken for now,
+ but it should be made more flexible in some way.
+ (3) We need some way to handle making multiple suites.
+ :param name str: Name to give to the suite.
+ :param test_type str: The type of test that was run.
+ :param extra_options list: A list of extra options to store.
+ :param should_alert bool: Whether all values in the suite should
+ generate alerts or not.
+ :param subtest_should_alert list: A list of subtests to alert on. If this
+ is not empty, then it will disable the suite-level alerts.
+ :param suiteshould_alert bool: Used if `subtest_should_alert` is not
+ empty, and if True, then the suite-level value will generate
+ alerts.
+ :param framework dict: Information about the framework that
+ is being tested.
+ :param application dict: Information about the application that
+ is being tested. Must include name, and optionally a version.
+ :param alert_threshold float: The change in percentage this
+ metric must undergo to to generate an alert.
+ :param lower_is_better bool: If True, then lower values are better
+ than higher ones.
+ :param unit str: The unit of the data.
+ :param summary float: The summary value to use in the perfherder
+ data blob. By default, the mean of all the subtests will be
+ used.
+ :param metrics_info dict: Contains a mapping of metric names to the
+ options that are used on the metric.
+ :param transformer str: The name of a predefined tranformer, a module
+ path to a transform, or a path to the file containing the transformer.
+
+ :return dict: The PerfHerder data blob.
+ """
+ if extra_options is None:
+ extra_options = []
+ if subtest_should_alert is None:
+ subtest_should_alert = []
+ if framework is None:
+ framework = {"name": "mozperftest"}
+ if application is None:
+ application = {"name": "firefox", "version": "9000"}
+ if metrics_info is None:
+ metrics_info = {}
+
+ # Use the transform to produce a suite value
+ const = Constant()
+ tfm_cls = None
+ transformer_obj = None
+ if transformer and transformer in const.predefined_transformers:
+ # A pre-built transformer name was given
+ tfm_cls = const.predefined_transformers[transformer]
+ transformer_obj = tfm_cls()
+ elif transformer is not None:
+ tfm_cls = get_transformer(transformer)
+ transformer_obj = tfm_cls()
+ else:
+ self.warning(
+ "No transformer found for this suite. Cannot produce a summary value."
+ )
+
+ perf_subtests = []
+ suite = {
+ "name": name,
+ "type": test_type,
+ "unit": unit,
+ "extraOptions": extra_options,
+ "lowerIsBetter": lower_is_better,
+ "alertThreshold": alert_threshold,
+ "shouldAlert": (should_alert and not subtest_should_alert)
+ or suiteshould_alert,
+ "subtests": perf_subtests,
+ }
+
+ perfherder = {
+ "suites": [suite],
+ "framework": framework,
+ "application": application,
+ }
+
+ allvals = []
+ alert_thresholds = []
+ for measurement in subtests:
+ reps = subtests[measurement]
+ allvals.extend(reps)
+
+ if len(reps) == 0:
+ self.warning("No replicates found for {}, skipping".format(measurement))
+ continue
+
+ # Gather extra settings specified from within a metric specification
+ subtest_lower_is_better = lower_is_better
+ subtest_unit = unit
+ for met in metrics_info:
+ if met not in measurement:
+ continue
+
+ extra_options.extend(metrics_info[met].get("extraOptions", []))
+ alert_thresholds.append(
+ metrics_info[met].get("alertThreshold", alert_threshold)
+ )
+
+ subtest_unit = metrics_info[met].get("unit", unit)
+ subtest_lower_is_better = metrics_info[met].get(
+ "lowerIsBetter", lower_is_better
+ )
+
+ if metrics_info[met].get("shouldAlert", should_alert):
+ subtest_should_alert.append(measurement)
+
+ break
+
+ subtest = {
+ "name": measurement,
+ "replicates": reps,
+ "lowerIsBetter": subtest_lower_is_better,
+ "value": None,
+ "unit": subtest_unit,
+ "shouldAlert": should_alert or measurement in subtest_should_alert,
+ }
+
+ if has_callable_method(transformer_obj, "subtest_summary"):
+ subtest["value"] = transformer_obj.subtest_summary(subtest)
+ if subtest["value"] is None:
+ subtest["value"] = statistics.mean(reps)
+
+ perf_subtests.append(subtest)
+
+ if len(allvals) == 0:
+ raise PerfherderValidDataError(
+ "Could not build perfherder data blob because no valid data was provided, "
+ + "only int/float data is accepted."
+ )
+
+ alert_thresholds = list(set(alert_thresholds))
+ if len(alert_thresholds) > 1:
+ raise PerfherderValidDataError(
+ "Too many alertThreshold's were specified, expecting 1 but found "
+ + f"{len(alert_thresholds)}"
+ )
+ elif len(alert_thresholds) == 1:
+ suite["alertThreshold"] = alert_thresholds[0]
+
+ suite["extraOptions"] = list(set(suite["extraOptions"]))
+
+ if has_callable_method(transformer_obj, "summary"):
+ val = transformer_obj.summary(suite)
+ if val is not None:
+ suite["value"] = val
+
+ return perfherder
diff --git a/python/mozperftest/mozperftest/metrics/utils.py b/python/mozperftest/mozperftest/metrics/utils.py
new file mode 100644
index 0000000000..a947434684
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/utils.py
@@ -0,0 +1,149 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import ast
+import json
+import os
+import pathlib
+import re
+
+from jsonschema import validate
+from jsonschema.exceptions import ValidationError
+
+# Get the jsonschema for intermediate results
+PARENT = pathlib.Path(__file__).parent.parent
+with pathlib.Path(PARENT, "schemas", "intermediate-results-schema.json").open() as f:
+ IR_SCHEMA = json.load(f)
+
+
+# These are the properties we know about in the schema.
+# If anything other than these is present, then we will
+# fail validation.
+KNOWN_PERFHERDER_PROPS = set(
+ ["name", "value", "unit", "lowerIsBetter", "shouldAlert", "alertThreshold"]
+)
+KNOWN_SUITE_PROPS = set(
+ set(["results", "transformer", "transformer-options", "extraOptions", "framework"])
+ | KNOWN_PERFHERDER_PROPS
+)
+KNOWN_SINGLE_MEASURE_PROPS = set(set(["values"]) | KNOWN_PERFHERDER_PROPS)
+
+
+# Regex splitter for the metric fields - used to handle
+# the case when `,` is found within the options values.
+METRIC_SPLITTER = re.compile(r",\s*(?![^\[\]]*\])")
+
+
+def is_number(value):
+ """Determines if the value is an int/float."""
+ return isinstance(value, (int, float)) and not isinstance(value, bool)
+
+
+def has_callable_method(obj, method_name):
+ """Determines if an object/class has a callable method."""
+ if obj and hasattr(obj, method_name) and callable(getattr(obj, method_name)):
+ return True
+ return False
+
+
+def open_file(path):
+ """Opens a file and returns its contents.
+
+ :param path str: Path to the file, if it's a
+ JSON, then a dict will be returned, otherwise,
+ the raw contents (not split by line) will be
+ returned.
+ :return dict/str: Returns a dict for JSON data, and
+ a str for any other type.
+ """
+ print("Reading %s" % path)
+ with open(path) as f:
+ if os.path.splitext(path)[-1] == ".json":
+ return json.load(f)
+ return f.read()
+
+
+def write_json(data, path, file):
+ """Writes data to a JSON file.
+
+ :param data dict: Data to write.
+ :param path str: Directory of where the data will be stored.
+ :param file str: Name of the JSON file.
+ :return str: Path to the output.
+ """
+ path = os.path.join(path, file)
+ with open(path, "w+") as f:
+ json.dump(data, f)
+ return path
+
+
+def validate_intermediate_results(results):
+ """Validates intermediate results coming from the browser layer.
+
+ This method exists because there is no reasonable method to implement
+ inheritance with `jsonschema` until the `unevaluatedProperties` field
+ is implemented in the validation module. Until then, this method
+ checks to make sure that only known properties are available in the
+ results. If any property found is unknown, then we raise a
+ jsonschema.ValidationError.
+
+ :param results dict: The intermediate results to validate.
+ :raises ValidationError: Raised when validation fails.
+ """
+ # Start with the standard validation
+ validate(results, IR_SCHEMA)
+
+ # Now ensure that we have no extra keys
+ suite_keys = set(list(results.keys()))
+ unknown_keys = suite_keys - KNOWN_SUITE_PROPS
+ if unknown_keys:
+ raise ValidationError(f"Found unknown suite-level keys: {list(unknown_keys)}")
+ if isinstance(results["results"], str):
+ # Nothing left to verify
+ return
+
+ # The results are split by measurement so we need to
+ # check that each of those entries have no extra keys
+ for entry in results["results"]:
+ measurement_keys = set(list(entry.keys()))
+ unknown_keys = measurement_keys - KNOWN_SINGLE_MEASURE_PROPS
+ if unknown_keys:
+ raise ValidationError(
+ "Found unknown single-measure-level keys for "
+ f"{entry['name']}: {list(unknown_keys)}"
+ )
+
+
+def metric_fields(value):
+ # old form: just the name
+ if "," not in value and ":" not in value:
+ return {"name": value}
+
+ def _check(field):
+ sfield = field.strip().partition(":")
+ if len(sfield) != 3 or not (sfield[1] and sfield[2]):
+ raise ValueError(f"Unexpected metrics definition {field}")
+ if sfield[0] not in KNOWN_SUITE_PROPS:
+ raise ValueError(
+ f"Unknown field '{sfield[0]}', should be in " f"{KNOWN_SUITE_PROPS}"
+ )
+
+ sfield = [sfield[0], sfield[2]]
+
+ try:
+ # This handles dealing with parsing lists
+ # from a string
+ sfield[1] = ast.literal_eval(sfield[1])
+ except (ValueError, SyntaxError):
+ # Ignore failures, those are from instances
+ # which don't need to be converted from a python
+ # representation
+ pass
+
+ return sfield
+
+ fields = [field.strip() for field in METRIC_SPLITTER.split(value)]
+ res = dict([_check(field) for field in fields])
+ if "name" not in res:
+ raise ValueError(f"{value} misses the 'name' field")
+ return res
diff --git a/python/mozperftest/mozperftest/metrics/visualmetrics.py b/python/mozperftest/mozperftest/metrics/visualmetrics.py
new file mode 100644
index 0000000000..068440d6f2
--- /dev/null
+++ b/python/mozperftest/mozperftest/metrics/visualmetrics.py
@@ -0,0 +1,221 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import errno
+import json
+import os
+import sys
+from pathlib import Path
+
+from mozfile import which
+
+from mozperftest.layers import Layer
+from mozperftest.utils import run_script, silence
+
+METRICS_FIELDS = (
+ "SpeedIndex",
+ "FirstVisualChange",
+ "LastVisualChange",
+ "VisualProgress",
+ "videoRecordingStart",
+)
+
+
+class VisualData:
+ def open_data(self, data):
+ res = {
+ "name": "visualmetrics",
+ "subtest": data["name"],
+ "data": [
+ {"file": "visualmetrics", "value": value, "xaxis": xaxis}
+ for xaxis, value in enumerate(data["values"])
+ ],
+ }
+ return res
+
+ def transform(self, data):
+ return data
+
+ def merge(self, data):
+ return data
+
+
+class VisualMetrics(Layer):
+ """Wrapper around Browsertime's visualmetrics.py script"""
+
+ name = "visualmetrics"
+ activated = False
+ arguments = {}
+
+ def setup(self):
+ self.metrics = {}
+ self.metrics_fields = []
+
+ # making sure we have ffmpeg and imagemagick available
+ for tool in ("ffmpeg", "convert"):
+ if sys.platform in ("win32", "msys"):
+ tool += ".exe"
+ path = which(tool)
+ if not path:
+ raise OSError(errno.ENOENT, f"Could not find {tool}")
+
+ def run(self, metadata):
+ if "VISUALMETRICS_PY" not in os.environ:
+ raise OSError(
+ "The VISUALMETRICS_PY environment variable is not set."
+ "Make sure you run the browsertime layer"
+ )
+ path = Path(os.environ["VISUALMETRICS_PY"])
+ if not path.exists():
+ raise FileNotFoundError(str(path))
+
+ self.visualmetrics = path
+ treated = 0
+
+ for result in metadata.get_results():
+ result_dir = result.get("results")
+ if result_dir is None:
+ continue
+ result_dir = Path(result_dir)
+ if not result_dir.is_dir():
+ continue
+ browsertime_json = Path(result_dir, "browsertime.json")
+ if not browsertime_json.exists():
+ continue
+ treated += self.run_visual_metrics(browsertime_json)
+
+ self.info(f"Treated {treated} videos.")
+
+ if len(self.metrics) > 0:
+ metadata.add_result(
+ {
+ "name": metadata.script["name"] + "-vm",
+ "framework": {"name": "mozperftest"},
+ "transformer": "mozperftest.metrics.visualmetrics:VisualData",
+ "results": list(self.metrics.values()),
+ }
+ )
+
+ # we also extend --perfherder-metrics and --console-metrics if they
+ # are activated
+ def add_to_option(name):
+ existing = self.get_arg(name, [])
+ for field in self.metrics_fields:
+ existing.append({"name": field, "unit": "ms"})
+ self.env.set_arg(name, existing)
+
+ if self.get_arg("perfherder"):
+ add_to_option("perfherder-metrics")
+
+ if self.get_arg("console"):
+ add_to_option("console-metrics")
+
+ else:
+ self.warning("No video was treated.")
+ return metadata
+
+ def run_visual_metrics(self, browsertime_json):
+ verbose = self.get_arg("verbose")
+ self.info(f"Looking at {browsertime_json}")
+ venv = self.mach_cmd.virtualenv_manager
+
+ class _display:
+ def __enter__(self, *args, **kw):
+ return self
+
+ __exit__ = __enter__
+
+ may_silence = not verbose and silence or _display
+
+ with browsertime_json.open() as f:
+ browsertime_json_data = json.loads(f.read())
+
+ videos = 0
+ global_options = [
+ str(self.visualmetrics),
+ "--orange",
+ "--perceptual",
+ "--contentful",
+ "--force",
+ "--renderignore",
+ "5",
+ "--viewport",
+ ]
+ if verbose:
+ global_options += ["-vvv"]
+
+ for site in browsertime_json_data:
+ # collecting metrics from browserScripts
+ # because it can be used in splitting
+ for index, bs in enumerate(site["browserScripts"]):
+ for name, val in bs.items():
+ if not isinstance(val, (str, int)):
+ continue
+ self.append_metrics(index, name, val)
+
+ extra = {"lowerIsBetter": True, "unit": "ms"}
+
+ for index, video in enumerate(site["files"]["video"]):
+ videos += 1
+ video_path = browsertime_json.parent / video
+ output = "[]"
+ with may_silence():
+ res, output = run_script(
+ venv.python_path,
+ global_options + ["--video", str(video_path), "--json"],
+ verbose=verbose,
+ label="visual metrics",
+ display=False,
+ )
+ if not res:
+ self.error(f"Failed {res}")
+ continue
+
+ output = output.strip()
+ if verbose:
+ self.info(str(output))
+ try:
+ output = json.loads(output)
+ except json.JSONDecodeError:
+ self.error("Could not read the json output from visualmetrics.py")
+ continue
+
+ for name, value in output.items():
+ if name.endswith(
+ "Progress",
+ ):
+ self._expand_visual_progress(index, name, value, **extra)
+ else:
+ self.append_metrics(index, name, value, **extra)
+
+ return videos
+
+ def _expand_visual_progress(self, index, name, value, **fields):
+ def _split_percent(val):
+ # value is of the form "567=94%"
+ val = val.split("=")
+ value, percent = val[0].strip(), val[1].strip()
+ if percent.endswith("%"):
+ percent = percent[:-1]
+ return int(percent), int(value)
+
+ percents = [_split_percent(elmt) for elmt in value.split(",")]
+
+ # we want to keep the first added value for each percent
+ # so the trick here is to create a dict() with the reversed list
+ percents = dict(reversed(percents))
+
+ # we are keeping the last 5 percents
+ percents = list(percents.items())
+ percents.sort()
+ for percent, value in percents[:5]:
+ self.append_metrics(index, f"{name}{percent}", value, **fields)
+
+ def append_metrics(self, index, name, value, **fields):
+ if name not in self.metrics_fields:
+ self.metrics_fields.append(name)
+ if name not in self.metrics:
+ self.metrics[name] = {"name": name, "values": []}
+
+ self.metrics[name]["values"].append(value)
+ self.metrics[name].update(**fields)
diff --git a/python/mozperftest/mozperftest/runner.py b/python/mozperftest/mozperftest/runner.py
new file mode 100644
index 0000000000..5ef5e90200
--- /dev/null
+++ b/python/mozperftest/mozperftest/runner.py
@@ -0,0 +1,299 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+"""
+Pure Python runner so we can execute perftest in the CI without
+depending on a full mach toolchain, that is not fully available in
+all worker environments.
+
+This runner can be executed in two different ways:
+
+- by calling run_tests() from the mach command
+- by executing this module directly
+
+When the module is executed directly, if the --on-try option is used,
+it will fetch arguments from Tascluster's parameters, that were
+populated via a local --push-to-try call.
+
+The --push-to-try flow is:
+
+- a user calls ./mach perftest --push-to-try --option1 --option2
+- a new push to try commit is made and includes all options in its parameters
+- a generic TC job triggers the perftest by calling this module with --on-try
+- run_test() grabs the parameters artifact and converts them into args for
+ perftest
+"""
+import json
+import logging
+import os
+import shutil
+import sys
+from pathlib import Path
+
+TASKCLUSTER = "TASK_ID" in os.environ.keys()
+RUNNING_TESTS = "RUNNING_TESTS" in os.environ.keys()
+HERE = Path(__file__).parent
+SRC_ROOT = Path(HERE, "..", "..", "..").resolve()
+
+
+# XXX need to make that for all systems flavors
+if "SHELL" not in os.environ:
+ os.environ["SHELL"] = "/bin/bash"
+
+
+def _activate_virtualenvs(flavor):
+ """Adds all available dependencies in the path.
+
+ This is done so the runner can be used with no prior
+ install in all execution environments.
+ """
+
+ # We need the "mach" module to access the logic to parse virtualenv
+ # requirements. Since that depends on "packaging", we add that to the path too.
+ sys.path[0:0] = [
+ os.path.join(SRC_ROOT, module)
+ for module in (
+ os.path.join("python", "mach"),
+ os.path.join("third_party", "python", "packaging"),
+ )
+ ]
+
+ from mach.site import (
+ CommandSiteManager,
+ ExternalPythonSite,
+ MachSiteManager,
+ SitePackagesSource,
+ resolve_requirements,
+ )
+ from mach.util import get_state_dir, get_virtualenv_base_dir
+
+ mach_site = MachSiteManager(
+ str(SRC_ROOT),
+ None,
+ resolve_requirements(str(SRC_ROOT), "mach"),
+ ExternalPythonSite(sys.executable),
+ SitePackagesSource.NONE,
+ )
+ mach_site.activate()
+
+ command_site_manager = CommandSiteManager.from_environment(
+ str(SRC_ROOT),
+ lambda: os.path.normpath(get_state_dir(True, topsrcdir=str(SRC_ROOT))),
+ "common",
+ get_virtualenv_base_dir(str(SRC_ROOT)),
+ )
+
+ command_site_manager.activate()
+
+ if TASKCLUSTER:
+ # In CI, the directory structure is different: xpcshell code is in
+ # "$topsrcdir/xpcshell/" rather than "$topsrcdir/testing/xpcshell". The
+ # same is true for mochitest. It also needs additional settings for some
+ # dependencies.
+ if flavor == "xpcshell":
+ print("Setting up xpcshell python paths...")
+ sys.path.append("xpcshell")
+ elif flavor == "mochitest":
+ print("Setting up mochitest python paths...")
+ sys.path.append("mochitest")
+ sys.path.append(str(Path("tools", "geckoprocesstypes_generator")))
+
+
+def _create_artifacts_dir(kwargs, artifacts):
+ from mozperftest.utils import create_path
+
+ results_dir = kwargs.get("test_name")
+ if results_dir is None:
+ results_dir = "results"
+
+ return create_path(artifacts / "artifacts" / kwargs["tool"] / results_dir)
+
+
+def _save_params(kwargs, artifacts):
+ with open(os.path.join(str(artifacts), "side-by-side-params.json"), "w") as file:
+ json.dump(kwargs, file, indent=4)
+
+
+def run_tests(mach_cmd, kwargs, client_args):
+ """This tests runner can be used directly via main or via Mach.
+
+ When the --on-try option is used, the test runner looks at the
+ `PERFTEST_OPTIONS` environment variable that contains all options passed by
+ the user via a ./mach perftest --push-to-try call.
+ """
+ on_try = kwargs.pop("on_try", False)
+
+ # trying to get the arguments from the task params
+ if on_try:
+ try_options = json.loads(os.environ["PERFTEST_OPTIONS"])
+ print("Loading options from $PERFTEST_OPTIONS")
+ print(json.dumps(try_options, indent=4, sort_keys=True))
+ kwargs.update(try_options)
+
+ from mozperftest import MachEnvironment, Metadata
+ from mozperftest.hooks import Hooks
+ from mozperftest.script import ScriptInfo
+ from mozperftest.utils import build_test_list
+
+ hooks_file = kwargs.pop("hooks", None)
+ hooks = Hooks(mach_cmd, hooks_file)
+ verbose = kwargs.get("verbose", False)
+ log_level = logging.DEBUG if verbose else logging.INFO
+
+ # If we run through mach, we just want to set the level
+ # of the existing termminal handler.
+ # Otherwise, we're adding it.
+ if mach_cmd.log_manager.terminal_handler is not None:
+ mach_cmd.log_manager.terminal_handler.level = log_level
+ else:
+ mach_cmd.log_manager.add_terminal_logging(level=log_level)
+ mach_cmd.log_manager.enable_all_structured_loggers()
+ mach_cmd.log_manager.enable_unstructured()
+
+ try:
+ # Only pass the virtualenv to the before_iterations hook
+ # so that users can install test-specific packages if needed.
+ mach_cmd.activate_virtualenv()
+ kwargs["virtualenv"] = mach_cmd.virtualenv_manager
+ hooks.run("before_iterations", kwargs)
+ del kwargs["virtualenv"]
+
+ tests, tmp_dir = build_test_list(kwargs["tests"])
+
+ for test in tests:
+ script = ScriptInfo(test)
+
+ # update the arguments with options found in the script, if any
+ args = script.update_args(**client_args)
+ # XXX this should be the default pool for update_args
+ for key, value in kwargs.items():
+ if key not in args:
+ args[key] = value
+
+ # update the hooks, or use a copy of the general one
+ script_hooks = Hooks(mach_cmd, args.pop("hooks", hooks_file))
+
+ flavor = args["flavor"]
+ if flavor == "doc":
+ print(script)
+ continue
+
+ for iteration in range(args.get("test_iterations", 1)):
+ try:
+ env = MachEnvironment(mach_cmd, hooks=script_hooks, **args)
+ metadata = Metadata(mach_cmd, env, flavor, script)
+ script_hooks.run("before_runs", env)
+ try:
+ with env.frozen() as e:
+ e.run(metadata)
+ finally:
+ script_hooks.run("after_runs", env)
+ finally:
+ if tmp_dir is not None:
+ shutil.rmtree(tmp_dir)
+ finally:
+ hooks.cleanup()
+
+
+def run_tools(mach_cmd, kwargs):
+ """This tools runner can be used directly via main or via Mach.
+
+ **TODO**: Before adding any more tools, we need to split this logic out
+ into a separate file that runs the tools and sets them up dynamically
+ in a similar way to how we use layers.
+ """
+ from mozperftest.utils import ON_TRY, install_package
+
+ mach_cmd.activate_virtualenv()
+ install_package(
+ mach_cmd.virtualenv_manager,
+ "mozperftest-tools==0.3.2",
+ )
+
+ log_level = logging.INFO
+ if mach_cmd.log_manager.terminal_handler is not None:
+ mach_cmd.log_manager.terminal_handler.level = log_level
+ else:
+ mach_cmd.log_manager.add_terminal_logging(level=log_level)
+ mach_cmd.log_manager.enable_all_structured_loggers()
+ mach_cmd.log_manager.enable_unstructured()
+
+ if ON_TRY:
+ artifacts = Path(os.environ.get("MOZ_FETCHES_DIR"), "..").resolve()
+ artifacts = _create_artifacts_dir(kwargs, artifacts)
+ else:
+ artifacts = _create_artifacts_dir(kwargs, SRC_ROOT)
+
+ _save_params(kwargs, artifacts)
+
+ # Run the requested tool
+ from mozperftest.tools import TOOL_RUNNERS
+
+ tool = kwargs.pop("tool")
+ print(f"Running {tool} tool")
+
+ TOOL_RUNNERS[tool](artifacts, kwargs)
+
+
+def main(argv=sys.argv[1:]):
+ """Used when the runner is directly called from the shell"""
+ flavor = "desktop-browser"
+ if "--flavor" in argv:
+ flavor = argv[argv.index("--flavor") + 1]
+ _activate_virtualenvs(flavor)
+
+ from mach.logging import LoggingManager
+ from mach.util import get_state_dir
+ from mozbuild.base import MachCommandBase, MozbuildObject
+ from mozbuild.mozconfig import MozconfigLoader
+
+ from mozperftest import PerftestArgumentParser, PerftestToolsArgumentParser
+
+ mozconfig = SRC_ROOT / "browser" / "config" / "mozconfig"
+ if mozconfig.exists():
+ os.environ["MOZCONFIG"] = str(mozconfig)
+
+ if "--xpcshell-mozinfo" in argv:
+ mozinfo = argv[argv.index("--xpcshell-mozinfo") + 1]
+ topobjdir = Path(mozinfo).parent
+ else:
+ topobjdir = None
+
+ config = MozbuildObject(
+ str(SRC_ROOT),
+ None,
+ LoggingManager(),
+ topobjdir=topobjdir,
+ mozconfig=MozconfigLoader.AUTODETECT,
+ )
+ config.topdir = config.topsrcdir
+ config.cwd = os.getcwd()
+ config.state_dir = get_state_dir()
+
+ # This monkey patch forces mozbuild to reuse
+ # our configuration when it tries to re-create
+ # it from the environment.
+ def _here(*args, **kw):
+ return config
+
+ MozbuildObject.from_environment = _here
+
+ mach_cmd = MachCommandBase(config)
+
+ if "tools" in argv[0]:
+ if len(argv) == 1:
+ raise SystemExit("No tool specified, cannot continue parsing")
+ PerftestToolsArgumentParser.tool = argv[1]
+ perftools_parser = PerftestToolsArgumentParser()
+ args = dict(vars(perftools_parser.parse_args(args=argv[2:])))
+ args["tool"] = argv[1]
+ run_tools(mach_cmd, args)
+ else:
+ perftest_parser = PerftestArgumentParser(description="vanilla perftest")
+ args = dict(vars(perftest_parser.parse_args(args=argv)))
+ user_args = perftest_parser.get_user_args(args)
+ run_tests(mach_cmd, args, user_args)
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/python/mozperftest/mozperftest/schemas/intermediate-results-schema.json b/python/mozperftest/mozperftest/schemas/intermediate-results-schema.json
new file mode 100644
index 0000000000..70c7468b31
--- /dev/null
+++ b/python/mozperftest/mozperftest/schemas/intermediate-results-schema.json
@@ -0,0 +1,113 @@
+{
+ "definitions": {
+ "perfherder-options-schema": {
+ "title": "Perfherder-specific Options",
+ "description": "Set these to have more control over the perfherder blob that will be created",
+ "properties": {
+ "name": {
+ "title": "Name of the metric or suite",
+ "type": "string"
+ },
+ "value": {
+ "title": "Summary value",
+ "type": "number",
+ "minimum": -1000000000000.0,
+ "maximum": 1000000000000.0
+ },
+ "unit": {
+ "title": "Measurement unit",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 20
+ },
+ "lowerIsBetter": {
+ "description": "Whether lower values are better",
+ "title": "Lower is better",
+ "type": "boolean"
+ },
+ "shouldAlert": {
+ "description": "Whether we should alert",
+ "title": "Should alert",
+ "type": "boolean"
+ },
+ "alertThreshold": {
+ "description": "% change threshold before alerting",
+ "title": "Alert threshold",
+ "type": "number",
+ "minimum": 0.0,
+ "maximum": 1000.0
+ }
+ }
+ },
+ "single-metric-schema": {
+ "allOf": [
+ {"$ref": "#/definitions/perfherder-options-schema"},
+ {
+ "properties": {
+ "values": {
+ "description": "Contains all the measurements taken",
+ "title": "Measured values",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ }
+ }
+ ],
+ "required": [
+ "name",
+ "values"
+ ],
+ "type": "object"
+ },
+ "results-schema": {
+ "anyOf": [
+ {"type": "string"},
+ {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/single-metric-schema"
+ }
+ }
+ ],
+ "title": "Holds the data to be processed by the metrics modules",
+ "description": "The data can be defined within an object, or through a path to where the data can be found"
+ }
+ },
+ "id": "https://searchfox.org/mozilla-central/source/python/mozperftest/mozperftest/schemas/intermediate-results-schema.json",
+ "allOf": [
+ {"$ref": "#/definitions/perfherder-options-schema"},
+ {
+ "properties": {
+ "results": {"$ref": "#/definitions/results-schema"},
+ "transformer": {
+ "title": "Transformer to use on the data",
+ "type": "string"
+ },
+ "transformer-options": {
+ "type": "object",
+ "title": "Options used in the transformer"
+ },
+ "framework": {
+ "title": "Framework that produced the data",
+ "type": "object"
+ },
+ "extraOptions": {
+ "type": "array",
+ "title": "Extra options used in the running suite",
+ "items": {
+ "type": "string",
+ "maxLength": 100
+ },
+ "uniqueItems": true,
+ "maxItems": 8
+ }
+ }
+ }
+ ],
+ "required": ["results", "name"],
+ "description": "Intermediate results for a single type of metric or suite (i.e. browsertime, and adb results shouldn't be mixed in the same entry)",
+ "title": "MozPerftest Intermediate Results Schema",
+ "type": "object"
+}
diff --git a/python/mozperftest/mozperftest/schemas/transformer_schema.json b/python/mozperftest/mozperftest/schemas/transformer_schema.json
new file mode 100644
index 0000000000..ab156f5386
--- /dev/null
+++ b/python/mozperftest/mozperftest/schemas/transformer_schema.json
@@ -0,0 +1,55 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "definitions": {
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "file": {
+ "type": "string"
+ },
+ "value": {},
+ "xaxis": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "file",
+ "value",
+ "xaxis"
+ ]
+ }
+ },
+ "dict": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/data"
+ },
+ "name": {
+ "type": "string"
+ },
+ "subtest": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "data",
+ "name",
+ "subtest"
+ ]
+ }
+ },
+ "oneOf": [
+ {
+ "$ref": "#/definitions/dict"
+ },
+ {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/dict"
+ }
+ }
+ ]
+}
diff --git a/python/mozperftest/mozperftest/script.py b/python/mozperftest/mozperftest/script.py
new file mode 100644
index 0000000000..3620a526d1
--- /dev/null
+++ b/python/mozperftest/mozperftest/script.py
@@ -0,0 +1,334 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import io
+import re
+import textwrap
+import traceback
+from collections import defaultdict
+from enum import Enum
+from html.parser import HTMLParser
+from pathlib import Path
+
+import esprima
+
+# list of metadata, each item is the name and if the field is mandatory
+METADATA = [
+ ("setUp", False),
+ ("tearDown", False),
+ ("test", True),
+ ("owner", True),
+ ("author", False),
+ ("name", True),
+ ("description", True),
+ ("longDescription", False),
+ ("options", False),
+ ("supportedBrowsers", False),
+ ("supportedPlatforms", False),
+ ("filename", True),
+ ("tags", False),
+]
+
+
+_INFO = """\
+%(filename)s
+%(filename_underline)s
+
+:owner: %(owner)s
+:name: %(name)s
+"""
+
+
+XPCSHELL_FUNCS = "add_task", "run_test", "run_next_test"
+
+
+class BadOptionTypeError(Exception):
+ """Raised when an option defined in a test has an incorrect type."""
+
+ pass
+
+
+class MissingFieldError(Exception):
+ def __init__(self, script, field):
+ super().__init__(f"Missing metadata {field}")
+ self.script = script
+ self.field = field
+
+
+class MissingPerfMetadataError(Exception):
+ def __init__(self, script):
+ super().__init__("Missing `perfMetadata` variable")
+ self.script = script
+
+
+class ParseError(Exception):
+ def __init__(self, script, exception):
+ super().__init__(f"Cannot parse {script}")
+ self.script = script
+ self.exception = exception
+
+ def __str__(self):
+ output = io.StringIO()
+ traceback.print_exception(
+ type(self.exception),
+ self.exception,
+ self.exception.__traceback__,
+ file=output,
+ )
+ return f"{self.args[0]}\n{output.getvalue()}"
+
+
+class ScriptType(Enum):
+ xpcshell = 1
+ browsertime = 2
+ mochitest = 3
+
+
+class HTMLScriptParser(HTMLParser):
+ def handle_data(self, data):
+ if self.script_content is None:
+ self.script_content = []
+ if "perfMetadata" in data:
+ self.script_content.append(data)
+ if any(func_name in data for func_name in XPCSHELL_FUNCS):
+ self.script_content.append(data)
+
+
+class ScriptInfo(defaultdict):
+ """Loads and parses a Browsertime test script."""
+
+ def __init__(self, path):
+ super(ScriptInfo, self).__init__()
+ try:
+ self.script = Path(path).resolve()
+ if self.script.suffix == ".html":
+ self._parse_html_file()
+ else:
+ self._parse_js_file()
+ except Exception as e:
+ raise ParseError(path, e)
+
+ # If the fields found, don't match our known ones, then an error is raised
+ for field, required in METADATA:
+ if not required:
+ continue
+ if field not in self:
+ raise MissingFieldError(path, field)
+
+ def _set_script_content(self):
+ self["filename"] = str(self.script)
+ self.script_content = self.script.read_text()
+
+ def _parse_js_file(self):
+ self.script_type = ScriptType.browsertime
+ self._set_script_content()
+ self._parse_script_content()
+
+ def _parse_script_content(self):
+ self.parsed = esprima.parseScript(self.script_content)
+
+ # looking for the exports statement
+ found_perfmetadata = False
+ for stmt in self.parsed.body:
+ # detecting if the script has add_task()
+ if (
+ stmt.type == "ExpressionStatement"
+ and stmt.expression is not None
+ and stmt.expression.callee is not None
+ and stmt.expression.callee.type == "Identifier"
+ and stmt.expression.callee.name in XPCSHELL_FUNCS
+ ):
+ self["test"] = "xpcshell"
+ self.script_type = ScriptType.xpcshell
+ continue
+
+ # plain xpcshell tests functions markers
+ if stmt.type == "FunctionDeclaration" and stmt.id.name in XPCSHELL_FUNCS:
+ self["test"] = "xpcshell"
+ self.script_type = ScriptType.xpcshell
+ continue
+
+ # is this the perfMetdatata plain var ?
+ if stmt.type == "VariableDeclaration":
+ for decl in stmt.declarations:
+ if (
+ decl.type != "VariableDeclarator"
+ or decl.id.type != "Identifier"
+ or decl.id.name != "perfMetadata"
+ or decl.init is None
+ ):
+ continue
+ found_perfmetadata = True
+ self.scan_properties(decl.init.properties)
+ continue
+
+ # or the module.exports map ?
+ if (
+ stmt.type != "ExpressionStatement"
+ or stmt.expression.left is None
+ or stmt.expression.left.property is None
+ or stmt.expression.left.property.name != "exports"
+ or stmt.expression.right is None
+ or stmt.expression.right.properties is None
+ ):
+ continue
+
+ # now scanning the properties
+ found_perfmetadata = True
+ self.scan_properties(stmt.expression.right.properties)
+
+ if not found_perfmetadata:
+ raise MissingPerfMetadataError(self.script)
+
+ def _parse_html_file(self):
+ self._set_script_content()
+
+ html_parser = HTMLScriptParser()
+ html_parser.script_content = None
+ html_parser.feed(self.script_content)
+
+ if not html_parser.script_content:
+ raise MissingPerfMetadataError(self.script)
+
+ # Pass through all the scripts and gather up the data such as
+ # the test itself, and the perfMetadata. These can be in separate
+ # scripts, but later scripts override earlier ones if there
+ # are redefinitions.
+ found_perfmetadata = False
+ for script_content in html_parser.script_content:
+ self.script_content = script_content
+ try:
+ self._parse_script_content()
+ found_perfmetadata = True
+ except MissingPerfMetadataError:
+ pass
+ if not found_perfmetadata:
+ raise MissingPerfMetadataError()
+
+ # Mochitest gets detected as xpcshell during parsing
+ # since they use similar methods to run tests
+ self.script_type = ScriptType.mochitest
+
+ def parse_value(self, value):
+ if value.type == "Identifier":
+ return value.name
+
+ if value.type == "Literal":
+ return value.value
+
+ if value.type == "TemplateLiteral":
+ # ugly
+ value = value.quasis[0].value.cooked.replace("\n", " ")
+ return re.sub(r"\s+", " ", value).strip()
+
+ if value.type == "ArrayExpression":
+ return [self.parse_value(e) for e in value.elements]
+
+ if value.type == "ObjectExpression":
+ elements = {}
+ for prop in value.properties:
+ sub_name, sub_value = self.parse_property(prop)
+ elements[sub_name] = sub_value
+ return elements
+
+ raise ValueError(value.type)
+
+ def parse_property(self, property):
+ return property.key.name, self.parse_value(property.value)
+
+ def scan_properties(self, properties):
+ for prop in properties:
+ name, value = self.parse_property(prop)
+ self[name] = value
+
+ def __str__(self):
+ """Used to generate docs."""
+
+ def _render(value, level=0):
+ if not isinstance(value, (list, tuple, dict)):
+ if not isinstance(value, str):
+ value = str(value)
+ # line wrapping
+ return "\n".join(textwrap.wrap(value, break_on_hyphens=False))
+
+ # options
+ if isinstance(value, dict):
+ if level > 0:
+ return ",".join([f"{k}:{v}" for k, v in value.items()])
+
+ res = []
+ for key, val in value.items():
+ if isinstance(val, bool):
+ res.append(f" --{key.replace('_', '-')}")
+ else:
+ val = _render(val, level + 1) # noqa
+ res.append(f" --{key.replace('_', '-')} {val}")
+
+ return "\n".join(res)
+
+ # simple flat list
+ return ", ".join([_render(v, level + 1) for v in value])
+
+ options = ""
+ d = defaultdict(lambda: "N/A")
+ for field, value in self.items():
+ if field == "longDescription":
+ continue
+ if field == "filename":
+ d[field] = self.script.name
+ continue
+ if field == "options":
+ for plat in "default", "linux", "mac", "win":
+ if plat not in value:
+ continue
+ options += f":{plat.capitalize()} options:\n\n::\n\n{_render(value[plat])}\n"
+ else:
+ d[field] = _render(value)
+
+ d["filename_underline"] = "=" * len(d["filename"])
+ info = _INFO % d
+ if "tags" in self:
+ info += f":tags: {','.join(self['tags'])}\n"
+ info += options
+ info += f"\n**{self['description']}**\n"
+ if "longDescription" in self:
+ info += f"\n{self['longDescription']}\n"
+
+ return info
+
+ def __missing__(self, key):
+ return "N/A"
+
+ @classmethod
+ def detect_type(cls, path):
+ return cls(path).script_type
+
+ def update_args(self, **args):
+ """Updates arguments with options from the script."""
+ from mozperftest.utils import simple_platform
+
+ # Order of precedence:
+ # cli options > platform options > default options
+ options = self.get("options", {})
+ result = options.get("default", {})
+ result.update(options.get(simple_platform(), {}))
+ result.update(args)
+
+ # XXX this is going away, see https://bugzilla.mozilla.org/show_bug.cgi?id=1675102
+ for opt, val in result.items():
+ if opt.startswith("visualmetrics") or "metrics" not in opt:
+ continue
+ if not isinstance(val, list):
+ raise BadOptionTypeError("Metrics should be defined within a list")
+ for metric in val:
+ if not isinstance(metric, dict):
+ raise BadOptionTypeError(
+ "Each individual metrics must be defined within a JSON-like object"
+ )
+
+ if self.script_type == ScriptType.xpcshell:
+ result["flavor"] = "xpcshell"
+ if self.script_type == ScriptType.mochitest:
+ result["flavor"] = "mochitest"
+
+ return result
diff --git a/python/mozperftest/mozperftest/system/__init__.py b/python/mozperftest/mozperftest/system/__init__.py
new file mode 100644
index 0000000000..a5ad3df113
--- /dev/null
+++ b/python/mozperftest/mozperftest/system/__init__.py
@@ -0,0 +1,35 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+from mozperftest.layers import Layers
+from mozperftest.system.android import AndroidDevice
+from mozperftest.system.android_startup import AndroidStartUp
+from mozperftest.system.macos import MacosDevice
+from mozperftest.system.pingserver import PingServer
+from mozperftest.system.profile import Profile
+from mozperftest.system.proxy import ProxyRunner
+
+
+def get_layers():
+ return PingServer, Profile, ProxyRunner, AndroidDevice, MacosDevice, AndroidStartUp
+
+
+def pick_system(env, flavor, mach_cmd):
+ if flavor in ("desktop-browser", "xpcshell", "mochitest"):
+ return Layers(
+ env,
+ mach_cmd,
+ (
+ PingServer, # needs to come before Profile
+ MacosDevice,
+ Profile,
+ ProxyRunner,
+ ),
+ )
+ if flavor == "mobile-browser":
+ return Layers(
+ env, mach_cmd, (Profile, ProxyRunner, AndroidDevice, AndroidStartUp)
+ )
+ if flavor == "webpagetest":
+ return Layers(env, mach_cmd, (Profile,))
+ raise NotImplementedError(flavor)
diff --git a/python/mozperftest/mozperftest/system/android.py b/python/mozperftest/mozperftest/system/android.py
new file mode 100644
index 0000000000..650b0fb29d
--- /dev/null
+++ b/python/mozperftest/mozperftest/system/android.py
@@ -0,0 +1,238 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import sys
+import tempfile
+from pathlib import Path
+
+import mozlog
+from mozdevice import ADBDevice, ADBError
+
+from mozperftest.layers import Layer
+from mozperftest.system.android_perf_tuner import tune_performance
+from mozperftest.utils import download_file
+
+HERE = Path(__file__).parent
+
+_ROOT_URL = "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/"
+_FENIX_NIGHTLY_BUILDS = (
+ "mobile.v3.firefox-android.apks.fenix-nightly.latest.{architecture}"
+ "/artifacts/public/build/fenix/{architecture}/target.apk"
+)
+_GV_BUILDS = "gecko.v2.mozilla-central.shippable.latest.mobile.android-"
+_REFBROW_BUILDS = (
+ "mobile.v2.reference-browser.nightly.latest.{architecture}"
+ "/artifacts/public/target.{architecture}.apk"
+)
+
+_PERMALINKS = {
+ "fenix_nightly_armeabi_v7a": _ROOT_URL
+ + _FENIX_NIGHTLY_BUILDS.format(architecture="armeabi-v7a"),
+ "fenix_nightly_arm64_v8a": _ROOT_URL
+ + _FENIX_NIGHTLY_BUILDS.format(architecture="arm64-v8a"),
+ # The two following aliases are used for Fenix multi-commit testing in CI
+ "fenix_nightlysim_multicommit_arm64_v8a": None,
+ "fenix_nightlysim_multicommit_armeabi_v7a": None,
+ "gve_nightly_aarch64": _ROOT_URL
+ + _GV_BUILDS
+ + "aarch64-opt/artifacts/public/build/geckoview_example.apk",
+ "gve_nightly_api16": _ROOT_URL
+ + _GV_BUILDS
+ + "arm-opt/artifacts/public/build/geckoview_example.apk",
+ "refbrow_nightly_aarch64": _ROOT_URL
+ + _REFBROW_BUILDS.format(architecture="arm64-v8a"),
+ "refbrow_nightly_api16": _ROOT_URL
+ + _REFBROW_BUILDS.format(architecture="armeabi-v7a"),
+}
+
+
+class DeviceError(Exception):
+ pass
+
+
+class ADBLoggedDevice(ADBDevice):
+ def __init__(self, *args, **kw):
+ self._provided_logger = kw.pop("logger")
+ super(ADBLoggedDevice, self).__init__(*args, **kw)
+
+ def _get_logger(self, logger_name, verbose):
+ return self._provided_logger
+
+
+class AndroidDevice(Layer):
+ """Use an android device via ADB"""
+
+ name = "android"
+ activated = False
+
+ arguments = {
+ "app-name": {
+ "type": str,
+ "default": "org.mozilla.firefox",
+ "help": "Android app name",
+ },
+ "timeout": {
+ "type": int,
+ "default": 60,
+ "help": "Timeout in seconds for adb operations",
+ },
+ "clear-logcat": {
+ "action": "store_true",
+ "default": False,
+ "help": "Clear the logcat when starting",
+ },
+ "capture-adb": {
+ "type": str,
+ "default": "stdout",
+ "help": (
+ "Captures adb calls to the provided path. "
+ "To capture to stdout, use 'stdout'."
+ ),
+ },
+ "capture-logcat": {
+ "type": str,
+ "default": None,
+ "help": "Captures the logcat to the provided path.",
+ },
+ "perf-tuning": {
+ "action": "store_true",
+ "default": False,
+ "help": (
+ "If set, device will be tuned for performance. "
+ "This helps with decreasing the noise."
+ ),
+ },
+ "intent": {"type": str, "default": None, "help": "Intent to use"},
+ "activity": {"type": str, "default": None, "help": "Activity to use"},
+ "install-apk": {
+ "nargs": "*",
+ "default": [],
+ "help": (
+ "APK to install to the device "
+ "Can be a file, an url or an alias url from "
+ " %s" % ", ".join(_PERMALINKS.keys())
+ ),
+ },
+ }
+
+ def __init__(self, env, mach_cmd):
+ super(AndroidDevice, self).__init__(env, mach_cmd)
+ self.android_activity = self.app_name = self.device = None
+ self.capture_logcat = self.capture_file = None
+ self._custom_apk_path = None
+
+ @property
+ def custom_apk_path(self):
+ if self._custom_apk_path is None:
+ custom_apk_path = Path(HERE, "..", "user_upload.apk")
+ if custom_apk_path.exists():
+ self._custom_apk_path = custom_apk_path
+ return self._custom_apk_path
+
+ def custom_apk_exists(self):
+ return self.custom_apk_path is not None
+
+ def setup(self):
+ if self.custom_apk_exists():
+ self.info(
+ f"Replacing --android-install-apk with custom APK found at "
+ f"{self.custom_apk_path}"
+ )
+ self.set_arg("android-install-apk", [self.custom_apk_path])
+
+ def teardown(self):
+ if self.capture_file is not None:
+ self.capture_file.close()
+ if self.capture_logcat is not None and self.device is not None:
+ self.info("Dumping logcat into %r" % str(self.capture_logcat))
+ with self.capture_logcat.open("wb") as f:
+ for line in self.device.get_logcat():
+ f.write(line.encode("utf8", errors="replace") + b"\n")
+
+ def _set_output_path(self, path):
+ if path in (None, "stdout"):
+ return path
+ # check if the path is absolute or relative to output
+ path = Path(path)
+ if not path.is_absolute():
+ return Path(self.get_arg("output"), path)
+ return path
+
+ def run(self, metadata):
+ self.app_name = self.get_arg("android-app-name")
+ self.android_activity = self.get_arg("android-activity")
+ self.clear_logcat = self.get_arg("clear-logcat")
+ self.metadata = metadata
+ self.verbose = self.get_arg("verbose")
+ self.capture_adb = self._set_output_path(self.get_arg("capture-adb"))
+ self.capture_logcat = self._set_output_path(self.get_arg("capture-logcat"))
+
+ # capture the logs produced by ADBDevice
+ logger_name = "mozperftest-adb"
+ logger = mozlog.structuredlog.StructuredLogger(logger_name)
+ if self.capture_adb == "stdout":
+ stream = sys.stdout
+ disable_colors = False
+ else:
+ stream = self.capture_file = self.capture_adb.open("w")
+ disable_colors = True
+
+ handler = mozlog.handlers.StreamHandler(
+ stream=stream,
+ formatter=mozlog.formatters.MachFormatter(
+ verbose=self.verbose, disable_colors=disable_colors
+ ),
+ )
+ logger.add_handler(handler)
+ try:
+ self.device = ADBLoggedDevice(
+ verbose=self.verbose, timeout=self.get_arg("timeout"), logger=logger
+ )
+ except (ADBError, AttributeError) as e:
+ self.error("Could not connect to the phone. Is it connected?")
+ raise DeviceError(str(e))
+
+ if self.clear_logcat:
+ self.device.clear_logcat()
+
+ # Install APKs
+ for apk in self.get_arg("android-install-apk"):
+ self.info("Uninstalling old version")
+ self.device.uninstall_app(self.get_arg("android-app-name"))
+ self.info("Installing %s" % apk)
+ if str(apk) in _PERMALINKS:
+ apk = _PERMALINKS[apk]
+ if str(apk).startswith("http"):
+ with tempfile.TemporaryDirectory() as tmpdirname:
+ target = Path(tmpdirname, "target.apk")
+ self.info("Downloading %s" % apk)
+ download_file(apk, target)
+ self.info("Installing downloaded APK")
+ self.device.install_app(str(target))
+ else:
+ self.device.install_app(apk, replace=True)
+ self.info("Done.")
+
+ # checking that the app is installed
+ if not self.device.is_app_installed(self.app_name):
+ raise Exception("%s is not installed" % self.app_name)
+
+ if self.get_arg("android-perf-tuning", False):
+ tune_performance(self.device)
+
+ # set up default activity with the app name if none given
+ if self.android_activity is None:
+ # guess the activity, given the app
+ if "fenix" in self.app_name:
+ self.android_activity = "org.mozilla.fenix.IntentReceiverActivity"
+ elif "geckoview_example" in self.app_name:
+ self.android_activity = (
+ "org.mozilla.geckoview_example.GeckoViewActivity"
+ )
+ self.set_arg("android_activity", self.android_activity)
+
+ self.info("Android environment:")
+ self.info("- Application name: %s" % self.app_name)
+ self.info("- Activity: %s" % self.android_activity)
+ self.info("- Intent: %s" % self.get_arg("android_intent"))
+ return metadata
diff --git a/python/mozperftest/mozperftest/system/android_perf_tuner.py b/python/mozperftest/mozperftest/system/android_perf_tuner.py
new file mode 100644
index 0000000000..e33d98b5d0
--- /dev/null
+++ b/python/mozperftest/mozperftest/system/android_perf_tuner.py
@@ -0,0 +1,144 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+
+
+def tune_performance(device, log=None, timeout=None):
+ """Set various performance-oriented parameters, to reduce jitter.
+
+ This includes some device-specific kernel tweaks.
+
+ For more information, see https://bugzilla.mozilla.org/show_bug.cgi?id=1547135.
+ """
+ PerformanceTuner(device, log=log, timeout=timeout).tune_performance()
+
+
+class PerformanceTuner:
+ def __init__(self, device, log=None, timeout=None):
+ self.device = device
+ self.log = log is not None and log or self.device._logger
+ self.timeout = timeout
+
+ def tune_performance(self):
+ self.log.info("tuning android device performance")
+ self.set_svc_power_stayon()
+ if self.device.is_rooted:
+ device_name = self.device.shell_output(
+ "getprop ro.product.model", timeout=self.timeout
+ )
+ # all commands require root shell from here on
+ self.set_scheduler()
+ self.set_virtual_memory_parameters()
+ self.turn_off_services()
+ self.set_cpu_performance_parameters(device_name)
+ self.set_gpu_performance_parameters(device_name)
+ self.set_kernel_performance_parameters()
+ self.device.clear_logcat(timeout=self.timeout)
+ self.log.info("android device performance tuning complete")
+
+ def _set_value_and_check_exitcode(self, file_name, value):
+ self.log.info("setting {} to {}".format(file_name, value))
+ if self.device.shell_bool(
+ " ".join(["echo", str(value), ">", str(file_name)]),
+ timeout=self.timeout,
+ ):
+ self.log.info("successfully set {} to {}".format(file_name, value))
+ else:
+ self.log.warning("command failed")
+
+ def set_svc_power_stayon(self):
+ self.log.info("set device to stay awake on usb")
+ self.device.shell_bool("svc power stayon usb", timeout=self.timeout)
+
+ def set_scheduler(self):
+ self.log.info("setting scheduler to noop")
+ scheduler_location = "/sys/block/sda/queue/scheduler"
+
+ self._set_value_and_check_exitcode(scheduler_location, "noop")
+
+ def turn_off_services(self):
+ services = [
+ "mpdecision",
+ "thermal-engine",
+ "thermald",
+ ]
+ for service in services:
+ self.log.info(" ".join(["turning off service:", service]))
+ self.device.shell_bool(" ".join(["stop", service]), timeout=self.timeout)
+
+ services_list_output = self.device.shell_output(
+ "service list", timeout=self.timeout
+ )
+ for service in services:
+ if service not in services_list_output:
+ self.log.info(" ".join(["successfully terminated:", service]))
+ else:
+ self.log.warning(" ".join(["failed to terminate:", service]))
+
+ def set_virtual_memory_parameters(self):
+ self.log.info("setting virtual memory parameters")
+ commands = {
+ "/proc/sys/vm/swappiness": 0,
+ "/proc/sys/vm/dirty_ratio": 85,
+ "/proc/sys/vm/dirty_background_ratio": 70,
+ }
+
+ for key, value in commands.items():
+ self._set_value_and_check_exitcode(key, value)
+
+ def set_cpu_performance_parameters(self, device_name=None):
+ self.log.info("setting cpu performance parameters")
+ commands = {}
+
+ # Samsung A51 perf tuning: Bug 1876543
+ # Pixel 6 perf tuning: Bug 1876545
+ # Samsung S21 perf tuning: Bug 1876546
+ if device_name is not None:
+ device_name = self.device.shell_output(
+ "getprop ro.product.model", timeout=self.timeout
+ )
+
+ self.log.info(
+ "CPU for device with ro.product.model '{}' unknown, not scaling_governor".format(
+ device_name
+ )
+ )
+
+ for key, value in commands.items():
+ self._set_value_and_check_exitcode(key, value)
+
+ def set_gpu_performance_parameters(self, device_name=None):
+ self.log.info("setting gpu performance parameters")
+ commands = {
+ "/sys/class/kgsl/kgsl-3d0/bus_split": "0",
+ "/sys/class/kgsl/kgsl-3d0/force_bus_on": "1",
+ "/sys/class/kgsl/kgsl-3d0/force_rail_on": "1",
+ "/sys/class/kgsl/kgsl-3d0/force_clk_on": "1",
+ "/sys/class/kgsl/kgsl-3d0/force_no_nap": "1",
+ "/sys/class/kgsl/kgsl-3d0/idle_timer": "1000000",
+ }
+
+ if not device_name:
+ device_name = self.device.shell_output(
+ "getprop ro.product.model", timeout=self.timeout
+ )
+
+ self.log.info(
+ "GPU for device with ro.product.model '{}' unknown, not setting devfreq".format(
+ device_name
+ )
+ )
+
+ for key, value in commands.items():
+ self._set_value_and_check_exitcode(key, value)
+
+ def set_kernel_performance_parameters(self):
+ self.log.info("setting kernel performance parameters")
+ commands = {
+ "/sys/kernel/debug/msm-bus-dbg/shell-client/update_request": "1",
+ "/sys/kernel/debug/msm-bus-dbg/shell-client/mas": "1",
+ "/sys/kernel/debug/msm-bus-dbg/shell-client/ab": "0",
+ "/sys/kernel/debug/msm-bus-dbg/shell-client/slv": "512",
+ }
+ for key, value in commands.items():
+ self._set_value_and_check_exitcode(key, value)
diff --git a/python/mozperftest/mozperftest/system/android_startup.py b/python/mozperftest/mozperftest/system/android_startup.py
new file mode 100644
index 0000000000..abf5b04d55
--- /dev/null
+++ b/python/mozperftest/mozperftest/system/android_startup.py
@@ -0,0 +1,414 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import re
+import statistics
+import time
+from datetime import datetime, timedelta
+
+import mozdevice
+
+from .android import AndroidDevice
+
+DATETIME_FORMAT = "%Y.%m.%d"
+PAGE_START = re.compile("GeckoSession: handleMessage GeckoView:PageStart uri=")
+
+PROD_FENIX = "fenix"
+PROD_FOCUS = "focus"
+PROC_GVEX = "geckoview_example"
+
+KEY_NAME = "name"
+KEY_PRODUCT = "product"
+KEY_DATETIME = "date"
+KEY_COMMIT = "commit"
+KEY_ARCHITECTURE = "architecture"
+KEY_TEST_NAME = "test_name"
+
+MEASUREMENT_DATA = ["mean", "median", "standard_deviation"]
+OLD_VERSION_FOCUS_PAGE_START_LINE_COUNT = 3
+NEW_VERSION_FOCUS_PAGE_START_LINE_COUNT = 2
+STDOUT_LINE_COUNT = 2
+
+TEST_COLD_MAIN_FF = "cold_main_first_frame"
+TEST_COLD_MAIN_RESTORE = "cold_main_session_restore"
+TEST_COLD_VIEW_FF = "cold_view_first_frame"
+TEST_COLD_VIEW_NAV_START = "cold_view_nav_start"
+TEST_URI = "https://example.com"
+
+BASE_URL_DICT = {
+ PROD_FENIX: (
+ "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/"
+ "mobile.v3.firefox-android.apks.fenix-nightly.{date}.latest.{architecture}/artifacts/"
+ "public%2Fbuild%2Ftarget.{architecture}.apk"
+ ),
+ PROD_FENIX
+ + "-latest": (
+ "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/"
+ "mobile.v3.firefox-android.apks.fenix-nightly.latest.{architecture}/artifacts/"
+ "public%2Fbuild%2Ftarget.{architecture}.apk"
+ ),
+ PROD_FOCUS: (
+ "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/"
+ "mobile.v3.firefox-android.apks.focus-nightly.{date}.latest.{architecture}"
+ "/artifacts/public%2Fbuild%2Ftarget.{architecture}.apk"
+ ),
+ PROD_FOCUS
+ + "-latest": (
+ "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/"
+ "mobile.v3.firefox-android.apks.focus-nightly.latest.{architecture}"
+ "/artifacts/public%2Fbuild%2Ftarget.{architecture}.apk"
+ ),
+ PROC_GVEX: (
+ "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/"
+ "gecko.v2.mozilla-central.pushdate.{date}.latest.mobile.android-"
+ "{architecture}-debug/artifacts/public%2Fbuild%2Fgeckoview_example.apk"
+ ),
+ PROC_GVEX
+ + "-latest": (
+ "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/"
+ "gecko.v2.mozilla-central.shippable.latest.mobile.android-"
+ "{architecture}-opt/artifacts/public/build/geckoview_example.apk"
+ ),
+}
+PROD_TO_CHANNEL_TO_PKGID = {
+ PROD_FENIX: {
+ "nightly": "org.mozilla.fenix",
+ "beta": "org.mozilla.firefox.beta",
+ "release": "org.mozilla.firefox",
+ "debug": "org.mozilla.fenix.debug",
+ },
+ PROD_FOCUS: {
+ "nightly": "org.mozilla.focus.nightly",
+ "beta": "org.mozilla.focus.beta", # only present since post-fenix update.
+ "release": "org.mozilla.focus",
+ "debug": "org.mozilla.focus.debug",
+ },
+ PROC_GVEX: {
+ "nightly": "org.mozilla.geckoview_example",
+ },
+}
+TEST_LIST = [
+ "cold_main_first_frame",
+ "cold_view_nav_start",
+ "cold_view_first_frame",
+ "cold_main_session_restore",
+]
+# "cold_view_first_frame", "cold_main_session_restore" are 2 disabled tests(broken)
+
+
+class AndroidStartUpDownloadError(Exception):
+ """Failure downloading Firefox Nightly APK"""
+
+ pass
+
+
+class AndroidStartUpInstallError(Exception):
+ """Failure installing Firefox on the android device"""
+
+ pass
+
+
+class AndroidStartUpUnknownTestError(Exception):
+ """
+ Test name provided is not one avaiable to test, this is either because
+ the test is currently not being tested or a typo in the spelling
+ """
+
+ pass
+
+
+class AndroidStartUpMatchingError(Exception):
+ """
+ We expected a certain number of matches but did not get them
+ """
+
+ pass
+
+
+class AndroidStartUpData:
+ def open_data(self, data):
+ return {
+ "name": "AndroidStartUp",
+ "subtest": data["name"],
+ "data": [
+ {"file": "android_startup", "value": value, "xaxis": xaxis}
+ for xaxis, value in enumerate(data["values"])
+ ],
+ "shouldAlert": True,
+ }
+
+ def transform(self, data):
+ return data
+
+ merge = transform
+
+
+class AndroidStartUp(AndroidDevice):
+ name = "AndroidStartUp"
+ activated = False
+ arguments = {
+ "test-name": {
+ "type": str,
+ "default": "",
+ "help": "This is the startup android test that will be run on the a51",
+ },
+ "apk_metadata": {
+ "type": str,
+ "default": "",
+ "help": "This is the startup android test that will be run on the a51",
+ },
+ "product": {
+ "type": str,
+ "default": "",
+ "help": "This is the startup android test that will be run on the a51",
+ },
+ "release-channel": {
+ "type": str,
+ "default": "",
+ "help": "This is the startup android test that will be run on the a51",
+ },
+ }
+
+ def __init__(self, env, mach_cmd):
+ super(AndroidStartUp, self).__init__(env, mach_cmd)
+ self.android_activity = None
+ self.capture_logcat = self.capture_file = self.app_name = None
+ self.device = mozdevice.ADBDevice(use_root=False)
+
+ def run(self, metadata):
+ options = metadata.script["options"]
+ self.test_name = self.get_arg("test-name")
+ self.apk_metadata = self.get_arg("apk-metadata")
+ self.product = self.get_arg("product")
+ self.release_channel = self.get_arg("release_channel")
+ self.single_date = options["test_parameters"]["single_date"]
+ self.date_range = options["test_parameters"]["date_range"]
+ self.startup_cache = options["test_parameters"]["startup_cache"]
+ self.test_cycles = options["test_parameters"]["test_cycles"]
+ self.package_id = PROD_TO_CHANNEL_TO_PKGID[self.product][self.release_channel]
+ self.proc_start = re.compile(
+ rf"ActivityManager: Start proc \d+:{self.package_id}/"
+ )
+
+ apk_metadata = self.apk_metadata
+ self.get_measurements(apk_metadata, metadata)
+
+ # Cleanup
+ self.device.shell(f"rm {apk_metadata[KEY_NAME]}")
+
+ return metadata
+
+ def get_measurements(self, apk_metadata, metadata):
+ measurements = self.run_performance_analysis(apk_metadata)
+ self.add_to_metadata(measurements, metadata)
+
+ def get_date_array_for_range(self, start, end):
+ startdate = datetime.strptime(start, DATETIME_FORMAT)
+ enddate = datetime.strptime(end, DATETIME_FORMAT)
+ delta_dates = (enddate - startdate).days + 1
+ return [
+ (startdate + timedelta(days=i)).strftime("%Y.%m.%d")
+ for i in range(delta_dates)
+ ]
+
+ def add_to_metadata(self, measurements, metadata):
+ if measurements is not None:
+ for key, value in measurements.items():
+ metadata.add_result(
+ {
+ "name": f"AndroidStartup:{self.product}",
+ "framework": {"name": "mozperftest"},
+ "transformer": "mozperftest.system.android_startup:AndroidStartUpData",
+ "shouldAlert": True,
+ "results": [
+ {
+ "values": [value],
+ "name": key,
+ "shouldAlert": True,
+ }
+ ],
+ }
+ )
+
+ def run_performance_analysis(self, apk_metadata):
+ # Installing the application on the device and getting ready to run the tests
+ install_path = apk_metadata[KEY_NAME]
+ if self.custom_apk_exists():
+ install_path = self.custom_apk_path
+
+ self.device.uninstall_app(self.package_id)
+ self.info(f"Installing {install_path}...")
+ app_name = self.device.install_app(install_path)
+ if self.device.is_app_installed(app_name):
+ self.info(f"Successfully installed {app_name}")
+ else:
+ raise AndroidStartUpInstallError("The android app was not installed")
+ self.apk_name = apk_metadata[KEY_NAME].split(".")[0]
+
+ return self.run_tests()
+
+ def run_tests(self):
+ measurements = {}
+ # Iterate through the tests in the test list
+ self.info(f"Running {self.test_name} on {self.apk_name}...")
+ self.skip_onboarding(self.test_name)
+ time.sleep(self.get_warmup_delay_seconds())
+ test_measurements = []
+
+ for i in range(self.test_cycles):
+ start_cmd_args = self.get_start_cmd(self.test_name)
+ self.info(start_cmd_args)
+ self.device.stop_application(self.package_id)
+ time.sleep(1)
+ self.info(f"iteration {i + 1}")
+ self.device.shell("logcat -c")
+ process = self.device.shell_output(start_cmd_args).splitlines()
+ test_measurements.append(self.get_measurement(self.test_name, process))
+
+ self.info(f"{self.test_name}: {str(test_measurements)}")
+ measurements[f"{self.test_name}.{MEASUREMENT_DATA[0]}"] = statistics.mean(
+ test_measurements
+ )
+ self.info(f"Mean: {statistics.mean(test_measurements)}")
+ measurements[f"{self.test_name}.{MEASUREMENT_DATA[1]}"] = statistics.median(
+ test_measurements
+ )
+ self.info(f"Median: {statistics.median(test_measurements)}")
+ if self.test_cycles > 1:
+ measurements[f"{self.test_name}.{MEASUREMENT_DATA[2]}"] = statistics.stdev(
+ test_measurements
+ )
+ self.info(f"Standard Deviation: {statistics.stdev(test_measurements)}")
+
+ return measurements
+
+ def get_measurement(self, test_name, stdout):
+ if test_name in [TEST_COLD_MAIN_FF, TEST_COLD_VIEW_FF]:
+ return self.get_measurement_from_am_start_log(stdout)
+ elif test_name in [TEST_COLD_VIEW_NAV_START, TEST_COLD_MAIN_RESTORE]:
+ # We must sleep until the Navigation::Start event occurs. If we don't
+ # the script will fail. This can take up to 14s on the G5
+ time.sleep(17)
+ proc = self.device.shell_output("logcat -d")
+ return self.get_measurement_from_nav_start_logcat(proc)
+
+ def get_measurement_from_am_start_log(self, stdout):
+ total_time_prefix = "TotalTime: "
+ matching_lines = [line for line in stdout if line.startswith(total_time_prefix)]
+ if len(matching_lines) != 1:
+ raise AndroidStartUpMatchingError(
+ f"Each run should only have 1 {total_time_prefix}."
+ f"However, this run unexpectedly had {matching_lines} matching lines"
+ )
+ duration = int(matching_lines[0][len(total_time_prefix) :])
+ return duration
+
+ def get_measurement_from_nav_start_logcat(self, process_output):
+ def __line_to_datetime(line):
+ date_str = " ".join(line.split(" ")[:2]) # e.g. "05-18 14:32:47.366"
+ # strptime needs microseconds. logcat outputs millis so we append zeroes
+ date_str_with_micros = date_str + "000"
+ return datetime.strptime(date_str_with_micros, "%m-%d %H:%M:%S.%f")
+
+ def __get_proc_start_datetime():
+ # This regex may not work on older versions of Android: we don't care
+ # yet because supporting older versions isn't in our requirements.
+ proc_start_lines = [line for line in lines if self.proc_start.search(line)]
+ if len(proc_start_lines) != 1:
+ raise AndroidStartUpMatchingError(
+ f"Expected to match 1 process start string but matched {len(proc_start_lines)}"
+ )
+ return __line_to_datetime(proc_start_lines[0])
+
+ def __get_page_start_datetime():
+ page_start_lines = [line for line in lines if PAGE_START.search(line)]
+ page_start_line_count = len(page_start_lines)
+ page_start_assert_msg = "found len=" + str(page_start_line_count)
+
+ # In focus versions <= v8.8.2, it logs 3 PageStart lines and these include actual uris.
+ # We need to handle our assertion differently due to the different line count. In focus
+ # versions >= v8.8.3, this measurement is broken because the logcat were removed.
+ is_old_version_of_focus = (
+ "about:blank" in page_start_lines[0] and self.product == PROD_FOCUS
+ )
+ if is_old_version_of_focus:
+ assert (
+ page_start_line_count
+ == OLD_VERSION_FOCUS_PAGE_START_LINE_COUNT # should be 3
+ ), page_start_assert_msg # Lines: about:blank, target URL, target URL.
+ else:
+ assert (
+ page_start_line_count
+ == NEW_VERSION_FOCUS_PAGE_START_LINE_COUNT # Should be 2
+ ), page_start_assert_msg # Lines: about:blank, target URL.
+ return __line_to_datetime(
+ page_start_lines[1]
+ ) # 2nd PageStart is for target URL.
+
+ lines = process_output.split("\n")
+ elapsed_seconds = (
+ __get_page_start_datetime() - __get_proc_start_datetime()
+ ).total_seconds()
+ elapsed_millis = round(elapsed_seconds * 1000)
+ return elapsed_millis
+
+ def get_warmup_delay_seconds(self):
+ """
+ We've been told the start up cache is populated ~60s after first start up. As such,
+ we should measure start up with the start up cache populated. If the
+ args say we shouldn't wait, we only wait a short duration ~= visual completeness.
+ """
+ return 60 if self.startup_cache else 5
+
+ def get_start_cmd(self, test_name):
+ intent_action_prefix = "android.intent.action.{}"
+ if test_name in [TEST_COLD_MAIN_FF, TEST_COLD_MAIN_RESTORE]:
+ intent = (
+ f"-a {intent_action_prefix.format('MAIN')} "
+ f"-c android.intent.category.LAUNCHER"
+ )
+ elif test_name in [TEST_COLD_VIEW_FF, TEST_COLD_VIEW_NAV_START]:
+ intent = f"-a {intent_action_prefix.format('VIEW')} -d {TEST_URI}"
+ else:
+ raise AndroidStartUpUnknownTestError(
+ "Unknown test provided please double check the test name and spelling"
+ )
+
+ # You can't launch an app without an pkg_id/activity pair
+ component_name = self.get_component_name_for_intent(intent)
+ cmd = f"am start-activity -W -n {component_name} {intent} "
+
+ # If focus skip onboarding: it is not stateful so must be sent for every cold start intent
+ if self.product == PROD_FOCUS:
+ cmd += "--ez performancetest true"
+
+ return cmd
+
+ def get_component_name_for_intent(self, intent):
+ resolve_component_args = (
+ f"cmd package resolve-activity --brief {intent} {self.package_id}"
+ )
+ result_output = self.device.shell_output(resolve_component_args)
+ stdout = result_output.splitlines()
+ if len(stdout) != STDOUT_LINE_COUNT: # Should be 2
+ raise AndroidStartUpMatchingError(f"expected 2 lines. Got: {stdout}")
+ return stdout[1]
+
+ def skip_onboarding(self, test_name):
+ """
+ We skip onboarding for focus in measure_start_up.py because it's stateful
+ and needs to be called for every cold start intent.
+ Onboarding only visibly gets in the way of our MAIN test results.
+ """
+ if self.product == PROD_FOCUS or test_name not in {
+ TEST_COLD_MAIN_FF,
+ TEST_COLD_MAIN_RESTORE,
+ }:
+ return
+
+ # This sets mutable state so we only need to pass this flag once, before we start the test
+ self.device.shell(
+ f"am start-activity -W -a android.intent.action.MAIN --ez "
+ f"performancetest true -n{self.package_id}/org.mozilla.fenix.App"
+ )
+ time.sleep(4) # ensure skip onboarding call has time to propagate.
diff --git a/python/mozperftest/mozperftest/system/example.zip b/python/mozperftest/mozperftest/system/example.zip
new file mode 100644
index 0000000000..8c724762d3
--- /dev/null
+++ b/python/mozperftest/mozperftest/system/example.zip
Binary files differ
diff --git a/python/mozperftest/mozperftest/system/macos.py b/python/mozperftest/mozperftest/system/macos.py
new file mode 100644
index 0000000000..ac778ae982
--- /dev/null
+++ b/python/mozperftest/mozperftest/system/macos.py
@@ -0,0 +1,121 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import os
+import platform
+import shutil
+import subprocess
+import tempfile
+from pathlib import Path
+
+from mozperftest.layers import Layer
+
+# Add here any option that might point to a DMG file we want to extract. The key
+# is name of the option and the value, the file in the DMG we want to use for
+# the option.
+POTENTIAL_DMGS = {
+ "browsertime-binary": "Contents/MacOS/firefox",
+ "xpcshell-xre-path": "Contents/MacOS",
+ "mochitest-binary": "Contents/MacOS/firefox",
+}
+
+
+class MacosDevice(Layer):
+ """Runs on macOS to mount DMGs if we see one."""
+
+ name = "macos"
+ activated = platform.system() == "Darwin"
+
+ def __init__(self, env, mach_cmd):
+ super(MacosDevice, self).__init__(env, mach_cmd)
+ self._tmp_dirs = []
+
+ def _run_process(self, args):
+ p = subprocess.Popen(
+ args,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ universal_newlines=True,
+ )
+
+ stdout, stderr = p.communicate(timeout=45)
+ if p.returncode != 0:
+ raise subprocess.CalledProcessError(
+ stdout=stdout, stderr=stderr, returncode=p.returncode
+ )
+
+ return stdout
+
+ def extract_app(self, dmg, target):
+ mount = Path(tempfile.mkdtemp())
+
+ if not Path(dmg).exists():
+ raise FileNotFoundError(dmg)
+
+ # mounting the DMG with hdiutil
+ cmd = f"hdiutil attach -nobrowse -mountpoint {str(mount)} {dmg}"
+ try:
+ self._run_process(cmd.split())
+ except subprocess.CalledProcessError:
+ self.error(f"Can't mount {dmg}")
+ if mount.exists():
+ shutil.rmtree(str(mount))
+ raise
+
+ # browse the mounted volume, to look for the app.
+ found = False
+ try:
+ for f in os.listdir(str(mount)):
+ if not f.endswith(".app"):
+ continue
+ app = mount / f
+ shutil.copytree(str(app), str(target))
+ found = True
+ break
+ finally:
+ try:
+ self._run_process(f"hdiutil detach {str(mount)}".split())
+ except subprocess.CalledProcessError as e: # noqa
+ self.warning("Detach failed {e.stdout}")
+ finally:
+ if mount.exists():
+ shutil.rmtree(str(mount))
+ if not found:
+ self.error(f"No app file found in {dmg}")
+ raise IOError(dmg)
+
+ def run(self, metadata):
+ # Each DMG is mounted, then we look for the .app
+ # directory in it, which is copied in a directory
+ # alongside the .dmg file. That directory
+ # is removed during teardown.
+ for option, path_in_dmg in POTENTIAL_DMGS.items():
+ value = self.get_arg(option)
+
+ if value is None or not value.endswith(".dmg"):
+ continue
+
+ self.info(f"Mounting {value}")
+ dmg_file = Path(value)
+ if not dmg_file.exists():
+ raise FileNotFoundError(str(dmg_file))
+
+ # let's unpack the DMG in place...
+ target = dmg_file.parent / dmg_file.name.split(".")[0]
+ self._tmp_dirs.append(target)
+ self.extract_app(dmg_file, target)
+
+ # ... find a specific file or directory if needed ...
+ path = target / path_in_dmg
+ if not path.exists():
+ raise FileNotFoundError(str(path))
+
+ # ... and swap the browsertime argument
+ self.info(f"Using {path} for {option}")
+ self.env.set_arg(option, str(path))
+ return metadata
+
+ def teardown(self):
+ for dir in self._tmp_dirs:
+ if dir.exists():
+ shutil.rmtree(str(dir))
diff --git a/python/mozperftest/mozperftest/system/pingserver.py b/python/mozperftest/mozperftest/system/pingserver.py
new file mode 100644
index 0000000000..4ae6b9a113
--- /dev/null
+++ b/python/mozperftest/mozperftest/system/pingserver.py
@@ -0,0 +1,94 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import json
+import os
+import socketserver
+import threading
+import time
+from pathlib import Path
+
+from mozlog import get_proxy_logger
+
+from mozperftest.layers import Layer
+from mozperftest.utils import install_package
+
+LOG = get_proxy_logger(component="proxy")
+HERE = os.path.dirname(__file__)
+
+
+class PingServer(Layer):
+ """Runs the edgeping layer"""
+
+ name = "pingserver"
+ activated = False
+
+ arguments = {}
+
+ def setup(self):
+ # Install edgeping and requests
+ deps = ["edgeping==0.1", "requests==2.9.1"]
+ for dep in deps:
+ install_package(self.mach_cmd.virtualenv_manager, dep)
+
+ def _wait_for_server(self, endpoint):
+ import requests
+
+ start = time.monotonic()
+ while True:
+ try:
+ requests.get(endpoint, timeout=0.1)
+ return
+ except Exception:
+ # we want to wait at most 5sec.
+ if time.monotonic() - start > 5.0:
+ raise
+ time.sleep(0.01)
+
+ def run(self, metadata):
+ from edgeping.server import PingHandling
+
+ self.verbose = self.get_arg("verbose")
+ self.metadata = metadata
+ self.debug("Starting the Edgeping server")
+ self.httpd = socketserver.TCPServer(("localhost", 0), PingHandling)
+ self.server_thread = threading.Thread(target=self.httpd.serve_forever)
+ # the chosen socket gets picked in the constructor so we can grab it here
+ address = self.httpd.server_address
+ self.endpoint = f"http://{address[0]}:{address[1]}"
+ self.server_thread.start()
+ self._wait_for_server(self.endpoint + "/status")
+
+ self.debug(f"Edgeping coserver running at {self.endpoint}")
+ prefs = {
+ "toolkit.telemetry.server": self.endpoint,
+ "telemetry.fog.test.localhost_port": address[1],
+ "datareporting.healthreport.uploadEnabled": True,
+ "datareporting.policy.dataSubmissionEnabled": True,
+ "toolkit.telemetry.enabled": True,
+ "toolkit.telemetry.unified": True,
+ "toolkit.telemetry.shutdownPingSender.enabled": True,
+ "datareporting.policy.dataSubmissionPolicyBypassNotification": True,
+ "toolkit.telemetry.send.overrideOfficialCheck": True,
+ }
+ if self.verbose:
+ prefs["toolkit.telemetry.log.level"] = "Trace"
+ prefs["toolkit.telemetry.log.dump"] = True
+
+ browser_prefs = metadata.get_options("browser_prefs")
+ browser_prefs.update(prefs)
+ return metadata
+
+ def teardown(self):
+ import requests
+
+ self.info("Grabbing the pings")
+ pings = requests.get(f"{self.endpoint}/pings").json()
+ output = Path(self.get_arg("output"), "telemetry.json")
+ self.info(f"Writing in {output}")
+ with output.open("w") as f:
+ f.write(json.dumps(pings))
+
+ self.debug("Stopping the Edgeping coserver")
+ self.httpd.shutdown()
+ self.server_thread.join()
diff --git a/python/mozperftest/mozperftest/system/profile.py b/python/mozperftest/mozperftest/system/profile.py
new file mode 100644
index 0000000000..d29744a818
--- /dev/null
+++ b/python/mozperftest/mozperftest/system/profile.py
@@ -0,0 +1,122 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import os
+import shutil
+import tempfile
+from pathlib import Path
+
+from condprof.client import ProfileNotFoundError, get_profile
+from condprof.util import get_current_platform
+from mozprofile import create_profile
+from mozprofile.prefs import Preferences
+
+from mozperftest.layers import Layer
+
+HERE = os.path.dirname(__file__)
+
+
+class Profile(Layer):
+ name = "profile"
+ activated = True
+ arguments = {
+ "directory": {"type": str, "default": None, "help": "Profile to use"},
+ "user-js": {"type": str, "default": None, "help": "Custom user.js"},
+ "conditioned": {
+ "action": "store_true",
+ "default": False,
+ "help": "Use a conditioned profile.",
+ },
+ "conditioned-scenario": {
+ "type": str,
+ "default": "settled",
+ "help": "Conditioned scenario to use",
+ },
+ "conditioned-platform": {
+ "type": str,
+ "default": None,
+ "help": "Conditioned platform to use (use local by default)",
+ },
+ "conditioned-project": {
+ "type": str,
+ "default": "mozilla-central",
+ "help": "Conditioned project",
+ "choices": ["try", "mozilla-central"],
+ },
+ }
+
+ def __init__(self, env, mach_cmd):
+ super(Profile, self).__init__(env, mach_cmd)
+ self._created_dirs = []
+
+ def setup(self):
+ pass
+
+ def _cleanup(self):
+ pass
+
+ def _get_conditioned_profile(self):
+ platform = self.get_arg("conditioned-platform")
+ if platform is None:
+ platform = get_current_platform()
+ scenario = self.get_arg("conditioned-scenario")
+ project = self.get_arg("conditioned-project")
+ alternate_project = "mozilla-central" if project != "mozilla-central" else "try"
+
+ temp_dir = tempfile.mkdtemp()
+ try:
+ condprof = get_profile(temp_dir, platform, scenario, repo=project)
+ except ProfileNotFoundError:
+ condprof = get_profile(temp_dir, platform, scenario, repo=alternate_project)
+ except Exception:
+ raise
+
+ # now get the full directory path to our fetched conditioned profile
+ condprof = Path(temp_dir, condprof)
+ if not condprof.exists():
+ raise OSError(str(condprof))
+
+ return condprof
+
+ def run(self, metadata):
+ # using a conditioned profile
+ if self.get_arg("conditioned"):
+ profile_dir = self._get_conditioned_profile()
+ self.set_arg("profile-directory", str(profile_dir))
+ self._created_dirs.append(str(profile_dir))
+ return metadata
+
+ if self.get_arg("directory") is not None:
+ # no need to create one or load a conditioned one
+ return metadata
+
+ # fresh profile
+ profile = create_profile(app="firefox")
+
+ # mozprofile.Profile.__del__ silently deletes the profile
+ # it creates in a non-deterministic time (garbage collected) by
+ # calling cleanup. We override this silly behavior here.
+ profile.cleanup = self._cleanup
+
+ prefs = metadata.get_options("browser_prefs")
+
+ if prefs == {}:
+ prefs["mozperftest"] = "true"
+
+ # apply custom user prefs if any
+ user_js = self.get_arg("user-js")
+ if user_js is not None:
+ self.info("Applying use prefs from %s" % user_js)
+ default_prefs = dict(Preferences.read_prefs(user_js))
+ prefs.update(default_prefs)
+
+ profile.set_preferences(prefs)
+ self.info("Created profile at %s" % profile.profile)
+ self._created_dirs.append(profile.profile)
+ self.set_arg("profile-directory", profile.profile)
+ return metadata
+
+ def teardown(self):
+ for dir in self._created_dirs:
+ if os.path.exists(dir):
+ shutil.rmtree(dir)
diff --git a/python/mozperftest/mozperftest/system/proxy.py b/python/mozperftest/mozperftest/system/proxy.py
new file mode 100644
index 0000000000..d0a8c7ff97
--- /dev/null
+++ b/python/mozperftest/mozperftest/system/proxy.py
@@ -0,0 +1,246 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import json
+import os
+import pathlib
+import re
+import signal
+import tempfile
+import threading
+
+from mozdevice import ADBDevice
+from mozlog import get_proxy_logger
+from mozprocess import ProcessHandler
+
+from mozperftest.layers import Layer
+from mozperftest.utils import (
+ ON_TRY,
+ download_file,
+ get_output_dir,
+ get_pretty_app_name,
+ install_package,
+)
+
+LOG = get_proxy_logger(component="proxy")
+HERE = os.path.dirname(__file__)
+
+
+class OutputHandler(object):
+ def __init__(self):
+ self.proc = None
+ self.port = None
+ self.port_event = threading.Event()
+
+ def __call__(self, line):
+ line = line.strip()
+ if not line:
+ return
+ line = line.decode("utf-8", errors="replace")
+ try:
+ data = json.loads(line)
+ except ValueError:
+ self.process_output(line)
+ return
+
+ if isinstance(data, dict) and "action" in data:
+ # Retrieve the port number for the proxy server from the logs of
+ # our subprocess.
+ m = re.match(r"Proxy running on port (\d+)", data.get("message", ""))
+ if m:
+ self.port = int(m.group(1))
+ self.port_event.set()
+ LOG.log_raw(data)
+ else:
+ self.process_output(json.dumps(data))
+
+ def finished(self):
+ self.port_event.set()
+
+ def process_output(self, line):
+ if self.proc is None:
+ LOG.process_output(line)
+ else:
+ LOG.process_output(self.proc.pid, line)
+
+ def wait_for_port(self):
+ self.port_event.wait()
+ return self.port
+
+
+class ProxyRunner(Layer):
+ """Use a proxy"""
+
+ name = "proxy"
+ activated = False
+
+ arguments = {
+ "mode": {
+ "type": str,
+ "choices": ["record", "playback"],
+ "help": "Proxy server mode. Use `playback` to replay from the provided file(s). "
+ "Use `record` to generate a new recording at the path specified by `--file`. "
+ "playback - replay from provided file. "
+ "record - generate a new recording at the specified path.",
+ },
+ "file": {
+ "type": str,
+ "nargs": "+",
+ "help": "The playback files to replay, or the file that a recording will be saved to. "
+ "For playback, it can be any combination of the following: zip file, manifest file, "
+ "or a URL to zip/manifest file. "
+ "For recording, it's a zip fle.",
+ },
+ "perftest-page": {
+ "type": str,
+ "default": None,
+ "help": "This option can be used to specify a single test to record rather than "
+ "having to continuously modify the pageload_sites.json. This flag should only be "
+ "used by the perftest team and selects items from "
+ "`testing/performance/pageload_sites.json` based on the name field. Note that "
+ "the login fields won't be checked with a request such as this (i.e. it overrides "
+ "those settings).",
+ },
+ "deterministic": {
+ "action": "store_true",
+ "default": False,
+ "help": "If set, the deterministic JS script will be injected into the pages.",
+ },
+ }
+
+ def __init__(self, env, mach_cmd):
+ super(ProxyRunner, self).__init__(env, mach_cmd)
+ self.proxy = None
+ self.tmpdir = None
+
+ def setup(self):
+ try:
+ import mozproxy # noqa: F401
+ except ImportError:
+ # Install mozproxy and its vendored deps.
+ mozbase = pathlib.Path(self.mach_cmd.topsrcdir, "testing", "mozbase")
+ mozproxy_deps = ["mozinfo", "mozlog", "mozproxy"]
+ for i in mozproxy_deps:
+ install_package(
+ self.mach_cmd.virtualenv_manager, pathlib.Path(mozbase, i)
+ )
+
+ # set MOZ_HOST_BIN to find cerutil. Required to set certifcates on android
+ os.environ["MOZ_HOST_BIN"] = self.mach_cmd.bindir
+
+ def run(self, metadata):
+ self.metadata = metadata
+ replay_file = self.get_arg("file")
+
+ # Check if we have a replay file
+ if replay_file is None:
+ raise ValueError("Proxy file not provided!!")
+
+ if replay_file is not None and replay_file.startswith("http"):
+ self.tmpdir = tempfile.TemporaryDirectory()
+ target = pathlib.Path(self.tmpdir.name, "recording.zip")
+ self.info("Downloading %s" % replay_file)
+ download_file(replay_file, target)
+ replay_file = target
+
+ self.info("Setting up the proxy")
+
+ command = [
+ self.mach_cmd.virtualenv_manager.python_path,
+ "-m",
+ "mozproxy.driver",
+ "--topsrcdir=" + self.mach_cmd.topsrcdir,
+ "--objdir=" + self.mach_cmd.topobjdir,
+ "--profiledir=" + self.get_arg("profile-directory"),
+ ]
+
+ if not ON_TRY:
+ command.extend(["--local"])
+
+ if metadata.flavor == "mobile-browser":
+ command.extend(["--tool=%s" % "mitmproxy-android"])
+ command.extend(["--binary=android"])
+ command.extend(
+ [f"--app={get_pretty_app_name(self.get_arg('android-app-name'))}"]
+ )
+ else:
+ command.extend(["--tool=%s" % "mitmproxy"])
+ # XXX See bug 1712337, we need a single point where we can get the binary used from
+ # this is required to make it work localy
+ binary = self.get_arg("browsertime-binary")
+ if binary is None:
+ binary = self.mach_cmd.get_binary_path()
+ command.extend(["--binary=%s" % binary])
+
+ if self.get_arg("mode") == "record":
+ output = self.get_arg("output")
+ if output is None:
+ output = pathlib.Path(self.mach_cmd.topsrcdir, "artifacts")
+ results_dir = get_output_dir(output)
+
+ command.extend(["--mode", "record"])
+ command.append(str(pathlib.Path(results_dir, replay_file)))
+ elif self.get_arg("mode") == "playback":
+ command.extend(["--mode", "playback"])
+ command.append(str(replay_file))
+ else:
+ raise ValueError("Proxy mode not provided please provide proxy mode")
+
+ inject_deterministic = self.get_arg("deterministic")
+ if inject_deterministic:
+ command.extend(["--deterministic"])
+
+ print(" ".join(command))
+ self.output_handler = OutputHandler()
+ self.proxy = ProcessHandler(
+ command,
+ processOutputLine=self.output_handler,
+ onFinish=self.output_handler.finished,
+ )
+ self.output_handler.proc = self.proxy
+ self.proxy.run()
+
+ # Wait until we've retrieved the proxy server's port number so we can
+ # configure the browser properly.
+ port = self.output_handler.wait_for_port()
+ if port is None:
+ raise ValueError("Unable to retrieve the port number from mozproxy")
+ self.info("Received port number %s from mozproxy" % port)
+
+ prefs = {
+ "network.proxy.type": 1,
+ "network.proxy.http": "127.0.0.1",
+ "network.proxy.http_port": port,
+ "network.proxy.ssl": "127.0.0.1",
+ "network.proxy.ssl_port": port,
+ "network.proxy.no_proxies_on": "127.0.0.1",
+ }
+ browser_prefs = metadata.get_options("browser_prefs")
+ browser_prefs.update(prefs)
+
+ if metadata.flavor == "mobile-browser":
+ self.info("Setting reverse port fw for android device")
+ device = ADBDevice()
+ device.create_socket_connection("reverse", "tcp:%s" % port, "tcp:%s" % port)
+
+ return metadata
+
+ def teardown(self):
+ err = None
+ if self.proxy is not None:
+ returncode = self.proxy.wait(0)
+ if returncode is not None:
+ err = ValueError(
+ "mozproxy terminated early with return code %d" % returncode
+ )
+ else:
+ kill_signal = getattr(signal, "CTRL_BREAK_EVENT", signal.SIGINT)
+ os.kill(self.proxy.pid, kill_signal)
+ self.proxy.wait()
+ self.proxy = None
+ if self.tmpdir is not None:
+ self.tmpdir.cleanup()
+ self.tmpdir = None
+
+ if err:
+ raise err
diff --git a/python/mozperftest/mozperftest/test/__init__.py b/python/mozperftest/mozperftest/test/__init__.py
new file mode 100644
index 0000000000..a7f9133fb6
--- /dev/null
+++ b/python/mozperftest/mozperftest/test/__init__.py
@@ -0,0 +1,28 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+from mozperftest.layers import Layers
+from mozperftest.test.androidlog import AndroidLog
+from mozperftest.test.browsertime import BrowsertimeRunner
+from mozperftest.test.mochitest import Mochitest
+from mozperftest.test.webpagetest import WebPageTest
+from mozperftest.test.xpcshell import XPCShell
+
+
+def get_layers():
+ return BrowsertimeRunner, AndroidLog, XPCShell, WebPageTest, Mochitest
+
+
+def pick_test(env, flavor, mach_cmd):
+ if flavor == "xpcshell":
+ return Layers(env, mach_cmd, (XPCShell,))
+ if flavor == "desktop-browser":
+ return Layers(env, mach_cmd, (BrowsertimeRunner,))
+ if flavor == "mobile-browser":
+ return Layers(env, mach_cmd, (BrowsertimeRunner, AndroidLog))
+ if flavor == "webpagetest":
+ return Layers(env, mach_cmd, (WebPageTest,))
+ if flavor == "mochitest":
+ return Layers(env, mach_cmd, (Mochitest,))
+
+ raise NotImplementedError(flavor)
diff --git a/python/mozperftest/mozperftest/test/androidlog.py b/python/mozperftest/mozperftest/test/androidlog.py
new file mode 100644
index 0000000000..88bf01f2fe
--- /dev/null
+++ b/python/mozperftest/mozperftest/test/androidlog.py
@@ -0,0 +1,62 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+from pathlib import Path
+
+from mozperftest.layers import Layer
+
+
+class AndroidLog(Layer):
+ """Runs an android log test."""
+
+ name = "androidlog"
+ activated = False
+ arguments = {
+ "first-timestamp": {
+ "type": str,
+ "default": None,
+ "help": "First timestamp regexp",
+ },
+ "second-timestamp": {
+ "type": str,
+ "default": None,
+ "help": "Second timestamp regexp",
+ },
+ "subtest-name": {
+ "type": str,
+ "default": "TimeToDisplayed",
+ "help": "Name of the metric that is produced",
+ },
+ }
+
+ def _get_logcat(self):
+ logcat = self.get_arg("android-capture-logcat")
+ if logcat is None:
+ raise NotImplementedError()
+ # check if the path is absolute or relative to output
+ path = Path(logcat)
+ if not path.is_absolute():
+ return Path(self.get_arg("output"), path).resolve()
+ return path.resolve()
+
+ def __call__(self, metadata):
+ app_name = self.get_arg("android-app-name")
+ first_ts = r".*Start proc.*" + app_name.replace(".", r"\.") + ".*"
+ second_ts = r".*Fully drawn.*" + app_name.replace(".", r"\.") + ".*"
+ options = {
+ "first-timestamp": self.get_arg("first-timestamp", first_ts),
+ "second-timestamp": self.get_arg("second-timestamp", second_ts),
+ "processor": self.env.hooks.get("logcat_processor"),
+ "transform-subtest-name": self.get_arg("subtest-name"),
+ }
+
+ metadata.add_result(
+ {
+ "results": str(self._get_logcat()),
+ "transformer": "LogCatTimeTransformer",
+ "transformer-options": options,
+ "name": "LogCat",
+ }
+ )
+
+ return metadata
diff --git a/python/mozperftest/mozperftest/test/browsertime/__init__.py b/python/mozperftest/mozperftest/test/browsertime/__init__.py
new file mode 100644
index 0000000000..f5e32101cc
--- /dev/null
+++ b/python/mozperftest/mozperftest/test/browsertime/__init__.py
@@ -0,0 +1,19 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+from mozperftest.test.browsertime.runner import BrowsertimeRunner # noqa
+
+
+def add_option(env, name, value, overwrite=False):
+ if not overwrite:
+ options = env.get_arg("browsertime-extra-options", "")
+ options += f",{name}={value}"
+ else:
+ options = f"{name}={value}"
+ env.set_arg("browsertime-extra-options", options)
+
+
+def add_options(env, options, overwrite=False):
+ for i, (name, value) in enumerate(options):
+ add_option(env, name, value, overwrite=overwrite and i == 0)
diff --git a/python/mozperftest/mozperftest/test/browsertime/package-lock.json b/python/mozperftest/mozperftest/test/browsertime/package-lock.json
new file mode 100644
index 0000000000..af88126fcc
--- /dev/null
+++ b/python/mozperftest/mozperftest/test/browsertime/package-lock.json
@@ -0,0 +1,1874 @@
+{
+ "name": "mozilla-central-tools-browsertime",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@babel/runtime": {
+ "version": "7.17.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.0.tgz",
+ "integrity": "sha512-etcO/ohMNaNA2UBdaXBBSX/3aEzFMRrVfaPv8Ptc0k+cWpWW0QFiGZ2XnVqQZI1Cf734LbPGmqBKWESfW4x/dQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@cypress/xvfb": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz",
+ "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.1.0",
+ "lodash.once": "^4.1.1"
+ }
+ },
+ "@devicefarmer/adbkit": {
+ "version": "2.11.3",
+ "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-2.11.3.tgz",
+ "integrity": "sha512-rsgWREAvSRQjdP9/3GoAV6Tq+o97haywgbTfCgt5yUqiDpaaq3hlH9FTo9XsdG8x+Jd0VQ9nTC2IXsDu8JGRSA==",
+ "dev": true,
+ "requires": {
+ "@devicefarmer/adbkit-logcat": "^1.1.0",
+ "@devicefarmer/adbkit-monkey": "~1.0.1",
+ "bluebird": "~2.9.24",
+ "commander": "^2.3.0",
+ "debug": "~2.6.3",
+ "node-forge": "^0.10.0",
+ "split": "~0.3.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "@devicefarmer/adbkit-logcat": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-logcat/-/adbkit-logcat-1.1.0.tgz",
+ "integrity": "sha512-K90P5gUXM/w+yzLvJIRQ+tJooNU6ipUPPQkljtPJ0laR66TGtpt4Gqsjm0n9dPHK1W5KGgU1R5wnCd6RTSlPNA==",
+ "dev": true
+ },
+ "@devicefarmer/adbkit-monkey": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-monkey/-/adbkit-monkey-1.0.1.tgz",
+ "integrity": "sha512-HilPrVrCosYWqSyjfpDtaaN1kJwdlBpS+IAflP3z+e7nsEgk3JGJf1Vg0NgHJooTf5HDfXSyZqMVg+5jvXCK0g==",
+ "dev": true,
+ "requires": {
+ "async": "~0.2.9"
+ }
+ },
+ "@jimp/bmp": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz",
+ "integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "bmp-js": "^0.1.0"
+ }
+ },
+ "@jimp/core": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz",
+ "integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "any-base": "^1.1.0",
+ "buffer": "^5.2.0",
+ "exif-parser": "^0.1.12",
+ "file-type": "^9.0.0",
+ "load-bmfont": "^1.3.1",
+ "mkdirp": "^0.5.1",
+ "phin": "^2.9.1",
+ "pixelmatch": "^4.0.2",
+ "tinycolor2": "^1.4.1"
+ },
+ "dependencies": {
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ }
+ }
+ },
+ "@jimp/custom": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz",
+ "integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/core": "^0.16.1"
+ }
+ },
+ "@jimp/gif": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz",
+ "integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "gifwrap": "^0.9.2",
+ "omggif": "^1.0.9"
+ }
+ },
+ "@jimp/jpeg": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz",
+ "integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "jpeg-js": "0.4.2"
+ }
+ },
+ "@jimp/plugin-blit": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz",
+ "integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-blur": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz",
+ "integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-circle": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz",
+ "integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-color": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz",
+ "integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "tinycolor2": "^1.4.1"
+ }
+ },
+ "@jimp/plugin-contain": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz",
+ "integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-cover": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz",
+ "integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-crop": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz",
+ "integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-displace": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz",
+ "integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-dither": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz",
+ "integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-fisheye": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz",
+ "integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-flip": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz",
+ "integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-gaussian": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz",
+ "integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-invert": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz",
+ "integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-mask": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz",
+ "integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-normalize": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz",
+ "integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-print": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz",
+ "integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "load-bmfont": "^1.4.0"
+ }
+ },
+ "@jimp/plugin-resize": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz",
+ "integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-rotate": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz",
+ "integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-scale": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz",
+ "integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-shadow": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz",
+ "integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugin-threshold": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz",
+ "integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1"
+ }
+ },
+ "@jimp/plugins": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz",
+ "integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/plugin-blit": "^0.16.1",
+ "@jimp/plugin-blur": "^0.16.1",
+ "@jimp/plugin-circle": "^0.16.1",
+ "@jimp/plugin-color": "^0.16.1",
+ "@jimp/plugin-contain": "^0.16.1",
+ "@jimp/plugin-cover": "^0.16.1",
+ "@jimp/plugin-crop": "^0.16.1",
+ "@jimp/plugin-displace": "^0.16.1",
+ "@jimp/plugin-dither": "^0.16.1",
+ "@jimp/plugin-fisheye": "^0.16.1",
+ "@jimp/plugin-flip": "^0.16.1",
+ "@jimp/plugin-gaussian": "^0.16.1",
+ "@jimp/plugin-invert": "^0.16.1",
+ "@jimp/plugin-mask": "^0.16.1",
+ "@jimp/plugin-normalize": "^0.16.1",
+ "@jimp/plugin-print": "^0.16.1",
+ "@jimp/plugin-resize": "^0.16.1",
+ "@jimp/plugin-rotate": "^0.16.1",
+ "@jimp/plugin-scale": "^0.16.1",
+ "@jimp/plugin-shadow": "^0.16.1",
+ "@jimp/plugin-threshold": "^0.16.1",
+ "timm": "^1.6.1"
+ }
+ },
+ "@jimp/png": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz",
+ "integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/utils": "^0.16.1",
+ "pngjs": "^3.3.3"
+ }
+ },
+ "@jimp/tiff": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz",
+ "integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "utif": "^2.0.1"
+ }
+ },
+ "@jimp/types": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz",
+ "integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/bmp": "^0.16.1",
+ "@jimp/gif": "^0.16.1",
+ "@jimp/jpeg": "^0.16.1",
+ "@jimp/png": "^0.16.1",
+ "@jimp/tiff": "^0.16.1",
+ "timm": "^1.6.1"
+ }
+ },
+ "@jimp/utils": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz",
+ "integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "regenerator-runtime": "^0.13.3"
+ }
+ },
+ "@sitespeed.io/chromedriver": {
+ "version": "98.0.4758-48",
+ "resolved": "https://registry.npmjs.org/@sitespeed.io/chromedriver/-/chromedriver-98.0.4758-48.tgz",
+ "integrity": "sha512-kTFFaJD0K2j59+XG4o6olv28I1gaZ19qPlIRQLP7dfhaVZQDvxtzKyVIUHlU0q4m69XnCliOcO14008ZlxSW+g==",
+ "dev": true,
+ "requires": {
+ "node-downloader-helper": "1.0.19",
+ "node-stream-zip": "1.15.0"
+ }
+ },
+ "@sitespeed.io/edgedriver": {
+ "version": "95.0.1020-30",
+ "resolved": "https://registry.npmjs.org/@sitespeed.io/edgedriver/-/edgedriver-95.0.1020-30.tgz",
+ "integrity": "sha512-5hXxNCtbX/SeG6nsyXg4QWIEKacxBJTO5T43rUXlTrUlecFfvHNhTVY5PE2bwpKcdPQ168Vp0S/+g55QJi9s/Q==",
+ "dev": true,
+ "requires": {
+ "node-downloader-helper": "1.0.18",
+ "node-stream-zip": "1.15.0"
+ },
+ "dependencies": {
+ "node-downloader-helper": {
+ "version": "1.0.18",
+ "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-1.0.18.tgz",
+ "integrity": "sha512-C7hxYz/yg4d8DFVC6c4fMIOI7jywbpQHOznkax/74F8NcC8wSOLO+UxNMcwds/5wEL8W+RPXT9C389w3bDOMxw==",
+ "dev": true
+ }
+ }
+ },
+ "@sitespeed.io/geckodriver": {
+ "version": "0.29.1-3",
+ "resolved": "https://registry.npmjs.org/@sitespeed.io/geckodriver/-/geckodriver-0.29.1-3.tgz",
+ "integrity": "sha512-qHYtvH/81lPcgzFQB2qObp9M8bMIrc7O8TWm05SVfiGUKKy4Kku0huoa/IB9e0ksrrRFYtm9GQT6JF+bANZPKA==",
+ "dev": true,
+ "requires": {
+ "node-downloader-helper": "1.0.18",
+ "node-stream-zip": "1.14.0",
+ "tar": "6.1.11"
+ },
+ "dependencies": {
+ "node-downloader-helper": {
+ "version": "1.0.18",
+ "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-1.0.18.tgz",
+ "integrity": "sha512-C7hxYz/yg4d8DFVC6c4fMIOI7jywbpQHOznkax/74F8NcC8wSOLO+UxNMcwds/5wEL8W+RPXT9C389w3bDOMxw==",
+ "dev": true
+ },
+ "node-stream-zip": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.14.0.tgz",
+ "integrity": "sha512-SKXyiBy9DBemsPHf/piHT00Y+iPK+zwru1G6+8UdOBzITnmmPMHYBMV6M1znyzyhDhUFQW0HEmbGiPqtp51M6Q==",
+ "dev": true
+ }
+ }
+ },
+ "@sitespeed.io/throttle": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@sitespeed.io/throttle/-/throttle-3.0.0.tgz",
+ "integrity": "sha512-tTAnBaoMwtdECY6SYno/OSRnzZsazg63zesRNBxQXkpDG+1FU1FTXLJQx6/2SkKJo6WvrELp8XhoUIV9SQvlCg==",
+ "dev": true,
+ "requires": {
+ "minimist": "1.2.5"
+ }
+ },
+ "@sitespeed.io/tracium": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@sitespeed.io/tracium/-/tracium-0.3.3.tgz",
+ "integrity": "sha512-dNZafjM93Y+F+sfwTO5gTpsGXlnc/0Q+c2+62ViqP3gkMWvHEMSKkaEHgVJLcLg3i/g19GSIPziiKpgyne07Bw==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "@types/node": {
+ "version": "17.0.14",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.14.tgz",
+ "integrity": "sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "any-base": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz",
+ "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==",
+ "dev": true,
+ "optional": true
+ },
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true,
+ "optional": true
+ },
+ "bluebird": {
+ "version": "2.9.34",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz",
+ "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=",
+ "dev": true
+ },
+ "bmp-js": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz",
+ "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=",
+ "dev": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "browsertime": {
+ "version": "https://github.com/sitespeedio/browsertime/tarball/eae18165d9d82b9a5ad38b0bd1507a2d86a70988",
+ "integrity": "sha512-UiQ2xHLHN9ISnVRfFXmWCncLn5+Huca3ykTBYPOmnLcOyx7U9+cfMwEYMioyTbgh1IdByZd2KZ1dKLs2CtoU/Q==",
+ "dev": true,
+ "requires": {
+ "@cypress/xvfb": "1.2.4",
+ "@devicefarmer/adbkit": "2.11.3",
+ "@sitespeed.io/chromedriver": "98.0.4758-48",
+ "@sitespeed.io/edgedriver": "95.0.1020-30",
+ "@sitespeed.io/geckodriver": "0.29.1-3",
+ "@sitespeed.io/throttle": "3.0.0",
+ "@sitespeed.io/tracium": "0.3.3",
+ "btoa": "1.2.1",
+ "chrome-har": "0.12.0",
+ "chrome-remote-interface": "0.31.0",
+ "dayjs": "1.10.7",
+ "execa": "5.1.1",
+ "fast-stats": "0.0.6",
+ "find-up": "5.0.0",
+ "get-port": "5.1.1",
+ "hasbin": "1.2.3",
+ "intel": "1.2.0",
+ "jimp": "0.16.1",
+ "lodash.get": "4.4.2",
+ "lodash.groupby": "4.6.0",
+ "lodash.isempty": "4.4.0",
+ "lodash.merge": "4.6.2",
+ "lodash.pick": "4.4.0",
+ "lodash.set": "4.3.2",
+ "selenium-webdriver": "4.1.0",
+ "speedline-core": "1.4.3",
+ "yargs": "17.2.1"
+ }
+ },
+ "btoa": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz",
+ "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==",
+ "dev": true
+ },
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "buffer-equal": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
+ "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=",
+ "dev": true,
+ "optional": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "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"
+ }
+ },
+ "chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "dev": true
+ },
+ "chrome-har": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/chrome-har/-/chrome-har-0.12.0.tgz",
+ "integrity": "sha512-VRQOsN9omU6q5/8h6eU9tkHPV2VvOCAh1JL4Hpk8ZIyrTLFWdK0A7UOsKNplvr+9Ls/8Wr71G20cuX2OsRPbwA==",
+ "dev": true,
+ "requires": {
+ "dayjs": "1.8.31",
+ "debug": "4.1.1",
+ "tough-cookie": "4.0.0",
+ "uuid": "8.0.0"
+ },
+ "dependencies": {
+ "dayjs": {
+ "version": "1.8.31",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.31.tgz",
+ "integrity": "sha512-mPh1mslned+5PuIuiUfbw4CikHk6AEAf2Baxih+wP5fssv+wmlVhvgZ7mq+BhLt7Sr/Hc8leWDiwe6YnrpNt3g==",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "chrome-remote-interface": {
+ "version": "0.31.0",
+ "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.31.0.tgz",
+ "integrity": "sha512-DrD4ZACKAFT3lVldKVDRlYrI9bmZSk7kYcf+OKwFpBM9fZyCPvVKb+yGnmXBkHv7/BEkW8ouu+EHRugAOJ3pPg==",
+ "dev": true,
+ "requires": {
+ "commander": "2.11.x",
+ "ws": "^7.2.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
+ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
+ "dev": true
+ }
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "dayjs": {
+ "version": "1.10.7",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz",
+ "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==",
+ "dev": true
+ },
+ "dbug": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/dbug/-/dbug-0.4.2.tgz",
+ "integrity": "sha1-MrSzEF6IYQQ6b5rHVdgOVC02WzE=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "dom-walk": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
+ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
+ "dev": true,
+ "optional": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "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=",
+ "dev": true
+ },
+ "execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "exif-parser": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz",
+ "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=",
+ "dev": true,
+ "optional": true
+ },
+ "fast-stats": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/fast-stats/-/fast-stats-0.0.6.tgz",
+ "integrity": "sha512-m0zkwa7Z07Wc4xm1YtcrCHmhzNxiYRrrfUyhkdhSZPzaAH/Ewbocdaq7EPVBFz19GWfIyyPcLfRHjHJYe83jlg==",
+ "dev": true
+ },
+ "file-type": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz",
+ "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==",
+ "dev": true,
+ "optional": true
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-port": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz",
+ "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true
+ },
+ "gifwrap": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.2.tgz",
+ "integrity": "sha512-fcIswrPaiCDAyO8xnWvHSZdWChjKXUanKKpAiWWJ/UTkEi/aYKn5+90e7DE820zbEaVR9CE2y4z9bzhQijZ0BA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "image-q": "^1.1.1",
+ "omggif": "^1.0.10"
+ }
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": 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"
+ }
+ },
+ "global": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
+ "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "min-document": "^2.19.0",
+ "process": "^0.11.10"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "hasbin": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/hasbin/-/hasbin-1.2.3.tgz",
+ "integrity": "sha1-eMWSaJPIAhXCtWiuH9P8q3omlrA=",
+ "dev": true,
+ "requires": {
+ "async": "~1.5"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true
+ },
+ "ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
+ "optional": true
+ },
+ "image-q": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/image-q/-/image-q-1.1.1.tgz",
+ "integrity": "sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY=",
+ "dev": true,
+ "optional": true
+ },
+ "image-ssim": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/image-ssim/-/image-ssim-0.2.0.tgz",
+ "integrity": "sha1-g7Qsei5uS4VQVHf+aRf128VkIOU=",
+ "dev": true
+ },
+ "immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "intel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/intel/-/intel-1.2.0.tgz",
+ "integrity": "sha1-EdEUfraz9Fgr31M3s31UFYTp5B4=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.0",
+ "dbug": "~0.4.2",
+ "stack-trace": "~0.0.9",
+ "strftime": "~0.10.0",
+ "symbol": "~0.3.1",
+ "utcstring": "~0.1.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "is-function": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
+ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
+ "dev": true,
+ "optional": true
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "jimp": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz",
+ "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@babel/runtime": "^7.7.2",
+ "@jimp/custom": "^0.16.1",
+ "@jimp/plugins": "^0.16.1",
+ "@jimp/types": "^0.16.1",
+ "regenerator-runtime": "^0.13.3"
+ }
+ },
+ "jpeg-js": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.2.tgz",
+ "integrity": "sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==",
+ "dev": true
+ },
+ "jszip": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz",
+ "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==",
+ "dev": true,
+ "requires": {
+ "lie": "~3.3.0",
+ "pako": "~1.0.2",
+ "readable-stream": "~2.3.6",
+ "set-immediate-shim": "~1.0.1"
+ }
+ },
+ "lie": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "dev": true,
+ "requires": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "load-bmfont": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz",
+ "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "buffer-equal": "0.0.1",
+ "mime": "^1.3.4",
+ "parse-bmfont-ascii": "^1.0.3",
+ "parse-bmfont-binary": "^1.0.5",
+ "parse-bmfont-xml": "^1.1.4",
+ "phin": "^2.9.1",
+ "xhr": "^2.0.1",
+ "xtend": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "dev": true
+ },
+ "lodash.groupby": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz",
+ "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=",
+ "dev": true
+ },
+ "lodash.isempty": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
+ "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=",
+ "dev": true
+ },
+ "lodash.pick": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
+ "dev": true
+ },
+ "lodash.set": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
+ "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=",
+ "dev": true
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "optional": true
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "min-document": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
+ "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "dom-walk": "^0.1.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "minipass": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz",
+ "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ }
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node-downloader-helper": {
+ "version": "1.0.19",
+ "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-1.0.19.tgz",
+ "integrity": "sha512-Bwp8WWDDP5ftg+FmAKU08a9+oiUTPoYzMvXgUqZZPQ7VMo1qKBzW3XdTXHeYnqjGLfkTZ2GPibgAWpApfpeS2g==",
+ "dev": true
+ },
+ "node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true
+ },
+ "node-stream-zip": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz",
+ "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "omggif": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz",
+ "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==",
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "dev": true
+ },
+ "parse-bmfont-ascii": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz",
+ "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=",
+ "dev": true,
+ "optional": true
+ },
+ "parse-bmfont-binary": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz",
+ "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=",
+ "dev": true,
+ "optional": true
+ },
+ "parse-bmfont-xml": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz",
+ "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "xml-parse-from-string": "^1.0.0",
+ "xml2js": "^0.4.5"
+ }
+ },
+ "parse-headers": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz",
+ "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==",
+ "dev": true,
+ "optional": true
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "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=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "phin": {
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz",
+ "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==",
+ "dev": true,
+ "optional": true
+ },
+ "pixelmatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz",
+ "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "pngjs": "^3.0.0"
+ }
+ },
+ "pngjs": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
+ "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
+ "dev": true,
+ "optional": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": 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"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.9",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
+ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
+ "dev": true,
+ "optional": true
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true,
+ "optional": true
+ },
+ "selenium-webdriver": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.1.0.tgz",
+ "integrity": "sha512-kUDH4N8WruYprTzvug4Pl73Th+WKb5YiLz8z/anOpHyUNUdM3UzrdTOxmSNaf9AczzBeY+qXihzku8D1lMaKOg==",
+ "dev": true,
+ "requires": {
+ "jszip": "^3.6.0",
+ "tmp": "^0.2.1",
+ "ws": ">=7.4.6"
+ }
+ },
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
+ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==",
+ "dev": true
+ },
+ "speedline-core": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/speedline-core/-/speedline-core-1.4.3.tgz",
+ "integrity": "sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "image-ssim": "^0.2.0",
+ "jpeg-js": "^0.4.1"
+ }
+ },
+ "split": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
+ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
+ "dev": true,
+ "requires": {
+ "through": "2"
+ }
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strftime": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.10.1.tgz",
+ "integrity": "sha512-nVvH6JG8KlXFPC0f8lojLgEsPA18lRpLZ+RrJh/NkQV2tqOgZfbas8gcU8SFgnnqR3rWzZPYu6N2A3xzs/8rQg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "symbol": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/symbol/-/symbol-0.3.1.tgz",
+ "integrity": "sha1-tvmpANSWpX8CQI8iGYwQndoGMEE=",
+ "dev": true
+ },
+ "tar": {
+ "version": "6.1.11",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
+ "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
+ "dev": true,
+ "requires": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^3.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "timm": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz",
+ "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==",
+ "dev": true,
+ "optional": true
+ },
+ "tinycolor2": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz",
+ "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==",
+ "dev": true,
+ "optional": true
+ },
+ "tmp": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
+ "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
+ "dev": true,
+ "requires": {
+ "rimraf": "^3.0.0"
+ }
+ },
+ "tough-cookie": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
+ "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.1.2"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
+ },
+ "utcstring": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/utcstring/-/utcstring-0.1.0.tgz",
+ "integrity": "sha1-Qw/VEKt/yVtdWRDJAteYgMIIQ2s=",
+ "dev": true
+ },
+ "utif": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz",
+ "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "pako": "^1.0.5"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz",
+ "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "ws": {
+ "version": "7.5.6",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
+ "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==",
+ "dev": true
+ },
+ "xhr": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
+ "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "global": "~4.4.0",
+ "is-function": "^1.0.1",
+ "parse-headers": "^2.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "xml-parse-from-string": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
+ "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=",
+ "dev": true,
+ "optional": true
+ },
+ "xml2js": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
+ "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ }
+ },
+ "xmlbuilder": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+ "dev": true,
+ "optional": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
+ "optional": true
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "17.2.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz",
+ "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ }
+ }
+}
diff --git a/python/mozperftest/mozperftest/test/browsertime/package.json b/python/mozperftest/mozperftest/test/browsertime/package.json
new file mode 100644
index 0000000000..493651df61
--- /dev/null
+++ b/python/mozperftest/mozperftest/test/browsertime/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "mozilla-central-tools-browsertime",
+ "description": "This package file is for node modules used in mozilla-central/tools/browsertime",
+ "repository": {},
+ "license": "MPL-2.0",
+ "dependencies": {},
+ "devDependencies": {
+ "browsertime": "https://github.com/sitespeedio/browsertime/tarball/eae18165d9d82b9a5ad38b0bd1507a2d86a70988"
+ },
+ "notes(private)": "We don't want to publish to npm, so this is marked as private",
+ "private": true
+}
diff --git a/python/mozperftest/mozperftest/test/browsertime/runner.py b/python/mozperftest/mozperftest/test/browsertime/runner.py
new file mode 100644
index 0000000000..468dcd1a45
--- /dev/null
+++ b/python/mozperftest/mozperftest/test/browsertime/runner.py
@@ -0,0 +1,471 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import collections
+import json
+import os
+import pathlib
+import re
+import shutil
+import sys
+from pathlib import Path
+
+from mozperftest.test.browsertime.visualtools import get_dependencies, xvfb
+from mozperftest.test.noderunner import NodeRunner
+from mozperftest.utils import ON_TRY, get_output_dir, install_package
+
+BROWSERTIME_SRC_ROOT = Path(__file__).parent
+
+
+def matches(args, *flags):
+ """Returns True if any argument matches any of the given flags
+
+ Maybe with an argument.
+ """
+
+ for flag in flags:
+ if flag in args or any(arg.startswith(flag + "=") for arg in args):
+ return True
+ return False
+
+
+def extract_browser_name(args):
+ "Extracts the browser name if any"
+ # These are BT arguments, it's BT job to check them
+ # here we just want to extract the browser name
+ res = re.findall(r"(--browser|-b)[= ]([\w]+)", " ".join(args))
+ if res == []:
+ return None
+ return res[0][-1]
+
+
+class NodeException(Exception):
+ pass
+
+
+class BrowsertimeRunner(NodeRunner):
+ """Runs a browsertime test."""
+
+ name = "browsertime"
+ activated = True
+ user_exception = True
+
+ arguments = {
+ "cycles": {"type": int, "default": 1, "help": "Number of full cycles"},
+ "iterations": {"type": int, "default": 1, "help": "Number of iterations"},
+ "node": {"type": str, "default": None, "help": "Path to Node.js"},
+ "geckodriver": {"type": str, "default": None, "help": "Path to geckodriver"},
+ "binary": {
+ "type": str,
+ "default": None,
+ "help": "Path to the desktop browser, or Android app name.",
+ },
+ "clobber": {
+ "action": "store_true",
+ "default": False,
+ "help": "Force-update the installation.",
+ },
+ "install-url": {
+ "type": str,
+ "default": None,
+ "help": "Use this URL as the install url.",
+ },
+ "extra-options": {
+ "type": str,
+ "default": "",
+ "help": "Extra options passed to browsertime.js",
+ },
+ "xvfb": {"action": "store_true", "default": False, "help": "Use xvfb"},
+ "no-window-recorder": {
+ "action": "store_true",
+ "default": False,
+ "help": "Use the window recorder",
+ },
+ "viewport-size": {"type": str, "default": "1280x1024", "help": "Viewport size"},
+ "existing-results": {
+ "type": str,
+ "default": None,
+ "help": "Directory containing existing results to load.",
+ },
+ }
+
+ def __init__(self, env, mach_cmd):
+ super(BrowsertimeRunner, self).__init__(env, mach_cmd)
+ self.topsrcdir = mach_cmd.topsrcdir
+ self._mach_context = mach_cmd._mach_context
+ self.virtualenv_manager = mach_cmd.virtualenv_manager
+ self._created_dirs = []
+ self._test_script = None
+ self._setup_helper = None
+ self.get_binary_path = mach_cmd.get_binary_path
+
+ @property
+ def setup_helper(self):
+ if self._setup_helper is not None:
+ return self._setup_helper
+ sys.path.append(str(Path(self.topsrcdir, "tools", "lint", "eslint")))
+ import setup_helper
+
+ self._setup_helper = setup_helper
+ return self._setup_helper
+
+ @property
+ def artifact_cache_path(self):
+ """Downloaded artifacts will be kept here."""
+ # The convention is $MOZBUILD_STATE_PATH/cache/$FEATURE.
+ return Path(self._mach_context.state_dir, "cache", "browsertime")
+
+ @property
+ def state_path(self):
+ """Unpacked artifacts will be kept here."""
+ # The convention is $MOZBUILD_STATE_PATH/$FEATURE.
+ res = Path(self._mach_context.state_dir, "browsertime")
+ os.makedirs(str(res), exist_ok=True)
+ return res
+
+ @property
+ def browsertime_js(self):
+ root = os.environ.get("BROWSERTIME", self.state_path)
+ path = Path(root, "node_modules", "browsertime", "bin", "browsertime.js")
+ if path.exists():
+ os.environ["BROWSERTIME_JS"] = str(path)
+ return path
+
+ @property
+ def visualmetrics_py(self):
+ root = os.environ.get("BROWSERTIME", self.state_path)
+ path = Path(
+ root, "node_modules", "browsertime", "browsertime", "visualmetrics.py"
+ )
+ if path.exists():
+ os.environ["VISUALMETRICS_PY"] = str(path)
+ return path
+
+ def _get_browsertime_package(self):
+ with Path(
+ os.environ.get("BROWSERTIME", self.state_path),
+ "node_modules",
+ "browsertime",
+ "package.json",
+ ).open() as package:
+ return json.load(package)
+
+ def _get_browsertime_resolved(self):
+ try:
+ with Path(
+ os.environ.get("BROWSERTIME", self.state_path),
+ "node_modules",
+ ".package-lock.json",
+ ).open() as package_lock:
+ return json.load(package_lock)["packages"]["node_modules/browsertime"][
+ "resolved"
+ ]
+
+ except FileNotFoundError:
+ # Older versions of node/npm add this metadata to package.json
+ return self._get_browsertime_package().get("_from")
+
+ def _should_install(self):
+ # If browsertime doesn't exist, install it
+ if not self.visualmetrics_py.exists() or not self.browsertime_js.exists():
+ return True
+
+ # Browsertime exists, check if it's outdated
+ with Path(BROWSERTIME_SRC_ROOT, "package.json").open() as new:
+ new_pkg = json.load(new)
+
+ return not self._get_browsertime_resolved().endswith(
+ new_pkg["devDependencies"]["browsertime"]
+ )
+
+ def setup(self):
+ """Install browsertime and visualmetrics.py prerequisites and the Node.js package."""
+
+ node = self.get_arg("node")
+ if node is not None:
+ os.environ["NODEJS"] = node
+
+ super(BrowsertimeRunner, self).setup()
+ install_url = self.get_arg("install-url")
+
+ # installing Python deps on the fly
+ visualmetrics = self.get_arg("visualmetrics", False)
+
+ if visualmetrics:
+ # installing Python deps on the fly
+ for dep in get_dependencies():
+ install_package(self.virtualenv_manager, dep, ignore_failure=True)
+
+ # check if the browsertime package has been deployed correctly
+ # for this we just check for the browsertime directory presence
+ # we also make sure the visual metrics module is there *if*
+ # we need it
+ if not self._should_install() and not self.get_arg("clobber"):
+ return
+
+ # preparing ~/.mozbuild/browsertime
+ for file in ("package.json", "package-lock.json"):
+ src = BROWSERTIME_SRC_ROOT / file
+ target = self.state_path / file
+ # Overwrite the existing files
+ shutil.copyfile(str(src), str(target))
+
+ package_json_path = self.state_path / "package.json"
+
+ if install_url is not None:
+ self.info(
+ "Updating browsertime node module version in {package_json_path} "
+ "to {install_url}",
+ install_url=install_url,
+ package_json_path=str(package_json_path),
+ )
+
+ expr = r"/tarball/[a-f0-9]{40}$"
+ if not re.search(expr, install_url):
+ raise ValueError(
+ "New upstream URL does not end with {}: '{}'".format(
+ expr[:-1], install_url
+ )
+ )
+
+ with package_json_path.open() as f:
+ existing_body = json.loads(
+ f.read(), object_pairs_hook=collections.OrderedDict
+ )
+
+ existing_body["devDependencies"]["browsertime"] = install_url
+ updated_body = json.dumps(existing_body)
+ with package_json_path.open("w") as f:
+ f.write(updated_body)
+
+ self._setup_node_packages(package_json_path)
+
+ def _setup_node_packages(self, package_json_path):
+ # Install the browsertime Node.js requirements.
+ if not self.setup_helper.check_node_executables_valid():
+ return
+
+ should_clobber = self.get_arg("clobber")
+ # To use a custom `geckodriver`, set
+ # os.environ[b"GECKODRIVER_BASE_URL"] = bytes(url)
+ # to an endpoint with binaries named like
+ # https://github.com/sitespeedio/geckodriver/blob/master/install.js#L31.
+
+ if ON_TRY:
+ os.environ["CHROMEDRIVER_SKIP_DOWNLOAD"] = "true"
+ os.environ["GECKODRIVER_SKIP_DOWNLOAD"] = "true"
+
+ self.info(
+ "Installing browsertime node module from {package_json}",
+ package_json=str(package_json_path),
+ )
+ install_url = self.get_arg("install-url")
+
+ self.setup_helper.package_setup(
+ str(self.state_path),
+ "browsertime",
+ should_update=install_url is not None,
+ should_clobber=should_clobber,
+ no_optional=install_url or ON_TRY,
+ )
+
+ def extra_default_args(self, args=[]):
+ # Add Mozilla-specific default arguments. This is tricky because browsertime is quite
+ # loose about arguments; repeat arguments are generally accepted but then produce
+ # difficult to interpret type errors.
+ extra_args = []
+
+ # Default to Firefox. Override with `-b ...` or `--browser=...`.
+ if not matches(args, "-b", "--browser"):
+ extra_args.extend(("-b", "firefox"))
+
+ # Default to not collect HAR. Override with `--skipHar=false`.
+ if not matches(args, "--har", "--skipHar", "--gzipHar"):
+ extra_args.append("--skipHar")
+
+ extra_args.extend(["--viewPort", self.get_arg("viewport-size")])
+
+ if not matches(args, "--android"):
+ binary = self.get_arg("binary")
+ if binary is not None:
+ extra_args.extend(("--firefox.binaryPath", binary))
+ else:
+ # If --firefox.binaryPath is not specified, default to the objdir binary
+ # Note: --firefox.release is not a real browsertime option, but it will
+ # silently ignore it instead and default to a release installation.
+ if (
+ not matches(
+ args,
+ "--firefox.binaryPath",
+ "--firefox.release",
+ "--firefox.nightly",
+ "--firefox.beta",
+ "--firefox.developer",
+ )
+ and extract_browser_name(args) != "chrome"
+ ):
+ extra_args.extend(("--firefox.binaryPath", self.get_binary_path()))
+
+ geckodriver = self.get_arg("geckodriver")
+ if geckodriver is not None:
+ extra_args.extend(("--firefox.geckodriverPath", geckodriver))
+
+ if extra_args:
+ self.debug(
+ "Running browsertime with extra default arguments: {extra_args}",
+ extra_args=extra_args,
+ )
+
+ return extra_args
+
+ def _android_args(self, metadata):
+ app_name = self.get_arg("android-app-name")
+
+ args_list = [
+ "--android",
+ "--firefox.android.package",
+ app_name,
+ ]
+ activity = self.get_arg("android-activity")
+ if activity is not None:
+ args_list += ["--firefox.android.activity", activity]
+
+ return args_list
+
+ def _line_handler(self, line):
+ line_matcher = re.compile(r"(\[\d{4}-\d{2}-\d{2}.*\])\s+([a-zA-Z]+):\s+(.*)")
+ match = line_matcher.match(line)
+ if not match:
+ return
+
+ date, level, msg = match.groups()
+ msg = msg.replace("{", "{{").replace("}", "}}")
+ level = level.lower()
+ if "error" in level:
+ self.error("Mozperftest failed to run: {}".format(msg), msg)
+ elif "warning" in level:
+ self.warning(msg)
+ else:
+ self.info(msg)
+
+ def run(self, metadata):
+ self._test_script = metadata.script
+ self.setup()
+
+ existing = self.get_arg("browsertime-existing-results")
+ if existing:
+ metadata.add_result(
+ {"results": existing, "name": self._test_script["name"]}
+ )
+ return metadata
+
+ cycles = self.get_arg("cycles", 1)
+ for cycle in range(1, cycles + 1):
+ # Build an output directory
+ output = self.get_arg("output")
+ if output is None:
+ output = pathlib.Path(self.topsrcdir, "artifacts")
+ result_dir = get_output_dir(output, f"browsertime-results-{cycle}")
+
+ # Run the test cycle
+ metadata.run_hook(
+ "before_cycle", metadata, self.env, cycle, self._test_script
+ )
+ try:
+ metadata = self._one_cycle(metadata, result_dir)
+ finally:
+ metadata.run_hook(
+ "after_cycle", metadata, self.env, cycle, self._test_script
+ )
+ return metadata
+
+ def _one_cycle(self, metadata, result_dir):
+ profile = self.get_arg("profile-directory")
+ is_login_site = False
+
+ args = [
+ "--resultDir",
+ str(result_dir),
+ "--firefox.profileTemplate",
+ profile,
+ "--iterations",
+ str(self.get_arg("iterations")),
+ self._test_script["filename"],
+ ]
+
+ # Set *all* prefs found in browser_prefs because
+ # browsertime will override the ones found in firefox.profileTemplate
+ # with its own defaults at `firefoxPreferences.js`
+ # Using `--firefox.preference` ensures we override them.
+ # see https://github.com/sitespeedio/browsertime/issues/1427
+ browser_prefs = metadata.get_options("browser_prefs")
+ for key, value in browser_prefs.items():
+ args += ["--firefox.preference", f"{key}:{value}"]
+
+ if self.get_arg("verbose"):
+ args += ["-vvv"]
+
+ # if the visualmetrics layer is activated, we want to feed it
+ visualmetrics = self.get_arg("visualmetrics", False)
+ if visualmetrics:
+ args += ["--video", "true"]
+ if not self.get_arg("no-window-recorder"):
+ args += ["--firefox.windowRecorder", "true"]
+
+ extra_options = self.get_arg("extra-options")
+ if extra_options:
+ for option in extra_options.split(","):
+ option = option.strip()
+ if not option:
+ continue
+ option = option.split("=", 1)
+ if len(option) != 2:
+ self.warning(
+ f"Skipping browsertime option {option} as it "
+ "is missing a name/value pairing. We expect options "
+ "to be formatted as: --browsertime-extra-options "
+ "'browserRestartTries=1,timeouts.browserStart=10'"
+ )
+ continue
+ name, value = option
+
+ # Check if we have a login site
+ if name == "browsertime.login" and value:
+ is_login_site = True
+
+ self.info(f"Adding extra browsertime argument: --{name} {value}")
+ args += ["--" + name, value]
+
+ if self.get_arg("android"):
+ args.extend(self._android_args(metadata))
+
+ # Remove any possible verbose option if we are on Try and using logins
+ if is_login_site and ON_TRY:
+ self.info("Turning off verbose mode for login-logic")
+ self.info(
+ "Please contact the perftest team if you need verbose mode enabled."
+ )
+ for verbose_level in ("-v", "-vv", "-vvv", "-vvvv"):
+ try:
+ args.remove(verbose_level)
+ except ValueError:
+ pass
+
+ extra = self.extra_default_args(args=args)
+ command = [str(self.browsertime_js)] + extra + args
+ self.info("Running browsertime with this command %s" % " ".join(command))
+
+ if visualmetrics and self.get_arg("xvfb"):
+ with xvfb():
+ exit_code = self.node(command, self._line_handler)
+ else:
+ exit_code = self.node(command, self._line_handler)
+
+ if exit_code != 0:
+ raise NodeException(exit_code)
+
+ metadata.add_result(
+ {"results": str(result_dir), "name": self._test_script["name"]}
+ )
+
+ return metadata
diff --git a/python/mozperftest/mozperftest/test/browsertime/visualtools.py b/python/mozperftest/mozperftest/test/browsertime/visualtools.py
new file mode 100644
index 0000000000..f96a51f7e0
--- /dev/null
+++ b/python/mozperftest/mozperftest/test/browsertime/visualtools.py
@@ -0,0 +1,277 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+""" Collects visualmetrics dependencies.
+"""
+import contextlib
+import os
+import subprocess
+import sys
+import time
+from distutils.spawn import find_executable
+
+from mozperftest.utils import host_platform
+
+_PILLOW_VERSION = "7.2.0"
+_PYSSIM_VERSION = "0.4"
+
+
+def _start_xvfb():
+ old_display = os.environ.get("DISPLAY")
+ xvfb = find_executable("Xvfb")
+ if xvfb is None:
+ raise FileNotFoundError("Xvfb")
+ cmd = [xvfb, ":99"]
+ proc = subprocess.Popen(
+ cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, close_fds=True
+ )
+ os.environ["DISPLAY"] = ":99"
+ time.sleep(0.2)
+ return proc, old_display
+
+
+def _stop_xvfb(proc, old_display):
+ proc, old_display
+ if old_display is None:
+ del os.environ["DISPLAY"]
+ else:
+ os.environ["DISPLAY"] = old_display
+ if proc is not None:
+ try:
+ proc.terminate()
+ proc.wait()
+ except OSError:
+ pass
+
+
+@contextlib.contextmanager
+def xvfb():
+ proc, old_display = _start_xvfb()
+ try:
+ yield
+ finally:
+ _stop_xvfb(proc, old_display)
+
+
+def get_plat():
+ return host_platform(), f"{sys.version_info.major}.{sys.version_info.minor}"
+
+
+NUMPY = {
+ (
+ "linux64",
+ "3.10",
+ ): (
+ "88/cc/92815174c345015a326e3fff8beddcb951b3ef0f7c8296fcc22c622add7c"
+ "/numpy-1.23.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
+ ),
+ (
+ "linux64",
+ "3.9",
+ ): (
+ "8d/d6/cc2330e512936a904a4db1629b71d697fb309115f6d2ede94d183cdfe185"
+ "/numpy-1.23.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
+ ),
+ (
+ "linux64",
+ "3.8",
+ ): (
+ "86/c9/9f9d6812fa8a031a568c2c1c49f207a0a4030ead438644c887410fc49c8a"
+ "/numpy-1.23.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
+ ),
+ (
+ "linux64",
+ "3.7",
+ ): (
+ "d6/2e/a2dbcff6f46bb65645d18538d67183a1cf56b006ba96a12575c282a976bc/"
+ "numpy-1.19.2-cp37-cp37m-manylinux1_x86_64.whl"
+ ),
+ (
+ "linux64",
+ "3.6",
+ ): (
+ "b8/e5/a64ef44a85397ba3c377f6be9c02f3cb3e18023f8c89850dd319e7945521/"
+ "numpy-1.19.2-cp36-cp36m-manylinux1_x86_64.whl"
+ ),
+ (
+ "darwin",
+ "3.10",
+ ): (
+ "c0/c2/8d58f3ccd1aa3b1eaa5c333a6748e225b45cf8748b13f052cbb3c811c996"
+ "/numpy-1.23.1-cp310-cp310-macosx_10_9_x86_64.whl"
+ ),
+ (
+ "darwin",
+ "3.9",
+ ): (
+ "e5/43/b1b80cbcea9f2d0e6adadd27a8da2c71b751d5670a846b444087fab408a1"
+ "/numpy-1.23.1-cp39-cp39-macosx_10_9_x86_64.whl"
+ ),
+ (
+ "darwin",
+ "3.8",
+ ): (
+ "71/08/bc1e4fb7392aa0721f299c444e8c99fa97c8cb41fe33791eca8e26364639"
+ "/numpy-1.23.1-cp38-cp38-macosx_10_9_x86_64.whl"
+ ),
+ (
+ "darwin",
+ "3.7",
+ ): (
+ "c1/a9/f04a5b7db30cc30b41fe516b8914c5049264490a34a49d977937606fbb23/"
+ "numpy-1.19.2-cp37-cp37m-macosx_10_9_x86_64.whl"
+ ),
+ (
+ "darwin",
+ "3.6",
+ ): (
+ "be/8e/800113bd3a0c9195b24574b8922ad92be96278028833c389b69a8b14f657/"
+ "numpy-1.19.2-cp36-cp36m-macosx_10_9_x86_64.whl"
+ ),
+ (
+ "win64",
+ "3.10",
+ ): (
+ "8b/11/75a93826457f94a4c857a38ea3f178915f27ff38ffee1753e36994be7810"
+ "/numpy-1.23.1-cp310-cp310-win_amd64.whl"
+ ),
+ (
+ "win64",
+ "3.9",
+ ): (
+ "bd/dd/0610fb49c433fe5987ae312fe672119080fd77be484b5698d6fa7554148b"
+ "/numpy-1.23.1-cp39-cp39-win_amd64.whl"
+ ),
+ (
+ "win64",
+ "3.8",
+ ): (
+ "d0/19/6e81ed6fe30271ebcf25e5e2a0bdf1fa06ddee03a8cb82625503826970db"
+ "/numpy-1.23.1-cp38-cp38-win_amd64.whl"
+ ),
+ (
+ "win64",
+ "3.7",
+ ): (
+ "82/4e/61764556b7ec13f5bd441b04530e2f9f11bb164308ef0e6951919bb846cb/"
+ "numpy-1.19.2-cp37-cp37m-win_amd64.whl"
+ ),
+ (
+ "win64",
+ "3.6",
+ ): (
+ "dc/8e/a78d4e4a28adadbf693a9c056a0d5955a906889fa0dc3768b88deb236e22/"
+ "numpy-1.19.2-cp36-cp36m-win_amd64.whl"
+ ),
+}
+
+
+SCIPY = {
+ (
+ "linux64",
+ "3.10",
+ ): (
+ "bc/fe/72b611ba221c3367b06163992af4807515d6e0e09b3b9beee8ec22162d6f"
+ "/scipy-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
+ ),
+ (
+ "linux64",
+ "3.9",
+ ): (
+ "25/82/da07cc3bb40554f1f82d7e24bfa7ffbfb05b50c16eb8d738ebb74b68af8f"
+ "/scipy-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
+ ),
+ (
+ "linux64",
+ "3.8",
+ ): (
+ "cf/28/5ac0afe5fb473a934ef6bc7953a98a3d2eacf9a8f456524f035f3a844ca4"
+ "/scipy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
+ ),
+ (
+ "linux64",
+ "3.7",
+ ): (
+ "65/f9/f7a7e5009711579c72da2725174825e5056741bf4001815d097eef1b2e17"
+ "/scipy-1.5.2-cp37-cp37m-manylinux1_x86_64.whl"
+ ),
+ (
+ "linux64",
+ "3.6",
+ ): (
+ "2b/a8/f4c66eb529bb252d50e83dbf2909c6502e2f857550f22571ed8556f62d95"
+ "/scipy-1.5.2-cp36-cp36m-manylinux1_x86_64.whl"
+ ),
+ (
+ "darwin",
+ "3.10",
+ ): (
+ "7c/f3/47b882f8b7a4dbc38e8bc5d7befe3ad2da582ae2229745e1eac77217f3e4"
+ "/scipy-1.8.1-cp310-cp310-macosx_10_9_x86_64.whl"
+ ),
+ (
+ "darwin",
+ "3.9",
+ ): (
+ "b0/de/e8d273063e1b21ec82e4a09a9654c4dcbc3215abbd59b7038c4ff4272e9e"
+ "/scipy-1.8.1-cp39-cp39-macosx_10_9_x86_64.whl"
+ ),
+ (
+ "darwin",
+ "3.8",
+ ): (
+ "dd/cc/bb5a9705dd30e7f558358168c793084f80de7cca88b06c82dca9d765b225"
+ "/scipy-1.8.1-cp38-cp38-macosx_10_9_x86_64.whl"
+ ),
+ (
+ "darwin",
+ "3.7",
+ ): (
+ "bc/47/e71e7f198a0b547fe861520a0240e3171256822dae81fcc97a36b772303e"
+ "/scipy-1.5.2-cp37-cp37m-macosx_10_9_x86_64.whl"
+ ),
+ (
+ "darwin",
+ "3.6",
+ ): (
+ "00/c0/ddf03baa7ee2a3540d8fbab0fecff7cdd0595dffd91cda746caa95cb686d"
+ "/scipy-1.5.2-cp36-cp36m-macosx_10_9_x86_64.whl"
+ ),
+ ("win64", "3.10"): (
+ "31/c2/0b8758ebaeb43e089eb56168390824a830f9f419ae07d755d99a46e5a937"
+ "/scipy-1.8.1-cp310-cp310-win_amd64.whl"
+ ),
+ ("win64", "3.9"): (
+ "ba/a1/a8fa291b8ae6523866dd099af377bc508c280c8ca43a42483c76775ce3cd"
+ "/scipy-1.8.1-cp39-cp39-win_amd64.whl"
+ ),
+ ("win64", "3.8"): (
+ "8d/3e/e6f6fa6458e03ecd456ae6178529d4bd610a7c4999189f34d0668e4e69a6"
+ "/scipy-1.8.1-cp38-cp38-win_amd64.whl"
+ ),
+ (
+ "win64",
+ "3.7",
+ ): (
+ "66/80/d8a5050df5b4d8229e018f3222fe603ce7f92c026b78f4e05d69c3a6c43b"
+ "/scipy-1.5.2-cp37-cp37m-win_amd64.whl"
+ ),
+ (
+ "win64",
+ "3.6",
+ ): (
+ "fc/f6/3d455f8b376a0faf1081dbba38bbd594c074292bdec08feaac589f53bc06"
+ "/scipy-1.5.2-cp36-cp36m-win_amd64.whl"
+ ),
+}
+
+
+def get_dependencies():
+ return (
+ "https://files.pythonhosted.org/packages/" + NUMPY[get_plat()],
+ "https://files.pythonhosted.org/packages/" + SCIPY[get_plat()],
+ "Pillow==%s" % _PILLOW_VERSION,
+ "pyssim==%s" % _PYSSIM_VERSION,
+ "influxdb==5.3.0",
+ "grafana_api==1.0.3",
+ )
diff --git a/python/mozperftest/mozperftest/test/functionaltestrunner.py b/python/mozperftest/mozperftest/test/functionaltestrunner.py
new file mode 100644
index 0000000000..e099c6b976
--- /dev/null
+++ b/python/mozperftest/mozperftest/test/functionaltestrunner.py
@@ -0,0 +1,82 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import pathlib
+import sys
+
+import mozlog
+
+from mozperftest.utils import load_class_from_path
+
+
+class FunctionalTestProcessor(mozlog.handlers.StreamHandler):
+ """Used for capturing the perfMetrics output from a `mach test` run."""
+
+ def __init__(self, *args, **kwargs):
+ self._match = []
+ super(FunctionalTestProcessor, self).__init__(*args, **kwargs)
+
+ def __call__(self, data):
+ formatted = self.formatter(data)
+ if formatted is not None and "perfMetrics" in formatted:
+ self.match.append(formatted)
+
+ @property
+ def match(self):
+ return self._match
+
+
+class FunctionalTestRunner:
+ def test(command_context, what, extra_args, **log_args):
+ """Run tests from names or paths.
+
+ Based on the `mach test` command in testing/mach_commands.py. It uses
+ the same logic but with less features for logging, and a custom log
+ handler to capture the perfMetrics output.
+ """
+ from mozlog.commandline import setup_logging
+ from moztest.resolve import TestResolver
+
+ resolver = command_context._spawn(TestResolver)
+ run_suites, run_tests = resolver.resolve_metadata(what)
+
+ if not run_suites and not run_tests:
+ print(
+ "Could not find the requested test. Ensure that it works with `./mach test`."
+ )
+ return 1, None
+
+ # Create shared logger
+ setup_logging(
+ "mach-test",
+ log_args,
+ {"mach": sys.stdout},
+ {"level": "info", "verbose": True, "compact": False},
+ )
+
+ # Make a custom handler to capture the perfMetrics log message
+ log_processor = FunctionalTestProcessor(
+ stream=sys.stdout,
+ formatter=mozlog.formatters.MachFormatter(
+ verbose=True, disable_colors=False
+ ),
+ )
+
+ # Setup the runner
+ machtestrunner = load_class_from_path(
+ "MachTestRunner",
+ pathlib.Path(command_context.topsrcdir, "testing/mach_commands.py"),
+ )
+ command_context._mach_context.settings = {
+ "test": {
+ "level": "info",
+ "verbose": True,
+ "compact": False,
+ "format": "mach",
+ },
+ }
+ log_args["custom_handler"] = log_processor
+
+ # Run the test
+ status = machtestrunner.test(command_context, what, extra_args, **log_args)
+ return status, log_processor
diff --git a/python/mozperftest/mozperftest/test/mochitest.py b/python/mozperftest/mozperftest/test/mochitest.py
new file mode 100644
index 0000000000..44cbaf15ba
--- /dev/null
+++ b/python/mozperftest/mozperftest/test/mochitest.py
@@ -0,0 +1,217 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import json
+import os
+from collections import defaultdict
+from contextlib import redirect_stdout
+from pathlib import Path
+
+from mozperftest.layers import Layer
+from mozperftest.test.functionaltestrunner import FunctionalTestRunner
+from mozperftest.utils import (
+ METRICS_MATCHER,
+ ON_TRY,
+ LogProcessor,
+ NoPerfMetricsError,
+ install_requirements_file,
+)
+
+
+class MissingMochitestInformation(Exception):
+ """Raised when information needed to run a mochitest is missing."""
+
+ pass
+
+
+class MochitestTestFailure(Exception):
+ """Raised when a mochitest test returns a non-zero exit code."""
+
+ pass
+
+
+class MochitestData:
+ def open_data(self, data):
+ return {
+ "name": "mochitest",
+ "subtest": data["name"],
+ "data": [
+ {"file": "mochitest", "value": value, "xaxis": xaxis}
+ for xaxis, value in enumerate(data["values"])
+ ],
+ }
+
+ def transform(self, data):
+ return data
+
+ merge = transform
+
+
+class Mochitest(Layer):
+ """Runs a mochitest test through `mach test` locally, and directly with mochitest in CI."""
+
+ name = "mochitest"
+ activated = True
+
+ arguments = {
+ "binary": {
+ "type": str,
+ "default": None,
+ "help": ("Path to the browser."),
+ },
+ "cycles": {
+ "type": int,
+ "default": 1,
+ "help": ("Number of cycles/iterations to do for the test."),
+ },
+ "manifest": {
+ "type": str,
+ "default": None,
+ "help": (
+ "Path to the manifest that contains the test (only required in CI)."
+ ),
+ },
+ "manifest-flavor": {
+ "type": str,
+ "default": None,
+ "help": "Mochitest flavor of the test to run (only required in CI).",
+ },
+ "extra-args": {
+ "nargs": "*",
+ "type": str,
+ "default": [],
+ "help": (
+ "Additional arguments to pass to mochitest. Expected in a format such as: "
+ "--mochitest-extra-args headless profile-path=/path/to/profile"
+ ),
+ },
+ }
+
+ def __init__(self, env, mach_cmd):
+ super(Mochitest, self).__init__(env, mach_cmd)
+ self.topsrcdir = mach_cmd.topsrcdir
+ self._mach_context = mach_cmd._mach_context
+ self.python_path = mach_cmd.virtualenv_manager.python_path
+ self.topobjdir = mach_cmd.topobjdir
+ self.distdir = mach_cmd.distdir
+ self.bindir = mach_cmd.bindir
+ self.statedir = mach_cmd.statedir
+ self.metrics = []
+ self.topsrcdir = mach_cmd.topsrcdir
+
+ def setup(self):
+ if ON_TRY:
+ # Install marionette requirements
+ install_requirements_file(
+ self.mach_cmd.virtualenv_manager,
+ str(
+ Path(
+ os.getenv("MOZ_FETCHES_DIR"),
+ "config",
+ "marionette_requirements.txt",
+ )
+ ),
+ )
+
+ def _parse_extra_args(self, extra_args):
+ """Sets up the extra-args for passing to mochitest."""
+ parsed_extra_args = []
+ for arg in extra_args:
+ parsed_extra_args.append(f"--{arg}")
+ return parsed_extra_args
+
+ def remote_run(self, test, metadata):
+ """Run tests in CI."""
+ import runtests
+ from manifestparser import TestManifest
+ from mochitest_options import MochitestArgumentParser
+
+ manifest_flavor = self.get_arg("manifest-flavor")
+ manifest_name = self.get_arg("manifest")
+ if not manifest_name:
+ raise MissingMochitestInformation(
+ "Name of manifest that contains test needs to be"
+ "specified (e.g. mochitest-common.ini)"
+ )
+ if not manifest_flavor:
+ raise MissingMochitestInformation(
+ "Mochitest flavor needs to be provided"
+ "(e.g. plain, browser-chrome, ...)"
+ )
+
+ manifest_path = Path(test.parent, manifest_name)
+ manifest = TestManifest([str(manifest_path)], strict=False)
+ manifest.active_tests(paths=[str(test)])
+
+ # Use the mochitest argument parser to parse the extra argument
+ # options, and produce an `args` object that has all the defaults
+ parser = MochitestArgumentParser()
+ args = parser.parse_args(self._parse_extra_args(self.get_arg("extra-args")))
+
+ # Bug 1858155 - Attempting to only use one test_path triggers a failure
+ # during test execution
+ args.test_paths = [str(test.name), str(test.name)]
+ args.keep_open = False
+ args.runByManifest = True
+ args.manifestFile = manifest
+ args.topobjdir = self.topobjdir
+ args.topsrcdir = self.topsrcdir
+ args.flavor = manifest_flavor
+ args.app = self.get_arg("binary")
+
+ fetch_dir = os.getenv("MOZ_FETCHES_DIR")
+ args.utilityPath = str(Path(fetch_dir, "bin"))
+ args.extraProfileFiles.append(str(Path(fetch_dir, "bin", "plugins")))
+ args.testingModulesDir = str(Path(fetch_dir, "modules"))
+ args.symbolsPath = str(Path(fetch_dir, "crashreporter-symbols"))
+ args.certPath = str(Path(fetch_dir, "certs"))
+
+ log_processor = LogProcessor(METRICS_MATCHER)
+ with redirect_stdout(log_processor):
+ result = runtests.run_test_harness(parser, args)
+
+ return result, log_processor
+
+ def run(self, metadata):
+ test = Path(metadata.script["filename"])
+
+ results = defaultdict(list)
+ cycles = self.get_arg("cycles", 1)
+ for cycle in range(1, cycles + 1):
+ if ON_TRY:
+ status, log_processor = self.remote_run(test, metadata)
+ else:
+ status, log_processor = FunctionalTestRunner.test(
+ self.mach_cmd,
+ [str(test)],
+ self._parse_extra_args(self.get_arg("extra-args"))
+ + ["--keep-open=False"],
+ )
+
+ if status is not None and status != 0:
+ raise MochitestTestFailure("Test failed to run")
+
+ # Parse metrics found
+ for metrics_line in log_processor.match:
+ self.metrics.append(json.loads(metrics_line.split("|")[-1].strip()))
+
+ for m in self.metrics:
+ for key, val in m.items():
+ results[key].append(val)
+
+ if len(results.items()) == 0:
+ raise NoPerfMetricsError("mochitest")
+
+ metadata.add_result(
+ {
+ "name": test.name,
+ "framework": {"name": "mozperftest"},
+ "transformer": "mozperftest.test.mochitest:MochitestData",
+ "results": [
+ {"values": measures, "name": subtest}
+ for subtest, measures in results.items()
+ ],
+ }
+ )
+
+ return metadata
diff --git a/python/mozperftest/mozperftest/test/noderunner.py b/python/mozperftest/mozperftest/test/noderunner.py
new file mode 100644
index 0000000000..4304609bff
--- /dev/null
+++ b/python/mozperftest/mozperftest/test/noderunner.py
@@ -0,0 +1,75 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import os
+import sys
+
+import mozpack.path as mozpath
+
+from mozperftest.layers import Layer
+from mozperftest.utils import silence
+
+
+class NodeRunner(Layer):
+ name = "node"
+
+ def __init__(self, env, mach_cmd):
+ super(NodeRunner, self).__init__(env, mach_cmd)
+ self.topsrcdir = mach_cmd.topsrcdir
+ self._mach_context = mach_cmd._mach_context
+ self.python_path = mach_cmd.virtualenv_manager.python_path
+
+ from mozbuild.nodeutil import find_node_executable
+
+ self.node_path = os.path.abspath(find_node_executable()[0])
+
+ def setup(self):
+ """Install the Node.js package."""
+ self.verify_node_install()
+
+ def node(self, args, line_handler=None):
+ """Invoke node (interactively) with the given arguments."""
+ return self.run_process(
+ [self.node_path] + args,
+ append_env=self.append_env(),
+ pass_thru=False, # Allow user to run Node interactively.
+ ensure_exit_code=False, # Don't throw on non-zero exit code.
+ cwd=mozpath.join(self.topsrcdir),
+ line_handler=line_handler,
+ )
+
+ def append_env(self, append_path=True):
+ # Ensure that bare `node` and `npm` in scripts, including post-install
+ # scripts, finds the binary we're invoking with. Without this, it's
+ # easy for compiled extensions to get mismatched versions of the Node.js
+ # extension API.
+ path = os.environ.get("PATH", "").split(os.pathsep) if append_path else []
+ node_dir = os.path.dirname(self.node_path)
+ path = [node_dir] + path
+
+ return {
+ "PATH": os.pathsep.join(path),
+ # Bug 1560193: The JS library browsertime uses to execute commands
+ # (execa) will muck up the PATH variable and put the directory that
+ # node is in first in path. If this is globally-installed node,
+ # that means `/usr/bin` will be inserted first which means that we
+ # will get `/usr/bin/python` for `python`.
+ #
+ # Our fork of browsertime supports a `PYTHON` environment variable
+ # that points to the exact python executable to use.
+ "PYTHON": self.python_path,
+ }
+
+ def verify_node_install(self):
+ # check if Node is installed
+ sys.path.append(mozpath.join(self.topsrcdir, "tools", "lint", "eslint"))
+ import setup_helper
+
+ with silence():
+ node_valid = setup_helper.check_node_executables_valid()
+ if not node_valid:
+ # running again to get details printed out
+ setup_helper.check_node_executables_valid()
+ raise ValueError("Can't find Node. did you run ./mach bootstrap ?")
+
+ return True
diff --git a/python/mozperftest/mozperftest/test/webpagetest.py b/python/mozperftest/mozperftest/test/webpagetest.py
new file mode 100644
index 0000000000..82e62efa8c
--- /dev/null
+++ b/python/mozperftest/mozperftest/test/webpagetest.py
@@ -0,0 +1,414 @@
+import json
+import pathlib
+import re
+import time
+import traceback
+from threading import Thread
+
+import requests
+
+import mozperftest.utils as utils
+from mozperftest.layers import Layer
+from mozperftest.runner import HERE
+
+ACCEPTED_BROWSERS = ["Chrome", "Firefox"]
+
+ACCEPTED_CONNECTIONS = [
+ "DSL",
+ "Cable",
+ "FIOS",
+ "Dial",
+ "Edge",
+ "2G",
+ "3GSlow",
+ "3GFast",
+ "3G",
+ "4G",
+ "LTE",
+ "Native",
+ "custom",
+]
+
+ACCEPTED_STATISTICS = ["average", "median", "standardDeviation"]
+WPT_KEY_FILE = "WPT_key.txt"
+WPT_API_EXPIRED_MESSAGE = "API key expired"
+
+
+class WPTTimeOutError(Exception):
+ """
+ This error is raised if a request that you have made has not returned results within a
+ specified time, for this code that timeout is ~6 hours.
+ """
+
+ pass
+
+
+class WPTBrowserSelectionError(Exception):
+ """
+ This error is raised if you provide an invalid browser option when requesting a test
+ The only browsers allowed are specified the ACCEPTED_BROWSERS list at the top of the code
+ browser must be a case-sensitive match in the list.
+ """
+
+ pass
+
+
+class WPTLocationSelectionError(Exception):
+ """
+ This error is raised if you provide an invalid testing location option when requesting a test
+ Acceptable locations are specified here: https://www.webpagetest.org/getTesters.php?f=html
+ Connection type must be a case-sensitive match
+ For example to test in Virginia, USA you would put ec2-us-east1 as your location.
+ """
+
+ pass
+
+
+class WPTInvalidConnectionSelection(Exception):
+ """
+ This error is raised if you provide an invalid connection option when requesting a test
+ The only connection allowed are specified the ACCEPTED_CONNECTIONS list at the top of the code
+ Connection type must be a case-sensitive match in the list.
+ """
+
+ pass
+
+
+class WPTDataProcessingError(Exception):
+ """
+ This error is raised when a value you were expecting in your webpagetest result is not there.
+ """
+
+ pass
+
+
+class WPTInvalidURLError(Exception):
+ """
+ This error is raised if you provide an invalid website url when requesting a test
+ A website must be in the format {domain_name}.{top_level_domain}
+ for example "google.ca" and "youtube.com" both work and are valid website urls, but
+ "google" and "youtube" are not.
+ """
+
+ pass
+
+
+class WPTErrorWithWebsite(Exception):
+ """
+ This error is raised if the first and repeat view results of the test you requested
+ is not in-line with what is returned. For instance if you request 3 runs with first
+ and repeat view and results show 3 first view and 2 repeat view tests this exception
+ is raised.
+ """
+
+ pass
+
+
+class WPTInvalidStatisticsError(Exception):
+ """
+ This error is raised if the first and repeat view results of the test you requested
+ is not in-line with what is returned. For instance if you request 3 runs with first
+ and repeat view and results show 3 first view and 2 repeat view tests this exception
+ is raised.
+ """
+
+ pass
+
+
+class WPTExpiredAPIKeyError(Exception):
+ """
+ This error is raised if we get a notification from WPT that our API key has expired
+ """
+
+ pass
+
+
+class PropagatingErrorThread(Thread):
+ def run(self):
+ self.exc = None
+ try:
+ self._target(*self._args, **self._kwargs)
+ except Exception as e:
+ self.exc = e
+
+ def join(self, timeout=None):
+ super(PropagatingErrorThread, self).join()
+ if self.exc:
+ raise self.exc
+
+
+class WebPageTestData:
+ def open_data(self, data):
+ return {
+ "name": "webpagetest",
+ "subtest": data["name"],
+ "data": [
+ {"file": "webpagetest", "value": value, "xaxis": xaxis}
+ for xaxis, value in enumerate(data["values"])
+ ],
+ "shouldAlert": True,
+ }
+
+ def transform(self, data):
+ return data
+
+ merge = transform
+
+
+class WebPageTest(Layer):
+ """
+ This is the webpagetest layer, it is responsible for sending requests to run a webpagetest
+ pageload test, receiving the results as well processing them into a useful data format.
+ """
+
+ name = "webpagetest"
+ activated = False
+ arguments = {
+ "no-video": {
+ "action": "store_true",
+ "default": False,
+ "help": "Disable video, required for calculating Speed Index and filmstrip view",
+ },
+ "no-images": {
+ "action": "store_true",
+ "default": False,
+ "help": "Set to True to disable screenshot capturing, False by default",
+ },
+ }
+
+ def __init__(self, env, mach_cmd):
+ super(WebPageTest, self).__init__(env, mach_cmd)
+ if utils.ON_TRY:
+ self.WPT_key = utils.get_tc_secret(wpt=True)["wpt_key"]
+ else:
+ self.WPT_key = pathlib.Path(HERE, WPT_KEY_FILE).open().read()
+ self.statistic_types = ["average", "median", "standardDeviation"]
+ self.timeout_limit = 21600
+ self.wait_between_requests = 180
+
+ def run(self, metadata):
+ options = metadata.script["options"]
+ test_list = options["test_list"]
+ self.statistic_types = options["test_parameters"]["statistics"]
+ self.wpt_browser_metrics = options["browser_metrics"]
+ self.pre_run_error_checks(options["test_parameters"], test_list)
+ self.create_and_run_wpt_threaded_tests(test_list, metadata)
+ try:
+ self.test_runs_left_this_month()
+ except Exception:
+ self.warning("testBalance check had an issue, please investigate")
+ return metadata
+
+ def pre_run_error_checks(self, options, test_list):
+ if options["browser"] not in ACCEPTED_BROWSERS:
+ raise WPTBrowserSelectionError(
+ "Invalid Browser Option Selected, please choose one of the following: "
+ f"{ACCEPTED_BROWSERS}"
+ )
+ if options["connection"] not in ACCEPTED_CONNECTIONS:
+ raise WPTInvalidConnectionSelection(
+ "Invalid Connection Option Selected, please choose one of the following: "
+ f"{ACCEPTED_CONNECTIONS}"
+ )
+ if not len(self.statistic_types):
+ raise WPTInvalidStatisticsError(
+ "No statistics provided please provide some"
+ )
+ for stat in self.statistic_types:
+ if stat not in ACCEPTED_STATISTICS:
+ raise WPTInvalidStatisticsError(
+ f"This is an invalid statistic, statistics can only be from "
+ f"the following list: {ACCEPTED_STATISTICS}"
+ )
+
+ if "timeout_limit" in options.keys():
+ self.timeout_limit = options["timeout_limit"]
+ if "wait_between_requests" in options.keys():
+ self.wait_between_requests = options["wait_between_requests"]
+ if "statistics" in options.keys():
+ self.statistic_types = options["statistics"]
+
+ options["capture_video"] = 0 if self.get_arg("no-video") else options["video"]
+ options["noimages"] = 1 if self.get_arg("no-images") else options["noimages"]
+ self.location_queue(options["location"])
+ self.check_urls_are_valid(test_list)
+
+ def location_queue(self, location):
+ location_list = {}
+ try:
+ location_list = self.request_with_timeout(
+ "https://webpagetest.org/getLocations.php?f=json"
+ )["data"]
+ except Exception:
+ self.error(
+ "Error with getting location queue data, see below for more details"
+ )
+ self.info(traceback.format_exc())
+ if location and location not in location_list.keys():
+ raise WPTLocationSelectionError(
+ "Invalid location selected please choose one of the locations here: "
+ f"{location_list.keys()}"
+ )
+ self.info(
+ f"Test queue at {location}({location_list[location]['Label']}) is "
+ f"{location_list[location]['PendingTests']['Queued']}"
+ )
+
+ def request_with_timeout(self, url):
+ request_header = {"Host": "www.webpagetest.org"}
+ requested_results = requests.get(url, headers=request_header)
+ results_of_request = json.loads(requested_results.text)
+ start = time.monotonic()
+ if (
+ "statusText" in results_of_request.keys()
+ and results_of_request["statusText"] == WPT_API_EXPIRED_MESSAGE
+ ):
+ raise WPTExpiredAPIKeyError("The API key has expired")
+ while (
+ requested_results.status_code == 200
+ and time.monotonic() - start < self.timeout_limit
+ and (
+ "statusCode" in results_of_request.keys()
+ and results_of_request["statusCode"] != 200
+ )
+ ):
+ requested_results = requests.get(url, headers=request_header)
+ results_of_request = json.loads(requested_results.text)
+ time.sleep(self.wait_between_requests)
+ if time.monotonic() - start > self.timeout_limit:
+ raise WPTTimeOutError(
+ f"{url} test timed out after {self.timeout_limit} seconds"
+ )
+ return results_of_request
+
+ def check_urls_are_valid(self, test_list):
+ for url in test_list:
+ if "." not in url:
+ raise WPTInvalidURLError(f"{url} is an invalid url")
+
+ def create_and_run_wpt_threaded_tests(self, test_list, metadata):
+ threads = []
+ for website in test_list:
+ t = PropagatingErrorThread(
+ target=self.create_and_run_wpt_tests, args=(website, metadata)
+ )
+ t.start()
+ threads.append(t)
+ for thread in threads:
+ thread.join()
+
+ def create_and_run_wpt_tests(self, website_to_be_tested, metadata):
+ wpt_run = self.get_WPT_results(
+ website_to_be_tested, metadata.script["options"]["test_parameters"]
+ )
+ self.post_run_error_checks(
+ wpt_run, metadata.script["options"], website_to_be_tested
+ )
+ self.add_wpt_run_to_metadata(wpt_run, metadata, website_to_be_tested)
+
+ def get_WPT_results(self, website, options):
+ self.info(f"Testing: {website}")
+ wpt_test_request_link = self.create_wpt_request_link(options, website)
+ send_wpt_test_request = self.request_with_timeout(wpt_test_request_link)[
+ "data"
+ ]["jsonUrl"]
+ results_of_test = self.request_with_timeout(send_wpt_test_request)
+ return results_of_test
+
+ def create_wpt_request_link(self, options, website_to_be_tested):
+ test_parameters = ""
+ for key_value_pair in list(options.items())[6:]:
+ test_parameters += "&{}={}".format(*key_value_pair)
+ return (
+ f"https://webpagetest.org/runtest.php?url={website_to_be_tested}&k={self.WPT_key}&"
+ f"location={options['location']}:{options['browser']}.{options['connection']}&"
+ f"f=json{test_parameters}"
+ )
+
+ def post_run_error_checks(self, results_of_test, options, url):
+ self.info(f"{url} test can be found here: {results_of_test['data']['summary']}")
+
+ if results_of_test["data"]["testRuns"] != results_of_test["data"][
+ "successfulFVRuns"
+ ] or (
+ not results_of_test["data"]["fvonly"]
+ and results_of_test["data"]["testRuns"]
+ != results_of_test["data"]["successfulRVRuns"]
+ ):
+ """
+ This error is raised in 2 conditions:
+ 1) If the testRuns requested does not equal the successfulFVRuns(Firstview runs)
+ 2) If repeat view is enabled and if testRuns requested does not equal successfulFVRuns
+ and successfulRVRuns
+ """
+ # TODO: establish a threshold for failures, and consider failing see bug 1762470
+ self.warning(
+ f"Something went wrong with firstview/repeat view runs for: {url}"
+ )
+ self.confirm_correct_browser_and_location(
+ results_of_test["data"], options["test_parameters"]
+ )
+
+ def confirm_correct_browser_and_location(self, data, options):
+ if data["location"] != f"{options['location']}:{options['browser']}":
+ raise WPTBrowserSelectionError(
+ "Resulting browser & location are not aligned with submitted browser & location"
+ )
+
+ def add_wpt_run_to_metadata(self, wbt_run, metadata, website):
+ requested_values = self.extract_desired_values_from_wpt_run(wbt_run)
+ if requested_values is not None:
+ metadata.add_result(
+ {
+ "name": ("WebPageTest:" + re.match(r"(^.\w+)", website)[0]),
+ "framework": {"name": "mozperftest"},
+ "transformer": "mozperftest.test.webpagetest:WebPageTestData",
+ "shouldAlert": True,
+ "results": [
+ {
+ "values": [metric_value],
+ "name": metric_name,
+ "shouldAlert": True,
+ }
+ for metric_name, metric_value in requested_values.items()
+ ],
+ }
+ )
+
+ def extract_desired_values_from_wpt_run(self, wpt_run):
+ view_types = ["firstView"]
+ if not wpt_run["data"]["fvonly"]:
+ view_types.append("repeatView")
+ desired_values = {}
+ for statistic in self.statistic_types:
+ for view in view_types:
+ for value in self.wpt_browser_metrics:
+ if isinstance(wpt_run["data"][statistic][view], list):
+ self.error(f"Fail {wpt_run['data']['url']}")
+ return
+ if value not in wpt_run["data"][statistic][view].keys():
+ raise WPTDataProcessingError(
+ f"{value} not found {wpt_run['data']['url']}"
+ )
+ desired_values[f"{value}.{view}.{statistic}"] = int(
+ wpt_run["data"][statistic][view][value]
+ )
+ try:
+ desired_values["browserVersion"] = float(
+ re.match(
+ r"\d+.\d+",
+ wpt_run["data"]["runs"]["1"]["firstView"]["browserVersion"],
+ )[0]
+ )
+ desired_values["webPagetestVersion"] = float(wpt_run["webPagetestVersion"])
+ except Exception:
+ self.error("Issue found with processing browser/WPT version")
+ return desired_values
+
+ def test_runs_left_this_month(self):
+ tests_left_this_month = self.request_with_timeout(
+ f"https://www.webpagetest.org/testBalance.php?k={self.WPT_key}&f=json"
+ )
+ self.info(
+ f"There are {tests_left_this_month['data']['remaining']} tests remaining"
+ )
diff --git a/python/mozperftest/mozperftest/test/xpcshell.py b/python/mozperftest/mozperftest/test/xpcshell.py
new file mode 100644
index 0000000000..fb325f93a8
--- /dev/null
+++ b/python/mozperftest/mozperftest/test/xpcshell.py
@@ -0,0 +1,184 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import os
+from collections import defaultdict
+from distutils.dir_util import copy_tree
+from pathlib import Path
+
+from mozperftest.layers import Layer
+from mozperftest.utils import NoPerfMetricsError, temp_dir
+
+
+class XPCShellTestError(Exception):
+ pass
+
+
+class XPCShellData:
+ def open_data(self, data):
+ return {
+ "name": "xpcshell",
+ "subtest": data["name"],
+ "data": [
+ {"file": "xpcshell", "value": value, "xaxis": xaxis}
+ for xaxis, value in enumerate(data["values"])
+ ],
+ }
+
+ def transform(self, data):
+ return data
+
+ merge = transform
+
+
+class XPCShell(Layer):
+ """Runs an xpcshell test."""
+
+ name = "xpcshell"
+ activated = True
+
+ arguments = {
+ "cycles": {"type": int, "default": 13, "help": "Number of full cycles"},
+ "binary": {
+ "type": str,
+ "default": None,
+ "help": (
+ "xpcshell binary path. If not provided, "
+ "looks for it in the source tree."
+ ),
+ },
+ "mozinfo": {
+ "type": str,
+ "default": None,
+ "help": (
+ "mozinfo binary path. If not provided, looks for it in the obj tree."
+ ),
+ },
+ "xre-path": {"type": str, "default": None, "help": "XRE path."},
+ "nodejs": {"type": str, "default": None, "help": "nodejs binary path."},
+ }
+
+ def __init__(self, env, mach_cmd):
+ super(XPCShell, self).__init__(env, mach_cmd)
+ self.topsrcdir = mach_cmd.topsrcdir
+ self._mach_context = mach_cmd._mach_context
+ self.python_path = mach_cmd.virtualenv_manager.python_path
+ self.topobjdir = mach_cmd.topobjdir
+ self.distdir = mach_cmd.distdir
+ self.bindir = mach_cmd.bindir
+ self.statedir = mach_cmd.statedir
+ self.metrics = []
+ self.topsrcdir = mach_cmd.topsrcdir
+
+ def setup(self):
+ pass
+
+ def run(self, metadata):
+ test = Path(metadata.script["filename"])
+
+ # let's grab the manifest
+ manifest = Path(test.parent, "xpcshell.ini")
+ if not manifest.exists():
+ manifest = Path(test.parent, "xpcshell.toml")
+ if not manifest.exists():
+ raise FileNotFoundError(str(manifest))
+
+ nodejs = self.get_arg("nodejs")
+ if nodejs is not None:
+ os.environ["MOZ_NODE_PATH"] = nodejs
+
+ import runxpcshelltests
+
+ verbose = self.get_arg("verbose")
+ xpcshell = runxpcshelltests.XPCShellTests(log=self)
+ kwargs = {}
+ kwargs["testPaths"] = test.name
+ kwargs["verbose"] = verbose
+ binary = self.get_arg("binary")
+ if binary is None:
+ binary = self.mach_cmd.get_binary_path("xpcshell")
+ kwargs["xpcshell"] = binary
+ binary = Path(binary)
+ mozinfo = self.get_arg("mozinfo")
+ if mozinfo is None:
+ mozinfo = binary.parent / ".." / "mozinfo.json"
+ if not mozinfo.exists():
+ mozinfo = Path(self.topobjdir, "mozinfo.json")
+ else:
+ mozinfo = Path(mozinfo)
+
+ kwargs["mozInfo"] = str(mozinfo)
+ kwargs["symbolsPath"] = str(Path(self.distdir, "crashreporter-symbols"))
+ kwargs["logfiles"] = True
+ kwargs["profileName"] = "firefox"
+ plugins = binary.parent / "plugins"
+ if not plugins.exists():
+ plugins = Path(self.distdir, "plugins")
+ kwargs["pluginsPath"] = str(plugins)
+
+ modules = Path(self.topobjdir, "_tests", "modules")
+ if not modules.exists():
+ modules = binary.parent / "modules"
+
+ kwargs["testingModulesDir"] = str(modules)
+ kwargs["utility_path"] = self.bindir
+ kwargs["manifest"] = str(manifest)
+ kwargs["totalChunks"] = 1
+ xre_path = self.get_arg("xre-path")
+ if xre_path is not None:
+ self.info(f"Copying {xre_path} elements to {binary.parent}")
+ copy_tree(xre_path, str(binary.parent), update=True)
+
+ http3server = binary.parent / "http3server"
+ if http3server.exists():
+ kwargs["http3server"] = str(http3server)
+
+ cycles = self.get_arg("cycles", 1)
+ self.info("Running %d cycles" % cycles)
+
+ for cycle in range(cycles):
+ self.info("Cycle %d" % (cycle + 1))
+ with temp_dir() as tmp:
+ kwargs["tempDir"] = tmp
+ if not xpcshell.runTests(kwargs):
+ raise XPCShellTestError()
+
+ self.info("tests done.")
+
+ results = defaultdict(list)
+ for m in self.metrics:
+ for key, val in m.items():
+ results[key].append(val)
+
+ if len(results.items()) == 0:
+ raise NoPerfMetricsError("xpcshell")
+
+ metadata.add_result(
+ {
+ "name": test.name,
+ "framework": {"name": "mozperftest"},
+ "transformer": "mozperftest.test.xpcshell:XPCShellData",
+ "results": [
+ {"values": measures, "name": subtest}
+ for subtest, measures in results.items()
+ ],
+ }
+ )
+
+ return metadata
+
+ def log_raw(self, data, **kw):
+ if data["action"] != "log":
+ return
+ if data["message"].strip('"') != "perfMetrics":
+ self.info(data["message"])
+ return
+ self.metrics.append(data["extra"])
+
+ def process_output(self, procid, line, command):
+ self.info(line)
+
+ def dummy(self, *args, **kw):
+ pass
+
+ test_end = suite_start = suite_end = test_start = dummy
diff --git a/python/mozperftest/mozperftest/tests/__init__.py b/python/mozperftest/mozperftest/tests/__init__.py
new file mode 100644
index 0000000000..792d600548
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/__init__.py
@@ -0,0 +1 @@
+#
diff --git a/python/mozperftest/mozperftest/tests/conftest.py b/python/mozperftest/mozperftest/tests/conftest.py
new file mode 100644
index 0000000000..9de1150c9e
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/conftest.py
@@ -0,0 +1,152 @@
+import json
+import os
+import pathlib
+import sys
+from unittest import mock
+
+import pytest
+
+from mozperftest.metrics.notebook.perftestetl import PerftestETL
+from mozperftest.metrics.notebook.perftestnotebook import PerftestNotebook
+from mozperftest.tests.support import HERE, get_running_env
+from mozperftest.utils import temp_dir
+
+
+@pytest.fixture
+def patched_mozperftest_tools():
+ tools_mock = mock.MagicMock(name="tools-mock")
+ _module = mock.MagicMock(name="mozperftest_tools")
+ _module.SideBySide.return_value = tools_mock
+
+ try:
+ sys.modules["mozperftest_tools.side_by_side"] = _module
+ yield tools_mock
+ finally:
+ del sys.modules["mozperftest_tools.side_by_side"]
+
+
+@pytest.fixture(scope="session", autouse=True)
+def data():
+ data_1 = {
+ "browserScripts": [
+ {"timings": {"firstPaint": 101}},
+ {"timings": {"firstPaint": 102}},
+ {"timings": {"firstPaint": 103}},
+ ],
+ }
+
+ data_2 = {
+ "browserScripts": [
+ {"timings": {"firstPaint": 201}},
+ {"timings": {"firstPaint": 202}},
+ {"timings": {"firstPaint": 203}},
+ ],
+ }
+
+ data_3 = {
+ "browserScripts": [
+ {"timings": {"firstPaint": 301}},
+ {"timings": {"firstPaint": 302}},
+ {"timings": {"firstPaint": 303}},
+ ],
+ }
+
+ yield {"data_1": data_1, "data_2": data_2, "data_3": data_3}
+
+
+@pytest.fixture(scope="session", autouse=True)
+def standarized_data():
+ return {
+ "browsertime": [
+ {
+ "data": [
+ {"value": 1, "xaxis": 1, "file": "file_1"},
+ {"value": 2, "xaxis": 2, "file": "file_2"},
+ ],
+ "name": "name",
+ "subtest": "subtest",
+ }
+ ]
+ }
+
+
+@pytest.fixture(scope="session", autouse=True)
+def files(data):
+ # Create a temporary directory.
+ with temp_dir() as td:
+ tmp_path = pathlib.Path(td)
+
+ dirs = {
+ "resources": tmp_path / "resources",
+ "output": tmp_path / "output",
+ }
+
+ for d in dirs.values():
+ d.mkdir(parents=True, exist_ok=True)
+
+ # Create temporary data files for tests.
+ def _create_temp_files(path, data):
+ path.touch(exist_ok=True)
+ path.write_text(data)
+ return path.resolve().as_posix()
+
+ resources = {}
+ json_1 = dirs["resources"] / "file_1.json"
+ resources["file_1"] = _create_temp_files(json_1, json.dumps(data["data_1"]))
+
+ json_2 = dirs["resources"] / "file_2.json"
+ resources["file_2"] = _create_temp_files(json_2, json.dumps(data["data_2"]))
+
+ txt_3 = dirs["resources"] / "file_3.txt"
+ resources["file_3"] = _create_temp_files(txt_3, str(data["data_3"]))
+
+ output = dirs["output"] / "output.json"
+
+ yield {
+ "resources": resources,
+ "dirs": dirs,
+ "output": output,
+ }
+
+
+@pytest.fixture(scope="session", autouse=True)
+def ptetls(files):
+ resources, dirs, output = files["resources"], files["dirs"], files["output"]
+ _, metadata, _ = get_running_env()
+ config = {"output": output}
+ file_group_list = {"group_1": list(resources.values())}
+ file_group_str = {"group_1": dirs["resources"].resolve().as_posix()}
+
+ yield {
+ "ptetl_list": PerftestETL(
+ file_groups=file_group_list,
+ config=config,
+ prefix="PerftestETL",
+ logger=metadata,
+ sort_files=True,
+ ),
+ "ptetl_str": PerftestETL(
+ file_groups=file_group_str,
+ config=config,
+ prefix="PerftestETL",
+ logger=metadata,
+ sort_files=True,
+ ),
+ }
+
+
+@pytest.fixture(scope="session", autouse=True)
+def ptnb(standarized_data):
+ _, metadata, _ = get_running_env()
+ return PerftestNotebook(standarized_data, metadata, "PerftestNotebook")
+
+
+@pytest.fixture(scope="function", autouse=True)
+def perftestetl_plugin():
+ ret = HERE / "data" / "perftestetl_plugin"
+
+ os.environ["PERFTESTETL_PLUGIN"] = ret.resolve().as_posix()
+
+ yield ret
+
+ del os.environ["PERFTESTETL_PLUGIN"]
diff --git a/python/mozperftest/mozperftest/tests/data/WPT_fakekey.txt b/python/mozperftest/mozperftest/tests/data/WPT_fakekey.txt
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/WPT_fakekey.txt
diff --git a/python/mozperftest/mozperftest/tests/data/browsertime-results-video/browsertime.json b/python/mozperftest/mozperftest/tests/data/browsertime-results-video/browsertime.json
new file mode 100644
index 0000000000..d2b2f83f2d
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/browsertime-results-video/browsertime.json
@@ -0,0 +1,991 @@
+[
+ {
+ "info": {
+ "browsertime": {
+ "version": "8.3.0"
+ },
+ "url": "https://www.bbc.com/news/world-middle-east-53598965",
+ "timestamp": "2020-08-03T11:18:37+02:00",
+ "connectivity": {
+ "engine": "external",
+ "profile": "native"
+ },
+ "extra": {},
+ "alias": "pageload"
+ },
+ "files": {
+ "video": [
+ "pages/www.bbc.com/news/world-middle-east-53598965/data/video/1.mp4"
+ ],
+ "screenshot": [],
+ "timeline": [],
+ "consoleLog": [],
+ "netLog": [],
+ "perfLog": []
+ },
+ "cdp": {
+ "performance": []
+ },
+ "timestamps": [
+ "2020-08-03T11:18:12+02:00"
+ ],
+ "browserScripts": [
+ {
+ "browser": {
+ "appConstants": {
+ "ACCESSIBILITY": true,
+ "ANDROID_PACKAGE_NAME": "org.mozilla.firefox",
+ "ASAN": false,
+ "ASAN_REPORTER": false,
+ "BROWSER_CHROME_URL": "chrome://browser/content/browser.xhtml",
+ "DEBUG": false,
+ "DEBUG_JS_MODULES": "",
+ "DLL_PREFIX": "lib",
+ "DLL_SUFFIX": ".dylib",
+ "EARLY_BETA_OR_EARLIER": true,
+ "HAVE_SHELL_SERVICE": true,
+ "HAVE_USR_LIB64_DIR": false,
+ "MENUBAR_CAN_AUTOHIDE": false,
+ "MOZILLA_OFFICIAL": false,
+ "MOZ_ALLOW_ADDON_SIDELOAD": false,
+ "MOZ_ALLOW_LEGACY_EXTENSIONS": false,
+ "MOZ_ANDROID_HISTORY": false,
+ "MOZ_APP_BASENAME": "Firefox",
+ "MOZ_APP_NAME": "firefox",
+ "MOZ_APP_VERSION": "81.0a1",
+ "MOZ_APP_VERSION_DISPLAY": "81.0a1",
+ "MOZ_BING_API_CLIENTID": "no-bing-api-clientid",
+ "MOZ_BING_API_KEY": "no-bing-api-key",
+ "MOZ_BITS_DOWNLOAD": false,
+ "MOZ_BUILDID": "2020073017",
+ "MOZ_BUILD_APP": "browser",
+ "MOZ_CODE_COVERAGE": false,
+ "MOZ_CRASHREPORTER": true,
+ "MOZ_DATA_REPORTING": true,
+ "MOZ_DEV_EDITION": false,
+ "MOZ_GECKO_PROFILER": true,
+ "MOZ_GOOGLE_LOCATION_SERVICE_API_KEY": "no-google-location-service-api-key",
+ "MOZ_GOOGLE_SAFEBROWSING_API_KEY": "no-google-safebrowsing-api-key",
+ "MOZ_MACBUNDLE_NAME": "Nightly.app",
+ "MOZ_MAINTENANCE_SERVICE": false,
+ "MOZ_MOZILLA_API_KEY": "no-mozilla-api-key",
+ "MOZ_NEW_NOTIFICATION_STORE": true,
+ "MOZ_NEW_XULSTORE": true,
+ "MOZ_NORMANDY": true,
+ "MOZ_OFFICIAL_BRANDING": false,
+ "MOZ_PLACES": true,
+ "MOZ_REQUIRE_SIGNING": false,
+ "MOZ_SANDBOX": false,
+ "MOZ_SERVICES_HEALTHREPORT": true,
+ "MOZ_SERVICES_SYNC": false,
+ "MOZ_SWITCHBOARD": false,
+ "MOZ_SYSTEM_NSS": false,
+ "MOZ_TELEMETRY_ON_BY_DEFAULT": false,
+ "MOZ_TELEMETRY_REPORTING": false,
+ "MOZ_UNSIGNED_SCOPES": 0,
+ "MOZ_UPDATER": true,
+ "MOZ_UPDATE_AGENT": false,
+ "MOZ_UPDATE_CHANNEL": "default",
+ "MOZ_WEBRTC": true,
+ "MOZ_WIDGET_GTK": false,
+ "MOZ_WIDGET_TOOLKIT": "cocoa",
+ "NIGHTLY_BUILD": true,
+ "OMNIJAR_NAME": "omni.ja",
+ "RELEASE_OR_BETA": false,
+ "SOURCE_REVISION_URL": "",
+ "TELEMETRY_PING_FORMAT_VERSION": 4,
+ "TSAN": false,
+ "XP_UNIX": true,
+ "isPlatformAndVersionAtLeast": {},
+ "isPlatformAndVersionAtMost": {},
+ "platform": "macosx",
+ "unixstyle": "other"
+ },
+ "asyncAppConstants": {
+ "ACCESSIBILITY": true,
+ "ANDROID_PACKAGE_NAME": "org.mozilla.firefox",
+ "ASAN": false,
+ "ASAN_REPORTER": false,
+ "BROWSER_CHROME_URL": "chrome://browser/content/browser.xhtml",
+ "DEBUG": false,
+ "DEBUG_JS_MODULES": "",
+ "DLL_PREFIX": "lib",
+ "DLL_SUFFIX": ".dylib",
+ "EARLY_BETA_OR_EARLIER": true,
+ "HAVE_SHELL_SERVICE": true,
+ "HAVE_USR_LIB64_DIR": false,
+ "MENUBAR_CAN_AUTOHIDE": false,
+ "MOZILLA_OFFICIAL": false,
+ "MOZ_ALLOW_ADDON_SIDELOAD": false,
+ "MOZ_ALLOW_LEGACY_EXTENSIONS": false,
+ "MOZ_ANDROID_HISTORY": false,
+ "MOZ_APP_BASENAME": "Firefox",
+ "MOZ_APP_NAME": "firefox",
+ "MOZ_APP_VERSION": "81.0a1",
+ "MOZ_APP_VERSION_DISPLAY": "81.0a1",
+ "MOZ_BING_API_CLIENTID": "no-bing-api-clientid",
+ "MOZ_BING_API_KEY": "no-bing-api-key",
+ "MOZ_BITS_DOWNLOAD": false,
+ "MOZ_BUILDID": "200730174322",
+ "MOZ_BUILD_APP": "browser",
+ "MOZ_CODE_COVERAGE": false,
+ "MOZ_CRASHREPORTER": true,
+ "MOZ_DATA_REPORTING": true,
+ "MOZ_DEV_EDITION": false,
+ "MOZ_GECKO_PROFILER": true,
+ "MOZ_GOOGLE_LOCATION_SERVICE_API_KEY": "no-google-location-service-api-key",
+ "MOZ_GOOGLE_SAFEBROWSING_API_KEY": "no-google-safebrowsing-api-key",
+ "MOZ_MACBUNDLE_NAME": "Nightly.app",
+ "MOZ_MAINTENANCE_SERVICE": false,
+ "MOZ_MOZILLA_API_KEY": "no-mozilla-api-key",
+ "MOZ_NEW_NOTIFICATION_STORE": true,
+ "MOZ_NEW_XULSTORE": true,
+ "MOZ_NORMANDY": true,
+ "MOZ_OFFICIAL_BRANDING": false,
+ "MOZ_PLACES": true,
+ "MOZ_REQUIRE_SIGNING": false,
+ "MOZ_SANDBOX": false,
+ "MOZ_SERVICES_HEALTHREPORT": true,
+ "MOZ_SERVICES_SYNC": false,
+ "MOZ_SWITCHBOARD": false,
+ "MOZ_SYSTEM_NSS": false,
+ "MOZ_TELEMETRY_ON_BY_DEFAULT": false,
+ "MOZ_TELEMETRY_REPORTING": false,
+ "MOZ_UNSIGNED_SCOPES": 0,
+ "MOZ_UPDATER": true,
+ "MOZ_UPDATE_AGENT": false,
+ "MOZ_UPDATE_CHANNEL": "default",
+ "MOZ_WEBRTC": true,
+ "MOZ_WIDGET_GTK": false,
+ "MOZ_WIDGET_TOOLKIT": "cocoa",
+ "NIGHTLY_BUILD": true,
+ "OMNIJAR_NAME": "omni.ja",
+ "RELEASE_OR_BETA": false,
+ "SOURCE_REVISION_URL": "",
+ "TELEMETRY_PING_FORMAT_VERSION": 4,
+ "TSAN": false,
+ "XP_UNIX": true,
+ "isPlatformAndVersionAtLeast": {},
+ "isPlatformAndVersionAtMost": {},
+ "platform": "macosx",
+ "unixstyle": "other"
+ },
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:81.0) Gecko/20100101 Firefox/81.0",
+ "windowSize": "1366x768"
+ },
+ "pageinfo": {
+ "documentHeight": 8937,
+ "documentSize": {
+ "decodedBodySize": 270461,
+ "encodedBodySize": 67482,
+ "transferSize": 68337
+ },
+ "documentTitle": "Coronavirus: Iran cover-up of deaths revealed by data leak - BBC News",
+ "documentWidth": 1366,
+ "domElements": 1348,
+ "navigationStartTime": 1596629,
+ "nextHopProtocol": "h2",
+ "resources": {
+ "count": 91,
+ "duration": 26360.459999999992
+ },
+ "responsive": true,
+ "url": "https://www.bbc.com/news/world-middle-east-53598965",
+ "visualElements": {
+ "heroes": [
+ {
+ "filename": "_113766981_iranhospital.jpg",
+ "height": 363,
+ "name": "LargestImage",
+ "width": 646,
+ "x": 195,
+ "y": 403
+ },
+ {
+ "filename": null,
+ "height": 72,
+ "name": "Heading",
+ "width": 645,
+ "x": 195,
+ "y": 196
+ }
+ ],
+ "viewport": {
+ "height": 694,
+ "width": 1366
+ }
+ }
+ },
+ "timings": {
+ "firstPaint": 1084,
+ "loadEventEnd": 8274,
+ "navigationTiming": {
+ "connectStart": 20,
+ "domComplete": 8238,
+ "domContentLoadedEventEnd": 4165,
+ "domContentLoadedEventStart": 4159,
+ "domInteractive": 1415,
+ "domainLookupEnd": 20,
+ "domainLookupStart": 20,
+ "duration": 8274,
+ "fetchStart": 20,
+ "loadEventEnd": 8274,
+ "loadEventStart": 8264,
+ "redirectEnd": 0,
+ "redirectStart": 0,
+ "requestStart": 29,
+ "responseEnd": 117,
+ "responseStart": 117,
+ "secureConnectionStart": 0,
+ "startTime": 0,
+ "unloadEventEnd": 124,
+ "unloadEventStart": 120,
+ "workerStart": 0
+ },
+ "pageTimings": {
+ "backEndTime": 117,
+ "domContentLoadedTime": 4159,
+ "domInteractiveTime": 1415,
+ "domainLookupTime": 0,
+ "frontEndTime": 8147,
+ "pageDownloadTime": 0,
+ "pageLoadTime": 8264,
+ "redirectionTime": 0,
+ "serverConnectionTime": 0,
+ "serverResponseTime": 88
+ },
+ "rumSpeedIndex": 5542,
+ "serverTimings": [],
+ "timeToContentfulPaint": 1124,
+ "timeToDomContentFlushed": 4158,
+ "timeToFirstInteractive": 11858,
+ "userTimings": {
+ "marks": [],
+ "measures": []
+ }
+ }
+ }
+ ],
+ "visualMetrics": [],
+ "cpu": [],
+ "extras": [
+ {}
+ ],
+ "fullyLoaded": [],
+ "errors": [
+ []
+ ],
+ "statistics": {
+ "browser": {
+ "appConstants": {
+ "MOZ_BUILDID": {
+ "median": 2020073017,
+ "mean": 2020073017,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 2020073017,
+ "p10": 2020073017,
+ "p90": 2020073017,
+ "p99": 2020073017,
+ "max": 2020073017
+ },
+ "MOZ_UNSIGNED_SCOPES": {
+ "median": 0,
+ "mean": 0,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 0,
+ "p10": 0,
+ "p90": 0,
+ "p99": 0,
+ "max": 0
+ },
+ "TELEMETRY_PING_FORMAT_VERSION": {
+ "median": 4,
+ "mean": 4,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 4,
+ "p10": 4,
+ "p90": 4,
+ "p99": 4,
+ "max": 4
+ }
+ },
+ "asyncAppConstants": {
+ "MOZ_BUILDID": {
+ "median": 2020073017,
+ "mean": 2020073017,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 2020073017,
+ "p10": 2020073017,
+ "p90": 2020073017,
+ "p99": 2020073017,
+ "max": 2020073017
+ },
+ "MOZ_UNSIGNED_SCOPES": {
+ "median": 0,
+ "mean": 0,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 0,
+ "p10": 0,
+ "p90": 0,
+ "p99": 0,
+ "max": 0
+ },
+ "TELEMETRY_PING_FORMAT_VERSION": {
+ "median": 4,
+ "mean": 4,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 4,
+ "p10": 4,
+ "p90": 4,
+ "p99": 4,
+ "max": 4
+ }
+ }
+ },
+ "pageinfo": {
+ "documentHeight": {
+ "median": 8937,
+ "mean": 8937,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 8937,
+ "p10": 8937,
+ "p90": 8937,
+ "p99": 8937,
+ "max": 8937
+ },
+ "documentSize": {
+ "decodedBodySize": {
+ "median": 270461,
+ "mean": 270461,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 270461,
+ "p10": 270461,
+ "p90": 270461,
+ "p99": 270461,
+ "max": 270461
+ },
+ "encodedBodySize": {
+ "median": 67482,
+ "mean": 67482,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 67482,
+ "p10": 67482,
+ "p90": 67482,
+ "p99": 67482,
+ "max": 67482
+ },
+ "transferSize": {
+ "median": 68337,
+ "mean": 68337,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 68337,
+ "p10": 68337,
+ "p90": 68337,
+ "p99": 68337,
+ "max": 68337
+ }
+ },
+ "documentWidth": {
+ "median": 1366,
+ "mean": 1366,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 1366,
+ "p10": 1366,
+ "p90": 1366,
+ "p99": 1366,
+ "max": 1366
+ },
+ "domElements": {
+ "median": 1348,
+ "mean": 1348,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 1348,
+ "p10": 1348,
+ "p90": 1348,
+ "p99": 1348,
+ "max": 1348
+ },
+ "navigationStartTime": {
+ "median": 1596629,
+ "mean": 1596629,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 1596629,
+ "p10": 1596629,
+ "p90": 1596629,
+ "p99": 1596629,
+ "max": 1596629
+ },
+ "resources": {
+ "count": {
+ "median": 91,
+ "mean": 91,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 91,
+ "p10": 91,
+ "p90": 91,
+ "p99": 91,
+ "max": 91
+ },
+ "duration": {
+ "median": 26360,
+ "mean": 26360,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 26360,
+ "p10": 26360,
+ "p90": 26360,
+ "p99": 26360,
+ "max": 26360
+ }
+ },
+ "visualElements": {
+ "heroes": [
+ {
+ "height": {
+ "median": 363,
+ "mean": 363,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 363,
+ "p10": 363,
+ "p90": 363,
+ "p99": 363,
+ "max": 363
+ },
+ "width": {
+ "median": 646,
+ "mean": 646,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 646,
+ "p10": 646,
+ "p90": 646,
+ "p99": 646,
+ "max": 646
+ },
+ "x": {
+ "median": 195,
+ "mean": 195,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 195,
+ "p10": 195,
+ "p90": 195,
+ "p99": 195,
+ "max": 195
+ },
+ "y": {
+ "median": 403,
+ "mean": 403,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 403,
+ "p10": 403,
+ "p90": 403,
+ "p99": 403,
+ "max": 403
+ }
+ },
+ {
+ "height": {
+ "median": 72,
+ "mean": 72,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 72,
+ "p10": 72,
+ "p90": 72,
+ "p99": 72,
+ "max": 72
+ },
+ "width": {
+ "median": 645,
+ "mean": 645,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 645,
+ "p10": 645,
+ "p90": 645,
+ "p99": 645,
+ "max": 645
+ },
+ "x": {
+ "median": 195,
+ "mean": 195,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 195,
+ "p10": 195,
+ "p90": 195,
+ "p99": 195,
+ "max": 195
+ },
+ "y": {
+ "median": 196,
+ "mean": 196,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 196,
+ "p10": 196,
+ "p90": 196,
+ "p99": 196,
+ "max": 196
+ }
+ }
+ ],
+ "viewport": {
+ "height": {
+ "median": 694,
+ "mean": 694,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 694,
+ "p10": 694,
+ "p90": 694,
+ "p99": 694,
+ "max": 694
+ },
+ "width": {
+ "median": 1366,
+ "mean": 1366,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 1366,
+ "p10": 1366,
+ "p90": 1366,
+ "p99": 1366,
+ "max": 1366
+ }
+ }
+ }
+ },
+ "timings": {
+ "firstPaint": {
+ "median": 1084,
+ "mean": 1084,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 1084,
+ "p10": 1084,
+ "p90": 1084,
+ "p99": 1084,
+ "max": 1084
+ },
+ "loadEventEnd": {
+ "median": 8274,
+ "mean": 8274,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 8274,
+ "p10": 8274,
+ "p90": 8274,
+ "p99": 8274,
+ "max": 8274
+ },
+ "navigationTiming": {
+ "connectStart": {
+ "median": 20,
+ "mean": 20,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 20,
+ "p10": 20,
+ "p90": 20,
+ "p99": 20,
+ "max": 20
+ },
+ "domComplete": {
+ "median": 8238,
+ "mean": 8238,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 8238,
+ "p10": 8238,
+ "p90": 8238,
+ "p99": 8238,
+ "max": 8238
+ },
+ "domContentLoadedEventEnd": {
+ "median": 4165,
+ "mean": 4165,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 4165,
+ "p10": 4165,
+ "p90": 4165,
+ "p99": 4165,
+ "max": 4165
+ },
+ "domContentLoadedEventStart": {
+ "median": 4159,
+ "mean": 4159,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 4159,
+ "p10": 4159,
+ "p90": 4159,
+ "p99": 4159,
+ "max": 4159
+ },
+ "domInteractive": {
+ "median": 1415,
+ "mean": 1415,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 1415,
+ "p10": 1415,
+ "p90": 1415,
+ "p99": 1415,
+ "max": 1415
+ },
+ "domainLookupEnd": {
+ "median": 20,
+ "mean": 20,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 20,
+ "p10": 20,
+ "p90": 20,
+ "p99": 20,
+ "max": 20
+ },
+ "domainLookupStart": {
+ "median": 20,
+ "mean": 20,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 20,
+ "p10": 20,
+ "p90": 20,
+ "p99": 20,
+ "max": 20
+ },
+ "duration": {
+ "median": 8274,
+ "mean": 8274,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 8274,
+ "p10": 8274,
+ "p90": 8274,
+ "p99": 8274,
+ "max": 8274
+ },
+ "fetchStart": {
+ "median": 20,
+ "mean": 20,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 20,
+ "p10": 20,
+ "p90": 20,
+ "p99": 20,
+ "max": 20
+ },
+ "loadEventEnd": {
+ "median": 8274,
+ "mean": 8274,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 8274,
+ "p10": 8274,
+ "p90": 8274,
+ "p99": 8274,
+ "max": 8274
+ },
+ "loadEventStart": {
+ "median": 8264,
+ "mean": 8264,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 8264,
+ "p10": 8264,
+ "p90": 8264,
+ "p99": 8264,
+ "max": 8264
+ },
+ "redirectEnd": {
+ "median": 0,
+ "mean": 0,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 0,
+ "p10": 0,
+ "p90": 0,
+ "p99": 0,
+ "max": 0
+ },
+ "redirectStart": {
+ "median": 0,
+ "mean": 0,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 0,
+ "p10": 0,
+ "p90": 0,
+ "p99": 0,
+ "max": 0
+ },
+ "requestStart": {
+ "median": 29,
+ "mean": 29,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 29,
+ "p10": 29,
+ "p90": 29,
+ "p99": 29,
+ "max": 29
+ },
+ "responseEnd": {
+ "median": 117,
+ "mean": 117,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 117,
+ "p10": 117,
+ "p90": 117,
+ "p99": 117,
+ "max": 117
+ },
+ "responseStart": {
+ "median": 117,
+ "mean": 117,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 117,
+ "p10": 117,
+ "p90": 117,
+ "p99": 117,
+ "max": 117
+ },
+ "secureConnectionStart": {
+ "median": 0,
+ "mean": 0,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 0,
+ "p10": 0,
+ "p90": 0,
+ "p99": 0,
+ "max": 0
+ },
+ "startTime": {
+ "median": 0,
+ "mean": 0,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 0,
+ "p10": 0,
+ "p90": 0,
+ "p99": 0,
+ "max": 0
+ },
+ "unloadEventEnd": {
+ "median": 124,
+ "mean": 124,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 124,
+ "p10": 124,
+ "p90": 124,
+ "p99": 124,
+ "max": 124
+ },
+ "unloadEventStart": {
+ "median": 120,
+ "mean": 120,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 120,
+ "p10": 120,
+ "p90": 120,
+ "p99": 120,
+ "max": 120
+ },
+ "workerStart": {
+ "median": 0,
+ "mean": 0,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 0,
+ "p10": 0,
+ "p90": 0,
+ "p99": 0,
+ "max": 0
+ }
+ },
+ "pageTimings": {
+ "backEndTime": {
+ "median": 117,
+ "mean": 117,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 117,
+ "p10": 117,
+ "p90": 117,
+ "p99": 117,
+ "max": 117
+ },
+ "domContentLoadedTime": {
+ "median": 4159,
+ "mean": 4159,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 4159,
+ "p10": 4159,
+ "p90": 4159,
+ "p99": 4159,
+ "max": 4159
+ },
+ "domInteractiveTime": {
+ "median": 1415,
+ "mean": 1415,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 1415,
+ "p10": 1415,
+ "p90": 1415,
+ "p99": 1415,
+ "max": 1415
+ },
+ "domainLookupTime": {
+ "median": 0,
+ "mean": 0,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 0,
+ "p10": 0,
+ "p90": 0,
+ "p99": 0,
+ "max": 0
+ },
+ "frontEndTime": {
+ "median": 8147,
+ "mean": 8147,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 8147,
+ "p10": 8147,
+ "p90": 8147,
+ "p99": 8147,
+ "max": 8147
+ },
+ "pageDownloadTime": {
+ "median": 0,
+ "mean": 0,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 0,
+ "p10": 0,
+ "p90": 0,
+ "p99": 0,
+ "max": 0
+ },
+ "pageLoadTime": {
+ "median": 8264,
+ "mean": 8264,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 8264,
+ "p10": 8264,
+ "p90": 8264,
+ "p99": 8264,
+ "max": 8264
+ },
+ "redirectionTime": {
+ "median": 0,
+ "mean": 0,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 0,
+ "p10": 0,
+ "p90": 0,
+ "p99": 0,
+ "max": 0
+ },
+ "serverConnectionTime": {
+ "median": 0,
+ "mean": 0,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 0,
+ "p10": 0,
+ "p90": 0,
+ "p99": 0,
+ "max": 0
+ },
+ "serverResponseTime": {
+ "median": 88,
+ "mean": 88,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 88,
+ "p10": 88,
+ "p90": 88,
+ "p99": 88,
+ "max": 88
+ }
+ },
+ "rumSpeedIndex": {
+ "median": 5542,
+ "mean": 5542,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 5542,
+ "p10": 5542,
+ "p90": 5542,
+ "p99": 5542,
+ "max": 5542
+ },
+ "timeToContentfulPaint": {
+ "median": 1124,
+ "mean": 1124,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 1124,
+ "p10": 1124,
+ "p90": 1124,
+ "p99": 1124,
+ "max": 1124
+ },
+ "timeToDomContentFlushed": {
+ "median": 4158,
+ "mean": 4158,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 4158,
+ "p10": 4158,
+ "p90": 4158,
+ "p99": 4158,
+ "max": 4158
+ },
+ "timeToFirstInteractive": {
+ "median": 11858,
+ "mean": 11858,
+ "mdev": 0,
+ "stddev": 0,
+ "min": 11858,
+ "p10": 11858,
+ "p90": 11858,
+ "p99": 11858,
+ "max": 11858
+ }
+ }
+ }
+ }
+]
diff --git a/python/mozperftest/mozperftest/tests/data/browsertime-results-video/pages/www.bbc.com/data/video/1.mp4 b/python/mozperftest/mozperftest/tests/data/browsertime-results-video/pages/www.bbc.com/data/video/1.mp4
new file mode 100644
index 0000000000..69cd3c5cde
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/browsertime-results-video/pages/www.bbc.com/data/video/1.mp4
Binary files differ
diff --git a/python/mozperftest/mozperftest/tests/data/browsertime-results-video/pages/www.bbc.com/news/world-middle-east-53598965/data/video/1.mp4 b/python/mozperftest/mozperftest/tests/data/browsertime-results-video/pages/www.bbc.com/news/world-middle-east-53598965/data/video/1.mp4
new file mode 100644
index 0000000000..2bf1c13ba5
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/browsertime-results-video/pages/www.bbc.com/news/world-middle-east-53598965/data/video/1.mp4
Binary files differ
diff --git a/python/mozperftest/mozperftest/tests/data/browsertime-results-video/pages/www.bbc.com/news/world-us-canada-53599363/data/video/1.mp4 b/python/mozperftest/mozperftest/tests/data/browsertime-results-video/pages/www.bbc.com/news/world-us-canada-53599363/data/video/1.mp4
new file mode 100644
index 0000000000..01da00def4
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/browsertime-results-video/pages/www.bbc.com/news/world-us-canada-53599363/data/video/1.mp4
Binary files differ
diff --git a/python/mozperftest/mozperftest/tests/data/browsertime-results/browsertime.json b/python/mozperftest/mozperftest/tests/data/browsertime-results/browsertime.json
new file mode 100644
index 0000000000..8b760ae4b2
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/browsertime-results/browsertime.json
@@ -0,0 +1 @@
+[{"info":{"browsertime":{"version":"8.2.0"},"url":"https://www.sitespeed.io/","timestamp":"2020-04-01T13:44:11+02:00","connectivity":{"engine":"external","profile":"native"},"extra":{}},"files":{"video":[],"screenshot":[],"timeline":[],"consoleLog":[],"netLog":[],"perfLog":[]},"cdp":{"performance":[]},"timestamps":["2020-04-01T13:43:53+02:00"],"browserScripts":[{"browser":{"appConstants":{"ACCESSIBILITY":true,"ANDROID_PACKAGE_NAME":"org.mozilla.firefox","ASAN":false,"ASAN_REPORTER":false,"BROWSER_CHROME_URL":"chrome://browser/content/browser.xhtml","DEBUG":false,"DEBUG_JS_MODULES":"","DLL_PREFIX":"lib","DLL_SUFFIX":".dylib","EARLY_BETA_OR_EARLIER":false,"FENNEC_NIGHTLY":false,"HAVE_SHELL_SERVICE":true,"HAVE_USR_LIB64_DIR":false,"MENUBAR_CAN_AUTOHIDE":false,"MOZILLA_OFFICIAL":true,"MOZ_ALLOW_LEGACY_EXTENSIONS":false,"MOZ_ANDROID_ACTIVITY_STREAM":false,"MOZ_ANDROID_HISTORY":false,"MOZ_ANDROID_MOZILLA_ONLINE":false,"MOZ_APP_NAME":"firefox","MOZ_APP_VERSION":"69.0","MOZ_APP_VERSION_DISPLAY":"69.0","MOZ_BING_API_CLIENTID":"no-bing-api-clientid","MOZ_BING_API_KEY":"no-bing-api-key","MOZ_BITS_DOWNLOAD":false,"MOZ_BUILD_APP":"browser","MOZ_CODE_COVERAGE":false,"MOZ_CRASHREPORTER":true,"MOZ_DATA_REPORTING":true,"MOZ_DEV_EDITION":false,"MOZ_GECKO_PROFILER":true,"MOZ_GOOGLE_LOCATION_SERVICE_API_KEY":"AIzaSyB2h2OuRcUgy5N-5hsZqiPW6sH3n_rptiQ","MOZ_GOOGLE_SAFEBROWSING_API_KEY":"AIzaSyC7jsptDS3am4tPx4r3nxis7IMjBc5Dovo","MOZ_GRAPHENE":false,"MOZ_MACBUNDLE_NAME":"Firefox.app","MOZ_MAINTENANCE_SERVICE":false,"MOZ_MOZILLA_API_KEY":"7e40f68c-7938-4c5d-9f95-e61647c213eb","MOZ_NEW_CERT_STORAGE":false,"MOZ_NEW_NOTIFICATION_STORE":false,"MOZ_NEW_XULSTORE":false,"MOZ_OFFICIAL_BRANDING":true,"MOZ_PLACES":true,"MOZ_REQUIRE_SIGNING":true,"MOZ_SANDBOX":true,"MOZ_SERVICES_HEALTHREPORT":true,"MOZ_SERVICES_SYNC":false,"MOZ_SWITCHBOARD":false,"MOZ_SYSTEM_NSS":false,"MOZ_TELEMETRY_ON_BY_DEFAULT":false,"MOZ_TELEMETRY_REPORTING":true,"MOZ_UNSIGNED_SCOPES":0,"MOZ_UPDATER":true,"MOZ_UPDATE_CHANNEL":"release","MOZ_WEBRTC":true,"MOZ_WIDGET_GTK":false,"MOZ_WIDGET_TOOLKIT":"cocoa","NIGHTLY_BUILD":false,"OMNIJAR_NAME":"omni.ja","RELEASE_OR_BETA":true,"SOURCE_REVISION_URL":"https://hg.mozilla.org/releases/mozilla-release/rev/cce4622026ab8e0130a0afc03f829f9b19ca38c2","TELEMETRY_PING_FORMAT_VERSION":4,"XP_UNIX":true,"isPlatformAndVersionAtLeast":{},"isPlatformAndVersionAtMost":{},"platform":"macosx"},"asyncAppConstants":{"ACCESSIBILITY":true,"ANDROID_PACKAGE_NAME":"org.mozilla.firefox","ASAN":false,"ASAN_REPORTER":false,"BROWSER_CHROME_URL":"chrome://browser/content/browser.xhtml","DEBUG":false,"DEBUG_JS_MODULES":"","DLL_PREFIX":"lib","DLL_SUFFIX":".dylib","EARLY_BETA_OR_EARLIER":false,"FENNEC_NIGHTLY":false,"HAVE_SHELL_SERVICE":true,"HAVE_USR_LIB64_DIR":false,"MENUBAR_CAN_AUTOHIDE":false,"MOZILLA_OFFICIAL":true,"MOZ_ALLOW_LEGACY_EXTENSIONS":false,"MOZ_ANDROID_ACTIVITY_STREAM":false,"MOZ_ANDROID_HISTORY":false,"MOZ_ANDROID_MOZILLA_ONLINE":false,"MOZ_APP_NAME":"firefox","MOZ_APP_VERSION":"69.0","MOZ_APP_VERSION_DISPLAY":"69.0","MOZ_BING_API_CLIENTID":"no-bing-api-clientid","MOZ_BING_API_KEY":"no-bing-api-key","MOZ_BITS_DOWNLOAD":false,"MOZ_BUILD_APP":"browser","MOZ_CODE_COVERAGE":false,"MOZ_CRASHREPORTER":true,"MOZ_DATA_REPORTING":true,"MOZ_DEV_EDITION":false,"MOZ_GECKO_PROFILER":true,"MOZ_GOOGLE_LOCATION_SERVICE_API_KEY":"AIzaSyB2h2OuRcUgy5N-5hsZqiPW6sH3n_rptiQ","MOZ_GOOGLE_SAFEBROWSING_API_KEY":"AIzaSyC7jsptDS3am4tPx4r3nxis7IMjBc5Dovo","MOZ_GRAPHENE":false,"MOZ_MACBUNDLE_NAME":"Firefox.app","MOZ_MAINTENANCE_SERVICE":false,"MOZ_MOZILLA_API_KEY":"7e40f68c-7938-4c5d-9f95-e61647c213eb","MOZ_NEW_CERT_STORAGE":false,"MOZ_NEW_NOTIFICATION_STORE":false,"MOZ_NEW_XULSTORE":false,"MOZ_OFFICIAL_BRANDING":true,"MOZ_PLACES":true,"MOZ_REQUIRE_SIGNING":true,"MOZ_SANDBOX":true,"MOZ_SERVICES_HEALTHREPORT":true,"MOZ_SERVICES_SYNC":false,"MOZ_SWITCHBOARD":false,"MOZ_SYSTEM_NSS":false,"MOZ_TELEMETRY_ON_BY_DEFAULT":false,"MOZ_TELEMETRY_REPORTING":true,"MOZ_UNSIGNED_SCOPES":0,"MOZ_UPDATER":true,"MOZ_UPDATE_CHANNEL":"release","MOZ_WEBRTC":true,"MOZ_WIDGET_GTK":false,"MOZ_WIDGET_TOOLKIT":"cocoa","NIGHTLY_BUILD":false,"OMNIJAR_NAME":"omni.ja","RELEASE_OR_BETA":true,"SOURCE_REVISION_URL":"https://hg.mozilla.org/releases/mozilla-release/rev/cce4622026ab8e0130a0afc03f829f9b19ca38c2","TELEMETRY_PING_FORMAT_VERSION":4,"XP_UNIX":true,"isPlatformAndVersionAtLeast":{},"isPlatformAndVersionAtMost":{},"platform":"macosx"},"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:69.0) Gecko/20100101 Firefox/69.0","windowSize":"1366x768"},"pageinfo":{"documentHeight":3836,"documentSize":{"decodedBodySize":34427,"encodedBodySize":9101,"transferSize":9772},"documentTitle":"Welcome to the wonderful world of Web Performance","documentWidth":1366,"domElements":347,"navigationStartTime":1585741433948,"nextHopProtocol":"h2","resources":{"count":13,"duration":6890.724426},"responsive":true,"url":"https://www.sitespeed.io/","visualElements":{"heroes":[{"filename":"team.png","height":433,"name":"LargestImage","width":500,"x":153,"y":50},{"filename":null,"height":173,"name":"Heading","width":510,"x":703,"y":66},{"filename":"sitespeed-logo-2c.png","height":50,"name":"header-logo","width":162,"x":153,"y":0},{"filename":"team.png","height":433,"name":"logo","width":500,"x":153,"y":50}],"viewport":{"height":694,"width":1366}}},"timings":{"firstPaint":1718,"loadEventEnd":1842,"navigationTiming":{"connectStart":213,"domComplete":1842,"domContentLoadedEventEnd":1565,"domContentLoadedEventStart":1565,"domInteractive":1183,"domainLookupEnd":213,"domainLookupStart":2,"duration":1842,"fetchStart":0,"loadEventEnd":1842,"loadEventStart":1842,"redirectEnd":0,"redirectStart":0,"requestStart":933,"responseEnd":1168,"responseStart":1025,"secureConnectionStart":399,"startTime":0,"unloadEventEnd":0,"unloadEventStart":0,"workerStart":0},"pageTimings":{"backEndTime":1025,"domContentLoadedTime":1565,"domInteractiveTime":1183,"domainLookupTime":211,"frontEndTime":674,"pageDownloadTime":143,"pageLoadTime":1842,"redirectionTime":0,"serverConnectionTime":720,"serverResponseTime":235},"rumSpeedIndex":1669,"serverTimings":[],"timeToContentfulPaint":1771,"timeToDomContentFlushed":1733,"timeToFirstInteractive":1771,"userTimings":{"marks":[],"measures":[]}}}],"visualMetrics":[],"cpu":[],"extras":[{}],"fullyLoaded":[],"errors":[[]],"statistics":{"browser":{"appConstants":{"MOZ_APP_VERSION":{"median":69,"mean":69,"mdev":0,"stddev":0,"min":69,"p10":69,"p90":69,"p99":69,"max":69},"MOZ_APP_VERSION_DISPLAY":{"median":69,"mean":69,"mdev":0,"stddev":0,"min":69,"p10":69,"p90":69,"p99":69,"max":69},"MOZ_UNSIGNED_SCOPES":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"TELEMETRY_PING_FORMAT_VERSION":{"median":4,"mean":4,"mdev":0,"stddev":0,"min":4,"p10":4,"p90":4,"p99":4,"max":4}},"asyncAppConstants":{"MOZ_APP_VERSION":{"median":69,"mean":69,"mdev":0,"stddev":0,"min":69,"p10":69,"p90":69,"p99":69,"max":69},"MOZ_APP_VERSION_DISPLAY":{"median":69,"mean":69,"mdev":0,"stddev":0,"min":69,"p10":69,"p90":69,"p99":69,"max":69},"MOZ_UNSIGNED_SCOPES":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"TELEMETRY_PING_FORMAT_VERSION":{"median":4,"mean":4,"mdev":0,"stddev":0,"min":4,"p10":4,"p90":4,"p99":4,"max":4}}},"pageinfo":{"documentHeight":{"median":3836,"mean":3836,"mdev":0,"stddev":0,"min":3836,"p10":3836,"p90":3836,"p99":3836,"max":3836},"documentSize":{"decodedBodySize":{"median":34427,"mean":34427,"mdev":0,"stddev":0,"min":34427,"p10":34427,"p90":34427,"p99":34427,"max":34427},"encodedBodySize":{"median":9101,"mean":9101,"mdev":0,"stddev":0,"min":9101,"p10":9101,"p90":9101,"p99":9101,"max":9101},"transferSize":{"median":9772,"mean":9772,"mdev":0,"stddev":0,"min":9772,"p10":9772,"p90":9772,"p99":9772,"max":9772}},"documentWidth":{"median":1366,"mean":1366,"mdev":0,"stddev":0,"min":1366,"p10":1366,"p90":1366,"p99":1366,"max":1366},"domElements":{"median":347,"mean":347,"mdev":0,"stddev":0,"min":347,"p10":347,"p90":347,"p99":347,"max":347},"navigationStartTime":{"median":1585741433948,"mean":1585741433948,"mdev":0,"stddev":0,"min":1585741433948,"p10":1585741433948,"p90":1585741433948,"p99":1585741433948,"max":1585741433948},"resources":{"count":{"median":13,"mean":13,"mdev":0,"stddev":0,"min":13,"p10":13,"p90":13,"p99":13,"max":13},"duration":{"median":6891,"mean":6891,"mdev":0,"stddev":0,"min":6891,"p10":6891,"p90":6891,"p99":6891,"max":6891}},"visualElements":{"heroes":[{"height":{"median":433,"mean":433,"mdev":0,"stddev":0,"min":433,"p10":433,"p90":433,"p99":433,"max":433},"width":{"median":500,"mean":500,"mdev":0,"stddev":0,"min":500,"p10":500,"p90":500,"p99":500,"max":500},"x":{"median":153,"mean":153,"mdev":0,"stddev":0,"min":153,"p10":153,"p90":153,"p99":153,"max":153},"y":{"median":50,"mean":50,"mdev":0,"stddev":0,"min":50,"p10":50,"p90":50,"p99":50,"max":50}},{"height":{"median":173,"mean":173,"mdev":0,"stddev":0,"min":173,"p10":173,"p90":173,"p99":173,"max":173},"width":{"median":510,"mean":510,"mdev":0,"stddev":0,"min":510,"p10":510,"p90":510,"p99":510,"max":510},"x":{"median":703,"mean":703,"mdev":0,"stddev":0,"min":703,"p10":703,"p90":703,"p99":703,"max":703},"y":{"median":66,"mean":66,"mdev":0,"stddev":0,"min":66,"p10":66,"p90":66,"p99":66,"max":66}},{"height":{"median":50,"mean":50,"mdev":0,"stddev":0,"min":50,"p10":50,"p90":50,"p99":50,"max":50},"width":{"median":162,"mean":162,"mdev":0,"stddev":0,"min":162,"p10":162,"p90":162,"p99":162,"max":162},"x":{"median":153,"mean":153,"mdev":0,"stddev":0,"min":153,"p10":153,"p90":153,"p99":153,"max":153},"y":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0}},{"height":{"median":433,"mean":433,"mdev":0,"stddev":0,"min":433,"p10":433,"p90":433,"p99":433,"max":433},"width":{"median":500,"mean":500,"mdev":0,"stddev":0,"min":500,"p10":500,"p90":500,"p99":500,"max":500},"x":{"median":153,"mean":153,"mdev":0,"stddev":0,"min":153,"p10":153,"p90":153,"p99":153,"max":153},"y":{"median":50,"mean":50,"mdev":0,"stddev":0,"min":50,"p10":50,"p90":50,"p99":50,"max":50}}],"viewport":{"height":{"median":694,"mean":694,"mdev":0,"stddev":0,"min":694,"p10":694,"p90":694,"p99":694,"max":694},"width":{"median":1366,"mean":1366,"mdev":0,"stddev":0,"min":1366,"p10":1366,"p90":1366,"p99":1366,"max":1366}}}},"timings":{"firstPaint":{"median":1718,"mean":1718,"mdev":0,"stddev":0,"min":1718,"p10":1718,"p90":1718,"p99":1718,"max":1718},"loadEventEnd":{"median":1842,"mean":1842,"mdev":0,"stddev":0,"min":1842,"p10":1842,"p90":1842,"p99":1842,"max":1842},"navigationTiming":{"connectStart":{"median":213,"mean":213,"mdev":0,"stddev":0,"min":213,"p10":213,"p90":213,"p99":213,"max":213},"domComplete":{"median":1842,"mean":1842,"mdev":0,"stddev":0,"min":1842,"p10":1842,"p90":1842,"p99":1842,"max":1842},"domContentLoadedEventEnd":{"median":1565,"mean":1565,"mdev":0,"stddev":0,"min":1565,"p10":1565,"p90":1565,"p99":1565,"max":1565},"domContentLoadedEventStart":{"median":1565,"mean":1565,"mdev":0,"stddev":0,"min":1565,"p10":1565,"p90":1565,"p99":1565,"max":1565},"domInteractive":{"median":1183,"mean":1183,"mdev":0,"stddev":0,"min":1183,"p10":1183,"p90":1183,"p99":1183,"max":1183},"domainLookupEnd":{"median":213,"mean":213,"mdev":0,"stddev":0,"min":213,"p10":213,"p90":213,"p99":213,"max":213},"domainLookupStart":{"median":2,"mean":2,"mdev":0,"stddev":0,"min":2,"p10":2,"p90":2,"p99":2,"max":2},"duration":{"median":1842,"mean":1842,"mdev":0,"stddev":0,"min":1842,"p10":1842,"p90":1842,"p99":1842,"max":1842},"fetchStart":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"loadEventEnd":{"median":1842,"mean":1842,"mdev":0,"stddev":0,"min":1842,"p10":1842,"p90":1842,"p99":1842,"max":1842},"loadEventStart":{"median":1842,"mean":1842,"mdev":0,"stddev":0,"min":1842,"p10":1842,"p90":1842,"p99":1842,"max":1842},"redirectEnd":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"redirectStart":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"requestStart":{"median":933,"mean":933,"mdev":0,"stddev":0,"min":933,"p10":933,"p90":933,"p99":933,"max":933},"responseEnd":{"median":1168,"mean":1168,"mdev":0,"stddev":0,"min":1168,"p10":1168,"p90":1168,"p99":1168,"max":1168},"responseStart":{"median":1025,"mean":1025,"mdev":0,"stddev":0,"min":1025,"p10":1025,"p90":1025,"p99":1025,"max":1025},"secureConnectionStart":{"median":399,"mean":399,"mdev":0,"stddev":0,"min":399,"p10":399,"p90":399,"p99":399,"max":399},"startTime":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"unloadEventEnd":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"unloadEventStart":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"workerStart":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0}},"pageTimings":{"backEndTime":{"median":1025,"mean":1025,"mdev":0,"stddev":0,"min":1025,"p10":1025,"p90":1025,"p99":1025,"max":1025},"domContentLoadedTime":{"median":1565,"mean":1565,"mdev":0,"stddev":0,"min":1565,"p10":1565,"p90":1565,"p99":1565,"max":1565},"domInteractiveTime":{"median":1183,"mean":1183,"mdev":0,"stddev":0,"min":1183,"p10":1183,"p90":1183,"p99":1183,"max":1183},"domainLookupTime":{"median":211,"mean":211,"mdev":0,"stddev":0,"min":211,"p10":211,"p90":211,"p99":211,"max":211},"frontEndTime":{"median":674,"mean":674,"mdev":0,"stddev":0,"min":674,"p10":674,"p90":674,"p99":674,"max":674},"pageDownloadTime":{"median":143,"mean":143,"mdev":0,"stddev":0,"min":143,"p10":143,"p90":143,"p99":143,"max":143},"pageLoadTime":{"median":1842,"mean":1842,"mdev":0,"stddev":0,"min":1842,"p10":1842,"p90":1842,"p99":1842,"max":1842},"redirectionTime":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"serverConnectionTime":{"median":720,"mean":720,"mdev":0,"stddev":0,"min":720,"p10":720,"p90":720,"p99":720,"max":720},"serverResponseTime":{"median":235,"mean":235,"mdev":0,"stddev":0,"min":235,"p10":235,"p90":235,"p99":235,"max":235}},"rumSpeedIndex":{"median":1669,"mean":1669,"mdev":0,"stddev":0,"min":1669,"p10":1669,"p90":1669,"p99":1669,"max":1669},"timeToContentfulPaint":{"median":1771,"mean":1771,"mdev":0,"stddev":0,"min":1771,"p10":1771,"p90":1771,"p99":1771,"max":1771},"timeToDomContentFlushed":{"median":1733,"mean":1733,"mdev":0,"stddev":0,"min":1733,"p10":1733,"p90":1733,"p99":1733,"max":1733},"timeToFirstInteractive":{"median":1771,"mean":1771,"mdev":0,"stddev":0,"min":1771,"p10":1771,"p90":1771,"p99":1771,"max":1771}}}},{"info":{"browsertime":{"version":"8.2.0"},"url":"https://www.mozilla.org/en-US/","timestamp":"2020-04-01T13:44:11+02:00","connectivity":{"engine":"external","profile":"native"},"extra":{}},"files":{"video":[],"screenshot":[],"timeline":[],"consoleLog":[],"netLog":[],"perfLog":[]},"cdp":{"performance":[]},"timestamps":["2020-04-01T13:44:02+02:00"],"browserScripts":[{"browser":{"appConstants":{"ACCESSIBILITY":true,"ANDROID_PACKAGE_NAME":"org.mozilla.firefox","ASAN":false,"ASAN_REPORTER":false,"BROWSER_CHROME_URL":"chrome://browser/content/browser.xhtml","DEBUG":false,"DEBUG_JS_MODULES":"","DLL_PREFIX":"lib","DLL_SUFFIX":".dylib","EARLY_BETA_OR_EARLIER":false,"FENNEC_NIGHTLY":false,"HAVE_SHELL_SERVICE":true,"HAVE_USR_LIB64_DIR":false,"MENUBAR_CAN_AUTOHIDE":false,"MOZILLA_OFFICIAL":true,"MOZ_ALLOW_LEGACY_EXTENSIONS":false,"MOZ_ANDROID_ACTIVITY_STREAM":false,"MOZ_ANDROID_HISTORY":false,"MOZ_ANDROID_MOZILLA_ONLINE":false,"MOZ_APP_NAME":"firefox","MOZ_APP_VERSION":"69.0","MOZ_APP_VERSION_DISPLAY":"69.0","MOZ_BING_API_CLIENTID":"no-bing-api-clientid","MOZ_BING_API_KEY":"no-bing-api-key","MOZ_BITS_DOWNLOAD":false,"MOZ_BUILD_APP":"browser","MOZ_CODE_COVERAGE":false,"MOZ_CRASHREPORTER":true,"MOZ_DATA_REPORTING":true,"MOZ_DEV_EDITION":false,"MOZ_GECKO_PROFILER":true,"MOZ_GOOGLE_LOCATION_SERVICE_API_KEY":"AIzaSyB2h2OuRcUgy5N-5hsZqiPW6sH3n_rptiQ","MOZ_GOOGLE_SAFEBROWSING_API_KEY":"AIzaSyC7jsptDS3am4tPx4r3nxis7IMjBc5Dovo","MOZ_GRAPHENE":false,"MOZ_MACBUNDLE_NAME":"Firefox.app","MOZ_MAINTENANCE_SERVICE":false,"MOZ_MOZILLA_API_KEY":"7e40f68c-7938-4c5d-9f95-e61647c213eb","MOZ_NEW_CERT_STORAGE":false,"MOZ_NEW_NOTIFICATION_STORE":false,"MOZ_NEW_XULSTORE":false,"MOZ_OFFICIAL_BRANDING":true,"MOZ_PLACES":true,"MOZ_REQUIRE_SIGNING":true,"MOZ_SANDBOX":true,"MOZ_SERVICES_HEALTHREPORT":true,"MOZ_SERVICES_SYNC":false,"MOZ_SWITCHBOARD":false,"MOZ_SYSTEM_NSS":false,"MOZ_TELEMETRY_ON_BY_DEFAULT":false,"MOZ_TELEMETRY_REPORTING":true,"MOZ_UNSIGNED_SCOPES":0,"MOZ_UPDATER":true,"MOZ_UPDATE_CHANNEL":"release","MOZ_WEBRTC":true,"MOZ_WIDGET_GTK":false,"MOZ_WIDGET_TOOLKIT":"cocoa","NIGHTLY_BUILD":false,"OMNIJAR_NAME":"omni.ja","RELEASE_OR_BETA":true,"SOURCE_REVISION_URL":"https://hg.mozilla.org/releases/mozilla-release/rev/cce4622026ab8e0130a0afc03f829f9b19ca38c2","TELEMETRY_PING_FORMAT_VERSION":4,"XP_UNIX":true,"isPlatformAndVersionAtLeast":{},"isPlatformAndVersionAtMost":{},"platform":"macosx"},"asyncAppConstants":{"ACCESSIBILITY":true,"ANDROID_PACKAGE_NAME":"org.mozilla.firefox","ASAN":false,"ASAN_REPORTER":false,"BROWSER_CHROME_URL":"chrome://browser/content/browser.xhtml","DEBUG":false,"DEBUG_JS_MODULES":"","DLL_PREFIX":"lib","DLL_SUFFIX":".dylib","EARLY_BETA_OR_EARLIER":false,"FENNEC_NIGHTLY":false,"HAVE_SHELL_SERVICE":true,"HAVE_USR_LIB64_DIR":false,"MENUBAR_CAN_AUTOHIDE":false,"MOZILLA_OFFICIAL":true,"MOZ_ALLOW_LEGACY_EXTENSIONS":false,"MOZ_ANDROID_ACTIVITY_STREAM":false,"MOZ_ANDROID_HISTORY":false,"MOZ_ANDROID_MOZILLA_ONLINE":false,"MOZ_APP_NAME":"firefox","MOZ_APP_VERSION":"69.0","MOZ_APP_VERSION_DISPLAY":"69.0","MOZ_BING_API_CLIENTID":"no-bing-api-clientid","MOZ_BING_API_KEY":"no-bing-api-key","MOZ_BITS_DOWNLOAD":false,"MOZ_BUILD_APP":"browser","MOZ_CODE_COVERAGE":false,"MOZ_CRASHREPORTER":true,"MOZ_DATA_REPORTING":true,"MOZ_DEV_EDITION":false,"MOZ_GECKO_PROFILER":true,"MOZ_GOOGLE_LOCATION_SERVICE_API_KEY":"AIzaSyB2h2OuRcUgy5N-5hsZqiPW6sH3n_rptiQ","MOZ_GOOGLE_SAFEBROWSING_API_KEY":"AIzaSyC7jsptDS3am4tPx4r3nxis7IMjBc5Dovo","MOZ_GRAPHENE":false,"MOZ_MACBUNDLE_NAME":"Firefox.app","MOZ_MAINTENANCE_SERVICE":false,"MOZ_MOZILLA_API_KEY":"7e40f68c-7938-4c5d-9f95-e61647c213eb","MOZ_NEW_CERT_STORAGE":false,"MOZ_NEW_NOTIFICATION_STORE":false,"MOZ_NEW_XULSTORE":false,"MOZ_OFFICIAL_BRANDING":true,"MOZ_PLACES":true,"MOZ_REQUIRE_SIGNING":true,"MOZ_SANDBOX":true,"MOZ_SERVICES_HEALTHREPORT":true,"MOZ_SERVICES_SYNC":false,"MOZ_SWITCHBOARD":false,"MOZ_SYSTEM_NSS":false,"MOZ_TELEMETRY_ON_BY_DEFAULT":false,"MOZ_TELEMETRY_REPORTING":true,"MOZ_UNSIGNED_SCOPES":0,"MOZ_UPDATER":true,"MOZ_UPDATE_CHANNEL":"release","MOZ_WEBRTC":true,"MOZ_WIDGET_GTK":false,"MOZ_WIDGET_TOOLKIT":"cocoa","NIGHTLY_BUILD":false,"OMNIJAR_NAME":"omni.ja","RELEASE_OR_BETA":true,"SOURCE_REVISION_URL":"https://hg.mozilla.org/releases/mozilla-release/rev/cce4622026ab8e0130a0afc03f829f9b19ca38c2","TELEMETRY_PING_FORMAT_VERSION":4,"XP_UNIX":true,"isPlatformAndVersionAtLeast":{},"isPlatformAndVersionAtMost":{},"platform":"macosx"},"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:69.0) Gecko/20100101 Firefox/69.0","windowSize":"1366x768"},"pageinfo":{"documentHeight":6826,"documentSize":{"decodedBodySize":181123,"encodedBodySize":181123,"transferSize":183229},"documentTitle":"Internet for people, not profit — Mozilla","documentWidth":1366,"domElements":1456,"navigationStartTime":1585741442119,"nextHopProtocol":"h2","resources":{"count":39,"duration":10094.41237},"responsive":true,"url":"https://www.mozilla.org/en-US/","visualElements":{"heroes":[{"filename":"corona.ce92523a561d.jpg","height":434,"name":"LargestImage","width":771,"x":96,"y":570},{"filename":null,"height":352,"name":"Heading","width":1,"x":-1,"y":95}],"viewport":{"height":694,"width":1366}}},"timings":{"firstPaint":966,"loadEventEnd":2082,"navigationTiming":{"connectStart":178,"domComplete":2079,"domContentLoadedEventEnd":1083,"domContentLoadedEventStart":1082,"domInteractive":1081,"domainLookupEnd":178,"domainLookupStart":3,"duration":2082,"fetchStart":1,"loadEventEnd":2082,"loadEventStart":2079,"redirectEnd":0,"redirectStart":0,"requestStart":693,"responseEnd":745,"responseStart":745,"secureConnectionStart":322,"startTime":0,"unloadEventEnd":0,"unloadEventStart":0,"workerStart":0},"pageTimings":{"backEndTime":745,"domContentLoadedTime":1082,"domInteractiveTime":1081,"domainLookupTime":174,"frontEndTime":1334,"pageDownloadTime":0,"pageLoadTime":2079,"redirectionTime":0,"serverConnectionTime":515,"serverResponseTime":52},"rumSpeedIndex":1224,"serverTimings":[],"timeToContentfulPaint":1009,"timeToDomContentFlushed":1084,"timeToFirstInteractive":1082,"userTimings":{"marks":[],"measures":[]}}}],"visualMetrics":[],"cpu":[],"extras":[{}],"fullyLoaded":[],"errors":[[]],"statistics":{"browser":{"appConstants":{"MOZ_APP_VERSION":{"median":69,"mean":69,"mdev":0,"stddev":0,"min":69,"p10":69,"p90":69,"p99":69,"max":69},"MOZ_APP_VERSION_DISPLAY":{"median":69,"mean":69,"mdev":0,"stddev":0,"min":69,"p10":69,"p90":69,"p99":69,"max":69},"MOZ_UNSIGNED_SCOPES":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"TELEMETRY_PING_FORMAT_VERSION":{"median":4,"mean":4,"mdev":0,"stddev":0,"min":4,"p10":4,"p90":4,"p99":4,"max":4}},"asyncAppConstants":{"MOZ_APP_VERSION":{"median":69,"mean":69,"mdev":0,"stddev":0,"min":69,"p10":69,"p90":69,"p99":69,"max":69},"MOZ_APP_VERSION_DISPLAY":{"median":69,"mean":69,"mdev":0,"stddev":0,"min":69,"p10":69,"p90":69,"p99":69,"max":69},"MOZ_UNSIGNED_SCOPES":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"TELEMETRY_PING_FORMAT_VERSION":{"median":4,"mean":4,"mdev":0,"stddev":0,"min":4,"p10":4,"p90":4,"p99":4,"max":4}}},"pageinfo":{"documentHeight":{"median":6826,"mean":6826,"mdev":0,"stddev":0,"min":6826,"p10":6826,"p90":6826,"p99":6826,"max":6826},"documentSize":{"decodedBodySize":{"median":181123,"mean":181123,"mdev":0,"stddev":0,"min":181123,"p10":181123,"p90":181123,"p99":181123,"max":181123},"encodedBodySize":{"median":181123,"mean":181123,"mdev":0,"stddev":0,"min":181123,"p10":181123,"p90":181123,"p99":181123,"max":181123},"transferSize":{"median":183229,"mean":183229,"mdev":0,"stddev":0,"min":183229,"p10":183229,"p90":183229,"p99":183229,"max":183229}},"documentWidth":{"median":1366,"mean":1366,"mdev":0,"stddev":0,"min":1366,"p10":1366,"p90":1366,"p99":1366,"max":1366},"domElements":{"median":1456,"mean":1456,"mdev":0,"stddev":0,"min":1456,"p10":1456,"p90":1456,"p99":1456,"max":1456},"navigationStartTime":{"median":1585741442119,"mean":1585741442119,"mdev":0,"stddev":0,"min":1585741442119,"p10":1585741442119,"p90":1585741442119,"p99":1585741442119,"max":1585741442119},"resources":{"count":{"median":39,"mean":39,"mdev":0,"stddev":0,"min":39,"p10":39,"p90":39,"p99":39,"max":39},"duration":{"median":10094,"mean":10094,"mdev":0,"stddev":0,"min":10094,"p10":10094,"p90":10094,"p99":10094,"max":10094}},"visualElements":{"heroes":[{"height":{"median":434,"mean":434,"mdev":0,"stddev":0,"min":434,"p10":434,"p90":434,"p99":434,"max":434},"width":{"median":771,"mean":771,"mdev":0,"stddev":0,"min":771,"p10":771,"p90":771,"p99":771,"max":771},"x":{"median":96,"mean":96,"mdev":0,"stddev":0,"min":96,"p10":96,"p90":96,"p99":96,"max":96},"y":{"median":570,"mean":570,"mdev":0,"stddev":0,"min":570,"p10":570,"p90":570,"p99":570,"max":570}},{"height":{"median":352,"mean":352,"mdev":0,"stddev":0,"min":352,"p10":352,"p90":352,"p99":352,"max":352},"width":{"median":1,"mean":1,"mdev":0,"stddev":0,"min":1,"p10":1,"p90":1,"p99":1,"max":1},"x":{"median":-1,"mean":-1,"mdev":0,"stddev":0,"min":-1,"p10":-1,"p90":-1,"p99":-1,"max":-1},"y":{"median":95,"mean":95,"mdev":0,"stddev":0,"min":95,"p10":95,"p90":95,"p99":95,"max":95}}],"viewport":{"height":{"median":694,"mean":694,"mdev":0,"stddev":0,"min":694,"p10":694,"p90":694,"p99":694,"max":694},"width":{"median":1366,"mean":1366,"mdev":0,"stddev":0,"min":1366,"p10":1366,"p90":1366,"p99":1366,"max":1366}}}},"timings":{"firstPaint":{"median":966,"mean":966,"mdev":0,"stddev":0,"min":966,"p10":966,"p90":966,"p99":966,"max":966},"loadEventEnd":{"median":2082,"mean":2082,"mdev":0,"stddev":0,"min":2082,"p10":2082,"p90":2082,"p99":2082,"max":2082},"navigationTiming":{"connectStart":{"median":178,"mean":178,"mdev":0,"stddev":0,"min":178,"p10":178,"p90":178,"p99":178,"max":178},"domComplete":{"median":2079,"mean":2079,"mdev":0,"stddev":0,"min":2079,"p10":2079,"p90":2079,"p99":2079,"max":2079},"domContentLoadedEventEnd":{"median":1083,"mean":1083,"mdev":0,"stddev":0,"min":1083,"p10":1083,"p90":1083,"p99":1083,"max":1083},"domContentLoadedEventStart":{"median":1082,"mean":1082,"mdev":0,"stddev":0,"min":1082,"p10":1082,"p90":1082,"p99":1082,"max":1082},"domInteractive":{"median":1081,"mean":1081,"mdev":0,"stddev":0,"min":1081,"p10":1081,"p90":1081,"p99":1081,"max":1081},"domainLookupEnd":{"median":178,"mean":178,"mdev":0,"stddev":0,"min":178,"p10":178,"p90":178,"p99":178,"max":178},"domainLookupStart":{"median":3,"mean":3,"mdev":0,"stddev":0,"min":3,"p10":3,"p90":3,"p99":3,"max":3},"duration":{"median":2082,"mean":2082,"mdev":0,"stddev":0,"min":2082,"p10":2082,"p90":2082,"p99":2082,"max":2082},"fetchStart":{"median":1,"mean":1,"mdev":0,"stddev":0,"min":1,"p10":1,"p90":1,"p99":1,"max":1},"loadEventEnd":{"median":2082,"mean":2082,"mdev":0,"stddev":0,"min":2082,"p10":2082,"p90":2082,"p99":2082,"max":2082},"loadEventStart":{"median":2079,"mean":2079,"mdev":0,"stddev":0,"min":2079,"p10":2079,"p90":2079,"p99":2079,"max":2079},"redirectEnd":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"redirectStart":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"requestStart":{"median":693,"mean":693,"mdev":0,"stddev":0,"min":693,"p10":693,"p90":693,"p99":693,"max":693},"responseEnd":{"median":745,"mean":745,"mdev":0,"stddev":0,"min":745,"p10":745,"p90":745,"p99":745,"max":745},"responseStart":{"median":745,"mean":745,"mdev":0,"stddev":0,"min":745,"p10":745,"p90":745,"p99":745,"max":745},"secureConnectionStart":{"median":322,"mean":322,"mdev":0,"stddev":0,"min":322,"p10":322,"p90":322,"p99":322,"max":322},"startTime":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"unloadEventEnd":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"unloadEventStart":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"workerStart":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0}},"pageTimings":{"backEndTime":{"median":745,"mean":745,"mdev":0,"stddev":0,"min":745,"p10":745,"p90":745,"p99":745,"max":745},"domContentLoadedTime":{"median":1082,"mean":1082,"mdev":0,"stddev":0,"min":1082,"p10":1082,"p90":1082,"p99":1082,"max":1082},"domInteractiveTime":{"median":1081,"mean":1081,"mdev":0,"stddev":0,"min":1081,"p10":1081,"p90":1081,"p99":1081,"max":1081},"domainLookupTime":{"median":174,"mean":174,"mdev":0,"stddev":0,"min":174,"p10":174,"p90":174,"p99":174,"max":174},"frontEndTime":{"median":1334,"mean":1334,"mdev":0,"stddev":0,"min":1334,"p10":1334,"p90":1334,"p99":1334,"max":1334},"pageDownloadTime":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"pageLoadTime":{"median":2079,"mean":2079,"mdev":0,"stddev":0,"min":2079,"p10":2079,"p90":2079,"p99":2079,"max":2079},"redirectionTime":{"median":0,"mean":0,"mdev":0,"stddev":0,"min":0,"p10":0,"p90":0,"p99":0,"max":0},"serverConnectionTime":{"median":515,"mean":515,"mdev":0,"stddev":0,"min":515,"p10":515,"p90":515,"p99":515,"max":515},"serverResponseTime":{"median":52,"mean":52,"mdev":0,"stddev":0,"min":52,"p10":52,"p90":52,"p99":52,"max":52}},"rumSpeedIndex":{"median":1224,"mean":1224,"mdev":0,"stddev":0,"min":1224,"p10":1224,"p90":1224,"p99":1224,"max":1224},"timeToContentfulPaint":{"median":1009,"mean":1009,"mdev":0,"stddev":0,"min":1009,"p10":1009,"p90":1009,"p99":1009,"max":1009},"timeToDomContentFlushed":{"median":1084,"mean":1084,"mdev":0,"stddev":0,"min":1084,"p10":1084,"p90":1084,"p99":1084,"max":1084},"timeToFirstInteractive":{"median":1082,"mean":1082,"mdev":0,"stddev":0,"min":1082,"p10":1082,"p90":1082,"p99":1082,"max":1082}}}}] \ No newline at end of file
diff --git a/python/mozperftest/mozperftest/tests/data/failing-samples/perftest_doc_failure_example.js b/python/mozperftest/mozperftest/tests/data/failing-samples/perftest_doc_failure_example.js
new file mode 100644
index 0000000000..6cc40d87db
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/failing-samples/perftest_doc_failure_example.js
@@ -0,0 +1,40 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+/* eslint-env node */
+"use strict";
+
+var someVar;
+
+async function setUp(context) {
+ context.log.info("setUp example!");
+}
+
+async function test(context, commands) {
+ context.log.info("Test with setUp/tearDown example!");
+ await commands.measure.start("https://www.sitespeed.io/");
+ await commands.measure.start("https://www.mozilla.org/en-US/");
+}
+
+async function tearDown(context) {
+ context.log.info("tearDown example!");
+}
+
+
+module.exports = {
+ setUp,
+ tearDown,
+ test,
+ owner: "Performance Testing Team",
+ badName: "Example",
+ description: "The description of the example test.",
+ longDescription: `
+ This is a longer description of the test perhaps including information
+ about how it should be run locally or links to relevant information.
+ `,
+ usage: `
+ ./mach perftest python/mozperftest/mozperftest/tests/data/samples/perftest_example.js
+ `,
+ supportedBrowsers: ["Fenix nightly", "Geckoview_example", "Fennec", "Firefox"],
+ supportedPlatforms: ["Android", "Desktop"],
+};
diff --git a/python/mozperftest/mozperftest/tests/data/firefox.dmg b/python/mozperftest/mozperftest/tests/data/firefox.dmg
new file mode 100644
index 0000000000..f151b96871
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/firefox.dmg
Binary files differ
diff --git a/python/mozperftest/mozperftest/tests/data/home_activity.txt b/python/mozperftest/mozperftest/tests/data/home_activity.txt
new file mode 100644
index 0000000000..dae9cf996f
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/home_activity.txt
@@ -0,0 +1,2806 @@
+--------- beginning of main
+05-26 11:45:04.454 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@84a3577)
+05-26 11:45:04.456 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@84a3577)
+05-26 11:45:05.454 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@4ed35e4)
+05-26 11:45:05.455 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@4ed35e4)
+05-26 11:45:06.456 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1c39a4d)
+05-26 11:45:06.457 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1c39a4d)
+05-26 11:45:07.462 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@dda5902)
+05-26 11:45:07.463 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@dda5902)
+05-26 11:45:08.468 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@6a2b213)
+05-26 11:45:08.469 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@6a2b213)
+05-26 11:45:08.474 2482 7043 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 57, account#-517948760#
+05-26 11:45:09.469 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@339cc50)
+05-26 11:45:09.470 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@339cc50)
+05-26 11:45:10.472 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1bc8e49)
+05-26 11:45:10.473 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1bc8e49)
+05-26 11:45:11.478 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@619034e)
+05-26 11:45:11.479 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@619034e)
+05-26 11:45:12.480 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@3fc5c6f)
+05-26 11:45:12.481 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@3fc5c6f)
+05-26 11:45:13.483 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@236c605)
+05-26 11:45:13.485 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@236c605)
+05-26 11:45:13.490 2482 7043 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 57, account#-517948760#
+05-26 11:45:14.486 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@262bd81)
+05-26 11:45:14.488 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@262bd81)
+05-26 11:45:15.489 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@c8e2e26)
+05-26 11:45:15.491 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@c8e2e26)
+--------- beginning of system
+05-26 11:45:13.176 1876 1895 E BatteryExternalStatsWorker: no controller energy info supplied for wifi
+05-26 11:45:15.554 1746 1771 E storaged: getDiskStats failed with result NOT_SUPPORTED and size 0
+05-26 11:45:16.489 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1fd6a67)
+05-26 11:45:16.491 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1fd6a67)
+05-26 11:45:17.489 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1fbe014)
+05-26 11:45:17.491 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1fbe014)
+05-26 11:45:18.489 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@9fcb0bd)
+05-26 11:45:18.491 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@9fcb0bd)
+05-26 11:45:18.499 2482 7043 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 57, account#-517948760#
+05-26 11:45:19.491 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@d9f06b2)
+05-26 11:45:19.492 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@d9f06b2)
+05-26 11:45:20.491 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@6c4603)
+05-26 11:45:20.492 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@6c4603)
+05-26 11:45:21.491 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@4c0e980)
+05-26 11:45:21.492 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@4c0e980)
+05-26 11:45:22.496 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@6489bb9)
+05-26 11:45:22.497 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@6489bb9)
+05-26 11:45:22.666 1666 1666 I lla.fenix.debu: Not late-enabling -Xcheck:jni (already on)
+05-26 11:45:22.668 1876 1893 I ActivityManager: Start proc 1666:org.mozilla.fenix.debug/u0a91 for service org.mozilla.fenix.debug/androidx.work.impl.background.systemjob.SystemJobService
+05-26 11:45:22.693 1666 1666 W lla.fenix.debu: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:22.742 1666 1666 I lla.fenix.debu: The ClassLoaderContext is a special shared library.
+05-26 11:45:23.348 1666 1666 D FirebaseApp: Default FirebaseApp failed to initialize because no default options were found. This usually means that com.google.gms:google-services was not applied to your gradle project.
+05-26 11:45:23.348 1666 1666 I FirebaseInitProvider: FirebaseApp initialization unsuccessful
+05-26 11:45:23.498 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1d508f1)
+05-26 11:45:23.499 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1d508f1)
+05-26 11:45:23.510 2482 7043 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 57, account#-517948760#
+05-26 11:45:23.566 1666 1666 D FenixApplication: Initializing Glean (uploadEnabled=true, isFennec=false)
+05-26 11:45:23.622 1666 1769 D RustNativeSupport: findMegazordLibraryName(viaduct, 0.59.0
+05-26 11:45:23.622 1666 1769 D RustNativeSupport: lib in use: none
+05-26 11:45:23.622 1666 1769 D RustNativeSupport: lib configured: megazord
+05-26 11:45:23.622 1666 1769 D RustNativeSupport: lib version configured: 0.59.0
+05-26 11:45:23.622 1666 1769 D RustNativeSupport: settled on megazord
+05-26 11:45:23.730 1666 1766 D libglean_ffi: glean_ffi: Android logging should be hooked up!
+05-26 11:45:23.738 1666 1766 I glean/Glean: Registering pings for mozilla.telemetry.glean.GleanMetrics.Pings
+05-26 11:45:23.743 1666 1766 I libglean_ffi: glean_core: Creating new Glean
+05-26 11:45:23.743 1666 1766 D libglean_ffi: glean_core::database: Database path: "/data/user/0/org.mozilla.fenix.debug/glean_data/db"
+05-26 11:45:23.743 1666 1766 I libglean_ffi: glean_core::database: Database initialized
+05-26 11:45:23.753 1666 1766 I libglean_ffi: glean_ffi: Glean initialized
+05-26 11:45:23.758 1666 1769 D RustNativeSupport: findMegazordLibraryName(rustlog, 0.59.0
+05-26 11:45:23.758 1666 1769 D RustNativeSupport: lib in use: none
+05-26 11:45:23.758 1666 1769 D RustNativeSupport: lib configured: megazord
+05-26 11:45:23.758 1666 1769 D RustNativeSupport: lib version configured: 0.59.0
+05-26 11:45:23.758 1666 1769 D RustNativeSupport: settled on megazord
+05-26 11:45:23.760 1666 1769 I rc_log_ffi::ios: rc_log adapter initialized!
+05-26 11:45:23.777 1666 1766 D glean/MetricsPingSched: The 'metrics' ping was last sent on Tue May 26 00:00:00 EDT 2020
+05-26 11:45:23.777 1666 1766 I glean/MetricsPingSched: The 'metrics' ping was already sent today, Tue May 26 11:45:23 EDT 2020.
+05-26 11:45:23.778 1666 1766 D glean/MetricsPingSched: Scheduling the 'metrics' ping in 58476240ms
+05-26 11:45:23.779 1666 1766 D libglean_ffi: glean_core: Clearing Lifetime::Application metrics
+05-26 11:45:23.788 11979 12094 I SessionStorage/AutoSave: Save: Periodic
+05-26 11:45:23.791 11979 12084 D SessionStorage/AutoSave: Saved state to disk [1ms]
+05-26 11:45:23.829 1666 1666 I GeckoRuntime: Adding debug configuration from: /data/local/tmp/org.mozilla.fenix.debug-geckoview-config.yaml
+05-26 11:45:23.829 1666 1666 D GeckoDebugConfig: Adding environment variables from debug config: {MOZ_CRASHREPORTER=1, MOZ_CRASHREPORTER_NO_REPORT=1, MOZ_CRASHREPORTER_SHUTDOWN=1}
+05-26 11:45:23.830 1666 1666 D GeckoDebugConfig: Adding arguments from debug config: [-marionette, -profile, /mnt/sdcard/org.mozilla.fenix.debug-geckodriver-profile]
+05-26 11:45:23.832 1666 1666 D GeckoThread: State changed to LAUNCHED
+05-26 11:45:23.832 1666 1791 I GeckoThread: preparing to run Gecko
+05-26 11:45:23.833 1666 1791 D GeckoThread: env var: MOZ_CRASHREPORTER=1
+05-26 11:45:23.833 1666 1791 D GeckoThread: env var: MOZ_CRASHREPORTER_NO_REPORT=1
+05-26 11:45:23.833 1666 1791 D GeckoThread: env var: MOZ_CRASHREPORTER_SHUTDOWN=1
+05-26 11:45:23.861 1666 1666 D GeckoRuntime: Lifecycle: onCreate
+05-26 11:45:23.878 1666 1791 D GeckoThread: State changed to MOZGLUE_READY
+05-26 11:45:23.889 1666 1791 W Settings: Setting animator_duration_scale has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only global URI.
+05-26 11:45:23.892 1666 1791 E GeckoLibLoad: Load sqlite start
+05-26 11:45:23.906 1666 1791 E GeckoLibLoad: Load sqlite done
+05-26 11:45:23.906 1666 1791 E GeckoLibLoad: Load nss start
+05-26 11:45:23.906 1666 1791 E GeckoLibLoad: Load nss done
+05-26 11:45:23.963 1666 1791 E GeckoLibLoad: Loaded libs in 56.743000ms total, 10ms(80ms) user, 40ms(40ms) system, 0(0) faults
+05-26 11:45:23.963 1666 1791 D GeckoThread: State changed to LIBS_READY
+05-26 11:45:23.971 1666 1791 W GeckoThread: zerdatime 190844167 - runGecko
+05-26 11:45:23.977 1666 1791 D GeckoProfile: Loading profile at: null name: default
+05-26 11:45:23.978 1666 1791 D GeckoProfile: Found profile dir: /data/user/0/org.mozilla.fenix.debug/files/mozilla/u71tud99.default
+05-26 11:45:24.000 1666 1791 I Gecko:DumpUtils: Fifo watcher disabled via pref.
+05-26 11:45:24.025 1666 1791 D GeckoSysInfo: System memory: 1494MB.
+05-26 11:45:24.025 1666 1791 W lla.fenix.debu: Accessing hidden method Landroid/os/MessageQueue;->next()Landroid/os/Message; (light greylist, JNI)
+05-26 11:45:24.026 1666 1791 D StrictMode: StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/MessageQueue;->next()Landroid/os/Message;
+05-26 11:45:24.026 1666 1791 D StrictMode: at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+05-26 11:45:24.026 1666 1791 D StrictMode: at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+05-26 11:45:24.026 1666 1791 D StrictMode: at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+05-26 11:45:24.026 1666 1791 D StrictMode: at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+05-26 11:45:24.026 1666 1791 W lla.fenix.debu: Accessing hidden field Landroid/os/MessageQueue;->mMessages:Landroid/os/Message; (light greylist, JNI)
+05-26 11:45:24.026 1666 1791 D StrictMode: StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/MessageQueue;->mMessages:Landroid/os/Message;
+05-26 11:45:24.026 1666 1791 D StrictMode: at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+05-26 11:45:24.026 1666 1791 D StrictMode: at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+05-26 11:45:24.026 1666 1791 D StrictMode: at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+05-26 11:45:24.026 1666 1791 D StrictMode: at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+05-26 11:45:24.029 1666 1791 W lla.fenix.debu: Accessing hidden field Ljava/lang/Boolean;->value:Z (light greylist, JNI)
+05-26 11:45:24.030 1666 1791 D StrictMode: StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Boolean;->value:Z
+05-26 11:45:24.030 1666 1791 D StrictMode: at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+05-26 11:45:24.030 1666 1791 D StrictMode: at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+05-26 11:45:24.030 1666 1791 D StrictMode: at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+05-26 11:45:24.030 1666 1791 D StrictMode: at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+05-26 11:45:24.030 1666 1791 W lla.fenix.debu: Accessing hidden field Ljava/lang/Integer;->value:I (light greylist, JNI)
+05-26 11:45:24.031 1666 1791 D StrictMode: StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Integer;->value:I
+05-26 11:45:24.031 1666 1791 D StrictMode: at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+05-26 11:45:24.031 1666 1791 D StrictMode: at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+05-26 11:45:24.031 1666 1791 D StrictMode: at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+05-26 11:45:24.031 1666 1791 D StrictMode: at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+05-26 11:45:24.032 1666 1791 W lla.fenix.debu: Accessing hidden field Ljava/lang/Double;->value:D (light greylist, JNI)
+05-26 11:45:24.039 1666 1791 D StrictMode: StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Double;->value:D
+05-26 11:45:24.039 1666 1791 D StrictMode: at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+05-26 11:45:24.039 1666 1791 D StrictMode: at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+05-26 11:45:24.039 1666 1791 D StrictMode: at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+05-26 11:45:24.039 1666 1791 D StrictMode: at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+05-26 11:45:24.040 1666 1791 D GeckoThread: State changed to JNI_READY
+05-26 11:45:24.074 1666 1821 D ServiceAllocator: org.mozilla.gecko.process.GeckoChildProcessServices$tab0 updateBindings: BACKGROUND priority, 0 importance, 2 successful binds, 0 failed binds, 0 successful unbinds, 0 failed unbinds
+05-26 11:45:24.085 1831 1831 I enix.debug:tab: Not late-enabling -Xcheck:jni (already on)
+05-26 11:45:24.096 1876 1893 I ActivityManager: Start proc 1831:org.mozilla.fenix.debug:tab0/u0a91 for service org.mozilla.fenix.debug/org.mozilla.gecko.process.GeckoChildProcessServices$tab0
+05-26 11:45:24.106 1666 1666 D LeakCanary: Updated AppWatcher.config: Config(no changes)
+05-26 11:45:24.119 1831 1831 W enix.debug:tab: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:24.175 1831 1831 I enix.debug:tab: The ClassLoaderContext is a special shared library.
+05-26 11:45:24.202 1666 1666 D LeakCanary: Updated LeakCanary.config: Config(no changes)
+05-26 11:45:24.213 1666 1666 D App : DebugMetricController: start
+05-26 11:45:24.213 1666 1666 D App : DebugMetricController: start
+05-26 11:45:24.216 1666 1666 W PushConfig: No firebase configuration found; cannot support push service.
+05-26 11:45:24.226 1666 1791 D GeckoViewStartup: observe: app-startup
+05-26 11:45:24.240 1666 1791 D GeckoViewConsole: enabled = true
+05-26 11:45:24.284 1666 1666 D StrictMode: StrictMode policy violation; ~duration=489 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:24.284 1666 1666 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:24.284 1666 1666 D StrictMode: at java.io.FileInputStream.<init>(FileInputStream.java:163)
+05-26 11:45:24.284 1666 1666 D StrictMode: at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:49)
+05-26 11:45:24.284 1666 1666 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+05-26 11:45:24.284 1666 1666 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+05-26 11:45:24.284 1666 1666 D StrictMode: at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+05-26 11:45:24.284 1666 1666 D StrictMode: at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+05-26 11:45:24.284 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+05-26 11:45:24.284 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+05-26 11:45:24.284 1666 1666 D StrictMode: at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+05-26 11:45:24.284 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+05-26 11:45:24.284 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+05-26 11:45:24.284 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:24.284 1666 1666 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:24.284 1666 1666 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:24.284 1666 1666 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:24.284 1666 1666 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:24.284 1666 1666 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:24.284 1666 1666 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:24.284 1666 1666 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:24.284 1666 1666 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:24.284 1666 1666 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:24.284 1666 1666 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:24.296 1666 1666 D StrictMode: StrictMode policy violation; ~duration=473 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:24.296 1666 1666 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:24.296 1666 1666 D StrictMode: at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+05-26 11:45:24.296 1666 1666 D StrictMode: at libcore.io.IoBridge.read(IoBridge.java:501)
+05-26 11:45:24.296 1666 1666 D StrictMode: at java.io.FileInputStream.read(FileInputStream.java:307)
+05-26 11:45:24.296 1666 1666 D StrictMode: at java.io.FilterInputStream.read(FilterInputStream.java:133)
+05-26 11:45:24.296 1666 1666 D StrictMode: at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.UnicodeReader.init(UnicodeReader.java:92)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:124)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1177)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:195)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:107)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+05-26 11:45:24.296 1666 1666 D StrictMode: at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+05-26 11:45:24.296 1666 1666 D StrictMode: at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+05-26 11:45:24.296 1666 1666 D StrictMode: at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+05-26 11:45:24.296 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:24.296 1666 1666 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:24.296 1666 1666 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:24.296 1666 1666 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:24.296 1666 1666 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:24.296 1666 1666 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:24.296 1666 1666 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:24.296 1666 1666 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:24.296 1666 1666 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:24.296 1666 1666 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:24.296 1666 1666 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:24.301 1666 1666 D StrictMode: StrictMode policy violation; ~duration=473 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:24.301 1666 1666 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:24.301 1666 1666 D StrictMode: at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+05-26 11:45:24.301 1666 1666 D StrictMode: at libcore.io.IoBridge.read(IoBridge.java:501)
+05-26 11:45:24.301 1666 1666 D StrictMode: at java.io.FileInputStream.read(FileInputStream.java:307)
+05-26 11:45:24.301 1666 1666 D StrictMode: at java.io.FilterInputStream.read(FilterInputStream.java:133)
+05-26 11:45:24.301 1666 1666 D StrictMode: at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+05-26 11:45:24.301 1666 1666 D StrictMode: at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:288)
+05-26 11:45:24.301 1666 1666 D StrictMode: at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:351)
+05-26 11:45:24.301 1666 1666 D StrictMode: at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:180)
+05-26 11:45:24.301 1666 1666 D StrictMode: at java.io.InputStreamReader.read(InputStreamReader.java:184)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1177)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:195)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:107)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+05-26 11:45:24.301 1666 1666 D StrictMode: at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+05-26 11:45:24.301 1666 1666 D StrictMode: at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+05-26 11:45:24.301 1666 1666 D StrictMode: at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+05-26 11:45:24.301 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:24.301 1666 1666 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:24.301 1666 1666 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:24.301 1666 1666 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:24.301 1666 1666 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:24.301 1666 1666 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:24.301 1666 1666 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:24.301 1666 1666 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:24.301 1666 1666 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:24.301 1666 1666 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:24.301 1666 1666 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:24.308 1666 1666 D StrictMode: StrictMode policy violation; ~duration=456 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:24.308 1666 1666 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:24.308 1666 1666 D StrictMode: at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+05-26 11:45:24.308 1666 1666 D StrictMode: at libcore.io.IoBridge.read(IoBridge.java:501)
+05-26 11:45:24.308 1666 1666 D StrictMode: at java.io.FileInputStream.read(FileInputStream.java:307)
+05-26 11:45:24.308 1666 1666 D StrictMode: at java.io.FilterInputStream.read(FilterInputStream.java:133)
+05-26 11:45:24.308 1666 1666 D StrictMode: at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+05-26 11:45:24.308 1666 1666 D StrictMode: at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:288)
+05-26 11:45:24.308 1666 1666 D StrictMode: at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:351)
+05-26 11:45:24.308 1666 1666 D StrictMode: at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:180)
+05-26 11:45:24.308 1666 1666 D StrictMode: at java.io.InputStreamReader.read(InputStreamReader.java:184)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:136)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.scanPlain(ScannerImpl.java:1999)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.fetchPlain(ScannerImpl.java:1044)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:399)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockSequenceEntry.produce(ParserImpl.java:504)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.composer.Composer.composeSequenceNode(Composer.java:188)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:142)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:236)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:227)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:215)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:144)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:85)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:108)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+05-26 11:45:24.308 1666 1666 D StrictMode: at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+05-26 11:45:24.308 1666 1666 D StrictMode: at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+05-26 11:45:24.308 1666 1666 D StrictMode: at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+05-26 11:45:24.308 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:24.308 1666 1666 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:24.308 1666 1666 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:24.308 1666 1666 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:24.308 1666 1666 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:24.308 1666 1666 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:24.308 1666 1666 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:24.308 1666 1666 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:24.308 1666 1666 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:24.308 1666 1666 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:24.308 1666 1666 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:24.318 1666 1666 D StrictMode: StrictMode policy violation; ~duration=413 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:24.318 1666 1666 D StrictMode: at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+05-26 11:45:24.318 1666 1666 D StrictMode: at java.io.File.exists(File.java:815)
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+05-26 11:45:24.318 1666 1666 D StrictMode: at mozilla.components.browser.engine.gecko.GeckoEngine.<init>(GeckoEngine.kt:68)
+05-26 11:45:24.318 1666 1666 D StrictMode: at mozilla.components.browser.engine.gecko.GeckoEngine.<init>(GeckoEngine.kt:63)
+05-26 11:45:24.318 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:76)
+05-26 11:45:24.318 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+05-26 11:45:24.318 1666 1666 D StrictMode: at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+05-26 11:45:24.318 1666 1666 D StrictMode: at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+05-26 11:45:24.318 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+05-26 11:45:24.318 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:24.318 1666 1666 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:24.318 1666 1666 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:24.318 1666 1666 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:24.318 1666 1666 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:24.326 1666 1666 D StrictMode: StrictMode policy violation; ~duration=189 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:24.326 1666 1666 D StrictMode: at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+05-26 11:45:24.326 1666 1666 D StrictMode: at java.io.File.exists(File.java:815)
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+05-26 11:45:24.326 1666 1666 D StrictMode: at androidx.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:119)
+05-26 11:45:24.326 1666 1666 D StrictMode: at org.mozilla.fenix.DebugFenixApplication.setupLeakCanary(DebugFenixApplication.kt:15)
+05-26 11:45:24.326 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:140)
+05-26 11:45:24.326 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:24.326 1666 1666 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:24.326 1666 1666 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:24.326 1666 1666 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:24.326 1666 1666 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:24.327 1666 1666 D StrictMode: StrictMode policy violation; ~duration=183 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:24.327 1666 1666 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:24.327 1666 1666 D StrictMode: at android.app.SharedPreferencesImpl.awaitLoadedLocked(SharedPreferencesImpl.java:256)
+05-26 11:45:24.327 1666 1666 D StrictMode: at android.app.SharedPreferencesImpl.getBoolean(SharedPreferencesImpl.java:325)
+05-26 11:45:24.327 1666 1666 D StrictMode: at org.mozilla.fenix.DebugFenixApplication.setupLeakCanary(DebugFenixApplication.kt:16)
+05-26 11:45:24.327 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:140)
+05-26 11:45:24.327 1666 1666 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:24.327 1666 1666 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:24.327 1666 1666 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:24.327 1666 1666 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:24.327 1666 1666 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:24.327 1666 1666 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:24.327 1666 1666 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:24.327 1666 1666 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:24.327 1666 1666 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:24.327 1666 1666 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:24.327 1666 1666 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:24.328 1666 1666 D SessionManager: onTrimMemory(5): clearThumbnails=false, closeEngineSessions=false
+05-26 11:45:24.345 1666 1666 D LeakCanary: LeakCanary is running and ready to detect leaks
+05-26 11:45:24.359 1666 1791 I GeckoConsole: No chrome package registered for chrome://browser/content/built_in_addons.json
+05-26 11:45:24.475 1666 1769 I SupportedAddonsWorker: Trying to check for new supported add-ons
+05-26 11:45:24.499 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@334f06b)
+05-26 11:45:24.500 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@334f06b)
+05-26 11:45:24.502 1666 1791 D GeckoThread: State changed to PROFILE_READY
+05-26 11:45:24.531 1666 1791 D GeckoViewStartup: observe: profile-after-change
+05-26 11:45:24.534 1666 1791 D GeckoViewTelemetryController: setup - canRecordPrereleaseData true, canRecordReleaseData true
+05-26 11:45:24.551 1666 1791 D GeckoThread: State changed to RUNNING
+05-26 11:45:24.557 1666 1791 I Gecko : 1590507924557 Marionette TRACE Marionette enabled
+05-26 11:45:24.558 1666 1791 I Gecko : 1590507924558 Marionette TRACE Received observer notification profile-after-change
+05-26 11:45:24.560 1666 1791 I Gecko : -*- nsDNSServiceDiscovery.js : nsDNSServiceDiscovery
+05-26 11:45:24.584 1666 1791 I Gecko : 1590507924584 Marionette TRACE Received observer notification command-line-startup
+05-26 11:45:24.592 1666 1666 D GeckoNetworkManager: Incoming event enableNotifications for state OffNoListeners -> OffWithListeners
+05-26 11:45:24.596 1666 1666 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:45:24.604 1666 1791 D GeckoViewStartup: onEvent GeckoView:SetLocale
+05-26 11:45:24.611 1666 1791 D GeckoViewStartup: onEvent GeckoView:ResetUserPrefs
+05-26 11:45:24.623 1666 1791 D GeckoViewRemoteDebugger: onInit
+05-26 11:45:24.628 1666 1791 D GeckoViewConsole: enabled = false
+05-26 11:45:24.638 1666 1791 D GeckoViewStartup: onEvent GeckoView:SetLocale
+05-26 11:45:24.639 1666 1791 D GeckoViewStartup: onEvent GeckoView:SetDefaultPrefs
+05-26 11:45:24.666 1666 1791 I chatty : uid=10091(org.mozilla.fenix.debug) Gecko identical 9 lines
+05-26 11:45:24.666 1666 1791 D GeckoViewStartup: onEvent GeckoView:SetDefaultPrefs
+05-26 11:45:24.671 1666 1791 D GeckoViewConsole: onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"webcompat@mozilla.com","locationUri":"resource://android/assets/extensions/webcompat/"}
+05-26 11:45:24.675 1666 1791 D GeckoViewConsole: onEvent GeckoView:WebExtension:List null
+05-26 11:45:24.685 1666 1791 D GeckoViewConsole: onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"mozacBrowserIcons","locationUri":"resource://android/assets/extensions/browser-icons/"}
+05-26 11:45:24.686 1666 1791 D GeckoViewConsole: onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"mozacBrowserAds","locationUri":"resource://android/assets/extensions/ads/"}
+05-26 11:45:24.687 1666 1791 D GeckoViewConsole: onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"BrowserCookiesExtension","locationUri":"resource://android/assets/extensions/cookies/"}
+05-26 11:45:24.698 1666 1791 I Gecko : 1590507924697 Marionette TRACE Received observer notification marionette-startup-requested
+05-26 11:45:24.699 1666 1791 I Gecko : 1590507924699 Marionette TRACE Waiting until startup recorder finished recording startup scripts...
+05-26 11:45:24.719 1666 1791 I Gecko : 1590507924719 Marionette TRACE All scripts recorded.
+05-26 11:45:24.720 1666 1791 I Gecko : 1590507924720 Marionette DEBUG Setting recommended pref browser.safebrowsing.malware.enabled to false
+05-26 11:45:24.723 1666 1791 I Gecko : 1590507924723 Marionette DEBUG Setting recommended pref browser.safebrowsing.phishing.enabled to false
+05-26 11:45:24.725 1666 1791 I Gecko : 1590507924725 Marionette DEBUG Setting recommended pref browser.search.update to false
+05-26 11:45:24.725 1666 1791 I Gecko : 1590507924725 Marionette DEBUG Setting recommended pref browser.tabs.disableBackgroundZombification to false
+05-26 11:45:24.725 1666 1791 I Gecko : 1590507924725 Marionette DEBUG Setting recommended pref browser.tabs.remote.separatePrivilegedContentProcess to false
+05-26 11:45:24.726 1666 1791 I Gecko : 1590507924726 Marionette DEBUG Setting recommended pref network.http.prompt-temp-redirect to false
+05-26 11:45:24.808 1666 1791 I Gecko : 1590507924807 Marionette FATAL Remote protocol server failed to start: Error: Could not bind to port 2829 (NS_ERROR_SOCKET_ADDRESS_IN_USE)(chrome://marionette/content/server.js:94:17) JS Stack trace: set acceptConnections@server.js:94:17
+05-26 11:45:24.808 1666 1791 I Gecko : start@server.js:124:5
+05-26 11:45:24.808 1666 1791 I Gecko : init/<@marionette.js:510:21
+05-26 11:45:24.808 1666 1791 I Gecko : 1590507924808 Marionette DEBUG Resetting recommended pref browser.safebrowsing.malware.enabled
+05-26 11:45:24.812 1666 1791 I Gecko : 1590507924812 Marionette DEBUG Resetting recommended pref browser.safebrowsing.phishing.enabled
+05-26 11:45:24.815 1666 1791 I Gecko : 1590507924815 Marionette DEBUG Resetting recommended pref browser.search.update
+05-26 11:45:24.815 1666 1791 I Gecko : 1590507924815 Marionette DEBUG Resetting recommended pref browser.tabs.disableBackgroundZombification
+05-26 11:45:24.816 1666 1791 I Gecko : 1590507924815 Marionette DEBUG Resetting recommended pref browser.tabs.remote.separatePrivilegedContentProcess
+05-26 11:45:24.816 1666 1791 I Gecko : 1590507924816 Marionette DEBUG Resetting recommended pref network.http.prompt-temp-redirect
+05-26 11:45:24.825 1666 1791 D GeckoThread: State changed to EXITING
+05-26 11:45:24.849 1666 1791 E GeckoConsole: [JavaScript Error: "NetworkError when attempting to fetch resource."]
+05-26 11:45:24.849 1666 1791 E GeckoConsole: get@resource://services-settings/RemoteSettingsClient.jsm:348:12
+05-26 11:45:25.001 1666 1666 D App : Installed browser-icons extension
+05-26 11:45:25.023 1666 1791 I GeckoConsole: 1590507925022 addons.xpi WARN Exception running bootstrap method shutdown on default-theme@mozilla.org: [Exception... "Component returned failure code: 0x80004002 (NS_NOINTERFACE) [nsISupports.QueryInterface]" nsresult: "0x80004002 (NS_NOINTERFACE)" location: "JS frame :: resource://gre/modules/Extension.jsm :: shutdown :: line 2586" data: no] Stack trace: shutdown()@resource://gre/modules/Extension.jsm:2586
+05-26 11:45:25.023 1666 1791 I GeckoConsole: shutdown()@resource://gre/modules/Extension.jsm:1703
+05-26 11:45:25.023 1666 1791 I GeckoConsole: callBootstrapMethod()@resource://gre/modules/addons/XPIProvider.jsm:1819
+05-26 11:45:25.023 1666 1791 I GeckoConsole: _shutdown()@resource://gre/modules/addons/XPIProvider.jsm:1948
+05-26 11:45:25.023 1666 1791 I GeckoConsole: observe()@resource://gre/modules/AsyncShutdown.jsm:554
+05-26 11:45:25.030 1666 1791 D : HostConnection::get() New Host Connection established 0xd119ec00, tid 1791
+05-26 11:45:25.033 1831 1831 D GeckoThread: State changed to LAUNCHED
+05-26 11:45:25.033 1666 1791 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
+05-26 11:45:25.033 1666 1791 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
+05-26 11:45:25.034 1831 1903 I GeckoThread: preparing to run Gecko
+05-26 11:45:25.035 1666 1791 E EGL_emulation: tid 1791: eglBindAPI(1259): error 0x300c (EGL_BAD_PARAMETER)
+05-26 11:45:25.037 1666 1791 D EGL_emulation: eglCreateContext: 0xe8b05f00: maj 3 min 0 rcv 3
+05-26 11:45:25.039 1666 1791 D EGL_emulation: eglMakeCurrent: 0xe8b05f00: ver 3 0 (tinfo 0xe8b03c50)
+05-26 11:45:25.129 1666 1791 E GeckoConsole: [JavaScript Error: "Error: Phase "profile-change-teardown" is finished, it is too late to register completion condition "ServiceWorkerShutdownBlocker: shutting down Service Workers"" {file: "resource://gre/modules/AsyncShutdown.jsm" line: 697}]
+05-26 11:45:25.129 1666 1791 E GeckoConsole: addBlocker@resource://gre/modules/AsyncShutdown.jsm:697:15
+05-26 11:45:25.129 1666 1791 E GeckoConsole: addBlocker@resource://gre/modules/AsyncShutdown.jsm:505:26
+05-26 11:45:25.129 1666 1791 E GeckoConsole: addBlocker@resource://gre/modules/AsyncShutdown.jsm:444:15
+05-26 11:45:25.129 1666 1791 E GeckoConsole: addBlocker@resource://gre/modules/nsAsyncShutdown.jsm:162:24
+05-26 11:45:25.129 1666 1791 E GeckoConsole: observe@resource://gre/modules/AsyncShutdown.jsm:554:16
+05-26 11:45:25.267 1666 1791 W GeckoConsole: [JavaScript Warning: "Security wrapper denied access to property "ONE_QUARTER" on privileged Javascript object. Support for exposing privileged objects to untrusted content via __exposedProps__ has been removed - use WebIDL bindings or Components.utils.cloneInto instead. Note that only the first denied property access from a given global object will be reported." {file: "moz-extension://9670d999-4378-46ae-b907-6d0c226b09b6/data/picture_in_picture_overrides.js" line: 26}]
+05-26 11:45:25.311 1666 1666 D mozac-webcompat: Installed WebCompat webextension: webcompat@mozilla.com
+05-26 11:45:25.381 1666 1791 E GeckoConsole: [JavaScript Error: "can't access property "startupData", state is undefined" {file: "resource://gre/modules/addons/XPIProvider.jsm" line: 3079}]
+05-26 11:45:25.381 1666 1791 E GeckoConsole: setStartupData@resource://gre/modules/addons/XPIProvider.jsm:3079:5
+05-26 11:45:25.381 1666 1791 E GeckoConsole: saveStartupData@resource://gre/modules/Extension.jsm:2035:17
+05-26 11:45:25.381 1666 1791 E GeckoConsole: _writePersistentListeners@resource://gre/modules/ExtensionCommon.jsm:2271:15
+05-26 11:45:25.381 1666 1791 E GeckoConsole: savePersistentListener@resource://gre/modules/ExtensionCommon.jsm:2362:18
+05-26 11:45:25.381 1666 1791 E GeckoConsole: addListener@resource://gre/modules/ExtensionCommon.jsm:2495:20
+05-26 11:45:25.381 1666 1791 E GeckoConsole: addListener@resource://gre/modules/ExtensionCommon.jsm:2550:38
+05-26 11:45:25.381 1666 1791 E GeckoConsole: recvAddListener@resource://gre/modules/ExtensionParent.jsm:1079:13
+05-26 11:45:25.381 1666 1791 E GeckoConsole: observe@resource://gre/modules/AsyncShutdown.jsm:554:16
+05-26 11:45:25.401 1666 1791 I chatty : uid=10091(org.mozilla.fenix.debug) Gecko identical 24 lines
+05-26 11:45:25.478 1666 1791 E GeckoConsole: [JavaScript Error: "can't access property "startupData", state is undefined" {file: "resource://gre/modules/addons/XPIProvider.jsm" line: 3079}]
+05-26 11:45:25.478 1666 1791 E GeckoConsole: setStartupData@resource://gre/modules/addons/XPIProvider.jsm:3079:5
+05-26 11:45:25.478 1666 1791 E GeckoConsole: saveStartupData@resource://gre/modules/Extension.jsm:2035:17
+05-26 11:45:25.478 1666 1791 E GeckoConsole: _writePersistentListeners@resource://gre/modules/ExtensionCommon.jsm:2271:15
+05-26 11:45:25.478 1666 1791 E GeckoConsole: savePersistentListener@resource://gre/modules/ExtensionCommon.jsm:2362:18
+05-26 11:45:25.478 1666 1791 E GeckoConsole: addListener@resource://gre/modules/ExtensionCommon.jsm:2495:20
+05-26 11:45:25.478 1666 1791 E GeckoConsole: addListener@resource://gre/modules/ExtensionCommon.jsm:2550:38
+05-26 11:45:25.478 1666 1791 E GeckoConsole: recvAddListener@resource://gre/modules/ExtensionParent.jsm:1079:13
+05-26 11:45:25.478 1666 1791 E GeckoConsole: observe@resource://gre/modules/AsyncShutdown.jsm:554:16
+05-26 11:45:25.499 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@c8d27c8)
+05-26 11:45:25.500 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@c8d27c8)
+05-26 11:45:25.518 1666 1791 I Gecko : 1590507925518 Marionette TRACE Received observer notification xpcom-will-shutdown
+05-26 11:45:25.537 1666 1666 I DefaultSupportedAddonsChecker: Register check for new supported add-ons
+05-26 11:45:25.662 1666 1732 I WM-WorkerWrapper: Work [ id=aa9d958b-bd64-47de-ad98-331e40daa20b, tags={ mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker.periodicWork, mozilla.components.feature.addons.migration.SupportedAddonsWorker } ] was cancelled
+05-26 11:45:25.662 1666 1732 I WM-WorkerWrapper: java.util.concurrent.CancellationException: Task was cancelled.
+05-26 11:45:25.662 1666 1732 I WM-WorkerWrapper: at androidx.work.impl.utils.futures.AbstractFuture.cancellationExceptionWithCause(AbstractFuture.java:1184)
+05-26 11:45:25.662 1666 1732 I WM-WorkerWrapper: at androidx.work.impl.utils.futures.AbstractFuture.getDoneValue(AbstractFuture.java:514)
+05-26 11:45:25.662 1666 1732 I WM-WorkerWrapper: at androidx.work.impl.utils.futures.AbstractFuture.get(AbstractFuture.java:475)
+05-26 11:45:25.662 1666 1732 I WM-WorkerWrapper: at androidx.work.impl.WorkerWrapper$2.run(WorkerWrapper.java:284)
+05-26 11:45:25.662 1666 1732 I WM-WorkerWrapper: at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
+05-26 11:45:25.662 1666 1732 I WM-WorkerWrapper: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
+05-26 11:45:25.662 1666 1732 I WM-WorkerWrapper: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
+05-26 11:45:25.662 1666 1732 I WM-WorkerWrapper: at java.lang.Thread.run(Thread.java:764)
+05-26 11:45:25.723 1666 1769 E SupportedAddonsWorker: An exception happened trying to check for new supported add-ons, re-schedule Job was cancelled
+05-26 11:45:25.723 1666 1769 E SupportedAddonsWorker: kotlinx.coroutines.JobCancellationException: Job was cancelled; job=JobImpl{Cancelling}@1e7bb6
+05-26 11:45:25.725 1666 1769 I SupportedAddonsWorker: Trying to check for new supported add-ons
+05-26 11:45:25.737 1922 1791 W google-breakpad: ExceptionHandler::WaitForContinueSignal waiting for continue signal...
+05-26 11:45:25.738 1666 1791 W google-breakpad: ExceptionHandler::GenerateDump cloned child
+05-26 11:45:25.739 1666 1791 W google-breakpad: 1922
+05-26 11:45:25.739 1666 1791 W google-breakpad:
+05-26 11:45:25.739 1666 1791 W google-breakpad: ExceptionHandler::SendContinueSignalToChild sent continue signal to child
+05-26 11:45:26.025 1876 17867 I ActivityManager: Process org.mozilla.fenix.debug (pid 1666) has died: vis TRNB
+05-26 11:45:26.025 1876 1894 W libprocessgroup: kill(-1666, 9) failed: No such process
+05-26 11:45:26.025 1876 1894 I libprocessgroup: Successfully killed process cgroup uid 10091 pid 1666 in 0ms
+05-26 11:45:26.025 1734 1734 I Zygote : Process 1666 exited due to signal (11)
+05-26 11:45:26.026 1831 1831 I ServiceChildProcess: Service has been unbound. Stopping.
+05-26 11:45:26.027 1876 17867 W ActivityManager: Scheduling restart of crashed service org.mozilla.fenix.debug/androidx.work.impl.background.systemjob.SystemJobService in 1000ms
+05-26 11:45:26.042 11979 11979 D SessionManager: onTrimMemory(5): clearThumbnails=false, closeEngineSessions=false
+05-26 11:45:26.047 1831 1831 I Process : Sending signal. PID: 1831 SIG: 9
+05-26 11:45:26.075 1734 1734 I Zygote : Process 1831 exited due to signal (9)
+05-26 11:45:26.075 1876 17867 I ActivityManager: Process org.mozilla.fenix.debug:tab0 (pid 1831) has died: fore SVC
+05-26 11:45:26.075 1876 1894 W libprocessgroup: kill(-1831, 9) failed: No such process
+05-26 11:45:26.075 1876 1894 I libprocessgroup: Successfully killed process cgroup uid 10091 pid 1831 in 0ms
+05-26 11:45:26.245 1876 17867 D WificondControl: Scan result ready event
+05-26 11:45:26.499 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@5bd01e3)
+05-26 11:45:26.500 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@5bd01e3)
+05-26 11:45:27.503 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@9f27e0)
+05-26 11:45:27.503 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@9f27e0)
+05-26 11:45:28.503 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@92a6a99)
+05-26 11:45:28.504 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@92a6a99)
+05-26 11:45:28.509 2482 7043 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 57, account#-517948760#
+05-26 11:45:28.888 1876 1884 I system_server: Background concurrent copying GC freed 100792(4MB) AllocSpace objects, 26(1616KB) LOS objects, 15% free, 33MB/39MB, paused 489us total 136.582ms
+05-26 11:45:29.506 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@ee0315e)
+05-26 11:45:29.507 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@ee0315e)
+05-26 11:45:30.506 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@133d93f)
+05-26 11:45:30.507 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@133d93f)
+05-26 11:45:31.506 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@4fee20c)
+05-26 11:45:31.508 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@4fee20c)
+05-26 11:45:32.191 1876 4539 W system_server: Long monitor contention with owner PackageInstaller (1938) at boolean com.android.server.pm.PackageInstallerSession$3.handleMessage(android.os.Message)(PackageInstallerSession.java:292) waiters=0 in void com.android.server.pm.PackageInstallerSession.write(org.xmlpull.v1.XmlSerializer, java.io.File) for 944ms
+05-26 11:45:32.196 1928 1928 W id.defcontaine: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:32.199 1876 1893 I ActivityManager: Start proc 1928:com.android.defcontainer/u0a13 for service com.android.defcontainer/.DefaultContainerService
+05-26 11:45:32.202 1876 2208 W system_server: Long monitor contention with owner Binder:1876_14 (4539) at void com.android.server.pm.PackageInstallerService$InternalCallback.onSessionSealedBlocking(com.android.server.pm.PackageInstallerSession)(PackageInstallerService.java:1136) waiters=0 in android.content.pm.PackageInstaller$SessionInfo com.android.server.pm.PackageInstallerService.getSessionInfo(int) for 958ms
+05-26 11:45:32.238 1928 1928 I id.defcontaine: The ClassLoaderContext is a special shared library.
+05-26 11:45:32.450 1876 1891 I ActivityManager: Force stopping org.mozilla.fennec_aurora appid=10092 user=-1: installPackageLI
+05-26 11:45:32.453 1876 1891 I ActivityManager: Killing 12055:org.mozilla.fennec_aurora:tab0/u0a92 (adj 100): stop org.mozilla.fennec_aurora
+05-26 11:45:32.454 1876 1891 W ActivityManager: Scheduling restart of crashed service org.mozilla.fennec_aurora/org.mozilla.gecko.process.GeckoChildProcessServices$tab0 in 1000ms
+05-26 11:45:32.454 1876 1894 W libprocessgroup: kill(-12055, 9) failed: No such process
+05-26 11:45:32.458 1876 1891 I ActivityManager: Killing 11979:org.mozilla.fennec_aurora/u0a92 (adj 0): stop org.mozilla.fennec_aurora
+05-26 11:45:32.471 1876 1891 W ActivityManager: Force removing ActivityRecord{f1cab5f u0 org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity t281}: app died, no saved state
+05-26 11:45:32.494 1876 1894 W libprocessgroup: kill(-12055, 9) failed: No such process
+05-26 11:45:32.505 1734 1734 I Zygote : Process 12055 exited due to signal (9)
+05-26 11:45:32.506 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@191d7c2)
+05-26 11:45:32.507 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@191d7c2)
+05-26 11:45:32.509 1876 1914 I PackageManager: Update package org.mozilla.fennec_aurora code path from /data/app/org.mozilla.fennec_aurora-gZjm3mMAvE9P4O2xmylTiQ== to /data/app/org.mozilla.fennec_aurora-0Iby3PCtt7bInD2AjVGM2A==; Retain data and using new
+05-26 11:45:32.510 1876 1914 I PackageManager: Update package org.mozilla.fennec_aurora resource path from /data/app/org.mozilla.fennec_aurora-gZjm3mMAvE9P4O2xmylTiQ== to /data/app/org.mozilla.fennec_aurora-0Iby3PCtt7bInD2AjVGM2A==; Retain data and using new
+05-26 11:45:32.531 1734 1734 I Zygote : Process 11979 exited due to signal (9)
+05-26 11:45:32.534 1876 1895 E BatteryExternalStatsWorker: no controller energy info supplied for wifi
+05-26 11:45:32.534 1876 1961 W InputDispatcher: channel '2ce2f5d org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
+05-26 11:45:32.534 1876 1961 E InputDispatcher: channel '2ce2f5d org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
+05-26 11:45:32.536 1876 1894 W libprocessgroup: kill(-12055, 9) failed: No such process
+05-26 11:45:32.536 1876 1894 I libprocessgroup: Successfully killed process cgroup uid 10092 pid 12055 in 81ms
+05-26 11:45:32.536 1876 1894 W libprocessgroup: kill(-11979, 9) failed: No such process
+05-26 11:45:32.536 1876 1894 I libprocessgroup: Successfully killed process cgroup uid 10092 pid 11979 in 0ms
+05-26 11:45:32.552 1904 16172 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:32.554 1904 16172 D : HostConnection::get() New Host Connection established 0xe69102c0, tid 16172
+05-26 11:45:32.554 1904 16172 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:32.555 1904 16172 D : HostConnection::get() New Host Connection established 0xe69102c0, tid 16172
+05-26 11:45:32.555 1904 16172 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:32.555 1904 16172 D : HostConnection::get() New Host Connection established 0xe69102c0, tid 16172
+05-26 11:45:32.555 1904 16172 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:32.556 1904 16172 D : HostConnection::get() New Host Connection established 0xe69102c0, tid 16172
+05-26 11:45:32.556 1904 16172 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:32.556 1904 16172 D : HostConnection::get() New Host Connection established 0xe69102c0, tid 16172
+05-26 11:45:32.556 1904 16172 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:32.560 1876 2445 I WindowManager: WIN DEATH: Window{2ce2f5d u0 org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity}
+05-26 11:45:32.561 1904 16172 D : HostConnection::get() New Host Connection established 0xe69102c0, tid 16172
+05-26 11:45:32.561 1876 2445 W InputDispatcher: Attempted to unregister already unregistered input channel '2ce2f5d org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity (server)'
+05-26 11:45:32.568 1733 1967 W SurfaceFlinger: Attempting to destroy on removed layer: AppWindowToken{5d38675 token=Token{5e619ac ActivityRecord{f1cab5f u0 org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity t281}}}#0
+05-26 11:45:32.583 1738 4197 D installd: Detected label change from u:object_r:app_data_file:s0 to u:object_r:app_data_file:s0:c92,c256,c512,c768 at /data/data/org.mozilla.fennec_aurora/code_cache; running recursive restorecon
+05-26 11:45:32.585 1738 4197 D installd: Detected label change from u:object_r:app_data_file:s0 to u:object_r:app_data_file:s0:c92,c256,c512,c768 at /data/user_de/0/org.mozilla.fennec_aurora/cache; running recursive restorecon
+05-26 11:45:32.589 1876 1914 I PackageManager.DexOptimizer: Running dexopt (dexoptNeeded=1) on: /data/app/org.mozilla.fennec_aurora-0Iby3PCtt7bInD2AjVGM2A==/base.apk pkg=org.mozilla.fennec_aurora isa=x86 dexoptFlags=boot_complete,profile_guided,public,enable_hidden_api_checks targetFilter=speed-profile oatDir=/data/app/org.mozilla.fennec_aurora-0Iby3PCtt7bInD2AjVGM2A==/oat classLoaderContext=PCL[/system/framework/org.apache.http.legacy.boot.jar]
+05-26 11:45:32.590 1738 4197 V installed: DexInv: --- BEGIN '/data/app/org.mozilla.fennec_aurora-0Iby3PCtt7bInD2AjVGM2A==/base.apk' ---
+05-26 11:45:32.613 1876 1899 W ActivityManager: setHasOverlayUi called on unknown pid: 11979
+05-26 11:45:32.629 1876 1892 W Looper : Slow dispatch took 171ms android.ui h=com.android.server.am.ActivityManagerService$UiHandler c=null m=53
+05-26 11:45:32.636 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:32.649 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:32.654 2002 2002 W dex2oat : Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:32.655 2002 2002 W dex2oat : Mismatch between dex2oat instruction set features (ISA: X86 Feature string: -ssse3,-sse4.1,-sse4.2,-avx,-avx2,-popcnt) and those of dex2oat executable (ISA: X86 Feature string: ssse3,-sse4.1,-sse4.2,-avx,-avx2,-popcnt) for the command line:
+05-26 11:45:32.655 2002 2002 W dex2oat : /system/bin/dex2oat --zip-fd=8 --zip-location=base.apk --input-vdex-fd=-1 --output-vdex-fd=10 --oat-fd=9 --oat-location=/data/app/org.mozilla.fennec_aurora-0Iby3PCtt7bInD2AjVGM2A==/oat/x86/base.odex --instruction-set=x86 --instruction-set-variant=x86 --instruction-set-features=default --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=speed-profile --swap-fd=11 --app-image-fd=12 --image-format=lz4 --classpath-dir=/data/app/org.mozilla.fennec_aurora-0Iby3PCtt7bInD2AjVGM2A== --class-loader-context=PCL[/system/framework/org.apache.http.legacy.boot.jar] --generate-mini-debug-info --compact-dex-level=none --runtime-arg -Xtarget-sdk-version:28 --runtime-arg -Xhidden-api-checks --compilation-reason=install
+05-26 11:45:32.655 2002 2002 I dex2oat : /system/bin/dex2oat --input-vdex-fd=-1 --output-vdex-fd=10 --compiler-filter=speed-profile --classpath-dir=/data/app/org.mozilla.fennec_aurora-0Iby3PCtt7bInD2AjVGM2A== --class-loader-context=PCL[/system/framework/org.apache.http.legacy.boot.jar] --generate-mini-debug-info --compact-dex-level=none --compilation-reason=install
+05-26 11:45:32.663 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:32.689 1733 1733 D SurfaceFlinger: duplicate layer name: changing com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity to com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#1
+05-26 11:45:32.691 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:32.703 1623 5774 I chatty : uid=1000(system) HwBinder:1623_3 identical 1 line
+05-26 11:45:32.712 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:32.734 2000 2000 I GoogleInputMethod: onFinishInput() : Dummy InputConnection bound
+05-26 11:45:32.748 2499 2681 D EGL_emulation: eglMakeCurrent: 0xd35359e0: ver 3 0 (tinfo 0xd353b4f0)
+05-26 11:45:32.762 2000 2000 I GoogleInputMethod: onStartInput() : Dummy InputConnection bound
+05-26 11:45:32.792 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:32.794 2534 2825 D EGL_emulation: eglMakeCurrent: 0xe8b06aa0: ver 3 0 (tinfo 0xe8b03b50)
+05-26 11:45:32.812 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:32.821 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:32.823 2534 2534 W SessionLifecycleManager: Handover failed. Creating new session controller.
+05-26 11:45:32.855 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:32.985 2012 2265 I chatty : uid=10024(com.android.systemui) RenderThread identical 12 lines
+05-26 11:45:32.990 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:33.096 2534 2034 W LocationOracle: No location history returned by ContextManager
+05-26 11:45:33.263 2534 2534 I MicroDetectionWorker: #startMicroDetector [speakerMode: 0]
+05-26 11:45:33.267 2534 2534 I AudioController: Using mInputStreamFactoryBuilder
+05-26 11:45:33.268 2534 2534 I AudioController: Created new AudioSource
+05-26 11:45:33.275 2534 2534 I MicroDetectionWorker: onReady
+05-26 11:45:33.303 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:33.311 1876 2445 I GnssLocationProvider: WakeLock acquired by sendMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@69389c9)
+05-26 11:45:33.314 2482 6319 W ctxmgr : [AclManager]No 3 for (accnt=account#-517948760#, com.google.android.gms(10008):UserVelocityProducer, vrsn=13280022, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 1, account#-517948760#
+05-26 11:45:33.333 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@b4318ce)
+05-26 11:45:33.340 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@69389c9)
+05-26 11:45:33.341 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@b4318ce)
+05-26 11:45:33.344 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_LOCATION, 1, Location[gps 37.421998,-122.084000 hAcc=20 et=?!? alt=5.0 vel=0.0 bear=0.0 vAcc=??? sAcc=??? bAcc=???])
+05-26 11:45:33.346 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_LOCATION, 1, Location[gps 37.421998,-122.084000 hAcc=20 et=+2d5h0m53s542ms alt=5.0 vel=0.0 bear=0.0 vAcc=??? sAcc=??? bAcc=??? {Bundle[{satellites=0, maxCn0=0, meanCn0=0}]}])
+05-26 11:45:33.347 2534 2038 I MicroRecognitionRunner: Starting detection.
+05-26 11:45:33.357 2534 2010 I MicrophoneInputStream: mic_starting SR : 16000 CC : 16 SO : 6
+05-26 11:45:33.367 1631 1682 E : Request requires android.permission.RECORD_AUDIO
+05-26 11:45:33.367 1631 1682 E AudioPolicyIntefaceImpl: getInputForAttr permission denied: recording not allowed for uid 10039 pid 2534
+05-26 11:45:33.367 1631 1682 E AudioFlinger: createRecord() checkRecordThread_l failed
+05-26 11:45:33.367 2534 2010 E IAudioFlinger: createRecord returned error -22
+05-26 11:45:33.367 2534 2010 E AudioRecord: AudioFlinger could not create record track, status: -22
+05-26 11:45:33.367 2534 2010 E AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -22.
+05-26 11:45:33.370 2534 2010 E android.media.AudioRecord: Error code -20 when initializing native AudioRecord object.
+05-26 11:45:33.370 2534 2010 I MicrophoneInputStream: mic_started SR : 16000 CC : 16 SO : 6
+05-26 11:45:33.371 2534 2010 E ActivityThread: Failed to find provider info for com.google.android.apps.gsa.testing.ui.audio.recorded
+05-26 11:45:33.372 2534 2534 I MicroDetectionWorker: onReady
+05-26 11:45:33.373 2534 2038 W SpeechLevelGenerator: Really low audio levels detected. The audio input may have issues.
+05-26 11:45:33.376 2534 2010 I MicrophoneInputStream: mic_close SR : 16000 CC : 16 SO : 6
+05-26 11:45:33.383 2534 2038 I MicroRecognitionRunner: Detection finished
+05-26 11:45:33.383 2534 2038 W ErrorReporter: reportError [type: 211, code: 524300]: Error reading from input stream
+05-26 11:45:33.384 2534 2954 I MicroRecognitionRunner: Stopping hotword detection.
+05-26 11:45:33.390 2482 3056 I Places : Converted 0 out of 1 WiFi scans
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: onFatalError, processing error from engine(4)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: com.google.android.apps.gsa.shared.speech.b.g: Error reading from input stream
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at com.google.android.apps.gsa.staticplugins.microdetection.d.k.a(SourceFile:91)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at com.google.android.apps.gsa.staticplugins.microdetection.d.l.run(Unknown Source:14)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at com.google.android.libraries.gsa.runner.a.a.b(SourceFile:32)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at com.google.android.libraries.gsa.runner.a.c.call(Unknown Source:4)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.g.run(Unknown Source:4)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at java.lang.Thread.run(Thread.java:764)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.i.run(SourceFile:6)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: Caused by: com.google.android.apps.gsa.shared.exception.GsaIOException: Error code: 393238 | Buffer overflow, no available space.
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.Tee.j(SourceFile:103)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.au.read(SourceFile:2)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at java.io.InputStream.read(InputStream.java:101)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.ao.run(SourceFile:17)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.an.run(SourceFile:2)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+05-26 11:45:33.398 2534 2038 W ErrorProcessor: ... 10 more
+05-26 11:45:33.398 2534 2038 I AudioController: internalShutdown
+05-26 11:45:33.402 2534 2534 I MicroDetector: Keeping mic open: false
+05-26 11:45:33.402 2534 2534 I MicroDetectionWorker: #onError(false)
+05-26 11:45:33.404 2534 2034 I DeviceStateChecker: DeviceStateChecker cancelled
+05-26 11:45:33.419 2482 2043 I PlaceInferenceEngine: No beacon scan available - ignoring candidates.
+05-26 11:45:33.447 2482 6319 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):UserLocationProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 1, account#-517948760#
+05-26 11:45:33.468 2482 2508 I .gms.persisten: Background concurrent copying GC freed 164538(5MB) AllocSpace objects, 1(20KB) LOS objects, 41% free, 8MB/14MB, paused 8.204ms total 129.449ms
+05-26 11:45:33.506 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@41f985)
+05-26 11:45:33.508 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@41f985)
+05-26 11:45:33.516 2482 2044 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 57, account#-517948760#
+05-26 11:45:33.520 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_LOCATION, 1, Location[gps 37.421998,-122.084000 hAcc=20 et=?!? alt=5.0 vel=0.0 bear=0.0 vAcc=??? sAcc=??? bAcc=???])
+05-26 11:45:33.521 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_LOCATION, 1, Location[gps 37.421998,-122.084000 hAcc=20 et=+2d5h0m53s716ms alt=5.0 vel=0.0 bear=0.0 vAcc=??? sAcc=??? bAcc=??? {Bundle[{satellites=0, maxCn0=0, meanCn0=0}]}])
+05-26 11:45:33.575 2482 6319 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):UserLocationProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 1, account#-517948760#
+05-26 11:45:33.591 2482 3056 I Places : ?: PlacesBleScanner start() with priority 2
+05-26 11:45:33.601 2482 3056 I Places : ?: PlacesBleScanner start() with priority 2
+05-26 11:45:33.602 2482 3056 I PlaceInferenceEngine: [anon] Changed inference mode: 1
+05-26 11:45:33.613 2482 3056 I Places : Converted 0 out of 1 WiFi scans
+05-26 11:45:33.642 2482 3056 I Places : ?: PlacesBleScanner start() with priority 2
+05-26 11:45:33.658 2482 3056 I Places : ?: PlacesBleScanner start() with priority 2
+05-26 11:45:33.658 2482 3056 I PlaceInferenceEngine: [anon] Changed inference mode: 1
+05-26 11:45:33.662 2482 6319 I PlaceInferenceEngine: No beacon scan available - ignoring candidates.
+05-26 11:45:33.681 2002 2002 W dex2oat : Accessing hidden method Landroid/content/res/Resources$Theme;->rebase()V (dark greylist, linking)
+05-26 11:45:33.699 2482 3056 I Places : Converted 0 out of 1 WiFi scans
+05-26 11:45:33.718 2482 2043 I PlaceInferenceEngine: No beacon scan available - ignoring candidates.
+05-26 11:45:33.764 2482 6321 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):PlacesProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 18, account#-517948760#
+05-26 11:45:34.506 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@b6301e7)
+05-26 11:45:34.507 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@b6301e7)
+05-26 11:45:34.507 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_LOCATION, 1, Location[gps 37.421998,-122.084000 hAcc=20 et=?!? alt=5.0 vel=0.0 bear=0.0 vAcc=??? sAcc=??? bAcc=???])
+05-26 11:45:34.507 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_LOCATION, 1, Location[gps 37.421998,-122.084000 hAcc=20 et=+2d5h0m54s703ms alt=5.0 vel=0.0 bear=0.0 vAcc=??? sAcc=??? bAcc=??? {Bundle[{satellites=0, maxCn0=0, meanCn0=0}]}])
+05-26 11:45:34.534 2482 7043 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):UserLocationProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 1, account#-517948760#
+05-26 11:45:34.675 2002 2040 W dex2oat : Accessing hidden method Landroid/view/View;->setTransitionVisibility(I)V (dark greylist, linking)
+05-26 11:45:34.788 2002 2041 W dex2oat : Accessing hidden method Landroid/view/View;->setTransitionVisibility(I)V (dark greylist, linking)
+05-26 11:45:35.507 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@3666194)
+05-26 11:45:35.508 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@3666194)
+05-26 11:45:35.509 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_LOCATION, 1, Location[gps 37.421998,-122.084000 hAcc=20 et=?!? alt=5.0 vel=0.0 bear=0.0 vAcc=??? sAcc=??? bAcc=???])
+05-26 11:45:35.510 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_LOCATION, 1, Location[gps 37.421998,-122.084000 hAcc=20 et=+2d5h0m55s706ms alt=5.0 vel=0.0 bear=0.0 vAcc=??? sAcc=??? bAcc=??? {Bundle[{satellites=0, maxCn0=0, meanCn0=0}]}])
+05-26 11:45:35.522 1876 3809 I GnssLocationProvider: WakeLock acquired by sendMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@cad43d)
+05-26 11:45:35.522 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@7352432)
+05-26 11:45:35.522 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@cad43d)
+05-26 11:45:35.524 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@7352432)
+05-26 11:45:35.534 2482 7043 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):UserLocationProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 1, account#-517948760#
+05-26 11:45:36.509 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@353d583)
+05-26 11:45:36.510 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@353d583)
+05-26 11:45:37.510 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@c120300)
+05-26 11:45:37.510 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@c120300)
+05-26 11:45:37.759 2002 2002 W dex2oat : Accessing hidden method Landroid/content/res/Resources$Theme;->rebase()V (dark greylist, linking)
+05-26 11:45:37.797 2002 2002 I dex2oat : Explicit concurrent copying GC freed 51169(7MB) AllocSpace objects, 0(0B) LOS objects, 99% free, 1232B/1537KB, paused 882us total 4.299ms
+05-26 11:45:37.952 2002 2002 I dex2oat : dex2oat took 5.306s (15.105s cpu) (threads: 4) arena alloc=2832B (2832B) java alloc=17KB (17616B) native alloc=11MB (12219416B) free=3MB (3509224B)
+05-26 11:45:37.959 1738 4197 V installed: DexInv: --- END '/data/app/org.mozilla.fennec_aurora-0Iby3PCtt7bInD2AjVGM2A==/base.apk' (success) ---
+05-26 11:45:37.961 1876 1914 D PackageManager: Instant App installer not found with android.intent.action.INSTALL_INSTANT_APP_PACKAGE
+05-26 11:45:37.962 1876 1914 D PackageManager: Clear ephemeral installer activity
+05-26 11:45:38.079 1876 1914 I system_server: Explicit concurrent copying GC freed 97404(5MB) AllocSpace objects, 27(1336KB) LOS objects, 18% free, 26MB/32MB, paused 1.291ms total 116.530ms
+05-26 11:45:38.115 1738 4197 E : Couldn't opendir /data/app/vmdl1342695088.tmp: No such file or directory
+05-26 11:45:38.116 1738 4197 E installd: Failed to delete /data/app/vmdl1342695088.tmp: No such file or directory
+05-26 11:45:38.120 1876 1914 I ActivityManager: Force stopping org.mozilla.fennec_aurora appid=10092 user=0: pkg removed
+05-26 11:45:38.129 1876 1891 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REMOVED dat=package:org.mozilla.fennec_aurora flg=0x4000010 (has extras) } to com.android.musicfx/.Compatibility$Receiver
+05-26 11:45:38.151 1876 1890 E system_server: No package ID 7f found for ID 0x7f08019f.
+05-26 11:45:38.151 1876 1890 E system_server: No package ID 7f found for ID 0x7f130122.
+05-26 11:45:38.151 1876 1890 E system_server: No package ID 7f found for ID 0x7f130122.
+05-26 11:45:38.153 1876 1890 E system_server: No package ID 7f found for ID 0x7f08019d.
+05-26 11:45:38.153 1876 1890 E system_server: No package ID 7f found for ID 0x7f130121.
+05-26 11:45:38.153 1876 1890 E system_server: No package ID 7f found for ID 0x7f130121.
+05-26 11:45:38.155 2054 2054 W ndroid.keychai: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:38.158 1876 1893 I ActivityManager: Start proc 2054:com.android.keychain/1000 for service com.android.keychain/.KeyChainService
+05-26 11:45:38.176 1876 3809 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REMOVED dat=package:org.mozilla.fennec_aurora flg=0x4000010 (has extras) } to com.google.android.googlequicksearchbox/com.google.android.apps.gsa.googlequicksearchbox.GelStubAppWatcher
+05-26 11:45:38.178 1876 1891 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_ADDED dat=package:org.mozilla.fennec_aurora flg=0x4000010 (has extras) } to com.android.musicfx/.Compatibility$Receiver
+05-26 11:45:38.179 2534 2034 I EventLogSendingHelper: Sending log events.
+05-26 11:45:38.215 2054 2054 I ndroid.keychai: The ClassLoaderContext is a special shared library.
+05-26 11:45:38.217 1876 3809 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_ADDED dat=package:org.mozilla.fennec_aurora flg=0x4000010 (has extras) } to com.google.android.googlequicksearchbox/com.google.android.apps.gsa.googlequicksearchbox.GelStubAppWatcher
+05-26 11:45:38.217 1876 1891 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:org.mozilla.fennec_aurora flg=0x4000010 (has extras) } to com.android.musicfx/.Compatibility$Receiver
+05-26 11:45:38.218 1876 1891 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:org.mozilla.fennec_aurora flg=0x4000010 (has extras) } to com.google.android.apps.photos/.account.full.FetchAccountPropertiesAppUpgradeBroadcastReceiver
+05-26 11:45:38.218 1876 1891 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:org.mozilla.fennec_aurora flg=0x4000010 (has extras) } to com.google.android.apps.photos/.account.full.SyncAccountsForLoginBroadcastReceiver
+05-26 11:45:38.218 1876 1891 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:org.mozilla.fennec_aurora flg=0x4000010 (has extras) } to com.google.android.apps.photos/.experiments.phenotype.full.PhenotypeAppUpgradeBroadcastReceiver
+05-26 11:45:38.218 1876 1891 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:org.mozilla.fennec_aurora flg=0x4000010 (has extras) } to com.google.android.apps.photos/.notificationchannels.AppUpdateBroadcastReceiver
+05-26 11:45:38.241 1876 4916 W BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:org.mozilla.fennec_aurora flg=0x4000010 (has extras) } to com.google.android.googlequicksearchbox/com.google.android.apps.gsa.googlequicksearchbox.GelStubAppWatcher
+05-26 11:45:38.264 2534 2034 I EventLogSendingHelper: Sending log events.
+05-26 11:45:38.281 1876 1962 I InputReader: Reconfiguring input devices. changes=0x00000010
+05-26 11:45:38.296 7086 2100 I Auth : [SupervisedAccountIntentOperation] onHandleIntent(): android.intent.action.PACKAGE_ADDED
+05-26 11:45:38.299 7086 2100 I Auth : [SupervisedAccountIntentOperation] This operation is disabled
+05-26 11:45:38.309 7086 2100 I ChromeSync: [Sync,SyncIntentOperation] Handling the intent: Intent { act=android.intent.action.PACKAGE_ADDED dat=package:org.mozilla.fennec_aurora flg=0x4000010 cmp=com.google.android.gms/.chimera.GmsIntentOperationService (has extras) }.
+05-26 11:45:38.339 1876 1962 I InputReader: Reconfiguring input devices. changes=0x00000010
+05-26 11:45:38.370 1876 1876 W Looper : Slow dispatch took 130ms main h=android.app.ActivityThread$H c=android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA@a0fbbe1 m=0
+05-26 11:45:38.370 1876 1876 W Looper : Slow delivery took 235ms main h=android.app.ActivityThread$H c=android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA@4f7bd06 m=0
+05-26 11:45:38.366 1876 1962 I InputReader: Reconfiguring input devices. changes=0x00000010
+05-26 11:45:38.375 7086 2094 W PeopleContactsSync: CP2 sync disabled by gservices.
+05-26 11:45:38.405 2534 2534 I MicroDetectionWorker: #startMicroDetector [speakerMode: 0]
+05-26 11:45:38.406 2534 2534 I AudioController: Using mInputStreamFactoryBuilder
+05-26 11:45:38.406 2534 2534 I AudioController: Created new AudioSource
+05-26 11:45:38.407 2534 2534 I MicroDetectionWorker: onReady
+05-26 11:45:38.412 2131 2131 D CarrierSvcBindHelper: No carrier app for: 0
+05-26 11:45:38.426 2131 2131 D CarrierSvcBindHelper: No carrier app for: 0
+05-26 11:45:38.488 2534 2034 I MicroRecognitionRunner: Starting detection.
+05-26 11:45:38.488 2534 2010 I MicrophoneInputStream: mic_starting SR : 16000 CC : 16 SO : 6
+05-26 11:45:38.492 1631 1682 E : Request requires android.permission.RECORD_AUDIO
+05-26 11:45:38.492 1631 1682 E AudioPolicyIntefaceImpl: getInputForAttr permission denied: recording not allowed for uid 10039 pid 2534
+05-26 11:45:38.492 1631 1682 E AudioFlinger: createRecord() checkRecordThread_l failed
+05-26 11:45:38.492 2534 2010 E IAudioFlinger: createRecord returned error -22
+05-26 11:45:38.492 2534 2010 E AudioRecord: AudioFlinger could not create record track, status: -22
+05-26 11:45:38.497 2534 2010 E AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -22.
+05-26 11:45:38.499 2131 2131 D ImsResolver: maybeAddedImsService, packageName: org.mozilla.fennec_aurora
+05-26 11:45:38.500 2534 2010 E android.media.AudioRecord: Error code -20 when initializing native AudioRecord object.
+05-26 11:45:38.500 2534 2010 I MicrophoneInputStream: mic_started SR : 16000 CC : 16 SO : 6
+05-26 11:45:38.502 2534 2010 E ActivityThread: Failed to find provider info for com.google.android.apps.gsa.testing.ui.audio.recorded
+05-26 11:45:38.502 2534 2534 I MicroDetectionWorker: onReady
+05-26 11:45:38.503 2131 2131 D CarrierConfigLoader: mHandler: 9 phoneId: 0
+05-26 11:45:38.506 2534 2010 I MicrophoneInputStream: mic_close SR : 16000 CC : 16 SO : 6
+05-26 11:45:38.515 2534 2034 I MicroRecognitionRunner: Detection finished
+05-26 11:45:38.515 2534 2034 W ErrorReporter: reportError [type: 211, code: 524300]: Error reading from input stream
+05-26 11:45:38.516 2534 2954 I MicroRecognitionRunner: Stopping hotword detection.
+05-26 11:45:38.516 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@3c2a392)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: onFatalError, processing error from engine(4)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: com.google.android.apps.gsa.shared.speech.b.g: Error reading from input stream
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.staticplugins.microdetection.d.k.a(SourceFile:91)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.staticplugins.microdetection.d.l.run(Unknown Source:14)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at com.google.android.libraries.gsa.runner.a.a.b(SourceFile:32)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at com.google.android.libraries.gsa.runner.a.c.call(Unknown Source:4)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.g.run(Unknown Source:4)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at java.lang.Thread.run(Thread.java:764)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.i.run(SourceFile:6)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: Caused by: com.google.android.apps.gsa.shared.exception.GsaIOException: Error code: 393238 | Buffer overflow, no available space.
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.Tee.j(SourceFile:103)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.au.read(SourceFile:2)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at java.io.InputStream.read(InputStream.java:101)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.ao.run(SourceFile:17)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.an.run(SourceFile:2)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+05-26 11:45:38.517 2534 2034 W ErrorProcessor: ... 10 more
+05-26 11:45:38.517 2534 2034 I AudioController: internalShutdown
+05-26 11:45:38.531 2534 2534 I MicroDetector: Keeping mic open: false
+05-26 11:45:38.531 2534 2534 I MicroDetectionWorker: #onError(false)
+05-26 11:45:38.531 2534 2038 I DeviceStateChecker: DeviceStateChecker cancelled
+05-26 11:45:38.590 7086 2099 W gle.android.gm: Long monitor contention with owner [dko] processing com.google.android.gms.growth.service.PackageActionReceiver for action android.intent.action.PACKAGE_REMOVED (2077) at boolean android.os.BinderProxy.transactNative(int, android.os.Parcel, android.os.Parcel, int)(Binder.java:-2) waiters=0 in void dkr.run() for 276ms
+05-26 11:45:38.714 7086 7246 I Icing : IndexChimeraService.getServiceInterface callingPackage=com.google.android.gms componentName=AppsCorpus serviceId=36
+05-26 11:45:38.720 7086 7237 I Icing : IndexChimeraService.getServiceInterface callingPackage=com.google.android.gms componentName=AppsCorpus serviceId=32
+05-26 11:45:38.866 1876 1876 W system_server: Long monitor contention with owner android.bg (1890) at android.content.res.Resources android.app.ResourcesManager.getOrCreateResources(android.os.IBinder, android.content.res.ResourcesKey, java.lang.ClassLoader)(ResourcesManager.java:736) waiters=0 in android.content.res.Resources android.app.ResourcesManager.getOrCreateResources(android.os.IBinder, android.content.res.ResourcesKey, java.lang.ClassLoader) for 110ms
+05-26 11:45:38.869 7086 7256 I Icing : Usage reports ok 1, Failed Usage reports 0, indexed 0, rejected 0, imm upload false
+05-26 11:45:38.889 7086 7256 I Icing : Usage reports ok 0, Failed Usage reports 0, indexed 0, rejected 0, imm upload false
+05-26 11:45:38.952 1876 1876 W Looper : Slow dispatch took 532ms main h=android.app.ActivityThread$H c=android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA@4adfab m=0
+05-26 11:45:38.963 1876 1876 I Telecom : DefaultDialerCache: Refreshing default dialer for user 0: now com.google.android.dialer: DDC.oR@AYE
+05-26 11:45:38.977 1876 1892 D AutofillUI: destroySaveUiUiThread(): already destroyed
+05-26 11:45:38.982 1876 1890 D AutofillManagerServiceImpl: Set component for user 0 as AutofillServiceInfo[ServiceInfo{d54b1a1 com.google.android.gms.autofill.service.AutofillService}, settings:com.google.android.gms.autofill.ui.AutofillSettingsActivity, hasCompatPckgs:false]
+05-26 11:45:39.008 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@3c2a392)
+05-26 11:45:39.009 7086 7246 I Icing : IndexChimeraService.getServiceInterface callingPackage=com.google.android.gms componentName=AppsCorpus serviceId=32
+05-26 11:45:39.010 7086 7237 I Icing : IndexChimeraService.getServiceInterface callingPackage=com.google.android.gms componentName=AppsCorpus serviceId=36
+05-26 11:45:39.019 2482 6321 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 57, account#-517948760#
+05-26 11:45:39.050 7086 7256 I Icing : Usage reports ok 0, Failed Usage reports 0, indexed 0, rejected 0, imm upload false
+05-26 11:45:39.066 7086 7256 I Icing : Usage reports ok 0, Failed Usage reports 0, indexed 0, rejected 0, imm upload false
+05-26 11:45:39.509 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@eb4dfc6)
+05-26 11:45:39.510 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@eb4dfc6)
+05-26 11:45:39.943 7086 11609 I Icing : Indexing com.google.android.gms-apps from com.google.android.gms
+05-26 11:45:40.042 7086 11609 I Icing : Indexing com.google.android.gms-internal.3p:MobileApplication from com.google.android.gms
+05-26 11:45:40.052 7086 11609 I Icing : Indexing done com.google.android.gms-apps
+05-26 11:45:40.056 7086 11609 I Icing : Indexing done com.google.android.gms-internal.3p:MobileApplication
+05-26 11:45:40.109 7086 11609 I Icing : Indexing com.google.android.gms-apps from com.google.android.gms
+05-26 11:45:40.112 7086 11609 I Icing : Indexing done com.google.android.gms-apps
+05-26 11:45:40.123 2000 2000 I IcingNotification: Received intent: Intent { act=com.google.android.gms.icing.IME_NOTIFICATION flg=0x10 pkg=com.google.android.inputmethod.latin (has extras) }
+05-26 11:45:40.126 2000 2000 I IcingNotification: Received intent: Intent { act=com.google.android.gms.icing.IME_NOTIFICATION flg=0x10 pkg=com.google.android.inputmethod.latin (has extras) }
+05-26 11:45:40.510 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@855cb87)
+05-26 11:45:40.511 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@855cb87)
+05-26 11:45:40.936 1876 1888 I ActivityManager: Force stopping org.mozilla.fennec_aurora appid=10092 user=0: clear data
+05-26 11:45:40.937 1876 1891 I ActivityManager: Force stopping org.mozilla.fennec_aurora appid=10092 user=-1: clearApplicationUserData
+05-26 11:45:40.941 1876 1876 W Looper : Drained
+05-26 11:45:40.946 1876 1888 D ZenLog : config: removeAutomaticZenRules,ZenModeConfig[user=0,allowAlarms=true,allowMedia=true,allowSystem=false,allowReminders=false,allowEvents=false,allowCalls=true,allowRepeatCallers=true,allowMessages=false,allowCallsFrom=stars,allowMessagesFrom=contacts,suppressedVisualEffects=511,areChannelsBypassingDnd=false,automaticRules={EVENTS_DEFAULT_RULE=ZenRule[enabled=false,snoozing=false,name=Event,zenMode=ZEN_MODE_IMPORTANT_INTERRUPTIONS,conditionId=condition://android/event?userId=-10000&calendar=&reply=1,condition=Condition[id=condition://android/event?userId=-10000&calendar=&reply=1,summary=...,line1=...,line2=...,icon=0,state=STATE_FALSE,flags=2],component=ComponentInfo{android/com.android.server.notification.EventConditionProvider},id=EVENTS_DEFAULT_RULE,creationTime=1587308662810,enabler=null], EVERY_NIGHT_DEFAULT_RULE=ZenRule[enabled=false,snoozing=false,name=Sleeping,zenMode=ZEN_MODE_IMPORTANT_INTERRUPTIONS,conditionId=condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true,condition=Condition[id=condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true,summary=...,line1=...,line2=...,icon=0,state=STATE_FALSE,flags=2],component=ComponentInfo{android/com.android.server.notification.ScheduleConditionProvider},id=EVERY_NIGHT_DEFAULT_RULE,creationTime=1587308662810,enabler=null]},manualRule=null],Diff[]
+05-26 11:45:40.946 1876 1888 I ConditionProviders: Disallowing condition provider org.mozilla.fennec_aurora
+05-26 11:45:40.946 1876 1876 D ZenLog : set_zen_mode: off,removeAutomaticZenRules
+05-26 11:45:40.971 1739 1739 I keystore: clear_uid 10092
+05-26 11:45:41.009 2482 2482 I GeofencerStateMachine: removeGeofences: removeRequest=RemoveGeofencingRequest[REMOVE_ALL packageName=org.mozilla.fennec_aurora]
+05-26 11:45:41.010 2131 2131 D CarrierSvcBindHelper: No carrier app for: 0
+05-26 11:45:41.011 1876 1890 E system_server: No package ID 7f found for ID 0x7f08019f.
+05-26 11:45:41.011 1876 1890 E system_server: No package ID 7f found for ID 0x7f130122.
+05-26 11:45:41.011 1876 1890 E system_server: No package ID 7f found for ID 0x7f130122.
+05-26 11:45:41.011 1876 1890 E system_server: No package ID 7f found for ID 0x7f08019d.
+05-26 11:45:41.011 1876 1890 E system_server: No package ID 7f found for ID 0x7f130121.
+05-26 11:45:41.011 1876 1890 E system_server: No package ID 7f found for ID 0x7f130121.
+05-26 11:45:41.020 2116 2116 W oid.documentsu: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:41.023 1876 1893 I ActivityManager: Start proc 2116:com.android.documentsui/u0a37 for broadcast com.android.documentsui/.PackageReceiver
+05-26 11:45:41.031 1876 1876 I GnssLocationProvider: WakeLock acquired by sendMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@8410e20)
+05-26 11:45:41.032 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@8410e20)
+05-26 11:45:41.034 1560 1573 D vold : Remounting 10092 as mode read
+05-26 11:45:41.066 1560 1573 D vold : Remounting 10092 as mode write
+05-26 11:45:41.067 1876 1876 I GnssLocationProvider: WakeLock acquired by sendMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@902a47f)
+05-26 11:45:41.068 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@902a47f)
+05-26 11:45:41.073 2116 2116 I oid.documentsu: The ClassLoaderContext is a special shared library.
+05-26 11:45:41.158 2171 2171 W oid.apps.photo: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:41.160 1876 1893 I ActivityManager: Start proc 2171:com.google.android.apps.photos/u0a61 for broadcast com.google.android.apps.photos/com.google.android.libraries.social.mediastoresync.reset.impl.MediaStoreClearedReceiver
+05-26 11:45:41.178 1876 3809 I ActivityManager: Force stopping org.mozilla.fennec_aurora appid=10092 user=-1: set debug app
+05-26 11:45:41.214 1876 1893 I ActivityManager: Start proc 2211:com.google.android.apps.docs/u0a69 for content provider com.google.android.apps.docs/.storagebackend.StorageBackendContentProvider
+05-26 11:45:41.215 2211 2211 W droid.apps.doc: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:41.221 2171 2171 I oid.apps.photo: The ClassLoaderContext is a special shared library.
+05-26 11:45:41.226 1876 1888 I ActivityManager: START u0 {flg=0x10000000 cmp=org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity (has extras)} from uid 0
+05-26 11:45:41.263 1876 2453 I ActivityManager: Killing 21133:com.google.android.dialer/u0a28 (adj 906): empty for 3589s
+05-26 11:45:41.264 1876 1894 W libprocessgroup: kill(-21133, 9) failed: No such process
+05-26 11:45:41.278 2211 2211 I droid.apps.doc: The ClassLoaderContext is a special shared library.
+05-26 11:45:41.286 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:41.290 1876 1893 I ActivityManager: Start proc 2233:org.mozilla.fennec_aurora/u0a92 for activity org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity
+05-26 11:45:41.292 2211 2211 I droid.apps.doc: The ClassLoaderContext is a special shared library.
+05-26 11:45:41.295 2233 2233 W a.fennec_auror: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:41.301 1733 2119 D : HostConnection::get() New Host Connection established 0xede98140, tid 2119
+05-26 11:45:41.303 1876 1940 D : HostConnection::get() New Host Connection established 0xd3ab0cc0, tid 1940
+05-26 11:45:41.305 1876 1894 W libprocessgroup: kill(-21133, 9) failed: No such process
+05-26 11:45:41.324 1734 1734 I Zygote : Process 21133 exited due to signal (9)
+05-26 11:45:41.344 1876 1894 W libprocessgroup: kill(-21133, 9) failed: No such process
+05-26 11:45:41.344 1876 1894 I libprocessgroup: Successfully killed process cgroup uid 10028 pid 21133 in 80ms
+05-26 11:45:41.379 2233 2233 W ActivityThread: Application org.mozilla.fennec_aurora can be debugged on port 8100...
+05-26 11:45:41.382 2233 2233 I a.fennec_auror: The ClassLoaderContext is a special shared library.
+05-26 11:45:41.408 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:41.409 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:41.409 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:41.410 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:41.410 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:41.410 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:41.410 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:41.412 2534 2825 D EGL_emulation: eglMakeCurrent: 0xe8b06aa0: ver 3 0 (tinfo 0xe8b03b50)
+05-26 11:45:41.415 1733 1749 D : HostConnection::get() New Host Connection established 0xede98980, tid 1749
+05-26 11:45:41.415 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:41.415 1733 1749 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:41.415 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:41.416 1733 1749 D : HostConnection::get() New Host Connection established 0xede98980, tid 1749
+05-26 11:45:41.416 1733 1749 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:41.416 1733 1749 D : HostConnection::get() New Host Connection established 0xede98980, tid 1749
+05-26 11:45:41.417 1733 1749 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:41.417 1733 1749 D : HostConnection::get() New Host Connection established 0xede98980, tid 1749
+05-26 11:45:41.417 1733 1749 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:41.426 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:41.429 2499 2681 D EGL_emulation: eglMakeCurrent: 0xd35359e0: ver 3 0 (tinfo 0xd353b4f0)
+05-26 11:45:41.431 1733 2119 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:41.431 1733 2119 D : HostConnection::get() New Host Connection established 0xede98140, tid 2119
+05-26 11:45:41.431 1733 2119 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:41.432 1733 2119 D : HostConnection::get() New Host Connection established 0xede98140, tid 2119
+05-26 11:45:41.432 1733 2119 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:41.432 1733 2119 D : HostConnection::get() New Host Connection established 0xede98140, tid 2119
+05-26 11:45:41.433 1733 2119 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:41.435 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:41.479 2012 2265 I chatty : uid=10024(com.android.systemui) RenderThread identical 5 lines
+05-26 11:45:41.486 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:41.496 2233 2233 D FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization.
+05-26 11:45:41.496 2233 2233 D FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
+05-26 11:45:41.496 2233 2233 I FirebaseInitProvider: FirebaseApp initialization successful
+05-26 11:45:41.496 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:41.505 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:41.516 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@c8be314)
+05-26 11:45:41.517 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@c8be314)
+05-26 11:45:41.521 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:41.533 2012 2265 I chatty : uid=10024(com.android.systemui) RenderThread identical 2 lines
+05-26 11:45:41.538 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:41.541 2233 2282 W a.fennec_auror: Accessing hidden method Landroid/content/res/Resources$Theme;->rebase()V (dark greylist, linking)
+05-26 11:45:41.573 2233 2233 D FennecProfile: profiles.ini: false
+05-26 11:45:41.573 2233 2233 D FennecProfile: No profiles found
+05-26 11:45:41.580 1876 16736 I ActivityManager: Killing 12513:com.google.android.partnersetup/u0a23 (adj 906): empty for 2263s
+05-26 11:45:41.580 1876 1894 W libprocessgroup: kill(-12513, 9) failed: No such process
+05-26 11:45:41.580 2233 2233 D FennecMigrator: No migrations to run. Fennec install - false.
+05-26 11:45:41.590 7086 2094 I LocationSettingsChecker: Removing dialog suppression flag for package org.mozilla.fennec_aurora
+05-26 11:45:41.592 2233 2233 D FenixApplication: Initializing Glean (uploadEnabled=true, isFennec=true)
+05-26 11:45:41.610 7086 11609 I Icing : doRemovePackageData org.mozilla.fennec_aurora
+05-26 11:45:41.625 1876 1894 W libprocessgroup: kill(-12513, 9) failed: No such process
+05-26 11:45:41.635 1734 1734 I Zygote : Process 12513 exited due to signal (9)
+05-26 11:45:41.647 2233 2306 D RustNativeSupport: findMegazordLibraryName(viaduct, 0.58.1
+05-26 11:45:41.647 2233 2306 D RustNativeSupport: lib in use: none
+05-26 11:45:41.647 2233 2306 D RustNativeSupport: lib configured: megazord
+05-26 11:45:41.647 2233 2306 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:45:41.647 2233 2306 D RustNativeSupport: settled on megazord
+05-26 11:45:41.668 1876 1894 W libprocessgroup: kill(-12513, 9) failed: No such process
+05-26 11:45:41.668 1876 1894 I libprocessgroup: Successfully killed process cgroup uid 10023 pid 12513 in 87ms
+05-26 11:45:41.708 2211 2321 I GAv4 : Google Analytics 10.2.98 is starting up. To enable debug logging on a device run:
+05-26 11:45:41.708 2211 2321 I GAv4 : adb shell setprop log.tag.GAv4 DEBUG
+05-26 11:45:41.708 2211 2321 I GAv4 : adb logcat -s GAv4
+05-26 11:45:41.723 2211 2325 W GAv4 : AnalyticsReceiver is not registered or is disabled. Register the receiver for reliable dispatching on non-Google Play devices. See http://goo.gl/8Rd3yj for instructions.
+05-26 11:45:41.742 2233 2233 W ActivityThread: ClassLoader.loadClass: The class loader returned by Thread.getContextClassLoader() may fail for processes that host multiple applications. You should explicitly specify a context class loader. For example: Thread.setContextClassLoader(getClass().getClassLoader());
+05-26 11:45:41.756 2233 2233 I GeckoRuntime: Adding debug configuration from: /data/local/tmp/org.mozilla.fennec_aurora-geckoview-config.yaml
+05-26 11:45:41.756 2233 2233 D GeckoDebugConfig: Adding environment variables from debug config: {MOZ_CRASHREPORTER=1, MOZ_CRASHREPORTER_NO_REPORT=1, MOZ_CRASHREPORTER_SHUTDOWN=1}
+05-26 11:45:41.757 2233 2233 D GeckoDebugConfig: Adding arguments from debug config: [-marionette, -profile, /mnt/sdcard/org.mozilla.fennec_aurora-geckodriver-profile]
+05-26 11:45:41.757 2233 2233 D GeckoThread: State changed to LAUNCHED
+05-26 11:45:41.758 2233 2328 I GeckoThread: preparing to run Gecko
+05-26 11:45:41.760 2233 2282 I FA : Collection disabled with firebase_analytics_collection_enabled=0
+05-26 11:45:41.760 2233 2328 D GeckoThread: env var: MOZ_CRASHREPORTER=1
+05-26 11:45:41.760 2233 2328 D GeckoThread: env var: MOZ_CRASHREPORTER_NO_REPORT=1
+05-26 11:45:41.760 2233 2328 D GeckoThread: env var: MOZ_CRASHREPORTER_SHUTDOWN=1
+05-26 11:45:41.768 2211 2211 W FieldDefinition: Ignoring isIndexed constraint as field also has uniqueness constraint (on just this field, and therefore SQLite will have to create an index on that. For field: com.google.android.apps.docs.database.common.FieldDefinition$a@caa0d29
+05-26 11:45:41.774 2233 2282 I FA : App measurement is starting up, version: 12780
+05-26 11:45:41.774 2233 2282 I FA : To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
+05-26 11:45:41.777 2233 2282 I FA : To enable faster debug mode event logging run:
+05-26 11:45:41.777 2233 2282 I FA : adb shell setprop debug.firebase.analytics.app org.mozilla.fennec_aurora
+05-26 11:45:41.781 2211 2325 W GAv4 : CampaignTrackingReceiver is not registered, not exported or is disabled. Installation campaign tracking is not possible. See http://goo.gl/8Rd3yj for instructions.
+05-26 11:45:41.784 2233 2233 D GeckoRuntime: Lifecycle: onCreate
+05-26 11:45:41.788 2211 2325 W GAv4 : AnalyticsService not registered in the app manifest. Hits might not be delivered reliably. See http://goo.gl/8Rd3yj for instructions.
+05-26 11:45:41.836 2211 2228 W droid.apps.doc: Long wait of 3.298ms for Thread[14,tid=2325,Suspended,Thread*=0xe8b5c000,peer=0x1354c3e0,"measurement-1"] suspension!
+05-26 11:45:41.904 2233 2306 D RustNativeSupport: findMegazordLibraryName(rustlog, 0.58.1
+05-26 11:45:41.904 2233 2306 D RustNativeSupport: lib in use: none
+05-26 11:45:41.904 2233 2306 D RustNativeSupport: lib configured: megazord
+05-26 11:45:41.904 2233 2306 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:45:41.904 2233 2306 D RustNativeSupport: settled on megazord
+05-26 11:45:41.904 2233 2295 D libglean_ffi: glean_ffi: Android logging should be hooked up!
+05-26 11:45:41.905 2233 2295 I glean/Glean: Registering pings for mozilla.telemetry.glean.GleanMetrics.Pings
+05-26 11:45:41.906 2233 2295 I libglean_ffi: glean_core: Creating new Glean
+05-26 11:45:41.906 2233 2295 D libglean_ffi: glean_core::database: Database path: "/data/user/0/org.mozilla.fennec_aurora/glean_data/db"
+05-26 11:45:41.907 2233 2295 I libglean_ffi: glean_core::database: Database initialized
+05-26 11:45:41.907 2233 2328 D GeckoThread: State changed to MOZGLUE_READY
+05-26 11:45:41.912 2233 2306 I rc_log_ffi::ios: rc_log adapter initialized!
+05-26 11:45:41.915 2233 2233 D GleanMetricsService: Enabling Glean.
+05-26 11:45:41.917 2233 2233 I AdjustMetricsService: No adjust token defined
+05-26 11:45:41.918 2233 2233 D PushConfig: Creating push configuration for autopush.
+05-26 11:45:41.927 2233 2233 I App : AutoPushFeature is configured, initializing it...
+05-26 11:45:41.928 2233 2233 I AutoPushFeature: Checking validity of push subscriptions.
+05-26 11:45:41.932 2233 2233 D FennecProfile: profiles.ini: false
+05-26 11:45:41.932 2233 2233 D FennecProfile: No profiles found
+05-26 11:45:41.942 2233 2328 W Settings: Setting animator_duration_scale has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only global URI.
+05-26 11:45:41.944 2233 2328 E GeckoLibLoad: Load sqlite start
+05-26 11:45:41.980 2233 2306 W [WARNING][Leanplum]: [com.leanplum.internal.ActionManager::getLocationManager::8]: Geofencing support requires leanplum-location module and Google Play Services v8.1 and higher.
+05-26 11:45:41.980 2233 2306 W [WARNING][Leanplum]: Add this to your build.gradle file:
+05-26 11:45:41.980 2233 2306 W [WARNING][Leanplum]: implementation 'com.google.android.gms:play-services-location:8.3.0+'
+05-26 11:45:41.980 2233 2306 W [WARNING][Leanplum]: implementation 'com.leanplum:leanplum-location:+'
+05-26 11:45:41.986 2233 2328 E GeckoLibLoad: Load sqlite done
+05-26 11:45:41.986 2233 2328 E GeckoLibLoad: Load nss start
+05-26 11:45:41.986 2233 2328 E GeckoLibLoad: Load nss done
+05-26 11:45:41.991 2233 2295 I libglean_ffi: glean_ffi: Glean initialized
+05-26 11:45:42.007 2233 2306 I [INFO][Leanplum]: [com.leanplum.monitoring.ExceptionHandler::setContext::6]: LeanplumExceptionHandler could not initialize Exception Reporting.This is expected if you have not included the leanplum-monitoring module
+05-26 11:45:42.049 2116 2158 I ProvidersCache: Provider returned no roots. Possibly naughty: com.google.android.apps.docs.storage
+05-26 11:45:42.057 2233 2233 D FennecMigrator: This is not a Fennec installation. No migration needed.
+05-26 11:45:42.070 2233 2270 I a.fennec_auror: Background concurrent copying GC freed 13546(2032KB) AllocSpace objects, 4(208KB) LOS objects, 49% free, 2MB/4MB, paused 1.316ms total 192.952ms
+05-26 11:45:42.101 2233 2233 W a.fennec_auror: Accessing hidden method Landroid/content/res/Resources$Theme;->rebase()V (dark greylist, reflection)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: Failed to retrieve rebase() method
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: java.lang.NoSuchMethodException: rebase []
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at java.lang.Class.getMethod(Class.java:2068)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at java.lang.Class.getDeclaredMethod(Class.java:2047)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at androidx.core.content.res.ResourcesCompat$ThemeCompat$ImplApi23.rebase(ResourcesCompat.java:3)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:80)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:2)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at android.app.Activity.attach(Activity.java:7051)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:42.105 2233 2233 I ResourcesCompat: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:42.139 2233 2347 I [INFO][Leanplum]: [com.leanplum.LeanplumFcmProvider::isManifestSetup::11]: Firebase Messaging is setup correctly.
+05-26 11:45:42.314 2233 2328 E GeckoLibLoad: Loaded libs in 328.210000ms total, 10ms(260ms) user, 140ms(330ms) system, 9(42) faults
+05-26 11:45:42.314 2233 2328 D GeckoThread: State changed to LIBS_READY
+05-26 11:45:42.316 2233 2328 W GeckoThread: zerdatime 190862512 - runGecko
+05-26 11:45:42.317 2233 2328 D GeckoProfile: Loading profile at: null name: default
+05-26 11:45:42.317 2233 2328 D GeckoProfile: Created new profile dir.
+05-26 11:45:42.321 2233 2328 I GeckoProfile: Enqueuing profile init.
+05-26 11:45:42.327 2233 2328 D GeckoProfile: Found profile dir: /data/user/0/org.mozilla.fennec_aurora/files/mozilla/wftld4kh.default
+05-26 11:45:42.327 2233 2328 D GeckoProfile: Attempting to write new client ID properties
+05-26 11:45:42.329 2233 2328 D GeckoProfile: Creating profile dir: /data/user/0/org.mozilla.fennec_aurora/files/mozilla/wftld4kh.default
+05-26 11:45:42.338 1876 3809 I ActivityManager: Killing 27012:com.google.android.youtube/u0a72 (adj 906): empty for 1936s
+05-26 11:45:42.340 1876 1894 W libprocessgroup: kill(-27012, 9) failed: No such process
+05-26 11:45:42.384 1876 1894 W libprocessgroup: kill(-27012, 9) failed: No such process
+05-26 11:45:42.391 2233 2328 I Gecko:DumpUtils: Fifo watcher disabled via pref.
+05-26 11:45:42.401 2233 2295 I glean/MetricsPingSched: The application just updated. Send metrics ping now.
+05-26 11:45:42.402 2233 2295 I glean/MetricsPingSched: Collecting the 'metrics' ping, now = Tue May 26 11:45:42 EDT 2020, startup = true, reason = upgrade
+05-26 11:45:42.403 2233 2295 I libglean_ffi: glean_core::ping: Collecting metrics
+05-26 11:45:42.403 2233 2295 I libglean_ffi: glean_core::ping: Storage for metrics empty. Bailing out.
+05-26 11:45:42.403 2233 2295 I libglean_ffi: glean_core: No content for ping 'metrics', therefore no ping queued.
+05-26 11:45:42.404 2233 2295 D glean/MetricsPingSched: Scheduling the 'metrics' ping in 58457608ms
+05-26 11:45:42.407 1876 2734 D ConnectivityService: ConnectivityService NetworkRequestInfo binderDied(NetworkRequest [ LISTEN id=233, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10072] ], android.os.BinderProxy@f0d2037)
+05-26 11:45:42.408 1734 1734 I Zygote : Process 27012 exited due to signal (9)
+05-26 11:45:42.430 1876 1894 W libprocessgroup: kill(-27012, 9) failed: No such process
+05-26 11:45:42.430 1876 1894 I libprocessgroup: Successfully killed process cgroup uid 10072 pid 27012 in 89ms
+05-26 11:45:42.438 1740 16222 W MediaAnalyticsItem: Failed to record: [1:drm.vendor.Google.WidevineCDM:5770:-1:com.google.android.youtube:0:-1:1:0:0:] [forcenew=0]
+05-26 11:45:42.438 1740 16222 E PluginMetricsReporting: selfrecord() returned false. sessioId 5770
+05-26 11:45:42.487 2233 2233 I FirefoxAccountStateMachine: Enabling/updating sync with a new SyncConfig: SyncConfig(supportedEngines=[mozilla.components.service.fxa.SyncEngine$History@83c4938, mozilla.components.service.fxa.SyncEngine$Bookmarks@94a6d11, mozilla.components.service.fxa.SyncEngine$Passwords@e11ce76], syncPeriodInMinutes=240)
+05-26 11:45:42.491 2233 2233 I BgSyncManager: Periodic syncing enabled at a 240 interval
+05-26 11:45:42.492 2233 2233 I FirefoxAccountStateMachine: Sync is enabled
+05-26 11:45:42.496 2233 2328 D GeckoSysInfo: System memory: 1494MB.
+05-26 11:45:42.499 2233 2328 D GeckoThread: State changed to JNI_READY
+05-26 11:45:42.510 2233 2384 I FirefoxAccountStateMachine: Processing event Event$Init for state Start. Next state is Start
+05-26 11:45:42.513 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@fb8e6c5)
+05-26 11:45:42.514 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@fb8e6c5)
+05-26 11:45:42.530 2233 2233 E ActivityThread: Failed to find provider info for org.mozilla.fennec_aurora.fxa.auth
+05-26 11:45:42.536 2233 2383 D ServiceAllocator: org.mozilla.gecko.process.GeckoChildProcessServices$tab0 updateBindings: BACKGROUND priority, 0 importance, 2 successful binds, 0 failed binds, 0 successful unbinds, 0 failed unbinds
+05-26 11:45:42.542 2393 2393 W nec_aurora:tab: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:42.543 1876 1893 I ActivityManager: Start proc 2393:org.mozilla.fennec_aurora:tab0/u0a92 for service org.mozilla.fennec_aurora/org.mozilla.gecko.process.GeckoChildProcessServices$tab0
+05-26 11:45:42.567 2233 2233 D GeckoRuntime: Lifecycle: onStart
+05-26 11:45:42.578 2233 2233 D GeckoRuntime: Lifecycle: onResume
+05-26 11:45:42.581 2393 2393 I nec_aurora:tab: The ClassLoaderContext is a special shared library.
+05-26 11:45:42.582 1739 1739 I keystore: del USRPKEY_org.mozilla.fennec_aurora 10092
+05-26 11:45:42.582 2233 2233 D GeckoNetworkManager: Incoming event start for state OffNoListeners -> OnNoListeners
+05-26 11:45:42.583 1739 1739 I keystore: del USRCERT_org.mozilla.fennec_aurora 10092
+05-26 11:45:42.584 1739 1739 I keystore: del CACERT_org.mozilla.fennec_aurora 10092
+05-26 11:45:42.584 2233 2233 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:45:42.585 2233 2233 D OpenGLRenderer: Skia GL Pipeline
+05-26 11:45:42.599 2233 2347 D NetworkSecurityConfig: No Network Security Config specified, using platform default
+05-26 11:45:42.603 1733 2205 E SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
+05-26 11:45:42.639 2233 2384 I FirefoxAccountStateMachine: Ran 'Event$Init' side-effects for state Start, got successive event Event$AccountNotFound
+05-26 11:45:42.640 2233 2384 I FirefoxAccountStateMachine: Processing event Event$AccountNotFound for state Start. Next state is NotAuthenticated
+05-26 11:45:42.641 2233 2384 D RustNativeSupport: findMegazordLibraryName(fxaclient, 0.58.1
+05-26 11:45:42.641 2233 2384 D RustNativeSupport: lib in use: none
+05-26 11:45:42.641 2233 2384 D RustNativeSupport: lib configured: megazord
+05-26 11:45:42.641 2233 2384 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:45:42.641 2233 2384 D RustNativeSupport: settled on megazord
+05-26 11:45:42.642 2233 2384 D fxaclient_ffi: fxa_new
+05-26 11:45:42.668 2233 2295 I libglean_ffi: glean_core::ping: Collecting baseline
+05-26 11:45:42.678 2393 2393 D GeckoThread: State changed to LAUNCHED
+05-26 11:45:42.684 2233 2384 W FirefoxAccountStateMachine: Got invalid event Event$Init for state NotAuthenticated.
+05-26 11:45:42.685 2233 2233 D GeckoNetworkManager: Incoming event receivedUpdate for state OnNoListeners -> OnNoListeners
+05-26 11:45:42.688 2233 2233 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:45:42.692 2393 2429 I GeckoThread: preparing to run Gecko
+05-26 11:45:42.696 2233 2295 D libglean_ffi: glean_core::ping: Storing ping '61b99eaa-d33b-4833-b80d-f6b14990a92f' at '/data/user/0/org.mozilla.fennec_aurora/glean_data/pending_pings/61b99eaa-d33b-4833-b80d-f6b14990a92f'
+05-26 11:45:42.696 2233 2295 I libglean_ffi: glean_core: The ping 'baseline' was submitted and will be sent as soon as possible
+05-26 11:45:42.707 7086 7097 I gle.android.gm: Background concurrent copying GC freed 3920(431KB) AllocSpace objects, 12(624KB) LOS objects, 49% free, 3MB/6MB, paused 5.464ms total 61.729ms
+05-26 11:45:42.756 1876 2734 D ConnectivityService: requestNetwork for uid/pid:10092/2233 NetworkRequest [ TRACK_DEFAULT id=234, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ]
+05-26 11:45:42.756 1876 1975 D WIFI : got request NetworkRequest [ TRACK_DEFAULT id=234, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:45:42.757 1876 1975 D WIFI_UT : got request NetworkRequest [ TRACK_DEFAULT id=234, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:45:42.763 2131 2131 D PhoneSwitcherNetworkRequstListener: got request NetworkRequest [ TRACK_DEFAULT id=234, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:45:42.795 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:42.807 1623 1623 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:42.816 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:42.822 2233 2270 I a.fennec_auror: Background concurrent copying GC freed 9948(1151KB) AllocSpace objects, 18(936KB) LOS objects, 49% free, 3MB/6MB, paused 1.727ms total 105.781ms
+05-26 11:45:42.856 2233 2233 D MigrationPushRenewer: Migration state: NONE
+05-26 11:45:42.856 2233 2233 D MigrationTelemetryListener: Migration state: NONE
+05-26 11:45:42.859 2233 2419 D : HostConnection::get() New Host Connection established 0xd0db54c0, tid 2419
+05-26 11:45:42.869 2233 2419 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
+05-26 11:45:42.870 2233 2419 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
+05-26 11:45:42.870 2233 2419 I OpenGLRenderer: Initialized EGL, version 1.4
+05-26 11:45:42.870 2233 2419 D OpenGLRenderer: Swap behavior 1
+05-26 11:45:42.870 2233 2419 W OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
+05-26 11:45:42.870 2233 2419 D OpenGLRenderer: Swap behavior 0
+05-26 11:45:42.873 2233 2419 D EGL_emulation: eglCreateContext: 0xc8c71840: maj 3 min 0 rcv 3
+05-26 11:45:42.875 2233 2419 D EGL_emulation: eglMakeCurrent: 0xc8c71840: ver 3 0 (tinfo 0xc8c501c0)
+05-26 11:45:42.879 1733 2205 E SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
+05-26 11:45:42.960 2233 2419 D EGL_emulation: eglMakeCurrent: 0xc8c71840: ver 3 0 (tinfo 0xc8c501c0)
+05-26 11:45:43.006 2233 2468 D glean/PingUploadWorker: Processing persisted pings at /data/user/0/org.mozilla.fennec_aurora/glean_data/pending_pings
+05-26 11:45:43.008 1876 1899 I ActivityManager: Displayed org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity: +1s743ms
+05-26 11:45:43.014 2000 2000 I GoogleInputMethod: onFinishInput() : Dummy InputConnection bound
+05-26 11:45:43.015 2000 2000 I GoogleInputMethod: onStartInput() : Dummy InputConnection bound
+05-26 11:45:43.018 2233 2468 D glean/PingUploadWorker: Processing ping: 61b99eaa-d33b-4833-b80d-f6b14990a92f
+05-26 11:45:43.018 2233 2233 D GeckoNetworkManager: Incoming event enableNotifications for state OnNoListeners -> OnWithListeners
+05-26 11:45:43.020 2233 2468 D glean/ConceptFetchHttpUploader: Submitting ping to: https://incoming.telemetry.mozilla.org/submit/org-mozilla-fennec-aurora/baseline/1/61b99eaa-d33b-4833-b80d-f6b14990a92f
+05-26 11:45:43.020 2233 2233 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:45:43.021 1876 1888 W ActivityManager: Receiver with filter android.content.IntentFilter@ffe2a5d already registered for pid 2233, callerPackage is org.mozilla.fennec_aurora
+05-26 11:45:43.031 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:43.033 2233 2233 E ActivityThread: Failed to find provider info for org.mozilla.fennec_aurora.fxa.auth
+05-26 11:45:43.044 2233 2233 D GeckoNetworkManager: Incoming event receivedUpdate for state OnWithListeners -> OnWithListeners
+05-26 11:45:43.049 2233 2233 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:45:43.133 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:43.180 2534 2038 I EventLogSendingHelper: Sending log events.
+05-26 11:45:43.191 1876 1940 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:43.192 1876 1940 D : HostConnection::get() New Host Connection established 0xd3ab0cc0, tid 1940
+05-26 11:45:43.194 1876 1940 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:43.194 1733 1749 W SurfaceFlinger: Attempting to set client state on removed layer: Splash Screen org.mozilla.fennec_aurora#0
+05-26 11:45:43.194 1733 1749 W SurfaceFlinger: Attempting to destroy on removed layer: Splash Screen org.mozilla.fennec_aurora#0
+05-26 11:45:43.207 1904 16172 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:43.208 1904 16172 D : HostConnection::get() New Host Connection established 0xe69102c0, tid 16172
+05-26 11:45:43.208 1904 16172 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:43.215 1904 16172 D : HostConnection::get() New Host Connection established 0xe69102c0, tid 16172
+05-26 11:45:43.239 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:43.259 2534 2038 I EventLogSendingHelper: Sending log events.
+05-26 11:45:43.342 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:43.344 2233 2233 I [INFO][Leanplum]: [com.leanplum.LeanplumCloudMessagingProvider::onRegistrationIdReceived::3]: Device registered for push notifications with registration token, erw6jzriO4Q:APA91bGwMfmPLEEo-IkdAvopxKRRxGkhNuoO0bTDwwhHPSQAPWUmrt76JeND8tsHPVb2qmlqFBOwOjLA9BrSWDJDtFrMAQ_yujW2xnawPYawyHt1AanpWHGqbi8rQmoX_D4DVLXwLNqm
+05-26 11:45:43.368 1733 1733 W SurfaceFlinger: couldn't log to binary event log: overflow.
+05-26 11:45:43.448 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:43.468 2233 2486 I [INFO][Leanplum]: [com.leanplum.LeanplumCloudMessagingProvider::onRegistrationIdReceived::3]: Device registered for push notifications with registration token, erw6jzriO4Q:APA91bGwMfmPLEEo-IkdAvopxKRRxGkhNuoO0bTDwwhHPSQAPWUmrt76JeND8tsHPVb2qmlqFBOwOjLA9BrSWDJDtFrMAQ_yujW2xnawPYawyHt1AanpWHGqbi8rQmoX_D4DVLXwLNqm
+05-26 11:45:43.469 2233 2488 I AutoPushFeature: Received a new registration token from push service.
+05-26 11:45:43.473 2233 2488 D RustNativeSupport: findMegazordLibraryName(push, 0.58.1
+05-26 11:45:43.473 2233 2488 D RustNativeSupport: lib in use: none
+05-26 11:45:43.473 2233 2488 D RustNativeSupport: lib configured: megazord
+05-26 11:45:43.473 2233 2488 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:45:43.473 2233 2488 D RustNativeSupport: settled on megazord
+05-26 11:45:43.483 2233 2328 D GeckoThread: State changed to PROFILE_READY
+05-26 11:45:43.516 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@e1dd1fc)
+05-26 11:45:43.518 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@e1dd1fc)
+05-26 11:45:43.530 2534 2006 I PBSessionCacheImpl: Deleted sessionId[290782929457] from persistence.
+05-26 11:45:43.550 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:43.553 2534 2534 W SearchService: Abort, client detached.
+05-26 11:45:43.563 2233 2328 D GeckoThread: State changed to RUNNING
+05-26 11:45:43.571 2233 2328 I Gecko : -*- nsDNSServiceDiscovery.js : nsDNSServiceDiscovery
+05-26 11:45:43.597 2534 2034 I WorkController: WorkProxy is not enqueued because WorkController is disposed: WorkProxy{Name=context::j, WorkerId=context, id=b8d54f6}
+05-26 11:45:43.597 2534 2034 I WorkController: WorkProxy is not enqueued because WorkController is disposed: WorkProxy{Name=context::m, WorkerId=context, id=75450f7}
+05-26 11:45:43.598 2534 2034 I WorkController: WorkProxy is not enqueued because WorkController is disposed: WorkProxy{Name=context::n, WorkerId=context, id=59beb64}
+05-26 11:45:43.598 2233 2328 I Gecko : 1590507943598 Marionette TRACE Marionette enabled
+05-26 11:45:43.599 2534 2034 I WorkController: WorkProxy is not enqueued because WorkController is disposed: WorkProxy{Name=context::p, WorkerId=context, id=873e1cd}
+05-26 11:45:43.605 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:43.656 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:43.751 2233 2233 I DefaultSupportedAddonsChecker: Register check for new supported add-ons
+05-26 11:45:43.761 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:43.764 2233 2328 I Gecko : 1590507943764 Marionette TRACE Received observer notification marionette-startup-requested
+05-26 11:45:43.765 2233 2328 I Gecko : 1590507943765 Marionette TRACE Waiting until startup recorder finished recording startup scripts...
+05-26 11:45:43.786 2233 2351 I SupportedAddonsWorker: Trying to check for new supported add-ons
+05-26 11:45:43.865 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:43.968 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:43.992 2233 2233 D App : Installed browser-icons extension
+05-26 11:45:44.040 2233 2328 D : HostConnection::get() New Host Connection established 0xd0dc10c0, tid 2328
+05-26 11:45:44.042 2233 2328 E EGL_emulation: tid 2328: eglBindAPI(1259): error 0x300c (EGL_BAD_PARAMETER)
+05-26 11:45:44.043 2233 2328 D EGL_emulation: eglCreateContext: 0xe5e99040: maj 3 min 0 rcv 3
+05-26 11:45:44.045 2233 2328 D EGL_emulation: eglMakeCurrent: 0xe5e99040: ver 3 0 (tinfo 0xe71134f0)
+05-26 11:45:44.074 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:44.180 4313 4313 I chatty : uid=0(root) /system/bin/adbd identical 1 line
+05-26 11:45:44.282 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:44.353 2233 2468 D glean/ConceptFetchHttpUploader: Ping successfully sent (200)
+05-26 11:45:44.354 2233 2468 D glean/PingUploadWorker: 61b99eaa-d33b-4833-b80d-f6b14990a92f was deleted: true
+05-26 11:45:44.361 2233 2378 I WM-WorkerWrapper: Worker result SUCCESS for Work [ id=6de17969-b2aa-4d55-8d3d-9d1360d3ed18, tags={ mozilla.telemetry.glean.scheduler.PingUploadWorker, mozac_service_glean_ping_upload_worker } ]
+05-26 11:45:44.386 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:44.400 1876 1978 D ConnectivityService: releasing NetworkRequest [ TRACK_DEFAULT id=234, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] (release request)
+05-26 11:45:44.489 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:44.517 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@8c7f483)
+05-26 11:45:44.517 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@8c7f483)
+05-26 11:45:44.523 2482 7043 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 57, account#-517948760#
+05-26 11:45:44.592 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:44.694 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:44.782 2211 2323 I droid.apps.doc: The ClassLoaderContext is a special shared library.
+05-26 11:45:44.785 2211 2323 I chatty : uid=10069(com.google.android.apps.docs) TaskSchedulerLo identical 1 line
+05-26 11:45:44.790 2211 2323 I droid.apps.doc: The ClassLoaderContext is a special shared library.
+05-26 11:45:44.797 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:44.798 2211 2323 I droid.apps.doc: The ClassLoaderContext is a special shared library.
+05-26 11:45:44.826 2211 2323 V NativeCrypto: Registering com/google/android/gms/org/conscrypt/NativeCrypto's 284 native methods...
+05-26 11:45:44.863 2211 2323 D NetworkSecurityConfig: No Network Security Config specified, using platform default
+05-26 11:45:44.872 2211 2323 I ProviderInstaller: Installed default security provider GmsCore_OpenSSL
+05-26 11:45:44.899 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:44.976 2233 2233 D mozac-webcompat: Installed WebCompat webextension: webcompat@mozilla.com
+05-26 11:45:45.001 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:45.107 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:45.108 2233 2328 I Gecko : 1590507945108 Marionette TRACE All scripts recorded.
+05-26 11:45:45.109 2233 2328 I Gecko : 1590507945109 Marionette DEBUG Setting recommended pref apz.content_response_timeout to 60000
+05-26 11:45:45.109 2233 2328 I Gecko : 1590507945109 Marionette DEBUG Setting recommended pref browser.contentblocking.introCount to 99
+05-26 11:45:45.110 2233 2328 I Gecko : 1590507945109 Marionette DEBUG Setting recommended pref browser.download.panel.shown to true
+05-26 11:45:45.110 2233 2328 I Gecko : 1590507945110 Marionette DEBUG Setting recommended pref browser.newtabpage.enabled to false
+05-26 11:45:45.110 2233 2328 I Gecko : 1590507945110 Marionette DEBUG Setting recommended pref browser.safebrowsing.malware.enabled to false
+05-26 11:45:45.115 2233 2328 I Gecko : 1590507945115 Marionette DEBUG Setting recommended pref browser.safebrowsing.phishing.enabled to false
+05-26 11:45:45.118 2233 2328 I Gecko : 1590507945118 Marionette DEBUG Setting recommended pref browser.search.update to false
+05-26 11:45:45.118 2233 2328 I Gecko : 1590507945118 Marionette DEBUG Setting recommended pref browser.tabs.disableBackgroundZombification to false
+05-26 11:45:45.118 2233 2328 I Gecko : 1590507945118 Marionette DEBUG Setting recommended pref browser.tabs.remote.separatePrivilegedContentProcess to false
+05-26 11:45:45.119 2233 2328 I Gecko : 1590507945119 Marionette DEBUG Setting recommended pref browser.tabs.unloadOnLowMemory to false
+05-26 11:45:45.119 2233 2328 I Gecko : 1590507945119 Marionette DEBUG Setting recommended pref browser.tabs.warnOnCloseOtherTabs to false
+05-26 11:45:45.119 2233 2328 I Gecko : 1590507945119 Marionette DEBUG Setting recommended pref browser.tabs.warnOnOpen to false
+05-26 11:45:45.119 2233 2328 I Gecko : 1590507945119 Marionette DEBUG Setting recommended pref browser.usedOnWindows10.introURL to
+05-26 11:45:45.120 2233 2328 I Gecko : 1590507945120 Marionette DEBUG Setting recommended pref browser.urlbar.suggest.searches to false
+05-26 11:45:45.120 2233 2328 I Gecko : 1590507945120 Marionette DEBUG Setting recommended pref dom.disable_beforeunload to true
+05-26 11:45:45.120 2233 2328 I Gecko : 1590507945120 Marionette DEBUG Setting recommended pref dom.file.createInChild to true
+05-26 11:45:45.121 2233 2328 I Gecko : 1590507945121 Marionette DEBUG Setting recommended pref extensions.getAddons.cache.enabled to false
+05-26 11:45:45.121 2233 2328 I Gecko : 1590507945121 Marionette DEBUG Setting recommended pref network.http.prompt-temp-redirect to false
+05-26 11:45:45.121 2233 2328 I Gecko : 1590507945121 Marionette DEBUG Setting recommended pref security.notification_enable_delay to 0
+05-26 11:45:45.122 2233 2328 I Gecko : 1590507945121 Marionette DEBUG Setting recommended pref signon.autofillForms to false
+05-26 11:45:45.122 2233 2328 I Gecko : 1590507945122 Marionette DEBUG Setting recommended pref signon.rememberSignons to false
+05-26 11:45:45.122 2233 2328 I Gecko : 1590507945122 Marionette DEBUG Setting recommended pref toolkit.cosmeticAnimations.enabled to false
+05-26 11:45:45.187 2233 2328 I Gecko : 1590507945187 Marionette INFO Listening on port 2829
+05-26 11:45:45.188 2233 2328 I Gecko : 1590507945188 Marionette DEBUG Marionette is listening
+05-26 11:45:45.213 2233 2328 I Gecko : 1590507945213 Marionette DEBUG Accepted connection 0 from 127.0.0.1:56174
+05-26 11:45:45.219 2233 2328 I Gecko : 1590507945219 Marionette DEBUG 0 -> [0,1,"WebDriver:NewSession",{"browserName":"firefox","pageLoadStrategy":"none"}]
+05-26 11:45:45.518 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@9f53600)
+05-26 11:45:45.519 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@9f53600)
+05-26 11:45:45.589 2233 2318 I WM-WorkerWrapper: Worker result SUCCESS for Work [ id=5f498c6b-af92-4b6b-8e5b-2a362b3bd663, tags={ mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker.periodicWork, mozilla.components.feature.addons.migration.SupportedAddonsWorker } ]
+05-26 11:45:46.522 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@7eb3c7e)
+05-26 11:45:46.524 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@7eb3c7e)
+05-26 11:45:47.524 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@30b55df)
+05-26 11:45:47.525 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@30b55df)
+05-26 11:45:47.838 2233 2233 I glean/Glean: Registering pings for org.mozilla.fenix.GleanMetrics.Pings
+05-26 11:45:47.883 2233 2233 I FenixApplication: Kicking-off account manager...
+05-26 11:45:47.883 2233 2233 I FenixApplication: 'Kicking-off account manager' took 0 ms
+05-26 11:45:47.886 2233 2305 I FenixApplication: Running post-visual completeness tasks...
+05-26 11:45:47.886 2233 2305 I FenixApplication: Storage initialization...
+05-26 11:45:47.890 2233 2305 I PlacesHistoryStorage: Warming up places storage...
+05-26 11:45:47.903 2233 2305 D RustNativeSupport: findMegazordLibraryName(places, 0.58.1
+05-26 11:45:47.903 2233 2305 D RustNativeSupport: lib in use: none
+05-26 11:45:47.903 2233 2305 D RustNativeSupport: lib configured: megazord
+05-26 11:45:47.903 2233 2305 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:45:47.903 2233 2305 D RustNativeSupport: settled on megazord
+05-26 11:45:47.908 2233 2305 D places_ffi: places_api_new
+05-26 11:45:47.945 2233 2305 D places::db::schema: Creating schema
+05-26 11:45:48.023 2233 2351 I App : ActivationPing - generating ping with the hashed id
+05-26 11:45:48.024 2233 2351 I App : ActivationPing - generating ping (has `identifier`: true)
+05-26 11:45:48.034 2233 2305 D sql_support::conn_ext: Transaction commited after 87.947ms
+05-26 11:45:48.041 2233 2305 D places_ffi: places_connection_new
+05-26 11:45:48.041 2233 2295 I libglean_ffi: glean_core::ping: Collecting activation
+05-26 11:45:48.046 2233 2305 D places_ffi: places_connection_new
+05-26 11:45:48.056 2233 2305 I PlacesHistoryStorage: 'Warming up places storage' took 166 ms
+05-26 11:45:48.059 2233 2305 I PlacesBookmarksStorage: Warming up places storage...
+05-26 11:45:48.062 2233 2305 D places_ffi: places_connection_new
+05-26 11:45:48.072 2233 2305 I PlacesBookmarksStorage: 'Warming up places storage' took 13 ms
+05-26 11:45:48.075 2233 2295 D libglean_ffi: glean_core::ping: Storing ping 'bc58f9d5-110e-442c-ae4f-6dbee99fe25d' at '/data/user/0/org.mozilla.fennec_aurora/glean_data/pending_pings/bc58f9d5-110e-442c-ae4f-6dbee99fe25d'
+05-26 11:45:48.077 2233 2295 I libglean_ffi: glean_core: The ping 'activation' was submitted and will be sent as soon as possible
+05-26 11:45:48.111 1739 1739 I keystore: 1 0
+05-26 11:45:48.134 2233 2305 I SyncableLoginsStorage: Warming up storage...
+05-26 11:45:48.166 1876 4289 D ConnectivityService: requestNetwork for uid/pid:10092/2233 NetworkRequest [ TRACK_DEFAULT id=235, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ]
+05-26 11:45:48.170 1876 1975 D WIFI : got request NetworkRequest [ TRACK_DEFAULT id=235, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:45:48.170 1876 1975 D WIFI_UT : got request NetworkRequest [ TRACK_DEFAULT id=235, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:45:48.174 2233 2305 D RustNativeSupport: findMegazordLibraryName(logins, 0.58.1
+05-26 11:45:48.190 2233 2305 D RustNativeSupport: lib in use: none
+05-26 11:45:48.190 2131 2131 D PhoneSwitcherNetworkRequstListener: got request NetworkRequest [ TRACK_DEFAULT id=235, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:45:48.191 2233 2305 D RustNativeSupport: lib configured: megazord
+05-26 11:45:48.191 2233 2305 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:45:48.191 2233 2305 D RustNativeSupport: settled on megazord
+05-26 11:45:48.193 2233 2305 D logins_ffi: sync15_passwords_state_new
+05-26 11:45:48.219 2233 2601 D glean/PingUploadWorker: Processing persisted pings at /data/user/0/org.mozilla.fennec_aurora/glean_data/pending_pings
+05-26 11:45:48.227 2233 2601 D glean/PingUploadWorker: Processing ping: bc58f9d5-110e-442c-ae4f-6dbee99fe25d
+05-26 11:45:48.230 2233 2601 D glean/ConceptFetchHttpUploader: Submitting ping to: https://incoming.telemetry.mozilla.org/submit/org-mozilla-fennec-aurora/activation/1/bc58f9d5-110e-442c-ae4f-6dbee99fe25d
+05-26 11:45:48.230 2233 2305 D logins::schema: Creating schema
+05-26 11:45:48.526 2233 2305 I SyncableLoginsStorage: 'Warming up storage' took 391 ms
+05-26 11:45:48.526 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@2ea12e1)
+05-26 11:45:48.527 2233 2305 I FenixApplication: 'Storage initialization' took 640 ms
+05-26 11:45:48.527 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@2ea12e1)
+05-26 11:45:48.749 2233 2601 D glean/ConceptFetchHttpUploader: Ping successfully sent (200)
+05-26 11:45:48.750 2233 2601 D glean/PingUploadWorker: bc58f9d5-110e-442c-ae4f-6dbee99fe25d was deleted: true
+05-26 11:45:48.753 2233 2318 I WM-WorkerWrapper: Worker result SUCCESS for Work [ id=bc69b5a8-e4e5-43bf-b478-16556bcd27b1, tags={ mozilla.telemetry.glean.scheduler.PingUploadWorker, mozac_service_glean_ping_upload_worker } ]
+05-26 11:45:48.760 1876 1978 D ConnectivityService: releasing NetworkRequest [ TRACK_DEFAULT id=235, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] (release request)
+05-26 11:45:48.903 1876 1893 I ActivityManager: Start proc 2605:com.google.android.dialer/u0a28 for service com.google.android.dialer/com.google.android.apps.dialer.spam.inapp.SpamJobService
+05-26 11:45:48.904 2605 2605 W .android.diale: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:48.955 2605 2605 W System : ClassLoader referenced unknown path: /system/framework/com.google.android.dialer.support.jar
+05-26 11:45:49.180 2605 2605 I Dialer : GoogleDialerApplication.onCreate - enter
+05-26 11:45:49.202 2605 2605 I Dialer : DialerExecutorModule.newThread - creating low priority thread
+05-26 11:45:49.244 2605 2605 I Dialer : SpamModule.provideSpam - using in-app spam
+05-26 11:45:49.252 2605 2605 I Dialer : SpamModule.provideSpam - using in-app spam
+05-26 11:45:49.254 2605 2605 I Dialer : CallLogConfigImpl.schedulePollingJob - scheduling
+05-26 11:45:49.260 2605 2605 I Dialer : DialerApplication.initializeAnnotatedCallLog - framework not enabled
+05-26 11:45:49.302 2605 2605 E .android.diale: The String#value field is not present on Android versions >= 6.0
+05-26 11:45:49.311 2605 2605 I Dialer : NonUiTaskBuilder.newThread - creating serial thread
+05-26 11:45:49.312 2605 2605 I Dialer : DialerExecutorModule.newThread - creating low priority thread
+05-26 11:45:49.313 2605 2605 I Dialer : ShortcutsJobScheduler.scheduleAllJobs - enter
+05-26 11:45:49.321 2605 2605 I Dialer : ShortcutsJobScheduler.scheduleAllJobs - enabling shortcuts
+05-26 11:45:49.321 2605 2605 I Dialer : PeriodicJobService.schedulePeriodicJob - enter
+05-26 11:45:49.323 2605 2605 I Dialer : PeriodicJobService.schedulePeriodicJob - job already scheduled.
+05-26 11:45:49.325 2605 2630 I Dialer : SpamJobScheduler.scheduleJob - job with id SPAM_JOB_WIFI is already scheduled
+05-26 11:45:49.326 2605 2605 I Dialer : GoogleDialerApplication.onCreate - register new client
+05-26 11:45:49.329 2605 2630 I Dialer : SpamJobScheduler.scheduleJob - job with id SPAM_JOB_ANY_NETWORK is already scheduled
+05-26 11:45:49.361 2605 2605 I Dialer : GoogleDialerApplication.onCreate - registered new client
+05-26 11:45:49.376 2605 2605 I Dialer : SpamJobScheduler.scheduleJob - job with id SPAM_JOB_WIFI is already scheduled
+05-26 11:45:49.528 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@e013eb6)
+05-26 11:45:49.529 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@e013eb6)
+05-26 11:45:49.552 2482 6321 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 57, account#-517948760#
+05-26 11:45:49.570 2605 2605 I Dialer : Flags.register - phenotype register status: true
+05-26 11:45:49.668 1876 1884 I system_server: Background concurrent copying GC freed 116473(5MB) AllocSpace objects, 53(2MB) LOS objects, 19% free, 25MB/31MB, paused 2.716ms total 271.820ms
+05-26 11:45:49.675 2605 2629 I Dialer : DialerExecutorModule.newThread - creating low priority thread
+05-26 11:45:49.678 2605 2605 I Dialer : Flags.register - commit succeeded: true
+05-26 11:45:50.530 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@e6757b7)
+05-26 11:45:50.532 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@e6757b7)
+05-26 11:45:50.931 1876 4289 I ActivityManager: Force stopping org.mozilla.fennec_aurora appid=10092 user=0: clear data
+05-26 11:45:50.932 1876 4289 I ActivityManager: Killing 2393:org.mozilla.fennec_aurora:tab0/u0a92 (adj 100): stop org.mozilla.fennec_aurora
+05-26 11:45:50.933 1876 4289 W ActivityManager: Scheduling restart of crashed service org.mozilla.fennec_aurora/org.mozilla.gecko.process.GeckoChildProcessServices$tab0 in 1000ms
+05-26 11:45:50.934 1876 1894 W libprocessgroup: kill(-2393, 9) failed: No such process
+05-26 11:45:50.939 1876 4289 I ActivityManager: Killing 2233:org.mozilla.fennec_aurora/u0a92 (adj 0): stop org.mozilla.fennec_aurora
+05-26 11:45:50.946 1876 4289 W ActivityManager: Force removing ActivityRecord{a5ac676 u0 org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity t282}: app died, no saved state
+05-26 11:45:50.971 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:50.972 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:50.973 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:50.973 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:50.974 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:50.974 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:50.975 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:50.975 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:50.975 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:50.976 1876 1894 W libprocessgroup: kill(-2393, 9) failed: No such process
+05-26 11:45:50.976 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:50.976 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:50.983 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:50.993 1876 4289 D ZenLog : config: removeAutomaticZenRules,ZenModeConfig[user=0,allowAlarms=true,allowMedia=true,allowSystem=false,allowReminders=false,allowEvents=false,allowCalls=true,allowRepeatCallers=true,allowMessages=false,allowCallsFrom=stars,allowMessagesFrom=contacts,suppressedVisualEffects=511,areChannelsBypassingDnd=false,automaticRules={EVENTS_DEFAULT_RULE=ZenRule[enabled=false,snoozing=false,name=Event,zenMode=ZEN_MODE_IMPORTANT_INTERRUPTIONS,conditionId=condition://android/event?userId=-10000&calendar=&reply=1,condition=Condition[id=condition://android/event?userId=-10000&calendar=&reply=1,summary=...,line1=...,line2=...,icon=0,state=STATE_FALSE,flags=2],component=ComponentInfo{android/com.android.server.notification.EventConditionProvider},id=EVENTS_DEFAULT_RULE,creationTime=1587308662810,enabler=null], EVERY_NIGHT_DEFAULT_RULE=ZenRule[enabled=false,snoozing=false,name=Sleeping,zenMode=ZEN_MODE_IMPORTANT_INTERRUPTIONS,conditionId=condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true,condition=Condition[id=condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true,summary=...,line1=...,line2=...,icon=0,state=STATE_FALSE,flags=2],component=ComponentInfo{android/com.android.server.notification.ScheduleConditionProvider},id=EVERY_NIGHT_DEFAULT_RULE,creationTime=1587308662810,enabler=null]},manualRule=null],Diff[]
+05-26 11:45:50.993 1876 4289 I ConditionProviders: Disallowing condition provider org.mozilla.fennec_aurora
+05-26 11:45:50.997 1734 1734 I Zygote : Process 2393 exited due to signal (9)
+05-26 11:45:50.999 1876 1876 D ZenLog : set_zen_mode: off,removeAutomaticZenRules
+05-26 11:45:51.015 1876 1894 W libprocessgroup: kill(-2393, 9) failed: No such process
+05-26 11:45:51.015 1876 1894 I libprocessgroup: Successfully killed process cgroup uid 10092 pid 2393 in 81ms
+05-26 11:45:51.016 1876 1894 W libprocessgroup: kill(-2233, 9) failed: No such process
+05-26 11:45:51.039 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:51.056 1876 1894 W libprocessgroup: kill(-2233, 9) failed: No such process
+05-26 11:45:51.058 1733 1759 D : HostConnection::get() New Host Connection established 0xed960600, tid 1759
+05-26 11:45:51.059 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:51.071 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:51.096 1876 1894 W libprocessgroup: kill(-2233, 9) failed: No such process
+05-26 11:45:51.102 1739 1739 I keystore: clear_uid 10092
+05-26 11:45:51.120 1733 1733 D SurfaceFlinger: duplicate layer name: changing com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity to com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#1
+05-26 11:45:51.131 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:51.135 1876 1894 W libprocessgroup: kill(-2233, 9) failed: No such process
+05-26 11:45:51.150 2534 2825 D EGL_emulation: eglMakeCurrent: 0xe8b06aa0: ver 3 0 (tinfo 0xe8b03b50)
+05-26 11:45:51.150 1876 1961 W InputDispatcher: channel '894e079 org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
+05-26 11:45:51.151 1876 1961 E InputDispatcher: channel '894e079 org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
+05-26 11:45:51.155 1733 1749 D : HostConnection::get() New Host Connection established 0xed960a40, tid 1749
+05-26 11:45:51.165 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:51.175 1876 1894 W libprocessgroup: kill(-2233, 9) failed: No such process
+05-26 11:45:51.182 1623 1623 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:51.193 1876 1891 I ActivityManager: Force stopping org.mozilla.fennec_aurora appid=10092 user=-1: clearApplicationUserData
+05-26 11:45:51.198 1733 1759 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:51.199 1733 1759 D : HostConnection::get() New Host Connection established 0xed960600, tid 1759
+05-26 11:45:51.202 1733 1759 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:51.203 1733 1759 D : HostConnection::get() New Host Connection established 0xede98480, tid 1759
+05-26 11:45:51.203 1733 1759 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:51.204 1733 1759 D : HostConnection::get() New Host Connection established 0xede98480, tid 1759
+05-26 11:45:51.214 1733 1759 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:51.215 1876 1894 W libprocessgroup: kill(-2233, 9) failed: No such process
+05-26 11:45:51.218 1876 7720 I WindowManager: WIN DEATH: Window{894e079 u0 org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity}
+05-26 11:45:51.219 1876 7720 W InputDispatcher: Attempted to unregister already unregistered input channel '894e079 org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity (server)'
+05-26 11:45:51.235 1733 2205 W SurfaceFlinger: Attempting to destroy on removed layer: Task=282#0
+05-26 11:45:51.249 1734 1734 I Zygote : Process 2233 exited due to signal (9)
+05-26 11:45:51.254 1876 1894 W libprocessgroup: kill(-2233, 9) failed: No such process
+05-26 11:45:51.254 1876 1894 I libprocessgroup: Successfully killed process cgroup uid 10092 pid 2233 in 238ms
+05-26 11:45:51.260 1876 1899 W ActivityManager: setHasOverlayUi called on unknown pid: 2233
+05-26 11:45:51.263 2000 2000 I GoogleInputMethod: onFinishInput() : Dummy InputConnection bound
+05-26 11:45:51.263 2499 2681 D EGL_emulation: eglMakeCurrent: 0xd35359e0: ver 3 0 (tinfo 0xd353b4f0)
+05-26 11:45:51.265 2000 2000 I GoogleInputMethod: onStartInput() : Dummy InputConnection bound
+05-26 11:45:51.300 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:51.327 2012 2265 I chatty : uid=10024(com.android.systemui) RenderThread identical 1 line
+05-26 11:45:51.403 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:51.428 2482 2482 I GeofencerStateMachine: removeGeofences: removeRequest=RemoveGeofencingRequest[REMOVE_ALL packageName=org.mozilla.fennec_aurora]
+05-26 11:45:51.433 2131 2131 D CarrierSvcBindHelper: No carrier app for: 0
+05-26 11:45:51.438 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:51.463 2012 2265 I chatty : uid=10024(com.android.systemui) RenderThread identical 3 lines
+05-26 11:45:51.479 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:51.481 1876 1890 E system_server: No package ID 7f found for ID 0x7f08019f.
+05-26 11:45:51.481 1876 1890 E system_server: No package ID 7f found for ID 0x7f130122.
+05-26 11:45:51.481 1876 1890 E system_server: No package ID 7f found for ID 0x7f130122.
+05-26 11:45:51.481 1876 1890 E system_server: No package ID 7f found for ID 0x7f08019d.
+05-26 11:45:51.481 1876 1890 E system_server: No package ID 7f found for ID 0x7f130121.
+05-26 11:45:51.481 1876 1890 E system_server: No package ID 7f found for ID 0x7f130121.
+05-26 11:45:51.484 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:51.493 2534 2534 W SessionLifecycleManager: Handover failed. Creating new session controller.
+05-26 11:45:51.499 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:51.508 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:51.538 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@8dd9b95)
+05-26 11:45:51.540 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@8dd9b95)
+05-26 11:45:51.542 1876 5181 I ActivityManager: Force stopping org.mozilla.fennec_aurora appid=10092 user=0: from pid 2663
+05-26 11:45:51.557 2131 2131 D CarrierSvcBindHelper: No carrier app for: 0
+05-26 11:45:51.590 1560 1573 D vold : Remounting 10092 as mode read
+05-26 11:45:51.600 1876 1876 I GnssLocationProvider: WakeLock acquired by sendMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@4971377)
+05-26 11:45:51.602 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@4971377)
+05-26 11:45:51.641 1876 1876 V SettingsProvider: Notifying for 0: content://settings/global/debug_app
+05-26 11:45:51.673 1876 1876 I GnssLocationProvider: WakeLock acquired by sendMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@dfab250)
+05-26 11:45:51.674 1560 1573 D vold : Remounting 10092 as mode write
+05-26 11:45:51.676 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@dfab250)
+05-26 11:45:51.682 2116 2662 I ProvidersCache: Provider returned no roots. Possibly naughty: com.google.android.apps.docs.storage
+05-26 11:45:51.691 7086 2683 I LocationSettingsChecker: Removing dialog suppression flag for package org.mozilla.fennec_aurora
+05-26 11:45:51.738 7086 7124 I Icing : doRemovePackageData org.mozilla.fennec_aurora
+05-26 11:45:51.742 2534 2697 W LocationOracle: No location history returned by ContextManager
+05-26 11:45:51.781 2482 11975 W ctxmgr : [AclManager]No 3 for (accnt=account#-517948760#, com.google.android.gms(10008):UserVelocityProducer, vrsn=13280022, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 1, account#-517948760#
+05-26 11:45:51.791 2534 2534 I MicroDetectionWorker: #startMicroDetector [speakerMode: 0]
+05-26 11:45:51.791 2534 2534 I AudioController: Using mInputStreamFactoryBuilder
+05-26 11:45:51.791 2534 2534 I AudioController: Created new AudioSource
+05-26 11:45:51.793 2534 2534 I MicroDetectionWorker: onReady
+05-26 11:45:51.795 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:51.808 2534 2016 I MicroRecognitionRunner: Starting detection.
+05-26 11:45:51.817 2534 2004 I MicrophoneInputStream: mic_starting SR : 16000 CC : 16 SO : 6
+05-26 11:45:51.819 1631 1683 E : Request requires android.permission.RECORD_AUDIO
+05-26 11:45:51.819 1631 1683 E AudioPolicyIntefaceImpl: getInputForAttr permission denied: recording not allowed for uid 10039 pid 2534
+05-26 11:45:51.819 1631 1683 E AudioFlinger: createRecord() checkRecordThread_l failed
+05-26 11:45:51.819 2534 2004 E IAudioFlinger: createRecord returned error -22
+05-26 11:45:51.819 2534 2004 E AudioRecord: AudioFlinger could not create record track, status: -22
+05-26 11:45:51.819 2534 2004 E AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -22.
+05-26 11:45:51.820 2534 2004 E android.media.AudioRecord: Error code -20 when initializing native AudioRecord object.
+05-26 11:45:51.820 2534 2004 I MicrophoneInputStream: mic_started SR : 16000 CC : 16 SO : 6
+05-26 11:45:51.820 2534 2004 E ActivityThread: Failed to find provider info for com.google.android.apps.gsa.testing.ui.audio.recorded
+05-26 11:45:51.821 2534 2534 I MicroDetectionWorker: onReady
+05-26 11:45:51.830 2534 2016 W SpeechLevelGenerator: Really low audio levels detected. The audio input may have issues.
+05-26 11:45:51.833 2534 2004 I MicrophoneInputStream: mic_close SR : 16000 CC : 16 SO : 6
+05-26 11:45:51.838 2534 2016 I MicroRecognitionRunner: Detection finished
+05-26 11:45:51.839 2534 2016 W ErrorReporter: reportError [type: 211, code: 524300]: Error reading from input stream
+05-26 11:45:51.841 2534 2954 I MicroRecognitionRunner: Stopping hotword detection.
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: onFatalError, processing error from engine(4)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: com.google.android.apps.gsa.shared.speech.b.g: Error reading from input stream
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at com.google.android.apps.gsa.staticplugins.microdetection.d.k.a(SourceFile:91)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at com.google.android.apps.gsa.staticplugins.microdetection.d.l.run(Unknown Source:14)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at com.google.android.libraries.gsa.runner.a.a.b(SourceFile:32)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at com.google.android.libraries.gsa.runner.a.c.call(Unknown Source:4)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.g.run(Unknown Source:4)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at java.lang.Thread.run(Thread.java:764)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.i.run(SourceFile:6)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: Caused by: com.google.android.apps.gsa.shared.exception.GsaIOException: Error code: 393238 | Buffer overflow, no available space.
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.Tee.j(SourceFile:103)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.au.read(SourceFile:2)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at java.io.InputStream.read(InputStream.java:101)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.ao.run(SourceFile:17)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.an.run(SourceFile:2)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+05-26 11:45:51.842 2534 2016 W ErrorProcessor: ... 10 more
+05-26 11:45:51.842 2534 2016 I AudioController: internalShutdown
+05-26 11:45:51.846 2534 2534 I MicroDetector: Keeping mic open: false
+05-26 11:45:51.846 2534 2534 I MicroDetectionWorker: #onError(false)
+05-26 11:45:51.847 2534 2697 I DeviceStateChecker: DeviceStateChecker cancelled
+05-26 11:45:51.879 1876 16736 I ActivityManager: Force stopping org.mozilla.fennec_aurora appid=10092 user=-1: set debug app
+05-26 11:45:51.879 1876 1876 V SettingsProvider: Notifying for 0: content://settings/global/debug_app
+05-26 11:45:51.910 1876 3012 I ActivityManager: START u0 {flg=0x10000000 cmp=org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity (has extras)} from uid 0
+05-26 11:45:51.961 1876 1893 I ActivityManager: Start proc 2726:org.mozilla.fennec_aurora/u0a92 for activity org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity
+05-26 11:45:51.964 1623 1623 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:51.967 2726 2726 W a.fennec_auror: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:51.969 2482 3056 I Places : ?: PlacesBleScanner start() with priority 2
+05-26 11:45:51.979 1876 1940 D : HostConnection::get() New Host Connection established 0xcf15cd00, tid 1940
+05-26 11:45:52.016 2482 3056 I Places : ?: PlacesBleScanner start() with priority 2
+05-26 11:45:52.020 2482 3056 I PlaceInferenceEngine: [anon] Changed inference mode: 1
+05-26 11:45:52.033 2726 2726 W ActivityThread: Application org.mozilla.fennec_aurora can be debugged on port 8100...
+05-26 11:45:52.036 2726 2726 I a.fennec_auror: The ClassLoaderContext is a special shared library.
+05-26 11:45:52.046 2482 3056 I Places : Converted 0 out of 1 WiFi scans
+05-26 11:45:52.059 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:52.060 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:52.060 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:52.061 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:52.061 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:52.062 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:52.062 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:52.063 1623 1623 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:52.063 2534 2825 D EGL_emulation: eglMakeCurrent: 0xe8b06aa0: ver 3 0 (tinfo 0xe8b03b50)
+05-26 11:45:52.066 1733 2119 D : HostConnection::get() New Host Connection established 0xed9604c0, tid 2119
+05-26 11:45:52.067 1733 2119 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:52.067 1733 2119 D : HostConnection::get() New Host Connection established 0xed9604c0, tid 2119
+05-26 11:45:52.070 2499 2681 D EGL_emulation: eglMakeCurrent: 0xd35359e0: ver 3 0 (tinfo 0xd353b4f0)
+05-26 11:45:52.074 1733 2205 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:52.075 1733 2205 D : HostConnection::get() New Host Connection established 0xe9a2f7c0, tid 2205
+05-26 11:45:52.075 1733 2205 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:52.075 1733 2205 D : HostConnection::get() New Host Connection established 0xe9a2f7c0, tid 2205
+05-26 11:45:52.076 1733 2205 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:52.076 1733 2205 D : HostConnection::get() New Host Connection established 0xe9a2f7c0, tid 2205
+05-26 11:45:52.078 1733 2119 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:52.079 1733 2119 D : HostConnection::get() New Host Connection established 0xed9604c0, tid 2119
+05-26 11:45:52.079 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:52.079 1733 2119 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:52.079 1733 2119 D : HostConnection::get() New Host Connection established 0xed9604c0, tid 2119
+05-26 11:45:52.080 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:52.086 1733 2205 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:52.088 1733 2119 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:52.090 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:52.095 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:52.102 2482 6321 I PlaceInferenceEngine: No beacon scan available - ignoring candidates.
+05-26 11:45:52.106 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:52.128 2012 2265 I chatty : uid=10024(com.android.systemui) RenderThread identical 2 lines
+05-26 11:45:52.132 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:52.134 2482 3056 I Places : ?: PlacesBleScanner start() with priority 2
+05-26 11:45:52.143 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:52.147 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:52.155 2482 3056 I Places : ?: PlacesBleScanner start() with priority 2
+05-26 11:45:52.162 2482 3056 I PlaceInferenceEngine: [anon] Changed inference mode: 1
+05-26 11:45:52.163 2726 2726 D FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization.
+05-26 11:45:52.164 2726 2726 D FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
+05-26 11:45:52.165 2726 2726 I FirebaseInitProvider: FirebaseApp initialization successful
+05-26 11:45:52.167 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:52.179 2012 2265 I chatty : uid=10024(com.android.systemui) RenderThread identical 2 lines
+05-26 11:45:52.183 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:52.190 2482 3056 I Places : Converted 0 out of 1 WiFi scans
+05-26 11:45:52.191 2726 2752 W a.fennec_auror: Accessing hidden method Landroid/content/res/Resources$Theme;->rebase()V (dark greylist, linking)
+05-26 11:45:52.199 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:52.204 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:52.223 2726 2726 D FennecProfile: profiles.ini: false
+05-26 11:45:52.223 2726 2726 D FennecProfile: No profiles found
+05-26 11:45:52.227 2726 2726 D FennecMigrator: No migrations to run. Fennec install - false.
+05-26 11:45:52.235 2726 2726 D FenixApplication: Initializing Glean (uploadEnabled=true, isFennec=true)
+05-26 11:45:52.263 2482 6321 I PlaceInferenceEngine: No beacon scan available - ignoring candidates.
+05-26 11:45:52.264 2482 6319 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):PlacesProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 18, account#-517948760#
+05-26 11:45:52.280 2726 2762 D RustNativeSupport: findMegazordLibraryName(viaduct, 0.58.1
+05-26 11:45:52.280 2726 2762 D RustNativeSupport: lib in use: none
+05-26 11:45:52.280 2726 2762 D RustNativeSupport: lib configured: megazord
+05-26 11:45:52.280 2726 2762 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:45:52.280 2726 2762 D RustNativeSupport: settled on megazord
+05-26 11:45:52.338 2726 2752 I FA : Collection disabled with firebase_analytics_collection_enabled=0
+05-26 11:45:52.339 2726 2752 I FA : App measurement is starting up, version: 12780
+05-26 11:45:52.339 2726 2752 I FA : To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
+05-26 11:45:52.342 2726 2752 I FA : To enable faster debug mode event logging run:
+05-26 11:45:52.342 2726 2752 I FA : adb shell setprop debug.firebase.analytics.app org.mozilla.fennec_aurora
+05-26 11:45:52.366 2726 2726 W ActivityThread: ClassLoader.loadClass: The class loader returned by Thread.getContextClassLoader() may fail for processes that host multiple applications. You should explicitly specify a context class loader. For example: Thread.setContextClassLoader(getClass().getClassLoader());
+05-26 11:45:52.377 2726 2726 I GeckoRuntime: Adding debug configuration from: /data/local/tmp/org.mozilla.fennec_aurora-geckoview-config.yaml
+05-26 11:45:52.377 2726 2726 D GeckoDebugConfig: Adding environment variables from debug config: {MOZ_CRASHREPORTER=1, MOZ_CRASHREPORTER_NO_REPORT=1, MOZ_CRASHREPORTER_SHUTDOWN=1}
+05-26 11:45:52.377 2726 2726 D GeckoDebugConfig: Adding arguments from debug config: [-marionette, -profile, /mnt/sdcard/org.mozilla.fennec_aurora-geckodriver-profile]
+05-26 11:45:52.378 2726 2726 D GeckoThread: State changed to LAUNCHED
+05-26 11:45:52.390 2726 2773 I GeckoThread: preparing to run Gecko
+05-26 11:45:52.399 2726 2773 D GeckoThread: env var: MOZ_CRASHREPORTER=1
+05-26 11:45:52.399 2726 2773 D GeckoThread: env var: MOZ_CRASHREPORTER_NO_REPORT=1
+05-26 11:45:52.399 2726 2773 D GeckoThread: env var: MOZ_CRASHREPORTER_SHUTDOWN=1
+05-26 11:45:52.409 2726 2726 D GeckoRuntime: Lifecycle: onCreate
+05-26 11:45:52.479 2726 2773 D GeckoThread: State changed to MOZGLUE_READY
+05-26 11:45:52.480 2726 2744 I a.fennec_auror: Background concurrent copying GC freed 13284(2MB) AllocSpace objects, 9(436KB) LOS objects, 49% free, 1904KB/3MB, paused 3.706ms total 105.789ms
+05-26 11:45:52.484 2726 2760 D libglean_ffi: glean_ffi: Android logging should be hooked up!
+05-26 11:45:52.485 2726 2762 D RustNativeSupport: findMegazordLibraryName(rustlog, 0.58.1
+05-26 11:45:52.485 2726 2762 D RustNativeSupport: lib in use: none
+05-26 11:45:52.485 2726 2760 I glean/Glean: Registering pings for mozilla.telemetry.glean.GleanMetrics.Pings
+05-26 11:45:52.485 2726 2762 D RustNativeSupport: lib configured: megazord
+05-26 11:45:52.485 2726 2762 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:45:52.486 2726 2762 D RustNativeSupport: settled on megazord
+05-26 11:45:52.486 2726 2760 I libglean_ffi: glean_core: Creating new Glean
+05-26 11:45:52.486 2726 2762 I rc_log_ffi::ios: rc_log adapter initialized!
+05-26 11:45:52.486 2726 2760 D libglean_ffi: glean_core::database: Database path: "/data/user/0/org.mozilla.fennec_aurora/glean_data/db"
+05-26 11:45:52.487 2726 2760 I libglean_ffi: glean_core::database: Database initialized
+05-26 11:45:52.488 2726 2726 D GleanMetricsService: Enabling Glean.
+05-26 11:45:52.488 2726 2773 W Settings: Setting animator_duration_scale has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only global URI.
+05-26 11:45:52.490 2726 2726 I AdjustMetricsService: No adjust token defined
+05-26 11:45:52.490 2726 2726 D PushConfig: Creating push configuration for autopush.
+05-26 11:45:52.497 2726 2773 E GeckoLibLoad: Load sqlite start
+05-26 11:45:52.499 2726 2726 I App : AutoPushFeature is configured, initializing it...
+05-26 11:45:52.502 2726 2726 I AutoPushFeature: Checking validity of push subscriptions.
+05-26 11:45:52.519 2726 2726 D FennecProfile: profiles.ini: false
+05-26 11:45:52.520 2726 2726 D FennecProfile: No profiles found
+05-26 11:45:52.522 2726 2760 I libglean_ffi: glean_ffi: Glean initialized
+05-26 11:45:52.523 2726 2773 E GeckoLibLoad: Load sqlite done
+05-26 11:45:52.524 2726 2773 E GeckoLibLoad: Load nss start
+05-26 11:45:52.524 2726 2773 E GeckoLibLoad: Load nss done
+05-26 11:45:52.530 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@99c3fe3)
+05-26 11:45:52.530 2726 2762 W [WARNING][Leanplum]: [com.leanplum.internal.ActionManager::getLocationManager::8]: Geofencing support requires leanplum-location module and Google Play Services v8.1 and higher.
+05-26 11:45:52.530 2726 2762 W [WARNING][Leanplum]: Add this to your build.gradle file:
+05-26 11:45:52.530 2726 2762 W [WARNING][Leanplum]: implementation 'com.google.android.gms:play-services-location:8.3.0+'
+05-26 11:45:52.530 2726 2762 W [WARNING][Leanplum]: implementation 'com.leanplum:leanplum-location:+'
+05-26 11:45:52.530 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@99c3fe3)
+05-26 11:45:52.533 2726 2762 I [INFO][Leanplum]: [com.leanplum.monitoring.ExceptionHandler::setContext::6]: LeanplumExceptionHandler could not initialize Exception Reporting.This is expected if you have not included the leanplum-monitoring module
+05-26 11:45:52.562 2726 2726 D FennecMigrator: This is not a Fennec installation. No migration needed.
+05-26 11:45:52.584 2726 2782 I [INFO][Leanplum]: [com.leanplum.LeanplumFcmProvider::isManifestSetup::11]: Firebase Messaging is setup correctly.
+05-26 11:45:52.592 2726 2726 W a.fennec_auror: Accessing hidden method Landroid/content/res/Resources$Theme;->rebase()V (dark greylist, reflection)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: Failed to retrieve rebase() method
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: java.lang.NoSuchMethodException: rebase []
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at java.lang.Class.getMethod(Class.java:2068)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at java.lang.Class.getDeclaredMethod(Class.java:2047)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at androidx.core.content.res.ResourcesCompat$ThemeCompat$ImplApi23.rebase(ResourcesCompat.java:3)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:80)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:2)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at android.app.Activity.attach(Activity.java:7051)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:52.595 2726 2726 I ResourcesCompat: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:52.609 2726 2773 E GeckoLibLoad: Loaded libs in 84.685000ms total, 0ms(60ms) user, 30ms(100ms) system, 0(0) faults
+05-26 11:45:52.610 2726 2773 D GeckoThread: State changed to LIBS_READY
+05-26 11:45:52.612 2726 2773 W GeckoThread: zerdatime 190872808 - runGecko
+05-26 11:45:52.613 2726 2773 D GeckoProfile: Loading profile at: null name: default
+05-26 11:45:52.614 2726 2773 D GeckoProfile: Created new profile dir.
+05-26 11:45:52.614 2726 2773 I GeckoProfile: Enqueuing profile init.
+05-26 11:45:52.616 2726 2773 D GeckoProfile: Found profile dir: /data/user/0/org.mozilla.fennec_aurora/files/mozilla/acwxvl2q.default
+05-26 11:45:52.616 2726 2773 D GeckoProfile: Attempting to write new client ID properties
+05-26 11:45:52.617 2726 2773 D GeckoProfile: Creating profile dir: /data/user/0/org.mozilla.fennec_aurora/files/mozilla/acwxvl2q.default
+05-26 11:45:52.671 2726 2760 I glean/MetricsPingSched: The application just updated. Send metrics ping now.
+05-26 11:45:52.672 2726 2760 I glean/MetricsPingSched: Collecting the 'metrics' ping, now = Tue May 26 11:45:52 EDT 2020, startup = true, reason = upgrade
+05-26 11:45:52.672 2726 2760 I libglean_ffi: glean_core::ping: Collecting metrics
+05-26 11:45:52.672 2726 2760 I libglean_ffi: glean_core::ping: Storage for metrics empty. Bailing out.
+05-26 11:45:52.672 2726 2760 I libglean_ffi: glean_core: No content for ping 'metrics', therefore no ping queued.
+05-26 11:45:52.673 2726 2760 D glean/MetricsPingSched: Scheduling the 'metrics' ping in 58447335ms
+05-26 11:45:52.678 2726 2773 I Gecko:DumpUtils: Fifo watcher disabled via pref.
+05-26 11:45:52.738 2726 2773 D GeckoSysInfo: System memory: 1494MB.
+05-26 11:45:52.740 2726 2773 D GeckoThread: State changed to JNI_READY
+05-26 11:45:52.753 2726 2812 D ServiceAllocator: org.mozilla.gecko.process.GeckoChildProcessServices$tab0 updateBindings: BACKGROUND priority, 0 importance, 2 successful binds, 0 failed binds, 0 successful unbinds, 0 failed unbinds
+05-26 11:45:52.759 2819 2819 W nec_aurora:tab: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:52.763 1876 1893 I ActivityManager: Start proc 2819:org.mozilla.fennec_aurora:tab0/u0a92 for service org.mozilla.fennec_aurora/org.mozilla.gecko.process.GeckoChildProcessServices$tab0
+05-26 11:45:52.794 2819 2819 I nec_aurora:tab: The ClassLoaderContext is a special shared library.
+05-26 11:45:52.803 2726 2726 I FirefoxAccountStateMachine: Enabling/updating sync with a new SyncConfig: SyncConfig(supportedEngines=[mozilla.components.service.fxa.SyncEngine$History@5c45c02, mozilla.components.service.fxa.SyncEngine$Bookmarks@42ff913, mozilla.components.service.fxa.SyncEngine$Passwords@e030750], syncPeriodInMinutes=240)
+05-26 11:45:52.806 2726 2726 I BgSyncManager: Periodic syncing enabled at a 240 interval
+05-26 11:45:52.807 2726 2726 I FirefoxAccountStateMachine: Sync is enabled
+05-26 11:45:52.831 2726 2844 I FirefoxAccountStateMachine: Processing event Event$Init for state Start. Next state is Start
+05-26 11:45:52.842 2819 2819 D GeckoThread: State changed to LAUNCHED
+05-26 11:45:52.843 2819 2847 I GeckoThread: preparing to run Gecko
+05-26 11:45:52.849 2726 2726 E ActivityThread: Failed to find provider info for org.mozilla.fennec_aurora.fxa.auth
+05-26 11:45:52.873 1739 1739 I keystore: del USRPKEY_org.mozilla.fennec_aurora 10092
+05-26 11:45:52.874 1739 1739 I keystore: del USRCERT_org.mozilla.fennec_aurora 10092
+05-26 11:45:52.874 1739 1739 I keystore: del CACERT_org.mozilla.fennec_aurora 10092
+05-26 11:45:52.884 2726 2726 D GeckoRuntime: Lifecycle: onStart
+05-26 11:45:52.895 2726 2726 D GeckoRuntime: Lifecycle: onResume
+05-26 11:45:52.899 2726 2726 D GeckoNetworkManager: Incoming event start for state OffNoListeners -> OnNoListeners
+05-26 11:45:52.900 2726 2726 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:45:52.905 2726 2844 I FirefoxAccountStateMachine: Ran 'Event$Init' side-effects for state Start, got successive event Event$AccountNotFound
+05-26 11:45:52.905 2726 2844 I FirefoxAccountStateMachine: Processing event Event$AccountNotFound for state Start. Next state is NotAuthenticated
+05-26 11:45:52.906 2726 2726 D OpenGLRenderer: Skia GL Pipeline
+05-26 11:45:52.911 2726 2844 D RustNativeSupport: findMegazordLibraryName(fxaclient, 0.58.1
+05-26 11:45:52.911 2726 2844 D RustNativeSupport: lib in use: none
+05-26 11:45:52.911 2726 2844 D RustNativeSupport: lib configured: megazord
+05-26 11:45:52.912 2726 2844 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:45:52.912 2726 2844 D RustNativeSupport: settled on megazord
+05-26 11:45:52.913 2726 2844 D fxaclient_ffi: fxa_new
+05-26 11:45:52.920 2726 2782 D NetworkSecurityConfig: No Network Security Config specified, using platform default
+05-26 11:45:52.927 1733 2119 E SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
+05-26 11:45:52.972 2726 2760 I libglean_ffi: glean_core::ping: Collecting baseline
+05-26 11:45:52.979 2726 2726 D GeckoNetworkManager: Incoming event receivedUpdate for state OnNoListeners -> OnNoListeners
+05-26 11:45:52.979 2726 2844 W FirefoxAccountStateMachine: Got invalid event Event$Init for state NotAuthenticated.
+05-26 11:45:52.981 2726 2726 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:45:52.995 2726 2760 D libglean_ffi: glean_core::ping: Storing ping 'f465c424-af4c-4a9b-bfc4-c1f4a2161777' at '/data/user/0/org.mozilla.fennec_aurora/glean_data/pending_pings/f465c424-af4c-4a9b-bfc4-c1f4a2161777'
+05-26 11:45:52.995 2726 2760 I libglean_ffi: glean_core: The ping 'baseline' was submitted and will be sent as soon as possible
+05-26 11:45:53.041 2726 2744 I a.fennec_auror: Background concurrent copying GC freed 8507(1030KB) AllocSpace objects, 24(1248KB) LOS objects, 49% free, 3MB/6MB, paused 878us total 103.693ms
+05-26 11:45:53.053 1623 1623 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:53.061 1733 2205 D : HostConnection::get() New Host Connection established 0xed960980, tid 2205
+05-26 11:45:53.061 1623 1623 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:53.088 1876 16736 D ConnectivityService: requestNetwork for uid/pid:10092/2726 NetworkRequest [ TRACK_DEFAULT id=236, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ]
+05-26 11:45:53.068 1623 1623 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:45:53.090 1876 1975 D WIFI : got request NetworkRequest [ TRACK_DEFAULT id=236, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:45:53.090 1876 1975 D WIFI_UT : got request NetworkRequest [ TRACK_DEFAULT id=236, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:45:53.091 2131 2131 D PhoneSwitcherNetworkRequstListener: got request NetworkRequest [ TRACK_DEFAULT id=236, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:45:53.139 2726 2853 D : HostConnection::get() New Host Connection established 0xe5eeb400, tid 2853
+05-26 11:45:53.147 2726 2853 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
+05-26 11:45:53.147 2726 2853 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
+05-26 11:45:53.147 2726 2853 I OpenGLRenderer: Initialized EGL, version 1.4
+05-26 11:45:53.147 2726 2853 D OpenGLRenderer: Swap behavior 1
+05-26 11:45:53.147 2726 2853 W OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
+05-26 11:45:53.147 2726 2853 D OpenGLRenderer: Swap behavior 0
+05-26 11:45:53.148 2726 2853 D EGL_emulation: eglCreateContext: 0xd25033c0: maj 3 min 0 rcv 3
+05-26 11:45:53.149 2726 2853 D EGL_emulation: eglMakeCurrent: 0xd25033c0: ver 3 0 (tinfo 0xe7113e50)
+05-26 11:45:53.152 1733 2205 E SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
+05-26 11:45:53.231 2726 2853 D EGL_emulation: eglMakeCurrent: 0xd25033c0: ver 3 0 (tinfo 0xe7113e50)
+05-26 11:45:53.271 2726 2726 D MigrationPushRenewer: Migration state: NONE
+05-26 11:45:53.271 2726 2726 D MigrationTelemetryListener: Migration state: NONE
+05-26 11:45:53.271 2000 2000 I GoogleInputMethod: onFinishInput() : Dummy InputConnection bound
+05-26 11:45:53.272 2000 2000 I GoogleInputMethod: onStartInput() : Dummy InputConnection bound
+05-26 11:45:53.275 2726 2726 D GeckoNetworkManager: Incoming event enableNotifications for state OnNoListeners -> OnWithListeners
+05-26 11:45:53.277 2726 2726 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:45:53.277 1876 16736 W ActivityManager: Receiver with filter android.content.IntentFilter@513011f already registered for pid 2726, callerPackage is org.mozilla.fennec_aurora
+05-26 11:45:53.283 2726 2882 D glean/PingUploadWorker: Processing persisted pings at /data/user/0/org.mozilla.fennec_aurora/glean_data/pending_pings
+05-26 11:45:53.283 2726 2882 D glean/PingUploadWorker: Processing ping: f465c424-af4c-4a9b-bfc4-c1f4a2161777
+05-26 11:45:53.284 2726 2882 D glean/ConceptFetchHttpUploader: Submitting ping to: https://incoming.telemetry.mozilla.org/submit/org-mozilla-fennec-aurora/baseline/1/f465c424-af4c-4a9b-bfc4-c1f4a2161777
+05-26 11:45:53.285 1876 1899 I ActivityManager: Displayed org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity: +1s325ms
+05-26 11:45:53.287 2726 2726 E ActivityThread: Failed to find provider info for org.mozilla.fennec_aurora.fxa.auth
+05-26 11:45:53.291 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:53.307 2726 2726 D GeckoNetworkManager: Incoming event receivedUpdate for state OnWithListeners -> OnWithListeners
+05-26 11:45:53.307 2726 2726 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:45:53.396 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:53.462 1876 1940 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:53.463 1876 1940 D : HostConnection::get() New Host Connection established 0xcf15cd00, tid 1940
+05-26 11:45:53.463 1876 1940 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:53.464 1876 1940 D : HostConnection::get() New Host Connection established 0xcf15cd00, tid 1940
+05-26 11:45:53.465 1876 1940 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:53.466 1876 1940 D : HostConnection::get() New Host Connection established 0xcf15cd00, tid 1940
+05-26 11:45:53.467 1876 1940 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:53.467 1733 1759 W SurfaceFlinger: Attempting to set client state on removed layer: Splash Screen org.mozilla.fennec_aurora#0
+05-26 11:45:53.467 1733 1759 W SurfaceFlinger: Attempting to destroy on removed layer: Splash Screen org.mozilla.fennec_aurora#0
+05-26 11:45:53.477 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:53.478 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:53.478 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:53.479 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:53.479 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:53.479 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:53.479 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:45:53.487 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:45:53.498 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:53.529 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@ca37570)
+05-26 11:45:53.530 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@ca37570)
+05-26 11:45:53.546 2726 2726 I [INFO][Leanplum]: [com.leanplum.LeanplumCloudMessagingProvider::onRegistrationIdReceived::3]: Device registered for push notifications with registration token, cLw1ufUAypU:APA91bHwfEq1krMCzf_jHv5X8dBYH06lrQ2wpvlxNyYV8_MykbUmRTposZZdoFxensMQrmcByfnWHr-LSb3YUIsBTDKhSf42XmbTB1pI8PFxQQT0aoQU6n1Xba4dyepXUu_1ENC-UDHA
+05-26 11:45:53.600 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:53.669 2726 2744 I a.fennec_auror: Background concurrent copying GC freed 20991(1619KB) AllocSpace objects, 35(892KB) LOS objects, 49% free, 4MB/8MB, paused 2.056ms total 174.646ms
+05-26 11:45:53.674 2726 2896 I [INFO][Leanplum]: [com.leanplum.LeanplumCloudMessagingProvider::onRegistrationIdReceived::3]: Device registered for push notifications with registration token, cLw1ufUAypU:APA91bHwfEq1krMCzf_jHv5X8dBYH06lrQ2wpvlxNyYV8_MykbUmRTposZZdoFxensMQrmcByfnWHr-LSb3YUIsBTDKhSf42XmbTB1pI8PFxQQT0aoQU6n1Xba4dyepXUu_1ENC-UDHA
+05-26 11:45:53.689 2726 2897 I AutoPushFeature: Received a new registration token from push service.
+05-26 11:45:53.691 2726 2897 D RustNativeSupport: findMegazordLibraryName(push, 0.58.1
+05-26 11:45:53.691 2726 2897 D RustNativeSupport: lib in use: none
+05-26 11:45:53.691 2726 2897 D RustNativeSupport: lib configured: megazord
+05-26 11:45:53.691 2726 2897 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:45:53.691 2726 2897 D RustNativeSupport: settled on megazord
+05-26 11:45:53.702 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:53.715 1733 1733 W SurfaceFlinger: couldn't log to binary event log: overflow.
+05-26 11:45:53.771 2726 2773 D GeckoThread: State changed to PROFILE_READY
+05-26 11:45:53.802 2726 2773 D GeckoThread: State changed to RUNNING
+05-26 11:45:53.807 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:53.810 2726 2773 I Gecko : -*- nsDNSServiceDiscovery.js : nsDNSServiceDiscovery
+05-26 11:45:53.825 2534 2004 I PBSessionCacheImpl: Deleted sessionId[290782986459] from persistence.
+05-26 11:45:53.832 2726 2773 I Gecko : 1590507953832 Marionette TRACE Marionette enabled
+05-26 11:45:53.836 2534 2534 W SearchService: Abort, client detached.
+05-26 11:45:53.915 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:53.929 2726 2726 I DefaultSupportedAddonsChecker: Register check for new supported add-ons
+05-26 11:45:53.941 2726 2773 I Gecko : 1590507953941 Marionette TRACE Received observer notification marionette-startup-requested
+05-26 11:45:53.942 2726 2773 I Gecko : 1590507953942 Marionette TRACE Waiting until startup recorder finished recording startup scripts...
+05-26 11:45:53.976 2726 2858 I SupportedAddonsWorker: Trying to check for new supported add-ons
+05-26 11:45:54.017 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:54.125 4313 4313 I chatty : uid=0(root) /system/bin/adbd identical 1 line
+05-26 11:45:54.229 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:54.241 2726 2726 D App : Installed browser-icons extension
+05-26 11:45:54.315 2726 2773 D : HostConnection::get() New Host Connection established 0xd2559d80, tid 2773
+05-26 11:45:54.317 2726 2773 E EGL_emulation: tid 2773: eglBindAPI(1259): error 0x300c (EGL_BAD_PARAMETER)
+05-26 11:45:54.319 2726 2773 D EGL_emulation: eglCreateContext: 0xee947400: maj 3 min 0 rcv 3
+05-26 11:45:54.321 2726 2773 D EGL_emulation: eglMakeCurrent: 0xee947400: ver 3 0 (tinfo 0xe7113aa0)
+05-26 11:45:54.331 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:54.435 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:54.501 2726 2882 D glean/ConceptFetchHttpUploader: Ping successfully sent (200)
+05-26 11:45:54.501 2726 2882 D glean/PingUploadWorker: f465c424-af4c-4a9b-bfc4-c1f4a2161777 was deleted: true
+05-26 11:45:54.505 2726 2770 I WM-WorkerWrapper: Worker result SUCCESS for Work [ id=82564a1f-761f-43fa-a170-fb28e9f6e99e, tags={ mozilla.telemetry.glean.scheduler.PingUploadWorker, mozac_service_glean_ping_upload_worker } ]
+05-26 11:45:54.511 1876 1978 D ConnectivityService: releasing NetworkRequest [ TRACK_DEFAULT id=236, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] (release request)
+05-26 11:45:54.531 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@383f15d)
+05-26 11:45:54.531 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@383f15d)
+05-26 11:45:54.539 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:54.641 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:54.714 2726 2726 D mozac-webcompat: Installed WebCompat webextension: webcompat@mozilla.com
+05-26 11:45:54.724 2726 2773 I Gecko : 1590507954724 Marionette TRACE All scripts recorded.
+05-26 11:45:54.725 2726 2773 I Gecko : 1590507954725 Marionette DEBUG Setting recommended pref apz.content_response_timeout to 60000
+05-26 11:45:54.725 2726 2773 I Gecko : 1590507954725 Marionette DEBUG Setting recommended pref browser.contentblocking.introCount to 99
+05-26 11:45:54.725 2726 2773 I Gecko : 1590507954725 Marionette DEBUG Setting recommended pref browser.download.panel.shown to true
+05-26 11:45:54.725 2726 2773 I Gecko : 1590507954725 Marionette DEBUG Setting recommended pref browser.newtabpage.enabled to false
+05-26 11:45:54.726 2726 2773 I Gecko : 1590507954726 Marionette DEBUG Setting recommended pref browser.safebrowsing.malware.enabled to false
+05-26 11:45:54.730 2726 2773 I Gecko : 1590507954730 Marionette DEBUG Setting recommended pref browser.safebrowsing.phishing.enabled to false
+05-26 11:45:54.733 2726 2773 I Gecko : 1590507954733 Marionette DEBUG Setting recommended pref browser.search.update to false
+05-26 11:45:54.733 2726 2773 I Gecko : 1590507954733 Marionette DEBUG Setting recommended pref browser.tabs.disableBackgroundZombification to false
+05-26 11:45:54.733 2726 2773 I Gecko : 1590507954733 Marionette DEBUG Setting recommended pref browser.tabs.remote.separatePrivilegedContentProcess to false
+05-26 11:45:54.734 2726 2773 I Gecko : 1590507954734 Marionette DEBUG Setting recommended pref browser.tabs.unloadOnLowMemory to false
+05-26 11:45:54.734 2726 2773 I Gecko : 1590507954734 Marionette DEBUG Setting recommended pref browser.tabs.warnOnCloseOtherTabs to false
+05-26 11:45:54.734 2726 2773 I Gecko : 1590507954734 Marionette DEBUG Setting recommended pref browser.tabs.warnOnOpen to false
+05-26 11:45:54.734 2726 2773 I Gecko : 1590507954734 Marionette DEBUG Setting recommended pref browser.usedOnWindows10.introURL to
+05-26 11:45:54.735 2726 2773 I Gecko : 1590507954735 Marionette DEBUG Setting recommended pref browser.urlbar.suggest.searches to false
+05-26 11:45:54.736 2726 2773 I Gecko : 1590507954736 Marionette DEBUG Setting recommended pref dom.disable_beforeunload to true
+05-26 11:45:54.736 2726 2773 I Gecko : 1590507954736 Marionette DEBUG Setting recommended pref dom.file.createInChild to true
+05-26 11:45:54.736 2726 2773 I Gecko : 1590507954736 Marionette DEBUG Setting recommended pref extensions.getAddons.cache.enabled to false
+05-26 11:45:54.736 2726 2773 I Gecko : 1590507954736 Marionette DEBUG Setting recommended pref network.http.prompt-temp-redirect to false
+05-26 11:45:54.737 2726 2773 I Gecko : 1590507954737 Marionette DEBUG Setting recommended pref security.notification_enable_delay to 0
+05-26 11:45:54.738 2726 2773 I Gecko : 1590507954737 Marionette DEBUG Setting recommended pref signon.autofillForms to false
+05-26 11:45:54.738 2726 2773 I Gecko : 1590507954738 Marionette DEBUG Setting recommended pref signon.rememberSignons to false
+05-26 11:45:54.738 2726 2773 I Gecko : 1590507954738 Marionette DEBUG Setting recommended pref toolkit.cosmeticAnimations.enabled to false
+05-26 11:45:54.743 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:45:54.809 2726 2773 I Gecko : 1590507954808 Marionette INFO Listening on port 2829
+05-26 11:45:54.809 2726 2773 I Gecko : 1590507954809 Marionette DEBUG Marionette is listening
+05-26 11:45:54.868 2726 2773 I Gecko : 1590507954868 Marionette DEBUG Accepted connection 0 from 127.0.0.1:56755
+05-26 11:45:54.879 2726 2773 I Gecko : 1590507954879 Marionette DEBUG 0 -> [0,1,"WebDriver:NewSession",{"browserName":"firefox","pageLoadStrategy":"none"}]
+05-26 11:45:55.535 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@da64ad2)
+05-26 11:45:55.536 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@da64ad2)
+05-26 11:45:55.540 2482 6319 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 57, account#-517948760#
+05-26 11:45:55.567 2726 2770 I WM-WorkerWrapper: Worker result SUCCESS for Work [ id=1c2acf6f-dff9-4397-a0d6-bcd151200102, tags={ mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker.periodicWork, mozilla.components.feature.addons.migration.SupportedAddonsWorker } ]
+05-26 11:45:56.065 2958 2958 I lla.fenix.debu: Not late-enabling -Xcheck:jni (already on)
+05-26 11:45:56.071 1876 1893 I ActivityManager: Start proc 2958:org.mozilla.fenix.debug/u0a91 for service org.mozilla.fenix.debug/androidx.work.impl.background.systemjob.SystemJobService
+05-26 11:45:56.085 2958 2958 W lla.fenix.debu: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:56.143 2958 2958 I lla.fenix.debu: The ClassLoaderContext is a special shared library.
+05-26 11:45:56.540 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@7677aff)
+05-26 11:45:56.540 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@7677aff)
+05-26 11:45:56.555 1876 4916 E memtrack: Couldn't load memtrack module
+05-26 11:45:56.555 1876 4916 W android.os.Debug: failed to get memory consumption info: -1
+05-26 11:45:56.786 2534 2016 I EventLogSendingHelper: Sending log events.
+05-26 11:45:56.796 2958 2958 D FirebaseApp: Default FirebaseApp failed to initialize because no default options were found. This usually means that com.google.gms:google-services was not applied to your gradle project.
+05-26 11:45:56.797 2958 2958 I FirebaseInitProvider: FirebaseApp initialization unsuccessful
+05-26 11:45:56.962 2958 2958 D FenixApplication: Initializing Glean (uploadEnabled=true, isFennec=false)
+05-26 11:45:57.003 2958 2984 D RustNativeSupport: findMegazordLibraryName(viaduct, 0.59.0
+05-26 11:45:57.003 2958 2984 D RustNativeSupport: lib in use: none
+05-26 11:45:57.003 2958 2984 D RustNativeSupport: lib configured: megazord
+05-26 11:45:57.003 2958 2984 D RustNativeSupport: lib version configured: 0.59.0
+05-26 11:45:57.003 2958 2984 D RustNativeSupport: settled on megazord
+05-26 11:45:57.158 2958 2983 D libglean_ffi: glean_ffi: Android logging should be hooked up!
+05-26 11:45:57.162 2958 2984 D RustNativeSupport: findMegazordLibraryName(rustlog, 0.59.0
+05-26 11:45:57.163 2958 2984 D RustNativeSupport: lib in use: none
+05-26 11:45:57.163 2958 2984 D RustNativeSupport: lib configured: megazord
+05-26 11:45:57.163 2958 2984 D RustNativeSupport: lib version configured: 0.59.0
+05-26 11:45:57.163 2958 2984 D RustNativeSupport: settled on megazord
+05-26 11:45:57.171 2958 2983 I glean/Glean: Registering pings for mozilla.telemetry.glean.GleanMetrics.Pings
+05-26 11:45:57.176 2958 2984 I rc_log_ffi::ios: rc_log adapter initialized!
+05-26 11:45:57.176 2958 2983 I libglean_ffi: glean_core: Creating new Glean
+05-26 11:45:57.182 2958 2983 D libglean_ffi: glean_core::database: Database path: "/data/user/0/org.mozilla.fenix.debug/glean_data/db"
+05-26 11:45:57.186 2958 2983 I libglean_ffi: glean_core::database: Database initialized
+05-26 11:45:57.195 2958 2983 I libglean_ffi: glean_ffi: Glean initialized
+05-26 11:45:57.235 2958 2958 I GeckoRuntime: Adding debug configuration from: /data/local/tmp/org.mozilla.fenix.debug-geckoview-config.yaml
+05-26 11:45:57.235 2958 2958 D GeckoDebugConfig: Adding environment variables from debug config: {MOZ_CRASHREPORTER=1, MOZ_CRASHREPORTER_NO_REPORT=1, MOZ_CRASHREPORTER_SHUTDOWN=1}
+05-26 11:45:57.236 2958 2958 D GeckoDebugConfig: Adding arguments from debug config: [-marionette, -profile, /mnt/sdcard/org.mozilla.fenix.debug-geckodriver-profile]
+05-26 11:45:57.241 2958 2958 D GeckoThread: State changed to LAUNCHED
+05-26 11:45:57.243 2958 2993 I GeckoThread: preparing to run Gecko
+05-26 11:45:57.243 2958 2983 D glean/MetricsPingSched: The 'metrics' ping was last sent on Tue May 26 00:00:00 EDT 2020
+05-26 11:45:57.243 2958 2993 D GeckoThread: env var: MOZ_CRASHREPORTER=1
+05-26 11:45:57.243 2958 2993 D GeckoThread: env var: MOZ_CRASHREPORTER_NO_REPORT=1
+05-26 11:45:57.244 2958 2993 D GeckoThread: env var: MOZ_CRASHREPORTER_SHUTDOWN=1
+05-26 11:45:57.244 2958 2983 I glean/MetricsPingSched: The 'metrics' ping was already sent today, Tue May 26 11:45:57 EDT 2020.
+05-26 11:45:57.244 2958 2983 D glean/MetricsPingSched: Scheduling the 'metrics' ping in 58442800ms
+05-26 11:45:57.247 2958 2983 D libglean_ffi: glean_core: Clearing Lifetime::Application metrics
+05-26 11:45:57.268 2958 2958 D GeckoRuntime: Lifecycle: onCreate
+05-26 11:45:57.305 2958 2993 D GeckoThread: State changed to MOZGLUE_READY
+05-26 11:45:57.323 2958 2993 W Settings: Setting animator_duration_scale has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only global URI.
+05-26 11:45:57.328 2958 2993 E GeckoLibLoad: Load sqlite start
+05-26 11:45:57.350 2958 2993 E GeckoLibLoad: Load sqlite done
+05-26 11:45:57.350 2958 2993 E GeckoLibLoad: Load nss start
+05-26 11:45:57.350 2958 2993 E GeckoLibLoad: Load nss done
+05-26 11:45:57.499 2958 2958 D LeakCanary: Updated AppWatcher.config: Config(no changes)
+05-26 11:45:57.542 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@b66791)
+05-26 11:45:57.543 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@b66791)
+05-26 11:45:57.555 2958 2993 E GeckoLibLoad: Loaded libs in 204.632000ms total, 10ms(220ms) user, 90ms(130ms) system, 37(37) faults
+05-26 11:45:57.557 2958 2993 D GeckoThread: State changed to LIBS_READY
+05-26 11:45:57.561 2958 2958 D LeakCanary: Updated LeakCanary.config: Config(no changes)
+05-26 11:45:57.564 2958 2993 W GeckoThread: zerdatime 190877760 - runGecko
+05-26 11:45:57.568 2958 2958 D App : DebugMetricController: start
+05-26 11:45:57.568 2958 2958 D App : DebugMetricController: start
+05-26 11:45:57.570 2958 2993 D GeckoProfile: Loading profile at: null name: default
+05-26 11:45:57.570 2958 2958 W PushConfig: No firebase configuration found; cannot support push service.
+05-26 11:45:57.570 2958 2993 D GeckoProfile: Found profile dir: /data/user/0/org.mozilla.fenix.debug/files/mozilla/u71tud99.default
+05-26 11:45:57.604 2958 2958 D StrictMode: StrictMode policy violation; ~duration=417 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:57.604 2958 2958 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:57.604 2958 2958 D StrictMode: at java.io.FileInputStream.<init>(FileInputStream.java:163)
+05-26 11:45:57.604 2958 2958 D StrictMode: at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:49)
+05-26 11:45:57.604 2958 2958 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+05-26 11:45:57.604 2958 2958 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+05-26 11:45:57.604 2958 2958 D StrictMode: at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+05-26 11:45:57.604 2958 2958 D StrictMode: at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+05-26 11:45:57.604 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+05-26 11:45:57.604 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+05-26 11:45:57.604 2958 2958 D StrictMode: at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+05-26 11:45:57.604 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+05-26 11:45:57.604 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+05-26 11:45:57.604 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:57.604 2958 2958 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:57.604 2958 2958 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:57.604 2958 2958 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:57.604 2958 2958 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:57.604 2958 2958 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:57.604 2958 2958 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:57.604 2958 2958 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:57.604 2958 2958 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:57.604 2958 2958 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:57.604 2958 2958 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:57.608 2958 2958 D StrictMode: StrictMode policy violation; ~duration=400 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:57.608 2958 2958 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:57.608 2958 2958 D StrictMode: at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+05-26 11:45:57.608 2958 2958 D StrictMode: at libcore.io.IoBridge.read(IoBridge.java:501)
+05-26 11:45:57.608 2958 2958 D StrictMode: at java.io.FileInputStream.read(FileInputStream.java:307)
+05-26 11:45:57.608 2958 2958 D StrictMode: at java.io.FilterInputStream.read(FilterInputStream.java:133)
+05-26 11:45:57.608 2958 2958 D StrictMode: at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.UnicodeReader.init(UnicodeReader.java:92)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:124)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1177)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:195)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:107)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+05-26 11:45:57.608 2958 2958 D StrictMode: at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+05-26 11:45:57.608 2958 2958 D StrictMode: at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+05-26 11:45:57.608 2958 2958 D StrictMode: at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+05-26 11:45:57.608 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:57.608 2958 2958 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:57.608 2958 2958 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:57.608 2958 2958 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:57.608 2958 2958 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:57.608 2958 2958 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:57.608 2958 2958 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:57.608 2958 2958 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:57.608 2958 2958 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:57.608 2958 2958 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:57.608 2958 2958 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:57.611 2958 2958 D StrictMode: StrictMode policy violation; ~duration=398 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:57.611 2958 2958 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:57.611 2958 2958 D StrictMode: at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+05-26 11:45:57.611 2958 2958 D StrictMode: at libcore.io.IoBridge.read(IoBridge.java:501)
+05-26 11:45:57.611 2958 2958 D StrictMode: at java.io.FileInputStream.read(FileInputStream.java:307)
+05-26 11:45:57.611 2958 2958 D StrictMode: at java.io.FilterInputStream.read(FilterInputStream.java:133)
+05-26 11:45:57.611 2958 2958 D StrictMode: at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+05-26 11:45:57.611 2958 2958 D StrictMode: at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:288)
+05-26 11:45:57.611 2958 2958 D StrictMode: at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:351)
+05-26 11:45:57.611 2958 2958 D StrictMode: at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:180)
+05-26 11:45:57.611 2958 2958 D StrictMode: at java.io.InputStreamReader.read(InputStreamReader.java:184)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1177)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:195)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:107)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+05-26 11:45:57.611 2958 2958 D StrictMode: at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+05-26 11:45:57.611 2958 2958 D StrictMode: at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+05-26 11:45:57.611 2958 2958 D StrictMode: at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+05-26 11:45:57.611 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:57.611 2958 2958 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:57.611 2958 2958 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:57.611 2958 2958 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:57.611 2958 2958 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:57.611 2958 2958 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:57.611 2958 2958 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:57.611 2958 2958 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:57.611 2958 2958 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:57.611 2958 2958 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:57.611 2958 2958 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:57.620 2958 2958 D StrictMode: StrictMode policy violation; ~duration=374 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:57.620 2958 2958 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:57.620 2958 2958 D StrictMode: at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+05-26 11:45:57.620 2958 2958 D StrictMode: at libcore.io.IoBridge.read(IoBridge.java:501)
+05-26 11:45:57.620 2958 2958 D StrictMode: at java.io.FileInputStream.read(FileInputStream.java:307)
+05-26 11:45:57.620 2958 2958 D StrictMode: at java.io.FilterInputStream.read(FilterInputStream.java:133)
+05-26 11:45:57.620 2958 2958 D StrictMode: at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+05-26 11:45:57.620 2958 2958 D StrictMode: at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:288)
+05-26 11:45:57.620 2958 2958 D StrictMode: at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:351)
+05-26 11:45:57.620 2958 2958 D StrictMode: at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:180)
+05-26 11:45:57.620 2958 2958 D StrictMode: at java.io.InputStreamReader.read(InputStreamReader.java:184)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:136)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.scanPlain(ScannerImpl.java:1999)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.fetchPlain(ScannerImpl.java:1044)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:399)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockSequenceEntry.produce(ParserImpl.java:504)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.composer.Composer.composeSequenceNode(Composer.java:188)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:142)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:236)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:227)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:215)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:144)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:85)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:108)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+05-26 11:45:57.620 2958 2958 D StrictMode: at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+05-26 11:45:57.620 2958 2958 D StrictMode: at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+05-26 11:45:57.620 2958 2958 D StrictMode: at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+05-26 11:45:57.620 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:57.620 2958 2958 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:57.620 2958 2958 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:57.620 2958 2958 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:57.620 2958 2958 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:57.620 2958 2958 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:57.620 2958 2958 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:57.620 2958 2958 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:57.620 2958 2958 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:57.620 2958 2958 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:57.620 2958 2958 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:57.625 2958 2958 D StrictMode: StrictMode policy violation; ~duration=327 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:57.625 2958 2958 D StrictMode: at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+05-26 11:45:57.625 2958 2958 D StrictMode: at java.io.File.exists(File.java:815)
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+05-26 11:45:57.625 2958 2958 D StrictMode: at mozilla.components.browser.engine.gecko.GeckoEngine.<init>(GeckoEngine.kt:68)
+05-26 11:45:57.625 2958 2958 D StrictMode: at mozilla.components.browser.engine.gecko.GeckoEngine.<init>(GeckoEngine.kt:63)
+05-26 11:45:57.625 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:76)
+05-26 11:45:57.625 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+05-26 11:45:57.625 2958 2958 D StrictMode: at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+05-26 11:45:57.625 2958 2958 D StrictMode: at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+05-26 11:45:57.625 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+05-26 11:45:57.625 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:57.625 2958 2958 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:57.625 2958 2958 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:57.625 2958 2958 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:57.625 2958 2958 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:57.629 2958 2958 D StrictMode: StrictMode policy violation; ~duration=110 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:57.629 2958 2958 D StrictMode: at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+05-26 11:45:57.629 2958 2958 D StrictMode: at java.io.File.exists(File.java:815)
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+05-26 11:45:57.629 2958 2958 D StrictMode: at androidx.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:119)
+05-26 11:45:57.629 2958 2958 D StrictMode: at org.mozilla.fenix.DebugFenixApplication.setupLeakCanary(DebugFenixApplication.kt:15)
+05-26 11:45:57.629 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:140)
+05-26 11:45:57.629 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:57.629 2958 2958 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:57.629 2958 2958 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:57.629 2958 2958 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:57.629 2958 2958 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:57.630 2958 2958 D StrictMode: StrictMode policy violation; ~duration=107 ms: android.os.strictmode.DiskReadViolation
+05-26 11:45:57.630 2958 2958 D StrictMode: at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+05-26 11:45:57.630 2958 2958 D StrictMode: at android.app.SharedPreferencesImpl.awaitLoadedLocked(SharedPreferencesImpl.java:256)
+05-26 11:45:57.630 2958 2958 D StrictMode: at android.app.SharedPreferencesImpl.getBoolean(SharedPreferencesImpl.java:325)
+05-26 11:45:57.630 2958 2958 D StrictMode: at org.mozilla.fenix.DebugFenixApplication.setupLeakCanary(DebugFenixApplication.kt:16)
+05-26 11:45:57.630 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:140)
+05-26 11:45:57.630 2958 2958 D StrictMode: at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+05-26 11:45:57.630 2958 2958 D StrictMode: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+05-26 11:45:57.630 2958 2958 D StrictMode: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+05-26 11:45:57.630 2958 2958 D StrictMode: at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+05-26 11:45:57.630 2958 2958 D StrictMode: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+05-26 11:45:57.630 2958 2958 D StrictMode: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:45:57.630 2958 2958 D StrictMode: at android.os.Looper.loop(Looper.java:193)
+05-26 11:45:57.630 2958 2958 D StrictMode: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:45:57.630 2958 2958 D StrictMode: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:45:57.630 2958 2958 D StrictMode: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:45:57.630 2958 2958 D StrictMode: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:45:57.635 2958 2958 D LeakCanary: LeakCanary is running and ready to detect leaks
+05-26 11:45:57.700 2958 2984 I SupportedAddonsWorker: Trying to check for new supported add-ons
+05-26 11:45:57.782 2958 2993 I Gecko:DumpUtils: Fifo watcher disabled via pref.
+05-26 11:45:58.027 2958 2993 D GeckoSysInfo: System memory: 1494MB.
+05-26 11:45:58.027 2958 2993 W lla.fenix.debu: Accessing hidden method Landroid/os/MessageQueue;->next()Landroid/os/Message; (light greylist, JNI)
+05-26 11:45:58.028 2958 2993 D StrictMode: StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/MessageQueue;->next()Landroid/os/Message;
+05-26 11:45:58.028 2958 2993 D StrictMode: at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+05-26 11:45:58.028 2958 2993 D StrictMode: at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+05-26 11:45:58.028 2958 2993 D StrictMode: at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+05-26 11:45:58.028 2958 2993 D StrictMode: at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+05-26 11:45:58.028 2958 2993 W lla.fenix.debu: Accessing hidden field Landroid/os/MessageQueue;->mMessages:Landroid/os/Message; (light greylist, JNI)
+05-26 11:45:58.029 2958 2993 D StrictMode: StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/MessageQueue;->mMessages:Landroid/os/Message;
+05-26 11:45:58.029 2958 2993 D StrictMode: at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+05-26 11:45:58.029 2958 2993 D StrictMode: at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+05-26 11:45:58.029 2958 2993 D StrictMode: at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+05-26 11:45:58.029 2958 2993 D StrictMode: at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+05-26 11:45:58.030 2958 2993 W lla.fenix.debu: Accessing hidden field Ljava/lang/Boolean;->value:Z (light greylist, JNI)
+05-26 11:45:58.030 2958 2993 D StrictMode: StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Boolean;->value:Z
+05-26 11:45:58.030 2958 2993 D StrictMode: at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+05-26 11:45:58.030 2958 2993 D StrictMode: at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+05-26 11:45:58.030 2958 2993 D StrictMode: at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+05-26 11:45:58.030 2958 2993 D StrictMode: at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+05-26 11:45:58.030 2958 2993 W lla.fenix.debu: Accessing hidden field Ljava/lang/Integer;->value:I (light greylist, JNI)
+05-26 11:45:58.031 2958 2993 D StrictMode: StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Integer;->value:I
+05-26 11:45:58.031 2958 2993 D StrictMode: at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+05-26 11:45:58.031 2958 2993 D StrictMode: at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+05-26 11:45:58.031 2958 2993 D StrictMode: at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+05-26 11:45:58.031 2958 2993 D StrictMode: at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+05-26 11:45:58.031 2958 2993 W lla.fenix.debu: Accessing hidden field Ljava/lang/Double;->value:D (light greylist, JNI)
+05-26 11:45:58.031 2958 2993 D StrictMode: StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Double;->value:D
+05-26 11:45:58.031 2958 2993 D StrictMode: at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+05-26 11:45:58.031 2958 2993 D StrictMode: at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+05-26 11:45:58.031 2958 2993 D StrictMode: at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+05-26 11:45:58.031 2958 2993 D StrictMode: at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+05-26 11:45:58.035 2958 2993 D GeckoThread: State changed to JNI_READY
+05-26 11:45:58.045 2958 3014 D ServiceAllocator: org.mozilla.gecko.process.GeckoChildProcessServices$tab0 updateBindings: BACKGROUND priority, 0 importance, 2 successful binds, 0 failed binds, 0 successful unbinds, 0 failed unbinds
+05-26 11:45:58.054 3020 3020 I enix.debug:tab: Not late-enabling -Xcheck:jni (already on)
+05-26 11:45:58.056 1876 1893 I ActivityManager: Start proc 3020:org.mozilla.fenix.debug:tab0/u0a91 for service org.mozilla.fenix.debug/org.mozilla.gecko.process.GeckoChildProcessServices$tab0
+05-26 11:45:58.089 3020 3020 W enix.debug:tab: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:45:58.093 2726 2726 I glean/Glean: Registering pings for org.mozilla.fenix.GleanMetrics.Pings
+05-26 11:45:58.110 2726 2726 I FenixApplication: Kicking-off account manager...
+05-26 11:45:58.110 2726 2726 I FenixApplication: 'Kicking-off account manager' took 0 ms
+05-26 11:45:58.114 2726 2951 I FenixApplication: Running post-visual completeness tasks...
+05-26 11:45:58.114 2726 2951 I FenixApplication: Storage initialization...
+05-26 11:45:58.115 2726 2951 I PlacesHistoryStorage: Warming up places storage...
+05-26 11:45:58.116 2726 2951 D RustNativeSupport: findMegazordLibraryName(places, 0.58.1
+05-26 11:45:58.116 2726 2951 D RustNativeSupport: lib in use: none
+05-26 11:45:58.116 2726 2951 D RustNativeSupport: lib configured: megazord
+05-26 11:45:58.116 2726 2951 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:45:58.116 2726 2951 D RustNativeSupport: settled on megazord
+05-26 11:45:58.117 2726 2951 D places_ffi: places_api_new
+05-26 11:45:58.147 3020 3020 I enix.debug:tab: The ClassLoaderContext is a special shared library.
+05-26 11:45:58.149 2726 2951 D places::db::schema: Creating schema
+05-26 11:45:58.160 2726 2858 I App : ActivationPing - generating ping with the hashed id
+05-26 11:45:58.161 2726 2858 I App : ActivationPing - generating ping (has `identifier`: true)
+05-26 11:45:58.168 2726 2760 I libglean_ffi: glean_core::ping: Collecting activation
+05-26 11:45:58.185 2726 2760 D libglean_ffi: glean_core::ping: Storing ping '74e89a59-9fb9-4c30-b711-7573f532c7e1' at '/data/user/0/org.mozilla.fennec_aurora/glean_data/pending_pings/74e89a59-9fb9-4c30-b711-7573f532c7e1'
+05-26 11:45:58.185 2726 2760 I libglean_ffi: glean_core: The ping 'activation' was submitted and will be sent as soon as possible
+05-26 11:45:58.207 1876 4916 D ConnectivityService: requestNetwork for uid/pid:10092/2726 NetworkRequest [ TRACK_DEFAULT id=237, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ]
+05-26 11:45:58.209 1876 1975 D WIFI : got request NetworkRequest [ TRACK_DEFAULT id=237, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:45:58.209 1876 1975 D WIFI_UT : got request NetworkRequest [ TRACK_DEFAULT id=237, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:45:58.210 2131 2131 D PhoneSwitcherNetworkRequstListener: got request NetworkRequest [ TRACK_DEFAULT id=237, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:45:58.214 2726 2951 D sql_support::conn_ext: Transaction commited after 65.158ms
+05-26 11:45:58.216 2726 2951 D places_ffi: places_connection_new
+05-26 11:45:58.218 2726 2951 D places_ffi: places_connection_new
+05-26 11:45:58.220 2726 2951 I PlacesHistoryStorage: 'Warming up places storage' took 104 ms
+05-26 11:45:58.220 2726 2951 I PlacesBookmarksStorage: Warming up places storage...
+05-26 11:45:58.220 2726 2951 D places_ffi: places_connection_new
+05-26 11:45:58.226 2726 2951 I PlacesBookmarksStorage: 'Warming up places storage' took 6 ms
+05-26 11:45:58.228 2726 3042 D glean/PingUploadWorker: Processing persisted pings at /data/user/0/org.mozilla.fennec_aurora/glean_data/pending_pings
+05-26 11:45:58.228 2726 3042 D glean/PingUploadWorker: Processing ping: 74e89a59-9fb9-4c30-b711-7573f532c7e1
+05-26 11:45:58.230 2726 3042 D glean/ConceptFetchHttpUploader: Submitting ping to: https://incoming.telemetry.mozilla.org/submit/org-mozilla-fennec-aurora/activation/1/74e89a59-9fb9-4c30-b711-7573f532c7e1
+05-26 11:45:58.246 1739 1739 I keystore: 1 0
+05-26 11:45:58.253 2726 2951 I SyncableLoginsStorage: Warming up storage...
+05-26 11:45:58.260 2726 2951 D RustNativeSupport: findMegazordLibraryName(logins, 0.58.1
+05-26 11:45:58.260 2726 2951 D RustNativeSupport: lib in use: none
+05-26 11:45:58.260 2726 2951 D RustNativeSupport: lib configured: megazord
+05-26 11:45:58.260 2726 2951 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:45:58.260 2726 2951 D RustNativeSupport: settled on megazord
+05-26 11:45:58.263 2726 2951 D logins_ffi: sync15_passwords_state_new
+05-26 11:45:58.293 1876 1890 E memtrack: Couldn't load memtrack module
+05-26 11:45:58.293 1876 1890 W android.os.Debug: failed to get memory consumption info: -1
+05-26 11:45:58.299 2726 2951 D logins::schema: Creating schema
+05-26 11:45:58.311 2958 2993 D GeckoViewStartup: observe: app-startup
+05-26 11:45:58.334 2958 2993 D GeckoViewConsole: enabled = true
+05-26 11:45:58.411 2726 2951 I SyncableLoginsStorage: 'Warming up storage' took 157 ms
+05-26 11:45:58.411 2726 2951 I FenixApplication: 'Storage initialization' took 296 ms
+05-26 11:45:58.416 2958 2993 I GeckoConsole: No chrome package registered for chrome://browser/content/built_in_addons.json
+05-26 11:45:58.506 2958 2993 D GeckoThread: State changed to PROFILE_READY
+05-26 11:45:58.526 2958 2993 D GeckoViewStartup: observe: profile-after-change
+05-26 11:45:58.528 2958 2993 D GeckoViewTelemetryController: setup - canRecordPrereleaseData true, canRecordReleaseData true
+05-26 11:45:58.542 2958 2993 D GeckoThread: State changed to RUNNING
+05-26 11:45:58.547 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@94e6ffb)
+05-26 11:45:58.548 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@94e6ffb)
+05-26 11:45:58.551 2958 2993 I Gecko : 1590507958551 Marionette TRACE Marionette enabled
+05-26 11:45:58.551 2958 2993 I Gecko : 1590507958551 Marionette TRACE Received observer notification profile-after-change
+05-26 11:45:58.557 2958 2993 I Gecko : -*- nsDNSServiceDiscovery.js : nsDNSServiceDiscovery
+05-26 11:45:58.599 2726 3042 D glean/ConceptFetchHttpUploader: Ping successfully sent (200)
+05-26 11:45:58.599 2726 3042 D glean/PingUploadWorker: 74e89a59-9fb9-4c30-b711-7573f532c7e1 was deleted: true
+05-26 11:45:58.601 2726 2765 I WM-WorkerWrapper: Worker result SUCCESS for Work [ id=7537e864-720e-48e9-9923-7ae430e3fcdc, tags={ mozilla.telemetry.glean.scheduler.PingUploadWorker, mozac_service_glean_ping_upload_worker } ]
+05-26 11:45:58.606 1876 1978 D ConnectivityService: releasing NetworkRequest [ TRACK_DEFAULT id=237, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] (release request)
+05-26 11:45:58.611 2958 2993 I Gecko : 1590507958611 Marionette TRACE Received observer notification command-line-startup
+05-26 11:45:58.629 2958 2958 D GeckoNetworkManager: Incoming event enableNotifications for state OffNoListeners -> OffWithListeners
+05-26 11:45:58.636 2958 2958 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:45:58.636 2958 2993 D GeckoViewStartup: onEvent GeckoView:SetLocale
+05-26 11:45:58.636 2958 2993 D GeckoViewStartup: onEvent GeckoView:ResetUserPrefs
+05-26 11:45:58.640 2958 2993 D GeckoViewRemoteDebugger: onInit
+05-26 11:45:58.641 2958 2993 D GeckoViewConsole: enabled = false
+05-26 11:45:58.655 2958 2993 D GeckoViewStartup: onEvent GeckoView:SetLocale
+05-26 11:45:58.656 2958 2993 D GeckoViewStartup: onEvent GeckoView:SetDefaultPrefs
+05-26 11:45:58.675 2958 2993 I chatty : uid=10091(org.mozilla.fenix.debug) Gecko identical 9 lines
+05-26 11:45:58.676 2958 2993 D GeckoViewStartup: onEvent GeckoView:SetDefaultPrefs
+05-26 11:45:58.680 2958 2993 D GeckoViewConsole: onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"webcompat@mozilla.com","locationUri":"resource://android/assets/extensions/webcompat/"}
+05-26 11:45:58.684 2958 2993 D GeckoViewConsole: onEvent GeckoView:WebExtension:List null
+05-26 11:45:58.693 2958 2993 D GeckoViewConsole: onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"mozacBrowserIcons","locationUri":"resource://android/assets/extensions/browser-icons/"}
+05-26 11:45:58.695 2958 2993 D GeckoViewConsole: onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"mozacBrowserAds","locationUri":"resource://android/assets/extensions/ads/"}
+05-26 11:45:58.695 2958 2993 D GeckoViewConsole: onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"BrowserCookiesExtension","locationUri":"resource://android/assets/extensions/cookies/"}
+05-26 11:45:58.749 2958 2993 I Gecko : 1590507958749 Marionette TRACE Received observer notification marionette-startup-requested
+05-26 11:45:58.750 2958 2993 I Gecko : 1590507958750 Marionette TRACE Waiting until startup recorder finished recording startup scripts...
+05-26 11:45:58.764 2958 2993 I Gecko : 1590507958764 Marionette TRACE All scripts recorded.
+05-26 11:45:58.768 2958 2993 I Gecko : 1590507958768 Marionette DEBUG Setting recommended pref browser.safebrowsing.malware.enabled to false
+05-26 11:45:58.770 2958 2993 I Gecko : 1590507958770 Marionette DEBUG Setting recommended pref browser.safebrowsing.phishing.enabled to false
+05-26 11:45:58.772 2958 2993 I Gecko : 1590507958771 Marionette DEBUG Setting recommended pref browser.search.update to false
+05-26 11:45:58.772 2958 2993 I Gecko : 1590507958772 Marionette DEBUG Setting recommended pref browser.tabs.disableBackgroundZombification to false
+05-26 11:45:58.772 2958 2993 I Gecko : 1590507958772 Marionette DEBUG Setting recommended pref browser.tabs.remote.separatePrivilegedContentProcess to false
+05-26 11:45:58.773 2958 2993 I Gecko : 1590507958773 Marionette DEBUG Setting recommended pref network.http.prompt-temp-redirect to false
+05-26 11:45:58.857 2958 2993 I Gecko : 1590507958853 Marionette FATAL Remote protocol server failed to start: Error: Could not bind to port 2829 (NS_ERROR_SOCKET_ADDRESS_IN_USE)(chrome://marionette/content/server.js:94:17) JS Stack trace: set acceptConnections@server.js:94:17
+05-26 11:45:58.857 2958 2993 I Gecko : start@server.js:124:5
+05-26 11:45:58.857 2958 2993 I Gecko : init/<@marionette.js:510:21
+05-26 11:45:58.857 2958 2993 I Gecko : 1590507958857 Marionette DEBUG Resetting recommended pref browser.safebrowsing.malware.enabled
+05-26 11:45:58.863 2958 2993 I Gecko : 1590507958863 Marionette DEBUG Resetting recommended pref browser.safebrowsing.phishing.enabled
+05-26 11:45:58.865 2958 2993 I Gecko : 1590507958865 Marionette DEBUG Resetting recommended pref browser.search.update
+05-26 11:45:58.866 2958 2993 I Gecko : 1590507958866 Marionette DEBUG Resetting recommended pref browser.tabs.disableBackgroundZombification
+05-26 11:45:58.866 2958 2993 I Gecko : 1590507958866 Marionette DEBUG Resetting recommended pref browser.tabs.remote.separatePrivilegedContentProcess
+05-26 11:45:58.866 2958 2993 I Gecko : 1590507958866 Marionette DEBUG Resetting recommended pref network.http.prompt-temp-redirect
+05-26 11:45:58.879 2958 2993 D GeckoThread: State changed to EXITING
+05-26 11:45:58.896 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:45:58.965 2958 2993 E GeckoConsole: [JavaScript Error: "NetworkError when attempting to fetch resource."]
+05-26 11:45:58.965 2958 2993 E GeckoConsole: get@resource://services-settings/RemoteSettingsClient.jsm:348:12
+05-26 11:45:58.978 3020 3020 D GeckoThread: State changed to LAUNCHED
+05-26 11:45:58.979 3020 3074 I GeckoThread: preparing to run Gecko
+05-26 11:45:59.080 2958 2958 D App : Installed browser-icons extension
+05-26 11:45:59.095 2958 2993 I GeckoConsole: 1590507959095 addons.xpi WARN Exception running bootstrap method shutdown on default-theme@mozilla.org: [Exception... "Component returned failure code: 0x80004002 (NS_NOINTERFACE) [nsISupports.QueryInterface]" nsresult: "0x80004002 (NS_NOINTERFACE)" location: "JS frame :: resource://gre/modules/Extension.jsm :: shutdown :: line 2586" data: no] Stack trace: shutdown()@resource://gre/modules/Extension.jsm:2586
+05-26 11:45:59.095 2958 2993 I GeckoConsole: shutdown()@resource://gre/modules/Extension.jsm:1703
+05-26 11:45:59.095 2958 2993 I GeckoConsole: callBootstrapMethod()@resource://gre/modules/addons/XPIProvider.jsm:1819
+05-26 11:45:59.095 2958 2993 I GeckoConsole: _shutdown()@resource://gre/modules/addons/XPIProvider.jsm:1948
+05-26 11:45:59.095 2958 2993 I GeckoConsole: observe()@resource://gre/modules/AsyncShutdown.jsm:554
+05-26 11:45:59.106 2958 2993 D : HostConnection::get() New Host Connection established 0xe6b53580, tid 2993
+05-26 11:45:59.109 2958 2993 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
+05-26 11:45:59.109 2958 2993 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
+05-26 11:45:59.110 2958 2993 E EGL_emulation: tid 2993: eglBindAPI(1259): error 0x300c (EGL_BAD_PARAMETER)
+05-26 11:45:59.111 2958 2993 D EGL_emulation: eglCreateContext: 0xea8dc120: maj 3 min 0 rcv 3
+05-26 11:45:59.112 2958 2993 D EGL_emulation: eglMakeCurrent: 0xea8dc120: ver 3 0 (tinfo 0xee8fd9d0)
+05-26 11:45:59.388 2958 2993 E GeckoConsole: [JavaScript Error: "Error: Phase "profile-change-teardown" is finished, it is too late to register completion condition "ServiceWorkerShutdownBlocker: shutting down Service Workers"" {file: "resource://gre/modules/AsyncShutdown.jsm" line: 697}]
+05-26 11:45:59.388 2958 2993 E GeckoConsole: addBlocker@resource://gre/modules/AsyncShutdown.jsm:697:15
+05-26 11:45:59.388 2958 2993 E GeckoConsole: addBlocker@resource://gre/modules/AsyncShutdown.jsm:505:26
+05-26 11:45:59.388 2958 2993 E GeckoConsole: addBlocker@resource://gre/modules/AsyncShutdown.jsm:444:15
+05-26 11:45:59.388 2958 2993 E GeckoConsole: addBlocker@resource://gre/modules/nsAsyncShutdown.jsm:162:24
+05-26 11:45:59.388 2958 2993 E GeckoConsole: observe@resource://gre/modules/AsyncShutdown.jsm:554:16
+05-26 11:45:59.541 2958 2993 W GeckoConsole: [JavaScript Warning: "Security wrapper denied access to property "ONE_QUARTER" on privileged Javascript object. Support for exposing privileged objects to untrusted content via __exposedProps__ has been removed - use WebIDL bindings or Components.utils.cloneInto instead. Note that only the first denied property access from a given global object will be reported." {file: "moz-extension://9670d999-4378-46ae-b907-6d0c226b09b6/data/picture_in_picture_overrides.js" line: 26}]
+05-26 11:45:59.547 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@3a65818)
+05-26 11:45:59.548 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@3a65818)
+05-26 11:45:59.576 2958 2958 D mozac-webcompat: Installed WebCompat webextension: webcompat@mozilla.com
+05-26 11:45:59.636 2958 2993 E GeckoConsole: [JavaScript Error: "can't access property "startupData", state is undefined" {file: "resource://gre/modules/addons/XPIProvider.jsm" line: 3079}]
+05-26 11:45:59.636 2958 2993 E GeckoConsole: setStartupData@resource://gre/modules/addons/XPIProvider.jsm:3079:5
+05-26 11:45:59.636 2958 2993 E GeckoConsole: saveStartupData@resource://gre/modules/Extension.jsm:2035:17
+05-26 11:45:59.636 2958 2993 E GeckoConsole: _writePersistentListeners@resource://gre/modules/ExtensionCommon.jsm:2271:15
+05-26 11:45:59.636 2958 2993 E GeckoConsole: savePersistentListener@resource://gre/modules/ExtensionCommon.jsm:2362:18
+05-26 11:45:59.636 2958 2993 E GeckoConsole: addListener@resource://gre/modules/ExtensionCommon.jsm:2495:20
+05-26 11:45:59.636 2958 2993 E GeckoConsole: addListener@resource://gre/modules/ExtensionCommon.jsm:2550:38
+05-26 11:45:59.636 2958 2993 E GeckoConsole: recvAddListener@resource://gre/modules/ExtensionParent.jsm:1079:13
+05-26 11:45:59.636 2958 2993 E GeckoConsole: observe@resource://gre/modules/AsyncShutdown.jsm:554:16
+05-26 11:45:59.657 2958 2993 I chatty : uid=10091(org.mozilla.fenix.debug) Gecko identical 24 lines
+05-26 11:45:59.705 2958 2993 E GeckoConsole: [JavaScript Error: "can't access property "startupData", state is undefined" {file: "resource://gre/modules/addons/XPIProvider.jsm" line: 3079}]
+05-26 11:45:59.705 2958 2993 E GeckoConsole: setStartupData@resource://gre/modules/addons/XPIProvider.jsm:3079:5
+05-26 11:45:59.705 2958 2993 E GeckoConsole: saveStartupData@resource://gre/modules/Extension.jsm:2035:17
+05-26 11:45:59.705 2958 2993 E GeckoConsole: _writePersistentListeners@resource://gre/modules/ExtensionCommon.jsm:2271:15
+05-26 11:45:59.705 2958 2993 E GeckoConsole: savePersistentListener@resource://gre/modules/ExtensionCommon.jsm:2362:18
+05-26 11:45:59.705 2958 2993 E GeckoConsole: addListener@resource://gre/modules/ExtensionCommon.jsm:2495:20
+05-26 11:45:59.705 2958 2993 E GeckoConsole: addListener@resource://gre/modules/ExtensionCommon.jsm:2550:38
+05-26 11:45:59.705 2958 2993 E GeckoConsole: recvAddListener@resource://gre/modules/ExtensionParent.jsm:1079:13
+05-26 11:45:59.705 2958 2993 E GeckoConsole: observe@resource://gre/modules/AsyncShutdown.jsm:554:16
+05-26 11:45:59.748 2958 2993 I Gecko : 1590507959748 Marionette TRACE Received observer notification xpcom-will-shutdown
+05-26 11:45:59.759 2958 2958 I DefaultSupportedAddonsChecker: Register check for new supported add-ons
+05-26 11:45:59.875 2958 2979 I WM-WorkerWrapper: Work [ id=c00de910-17a6-4ace-93f7-da1dd8387abe, tags={ mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker.periodicWork, mozilla.components.feature.addons.migration.SupportedAddonsWorker } ] was cancelled
+05-26 11:45:59.875 2958 2979 I WM-WorkerWrapper: java.util.concurrent.CancellationException: Task was cancelled.
+05-26 11:45:59.875 2958 2979 I WM-WorkerWrapper: at androidx.work.impl.utils.futures.AbstractFuture.cancellationExceptionWithCause(AbstractFuture.java:1184)
+05-26 11:45:59.875 2958 2979 I WM-WorkerWrapper: at androidx.work.impl.utils.futures.AbstractFuture.getDoneValue(AbstractFuture.java:514)
+05-26 11:45:59.875 2958 2979 I WM-WorkerWrapper: at androidx.work.impl.utils.futures.AbstractFuture.get(AbstractFuture.java:475)
+05-26 11:45:59.875 2958 2979 I WM-WorkerWrapper: at androidx.work.impl.WorkerWrapper$2.run(WorkerWrapper.java:284)
+05-26 11:45:59.875 2958 2979 I WM-WorkerWrapper: at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
+05-26 11:45:59.875 2958 2979 I WM-WorkerWrapper: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
+05-26 11:45:59.875 2958 2979 I WM-WorkerWrapper: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
+05-26 11:45:59.875 2958 2979 I WM-WorkerWrapper: at java.lang.Thread.run(Thread.java:764)
+05-26 11:45:59.899 2958 2987 I SupportedAddonsWorker: Trying to check for new supported add-ons
+05-26 11:45:59.906 2958 2984 E SupportedAddonsWorker: An exception happened trying to check for new supported add-ons, re-schedule Job was cancelled
+05-26 11:45:59.906 2958 2984 E SupportedAddonsWorker: kotlinx.coroutines.JobCancellationException: Job was cancelled; job=JobImpl{Cancelling}@1e7bb6
+05-26 11:45:59.959 1876 16736 I ActivityManager: Process org.mozilla.fenix.debug (pid 2958) has died: vis TRNB
+05-26 11:45:59.961 1876 1894 W libprocessgroup: kill(-2958, 9) failed: No such process
+05-26 11:45:59.961 1876 1894 I libprocessgroup: Successfully killed process cgroup uid 10091 pid 2958 in 0ms
+05-26 11:45:59.961 1734 1734 I Zygote : Process 2958 exited cleanly (0)
+05-26 11:45:59.961 1876 16736 W ActivityManager: Scheduling restart of crashed service org.mozilla.fenix.debug/androidx.work.impl.background.systemjob.SystemJobService in 1000ms
+05-26 11:45:59.962 3020 3020 I ServiceChildProcess: Service has been unbound. Stopping.
+05-26 11:45:59.973 3020 3020 I Process : Sending signal. PID: 3020 SIG: 9
+05-26 11:46:00.005 1876 4916 I ActivityManager: Process org.mozilla.fenix.debug:tab0 (pid 3020) has died: fore SVC
+05-26 11:46:00.006 1734 1734 I Zygote : Process 3020 exited due to signal (9)
+05-26 11:46:00.006 1876 1894 W libprocessgroup: kill(-3020, 9) failed: No such process
+05-26 11:46:00.006 1876 1894 I libprocessgroup: Successfully killed process cgroup uid 10091 pid 3020 in 0ms
+05-26 11:46:00.549 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1041230)
+05-26 11:46:00.551 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1041230)
+05-26 11:46:00.556 2482 7043 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 57, account#-517948760#
+05-26 11:46:00.937 1876 2445 I ActivityManager: Force stopping org.mozilla.fennec_aurora appid=10092 user=0: clear data
+05-26 11:46:00.937 1876 2445 I ActivityManager: Killing 2819:org.mozilla.fennec_aurora:tab0/u0a92 (adj 100): stop org.mozilla.fennec_aurora
+05-26 11:46:00.937 1876 2445 W ActivityManager: Scheduling restart of crashed service org.mozilla.fennec_aurora/org.mozilla.gecko.process.GeckoChildProcessServices$tab0 in 1000ms
+05-26 11:46:00.937 1876 1894 W libprocessgroup: kill(-2819, 9) failed: No such process
+05-26 11:46:00.940 1876 2445 I ActivityManager: Killing 2726:org.mozilla.fennec_aurora/u0a92 (adj 0): stop org.mozilla.fennec_aurora
+05-26 11:46:00.942 1876 2445 W ActivityManager: Force removing ActivityRecord{6297cb2 u0 org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity t283}: app died, no saved state
+05-26 11:46:00.947 1904 1907 D hwcomposer: hw_composer sent 66 syncs in 61s
+05-26 11:46:00.966 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:00.967 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:46:00.967 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:00.967 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:46:00.968 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:00.968 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:46:00.968 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:00.968 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:46:00.969 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:00.969 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:46:00.969 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:00.974 1876 1894 W libprocessgroup: kill(-2819, 9) failed: No such process
+05-26 11:46:00.975 1734 1734 I Zygote : Process 2819 exited due to signal (9)
+05-26 11:46:00.976 1876 1894 W libprocessgroup: kill(2819, 9) failed: No such process
+05-26 11:46:00.989 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:46:00.994 1623 1623 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:46:01.003 1876 1891 I ActivityManager: Force stopping org.mozilla.fennec_aurora appid=10092 user=-1: clearApplicationUserData
+05-26 11:46:01.012 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:46:01.014 1876 1894 W libprocessgroup: kill(-2819, 9) failed: No such process
+05-26 11:46:01.014 1876 1894 I libprocessgroup: Successfully killed process cgroup uid 10092 pid 2819 in 77ms
+05-26 11:46:01.015 1876 1894 W libprocessgroup: kill(-2726, 9) failed: No such process
+05-26 11:46:01.019 1876 2445 D ZenLog : config: removeAutomaticZenRules,ZenModeConfig[user=0,allowAlarms=true,allowMedia=true,allowSystem=false,allowReminders=false,allowEvents=false,allowCalls=true,allowRepeatCallers=true,allowMessages=false,allowCallsFrom=stars,allowMessagesFrom=contacts,suppressedVisualEffects=511,areChannelsBypassingDnd=false,automaticRules={EVENTS_DEFAULT_RULE=ZenRule[enabled=false,snoozing=false,name=Event,zenMode=ZEN_MODE_IMPORTANT_INTERRUPTIONS,conditionId=condition://android/event?userId=-10000&calendar=&reply=1,condition=Condition[id=condition://android/event?userId=-10000&calendar=&reply=1,summary=...,line1=...,line2=...,icon=0,state=STATE_FALSE,flags=2],component=ComponentInfo{android/com.android.server.notification.EventConditionProvider},id=EVENTS_DEFAULT_RULE,creationTime=1587308662810,enabler=null], EVERY_NIGHT_DEFAULT_RULE=ZenRule[enabled=false,snoozing=false,name=Sleeping,zenMode=ZEN_MODE_IMPORTANT_INTERRUPTIONS,conditionId=condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true,condition=Condition[id=condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true,summary=...,line1=...,line2=...,icon=0,state=STATE_FALSE,flags=2],component=ComponentInfo{android/com.android.server.notification.ScheduleConditionProvider},id=EVERY_NIGHT_DEFAULT_RULE,creationTime=1587308662810,enabler=null]},manualRule=null],Diff[]
+05-26 11:46:01.019 1876 2445 I ConditionProviders: Disallowing condition provider org.mozilla.fennec_aurora
+05-26 11:46:01.020 1876 1876 D ZenLog : set_zen_mode: off,removeAutomaticZenRules
+05-26 11:46:01.025 1739 1739 I keystore: clear_uid 10092
+05-26 11:46:01.033 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:46:01.050 1876 1961 W InputDispatcher: channel '3c6531a org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
+05-26 11:46:01.050 1876 1961 E InputDispatcher: channel '3c6531a org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
+05-26 11:46:01.060 1876 1894 W libprocessgroup: kill(-2726, 9) failed: No such process
+05-26 11:46:01.063 1733 1733 D SurfaceFlinger: duplicate layer name: changing com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity to com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#1
+05-26 11:46:01.066 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:46:01.071 1734 1734 I Zygote : Process 2726 exited due to signal (9)
+05-26 11:46:01.072 1733 2119 D : HostConnection::get() New Host Connection established 0xede98680, tid 2119
+05-26 11:46:01.072 1733 2119 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.072 1733 2119 D : HostConnection::get() New Host Connection established 0xede98680, tid 2119
+05-26 11:46:01.077 1876 5182 I WindowManager: WIN DEATH: Window{3c6531a u0 org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity}
+05-26 11:46:01.077 1876 5182 W InputDispatcher: Attempted to unregister already unregistered input channel '3c6531a org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity (server)'
+05-26 11:46:01.081 1876 8003 I ActivityManager: Force stopping org.mozilla.fennec_aurora appid=10092 user=0: from pid 3095
+05-26 11:46:01.084 1733 1759 W SurfaceFlinger: Attempting to destroy on removed layer: AppWindowToken{c874f80 token=Token{7548403 ActivityRecord{6297cb2 u0 org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity t283}}}#0
+05-26 11:46:01.084 1733 1759 W SurfaceFlinger: Attempting to destroy on removed layer: Task=283#0
+05-26 11:46:01.087 1623 1623 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:46:01.089 1733 2119 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.091 1733 2119 D : HostConnection::get() New Host Connection established 0xecc60840, tid 2119
+05-26 11:46:01.091 1733 2119 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.092 1733 2119 D : HostConnection::get() New Host Connection established 0xecc60840, tid 2119
+05-26 11:46:01.092 1733 2119 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.096 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:46:01.096 2534 2825 D EGL_emulation: eglMakeCurrent: 0xe8b06aa0: ver 3 0 (tinfo 0xe8b03b50)
+05-26 11:46:01.100 1876 1890 E memtrack: Couldn't load memtrack module
+05-26 11:46:01.100 1876 1890 W android.os.Debug: failed to get memory consumption info: -1
+05-26 11:46:01.101 1876 1899 W ActivityManager: setHasOverlayUi called on unknown pid: 2726
+05-26 11:46:01.104 1876 1894 W libprocessgroup: kill(-2726, 9) failed: No such process
+05-26 11:46:01.104 1876 1894 I libprocessgroup: Successfully killed process cgroup uid 10092 pid 2726 in 89ms
+05-26 11:46:01.113 2131 2131 D CarrierSvcBindHelper: No carrier app for: 0
+05-26 11:46:01.116 2000 2000 I GoogleInputMethod: onFinishInput() : Dummy InputConnection bound
+05-26 11:46:01.121 2000 2000 I GoogleInputMethod: onStartInput() : Dummy InputConnection bound
+05-26 11:46:01.135 2534 2534 W SessionLifecycleManager: Handover failed. Creating new session controller.
+05-26 11:46:01.141 2499 2681 D EGL_emulation: eglMakeCurrent: 0xd35359e0: ver 3 0 (tinfo 0xd353b4f0)
+05-26 11:46:01.161 2482 2482 I GeofencerStateMachine: removeGeofences: removeRequest=RemoveGeofencingRequest[REMOVE_ALL packageName=org.mozilla.fennec_aurora]
+05-26 11:46:01.163 1876 1890 E system_server: No package ID 7f found for ID 0x7f08019f.
+05-26 11:46:01.163 1876 1890 E system_server: No package ID 7f found for ID 0x7f130122.
+05-26 11:46:01.163 1876 1890 E system_server: No package ID 7f found for ID 0x7f130122.
+05-26 11:46:01.163 1876 1890 E system_server: No package ID 7f found for ID 0x7f08019d.
+05-26 11:46:01.166 2131 2131 D CarrierSvcBindHelper: No carrier app for: 0
+05-26 11:46:01.166 1876 1890 E system_server: No package ID 7f found for ID 0x7f130121.
+05-26 11:46:01.167 1876 1890 E system_server: No package ID 7f found for ID 0x7f130121.
+05-26 11:46:01.225 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.231 1876 1876 I GnssLocationProvider: WakeLock acquired by sendMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@85f09b6)
+05-26 11:46:01.232 1560 1573 D vold : Remounting 10092 as mode read
+05-26 11:46:01.247 2534 2038 W LocationOracle: No location history returned by ContextManager
+05-26 11:46:01.248 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.248 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@85f09b6)
+05-26 11:46:01.261 1876 1876 V SettingsProvider: Notifying for 0: content://settings/global/debug_app
+05-26 11:46:01.264 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.267 7086 2682 I LocationSettingsChecker: Removing dialog suppression flag for package org.mozilla.fennec_aurora
+05-26 11:46:01.277 1876 1890 E memtrack: Couldn't load memtrack module
+05-26 11:46:01.277 1876 1890 W android.os.Debug: failed to get memory consumption info: -1
+05-26 11:46:01.278 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.291 2012 2265 I chatty : uid=10024(com.android.systemui) RenderThread identical 1 line
+05-26 11:46:01.308 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.320 7086 11609 I Icing : doRemovePackageData org.mozilla.fennec_aurora
+05-26 11:46:01.325 1560 1573 D vold : Remounting 10092 as mode write
+05-26 11:46:01.326 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.328 1876 1876 I GnssLocationProvider: WakeLock acquired by sendMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@37bd5af)
+05-26 11:46:01.341 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(SET_REQUEST, 0, com.android.server.location.GnssLocationProvider$GpsRequest@37bd5af)
+05-26 11:46:01.341 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.377 2012 2265 I chatty : uid=10024(com.android.systemui) RenderThread identical 2 lines
+05-26 11:46:01.399 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.413 2482 6321 W ctxmgr : [AclManager]No 3 for (accnt=account#-517948760#, com.google.android.gms(10008):UserVelocityProducer, vrsn=13280022, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 1, account#-517948760#
+05-26 11:46:01.418 2534 2534 I MicroDetectionWorker: #startMicroDetector [speakerMode: 0]
+05-26 11:46:01.419 2534 2534 I AudioController: Using mInputStreamFactoryBuilder
+05-26 11:46:01.420 2534 2534 I AudioController: Created new AudioSource
+05-26 11:46:01.421 2534 2534 I MicroDetectionWorker: onReady
+05-26 11:46:01.425 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.489 2534 2034 I MicroRecognitionRunner: Starting detection.
+05-26 11:46:01.490 2116 3100 I ProvidersCache: Provider returned no roots. Possibly naughty: com.google.android.apps.docs.storage
+05-26 11:46:01.501 1876 8003 I ActivityManager: Force stopping org.mozilla.fennec_aurora appid=10092 user=-1: set debug app
+05-26 11:46:01.502 1876 1876 V SettingsProvider: Notifying for 0: content://settings/global/debug_app
+05-26 11:46:01.506 2534 2004 I MicrophoneInputStream: mic_starting SR : 16000 CC : 16 SO : 6
+05-26 11:46:01.509 1631 1682 E : Request requires android.permission.RECORD_AUDIO
+05-26 11:46:01.509 1631 1682 E AudioPolicyIntefaceImpl: getInputForAttr permission denied: recording not allowed for uid 10039 pid 2534
+05-26 11:46:01.510 1631 1682 E AudioFlinger: createRecord() checkRecordThread_l failed
+05-26 11:46:01.510 2534 2004 E IAudioFlinger: createRecord returned error -22
+05-26 11:46:01.510 2534 2004 E AudioRecord: AudioFlinger could not create record track, status: -22
+05-26 11:46:01.510 2534 2004 E AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -22.
+05-26 11:46:01.512 2534 2004 E android.media.AudioRecord: Error code -20 when initializing native AudioRecord object.
+05-26 11:46:01.512 2534 2004 I MicrophoneInputStream: mic_started SR : 16000 CC : 16 SO : 6
+05-26 11:46:01.512 2534 2004 E ActivityThread: Failed to find provider info for com.google.android.apps.gsa.testing.ui.audio.recorded
+05-26 11:46:01.514 2534 2534 I MicroDetectionWorker: onReady
+05-26 11:46:01.516 2534 2004 I MicrophoneInputStream: mic_close SR : 16000 CC : 16 SO : 6
+05-26 11:46:01.517 2534 2034 I MicroRecognitionRunner: Detection finished
+05-26 11:46:01.517 2534 2034 W ErrorReporter: reportError [type: 211, code: 524300]: Error reading from input stream
+05-26 11:46:01.520 2534 2954 I MicroRecognitionRunner: Stopping hotword detection.
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: onFatalError, processing error from engine(4)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: com.google.android.apps.gsa.shared.speech.b.g: Error reading from input stream
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.staticplugins.microdetection.d.k.a(SourceFile:91)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.staticplugins.microdetection.d.l.run(Unknown Source:14)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at com.google.android.libraries.gsa.runner.a.a.b(SourceFile:32)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at com.google.android.libraries.gsa.runner.a.c.call(Unknown Source:4)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.g.run(Unknown Source:4)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at java.lang.Thread.run(Thread.java:764)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.shared.util.concurrent.b.i.run(SourceFile:6)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: Caused by: com.google.android.apps.gsa.shared.exception.GsaIOException: Error code: 393238 | Buffer overflow, no available space.
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.Tee.j(SourceFile:103)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.au.read(SourceFile:2)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at java.io.InputStream.read(InputStream.java:101)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.ao.run(SourceFile:17)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at com.google.android.apps.gsa.speech.audio.an.run(SourceFile:2)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+05-26 11:46:01.527 2534 2034 W ErrorProcessor: ... 10 more
+05-26 11:46:01.527 2534 2034 I AudioController: internalShutdown
+05-26 11:46:01.528 2534 2534 I MicroDetector: Keeping mic open: false
+05-26 11:46:01.528 2534 2534 I MicroDetectionWorker: #onError(false)
+05-26 11:46:01.528 2534 2038 I DeviceStateChecker: DeviceStateChecker cancelled
+05-26 11:46:01.539 1876 3809 I ActivityManager: START u0 {flg=0x10000000 cmp=org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity (has extras)} from uid 0
+05-26 11:46:01.548 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@89b4c66)
+05-26 11:46:01.572 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@89b4c66)
+05-26 11:46:01.580 3143 3143 W a.fennec_auror: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:46:01.586 1876 1893 I ActivityManager: Start proc 3143:org.mozilla.fennec_aurora/u0a92 for activity org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity
+05-26 11:46:01.599 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:46:01.607 1876 1940 D : HostConnection::get() New Host Connection established 0xc8655580, tid 1940
+05-26 11:46:01.617 2482 3056 I Places : ?: PlacesBleScanner start() with priority 2
+05-26 11:46:01.631 3143 3143 W ActivityThread: Application org.mozilla.fennec_aurora can be debugged on port 8100...
+05-26 11:46:01.633 3143 3143 I a.fennec_auror: The ClassLoaderContext is a special shared library.
+05-26 11:46:01.634 2482 3056 I Places : ?: PlacesBleScanner start() with priority 2
+05-26 11:46:01.635 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:46:01.637 2482 3056 I PlaceInferenceEngine: [anon] Changed inference mode: 1
+05-26 11:46:01.671 2499 2681 D EGL_emulation: eglMakeCurrent: 0xd35359e0: ver 3 0 (tinfo 0xd353b4f0)
+05-26 11:46:01.674 1733 1967 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.675 1733 1967 D : HostConnection::get() New Host Connection established 0xed960bc0, tid 1967
+05-26 11:46:01.675 1733 1967 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.676 1733 1967 D : HostConnection::get() New Host Connection established 0xed960bc0, tid 1967
+05-26 11:46:01.676 1733 1967 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.679 1733 1967 D : HostConnection::get() New Host Connection established 0xed960bc0, tid 1967
+05-26 11:46:01.679 1733 1967 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.687 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.688 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:46:01.688 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.689 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:46:01.690 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.690 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:46:01.690 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.692 2534 2825 D EGL_emulation: eglMakeCurrent: 0xe8b06aa0: ver 3 0 (tinfo 0xe8b03b50)
+05-26 11:46:01.694 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.696 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:46:01.696 1733 2205 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.697 1733 2205 D : HostConnection::get() New Host Connection established 0xed960980, tid 2205
+05-26 11:46:01.697 1733 2205 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.697 1733 2205 D : HostConnection::get() New Host Connection established 0xed960980, tid 2205
+05-26 11:46:01.697 1733 2205 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.698 1733 2205 D : HostConnection::get() New Host Connection established 0xed960980, tid 2205
+05-26 11:46:01.698 1733 2205 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:01.707 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.714 2012 2265 I chatty : uid=10024(com.android.systemui) RenderThread identical 1 line
+05-26 11:46:01.726 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.731 2482 3056 I Places : ?: PlacesBleScanner start() with priority 2
+05-26 11:46:01.734 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.742 2012 2265 I chatty : uid=10024(com.android.systemui) RenderThread identical 1 line
+05-26 11:46:01.748 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.751 2482 3056 I Places : ?: PlacesBleScanner start() with priority 2
+05-26 11:46:01.753 2534 2034 I EventLogSendingHelper: Sending log events.
+05-26 11:46:01.755 2482 3056 I PlaceInferenceEngine: [anon] Changed inference mode: 1
+05-26 11:46:01.763 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.796 2012 2265 I chatty : uid=10024(com.android.systemui) RenderThread identical 4 lines
+05-26 11:46:01.804 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.805 3143 3163 W a.fennec_auror: Accessing hidden method Landroid/content/res/Resources$Theme;->rebase()V (dark greylist, linking)
+05-26 11:46:01.807 2482 3056 I Places : Converted 0 out of 1 WiFi scans
+05-26 11:46:01.809 3143 3143 D FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization.
+05-26 11:46:01.810 3143 3143 D FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
+05-26 11:46:01.810 3143 3143 I FirebaseInitProvider: FirebaseApp initialization successful
+05-26 11:46:01.816 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.825 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:01.834 2482 11975 I PlaceInferenceEngine: No beacon scan available - ignoring candidates.
+05-26 11:46:01.868 3143 3143 D FennecProfile: profiles.ini: false
+05-26 11:46:01.871 3143 3143 D FennecProfile: No profiles found
+05-26 11:46:01.877 3143 3143 D FennecMigrator: No migrations to run. Fennec install - false.
+05-26 11:46:01.888 3143 3143 D FenixApplication: Initializing Glean (uploadEnabled=true, isFennec=true)
+05-26 11:46:01.901 2482 6321 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):PlacesProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 18, account#-517948760#
+05-26 11:46:01.916 3143 3175 D RustNativeSupport: findMegazordLibraryName(viaduct, 0.58.1
+05-26 11:46:01.916 3143 3175 D RustNativeSupport: lib in use: none
+05-26 11:46:01.916 3143 3175 D RustNativeSupport: lib configured: megazord
+05-26 11:46:01.916 3143 3175 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:46:01.916 3143 3175 D RustNativeSupport: settled on megazord
+05-26 11:46:01.967 3143 3163 I FA : Collection disabled with firebase_analytics_collection_enabled=0
+05-26 11:46:01.969 3143 3163 I FA : App measurement is starting up, version: 12780
+05-26 11:46:01.970 3143 3163 I FA : To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
+05-26 11:46:01.973 3143 3163 I FA : To enable faster debug mode event logging run:
+05-26 11:46:01.973 3143 3163 I FA : adb shell setprop debug.firebase.analytics.app org.mozilla.fennec_aurora
+05-26 11:46:02.036 3143 3173 D libglean_ffi: glean_ffi: Android logging should be hooked up!
+05-26 11:46:02.037 3143 3173 I glean/Glean: Registering pings for mozilla.telemetry.glean.GleanMetrics.Pings
+05-26 11:46:02.038 3143 3173 I libglean_ffi: glean_core: Creating new Glean
+05-26 11:46:02.038 3143 3173 D libglean_ffi: glean_core::database: Database path: "/data/user/0/org.mozilla.fennec_aurora/glean_data/db"
+05-26 11:46:02.042 3143 3143 W ActivityThread: ClassLoader.loadClass: The class loader returned by Thread.getContextClassLoader() may fail for processes that host multiple applications. You should explicitly specify a context class loader. For example: Thread.setContextClassLoader(getClass().getClassLoader());
+05-26 11:46:02.043 3143 3143 I GeckoRuntime: Adding debug configuration from: /data/local/tmp/org.mozilla.fennec_aurora-geckoview-config.yaml
+05-26 11:46:02.043 3143 3143 D GeckoDebugConfig: Adding environment variables from debug config: {MOZ_CRASHREPORTER=1, MOZ_CRASHREPORTER_NO_REPORT=1, MOZ_CRASHREPORTER_SHUTDOWN=1}
+05-26 11:46:02.043 3143 3143 D GeckoDebugConfig: Adding arguments from debug config: [-marionette, -profile, /mnt/sdcard/org.mozilla.fennec_aurora-geckodriver-profile]
+05-26 11:46:02.043 3143 3143 D GeckoThread: State changed to LAUNCHED
+05-26 11:46:02.044 3143 3175 D RustNativeSupport: findMegazordLibraryName(rustlog, 0.58.1
+05-26 11:46:02.045 3143 3175 D RustNativeSupport: lib in use: none
+05-26 11:46:02.045 3143 3175 D RustNativeSupport: lib configured: megazord
+05-26 11:46:02.045 3143 3175 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:46:02.045 3143 3175 D RustNativeSupport: settled on megazord
+05-26 11:46:02.048 3143 3175 I rc_log_ffi::ios: rc_log adapter initialized!
+05-26 11:46:02.049 3143 3179 I GeckoThread: preparing to run Gecko
+05-26 11:46:02.050 3143 3173 I libglean_ffi: glean_core::database: Database initialized
+05-26 11:46:02.051 3143 3179 D GeckoThread: env var: MOZ_CRASHREPORTER=1
+05-26 11:46:02.051 3143 3179 D GeckoThread: env var: MOZ_CRASHREPORTER_NO_REPORT=1
+05-26 11:46:02.051 3143 3179 D GeckoThread: env var: MOZ_CRASHREPORTER_SHUTDOWN=1
+05-26 11:46:02.054 3143 3143 D GeckoRuntime: Lifecycle: onCreate
+05-26 11:46:02.090 3143 3173 I libglean_ffi: glean_ffi: Glean initialized
+05-26 11:46:02.129 3143 3179 D GeckoThread: State changed to MOZGLUE_READY
+05-26 11:46:02.132 3143 3143 D GleanMetricsService: Enabling Glean.
+05-26 11:46:02.138 3143 3143 I glean/Dispatchers: Task queued for execution and delayed until flushed
+05-26 11:46:02.140 3143 3143 I AdjustMetricsService: No adjust token defined
+05-26 11:46:02.141 3143 3143 D PushConfig: Creating push configuration for autopush.
+05-26 11:46:02.141 3143 3179 W Settings: Setting animator_duration_scale has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only global URI.
+05-26 11:46:02.147 3143 3179 E GeckoLibLoad: Load sqlite start
+05-26 11:46:02.158 3143 3143 I App : AutoPushFeature is configured, initializing it...
+05-26 11:46:02.160 3143 3143 I AutoPushFeature: Checking validity of push subscriptions.
+05-26 11:46:02.169 3143 3155 I a.fennec_auror: Background concurrent copying GC freed 14684(2MB) AllocSpace objects, 4(208KB) LOS objects, 50% free, 2047KB/3MB, paused 4.855ms total 125.455ms
+05-26 11:46:02.170 3143 3143 D FennecProfile: profiles.ini: false
+05-26 11:46:02.170 3143 3143 D FennecProfile: No profiles found
+05-26 11:46:02.182 3143 3175 W [WARNING][Leanplum]: [com.leanplum.internal.ActionManager::getLocationManager::8]: Geofencing support requires leanplum-location module and Google Play Services v8.1 and higher.
+05-26 11:46:02.182 3143 3175 W [WARNING][Leanplum]: Add this to your build.gradle file:
+05-26 11:46:02.182 3143 3175 W [WARNING][Leanplum]: implementation 'com.google.android.gms:play-services-location:8.3.0+'
+05-26 11:46:02.182 3143 3175 W [WARNING][Leanplum]: implementation 'com.leanplum:leanplum-location:+'
+05-26 11:46:02.192 3143 3175 I [INFO][Leanplum]: [com.leanplum.monitoring.ExceptionHandler::setContext::6]: LeanplumExceptionHandler could not initialize Exception Reporting.This is expected if you have not included the leanplum-monitoring module
+05-26 11:46:02.205 3143 3179 E GeckoLibLoad: Load sqlite done
+05-26 11:46:02.205 3143 3179 E GeckoLibLoad: Load nss start
+05-26 11:46:02.205 3143 3179 E GeckoLibLoad: Load nss done
+05-26 11:46:02.227 3143 3143 D FennecMigrator: This is not a Fennec installation. No migration needed.
+05-26 11:46:02.247 3143 3185 I [INFO][Leanplum]: [com.leanplum.LeanplumFcmProvider::isManifestSetup::11]: Firebase Messaging is setup correctly.
+05-26 11:46:02.250 3143 3143 W a.fennec_auror: Accessing hidden method Landroid/content/res/Resources$Theme;->rebase()V (dark greylist, reflection)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: Failed to retrieve rebase() method
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: java.lang.NoSuchMethodException: rebase []
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at java.lang.Class.getMethod(Class.java:2068)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at java.lang.Class.getDeclaredMethod(Class.java:2047)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at androidx.core.content.res.ResourcesCompat$ThemeCompat$ImplApi23.rebase(ResourcesCompat.java:3)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:80)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:2)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at android.app.Activity.attach(Activity.java:7051)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at android.os.Handler.dispatchMessage(Handler.java:106)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at android.os.Looper.loop(Looper.java:193)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at android.app.ActivityThread.main(ActivityThread.java:6669)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at java.lang.reflect.Method.invoke(Native Method)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+05-26 11:46:02.251 3143 3143 I ResourcesCompat: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+05-26 11:46:02.427 3143 3179 E GeckoLibLoad: Loaded libs in 222.502000ms total, 0ms(340ms) user, 140ms(250ms) system, 9(18) faults
+05-26 11:46:02.429 3143 3179 D GeckoThread: State changed to LIBS_READY
+05-26 11:46:02.431 3143 3179 W GeckoThread: zerdatime 190882628 - runGecko
+05-26 11:46:02.432 3143 3179 D GeckoProfile: Loading profile at: null name: default
+05-26 11:46:02.432 3143 3179 D GeckoProfile: Created new profile dir.
+05-26 11:46:02.433 3143 3179 I GeckoProfile: Enqueuing profile init.
+05-26 11:46:02.434 3143 3179 D GeckoProfile: Found profile dir: /data/user/0/org.mozilla.fennec_aurora/files/mozilla/rvksmdxh.default
+05-26 11:46:02.434 3143 3179 D GeckoProfile: Attempting to write new client ID properties
+05-26 11:46:02.435 3143 3179 D GeckoProfile: Creating profile dir: /data/user/0/org.mozilla.fennec_aurora/files/mozilla/rvksmdxh.default
+05-26 11:46:02.454 3143 3173 I glean/MetricsPingSched: The application just updated. Send metrics ping now.
+05-26 11:46:02.477 3143 3173 I glean/MetricsPingSched: Collecting the 'metrics' ping, now = Tue May 26 11:46:02 EDT 2020, startup = true, reason = upgrade
+05-26 11:46:02.477 3143 3173 I libglean_ffi: glean_core::ping: Collecting metrics
+05-26 11:46:02.477 3143 3173 I libglean_ffi: glean_core::ping: Storage for metrics empty. Bailing out.
+05-26 11:46:02.477 3143 3173 I libglean_ffi: glean_core: No content for ping 'metrics', therefore no ping queued.
+05-26 11:46:02.480 3143 3173 D glean/MetricsPingSched: Scheduling the 'metrics' ping in 58437572ms
+05-26 11:46:02.485 3143 3173 I libglean_ffi: glean_core: Upload enabled: true
+05-26 11:46:02.501 3143 3179 I Gecko:DumpUtils: Fifo watcher disabled via pref.
+05-26 11:46:02.551 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1b47420)
+05-26 11:46:02.552 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@1b47420)
+05-26 11:46:02.571 3143 3143 I FirefoxAccountStateMachine: Enabling/updating sync with a new SyncConfig: SyncConfig(supportedEngines=[mozilla.components.service.fxa.SyncEngine$History@83c4938, mozilla.components.service.fxa.SyncEngine$Bookmarks@94a6d11, mozilla.components.service.fxa.SyncEngine$Passwords@e11ce76], syncPeriodInMinutes=240)
+05-26 11:46:02.579 3143 3143 I BgSyncManager: Periodic syncing enabled at a 240 interval
+05-26 11:46:02.579 3143 3143 I FirefoxAccountStateMachine: Sync is enabled
+05-26 11:46:02.589 3143 3211 I FirefoxAccountStateMachine: Processing event Event$Init for state Start. Next state is Start
+05-26 11:46:02.594 3143 3179 D GeckoSysInfo: System memory: 1494MB.
+05-26 11:46:02.605 3143 3179 D GeckoThread: State changed to JNI_READY
+05-26 11:46:02.610 3143 3143 E ActivityThread: Failed to find provider info for org.mozilla.fennec_aurora.fxa.auth
+05-26 11:46:02.625 3143 3213 D ServiceAllocator: org.mozilla.gecko.process.GeckoChildProcessServices$tab0 updateBindings: BACKGROUND priority, 0 importance, 2 successful binds, 0 failed binds, 0 successful unbinds, 0 failed unbinds
+05-26 11:46:02.630 3222 3222 W nec_aurora:tab: Unexpected CPU variant for X86 using defaults: x86
+05-26 11:46:02.633 1876 1893 I ActivityManager: Start proc 3222:org.mozilla.fennec_aurora:tab0/u0a92 for service org.mozilla.fennec_aurora/org.mozilla.gecko.process.GeckoChildProcessServices$tab0
+05-26 11:46:02.651 1739 1739 I keystore: del USRPKEY_org.mozilla.fennec_aurora 10092
+05-26 11:46:02.653 1739 1739 I keystore: del USRCERT_org.mozilla.fennec_aurora 10092
+05-26 11:46:02.653 3143 3143 D GeckoRuntime: Lifecycle: onStart
+05-26 11:46:02.655 1739 1739 I keystore: del CACERT_org.mozilla.fennec_aurora 10092
+05-26 11:46:02.657 3143 3143 D GeckoRuntime: Lifecycle: onResume
+05-26 11:46:02.658 3143 3143 D GeckoNetworkManager: Incoming event start for state OffNoListeners -> OnNoListeners
+05-26 11:46:02.660 3143 3143 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:46:02.661 3143 3143 D OpenGLRenderer: Skia GL Pipeline
+05-26 11:46:02.661 3143 3185 D NetworkSecurityConfig: No Network Security Config specified, using platform default
+05-26 11:46:02.666 3222 3222 I nec_aurora:tab: The ClassLoaderContext is a special shared library.
+05-26 11:46:02.675 3143 3211 I FirefoxAccountStateMachine: Ran 'Event$Init' side-effects for state Start, got successive event Event$AccountNotFound
+05-26 11:46:02.675 3143 3211 I FirefoxAccountStateMachine: Processing event Event$AccountNotFound for state Start. Next state is NotAuthenticated
+05-26 11:46:02.676 1733 2119 E SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
+05-26 11:46:02.676 3143 3211 D RustNativeSupport: findMegazordLibraryName(fxaclient, 0.58.1
+05-26 11:46:02.676 3143 3211 D RustNativeSupport: lib in use: none
+05-26 11:46:02.676 3143 3211 D RustNativeSupport: lib configured: megazord
+05-26 11:46:02.676 3143 3211 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:46:02.676 3143 3211 D RustNativeSupport: settled on megazord
+05-26 11:46:02.679 3143 3211 D fxaclient_ffi: fxa_new
+05-26 11:46:02.742 3222 3222 D GeckoThread: State changed to LAUNCHED
+05-26 11:46:02.743 3222 3251 I GeckoThread: preparing to run Gecko
+05-26 11:46:02.755 3143 3173 I libglean_ffi: glean_core::ping: Collecting baseline
+05-26 11:46:02.764 3143 3173 D libglean_ffi: glean_core::ping: Storing ping '8ce65411-ef87-4223-8242-6b48e5d710d4' at '/data/user/0/org.mozilla.fennec_aurora/glean_data/pending_pings/8ce65411-ef87-4223-8242-6b48e5d710d4'
+05-26 11:46:02.765 3143 3173 I libglean_ffi: glean_core: The ping 'baseline' was submitted and will be sent as soon as possible
+05-26 11:46:02.782 3143 3143 D GeckoNetworkManager: Incoming event receivedUpdate for state OnNoListeners -> OnNoListeners
+05-26 11:46:02.785 3143 3143 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:46:02.787 3143 3211 W FirefoxAccountStateMachine: Got invalid event Event$Init for state NotAuthenticated.
+05-26 11:46:02.820 1876 8003 D ConnectivityService: requestNetwork for uid/pid:10092/3143 NetworkRequest [ TRACK_DEFAULT id=238, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ]
+05-26 11:46:02.823 1876 1975 D WIFI : got request NetworkRequest [ TRACK_DEFAULT id=238, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:46:02.823 1876 1975 D WIFI_UT : got request NetworkRequest [ TRACK_DEFAULT id=238, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:46:02.824 2131 2131 D PhoneSwitcherNetworkRequstListener: got request NetworkRequest [ TRACK_DEFAULT id=238, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:46:02.853 3143 3155 I a.fennec_auror: Background concurrent copying GC freed 8545(1150KB) AllocSpace objects, 24(1120KB) LOS objects, 49% free, 3MB/7MB, paused 2.483ms total 123.447ms
+05-26 11:46:02.862 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:46:02.872 1733 1967 D : HostConnection::get() New Host Connection established 0xe9a2f580, tid 1967
+05-26 11:46:02.873 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:46:02.880 1623 5774 D gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 9334784
+05-26 11:46:02.897 3143 3241 D : HostConnection::get() New Host Connection established 0xd1ca43c0, tid 3241
+05-26 11:46:02.911 3143 3241 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
+05-26 11:46:02.911 3143 3241 I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
+05-26 11:46:02.911 3143 3241 I OpenGLRenderer: Initialized EGL, version 1.4
+05-26 11:46:02.911 3143 3241 D OpenGLRenderer: Swap behavior 1
+05-26 11:46:02.911 3143 3241 W OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
+05-26 11:46:02.911 3143 3241 D OpenGLRenderer: Swap behavior 0
+05-26 11:46:02.912 3143 3241 D EGL_emulation: eglCreateContext: 0xd0089240: maj 3 min 0 rcv 3
+05-26 11:46:02.912 3143 3143 D MigrationPushRenewer: Migration state: NONE
+05-26 11:46:02.913 3143 3143 D MigrationTelemetryListener: Migration state: NONE
+05-26 11:46:02.914 3143 3241 D EGL_emulation: eglMakeCurrent: 0xd0089240: ver 3 0 (tinfo 0xd00f6050)
+05-26 11:46:02.919 1733 1967 E SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
+05-26 11:46:02.999 3143 3241 D EGL_emulation: eglMakeCurrent: 0xd0089240: ver 3 0 (tinfo 0xd00f6050)
+05-26 11:46:03.029 3143 3260 D glean/PingUploadWorker: Processing persisted pings at /data/user/0/org.mozilla.fennec_aurora/glean_data/pending_pings
+05-26 11:46:03.030 3143 3260 D glean/PingUploadWorker: Processing ping: 8ce65411-ef87-4223-8242-6b48e5d710d4
+05-26 11:46:03.036 1876 1899 I ActivityManager: Displayed org.mozilla.fennec_aurora/org.mozilla.fenix.HomeActivity: +1s462ms
+05-26 11:46:03.043 2000 2000 I GoogleInputMethod: onFinishInput() : Dummy InputConnection bound
+05-26 11:46:03.045 3143 3260 D glean/ConceptFetchHttpUploader: Submitting ping to: https://incoming.telemetry.mozilla.org/submit/org-mozilla-fennec-aurora/baseline/1/8ce65411-ef87-4223-8242-6b48e5d710d4
+05-26 11:46:03.047 2000 2000 I GoogleInputMethod: onStartInput() : Dummy InputConnection bound
+05-26 11:46:03.051 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:03.052 3143 3143 E ActivityThread: Failed to find provider info for org.mozilla.fennec_aurora.fxa.auth
+05-26 11:46:03.158 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:03.218 1876 1940 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:03.219 1876 1940 D : HostConnection::get() New Host Connection established 0xc8655580, tid 1940
+05-26 11:46:03.219 1876 1940 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:03.220 1733 2205 D : HostConnection::get() New Host Connection established 0xede987c0, tid 2205
+05-26 11:46:03.220 1733 2205 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:03.220 1733 2205 D : HostConnection::get() New Host Connection established 0xede987c0, tid 2205
+05-26 11:46:03.222 1733 2205 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:03.225 1876 1940 D : HostConnection::get() New Host Connection established 0xc8655580, tid 1940
+05-26 11:46:03.225 1876 1940 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:03.226 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:03.227 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:46:03.228 1904 1911 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:03.228 1876 1940 D : HostConnection::get() New Host Connection established 0xc8655580, tid 1940
+05-26 11:46:03.230 1876 1940 D gralloc_ranchu: gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+05-26 11:46:03.236 1904 1911 D : HostConnection::get() New Host Connection established 0xe6d43140, tid 1911
+05-26 11:46:03.262 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:03.372 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:03.387 3143 3143 D GeckoNetworkManager: Incoming event enableNotifications for state OnNoListeners -> OnWithListeners
+05-26 11:46:03.391 3143 3143 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:46:03.392 1876 3809 W ActivityManager: Receiver with filter android.content.IntentFilter@3574dd6 already registered for pid 3143, callerPackage is org.mozilla.fennec_aurora
+05-26 11:46:03.403 3143 3143 D GeckoNetworkManager: Incoming event receivedUpdate for state OnWithListeners -> OnWithListeners
+05-26 11:46:03.414 3143 3143 D GeckoNetworkManager: New network state: UP, WIFI, WIFI
+05-26 11:46:03.489 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:03.502 3143 3143 I [INFO][Leanplum]: [com.leanplum.LeanplumCloudMessagingProvider::onRegistrationIdReceived::3]: Device registered for push notifications with registration token, dYV3t03voH0:APA91bHDV2GKf7W7v6eMdfzj7Yie1YfP1FaV5KX7ltgDKK4ju7E0B8qjmeNhUlTdiSHvgmTQZ18T0vUsERF1cl60KsD32HbsZMWYVKehmKpWFPZiGFd0OUPM47XynN0qn4bnZYyqCS1X
+05-26 11:46:03.551 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@cf252f3)
+05-26 11:46:03.552 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@cf252f3)
+05-26 11:46:03.599 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:03.705 3143 3276 I [INFO][Leanplum]: [com.leanplum.LeanplumCloudMessagingProvider::onRegistrationIdReceived::3]: Device registered for push notifications with registration token, dYV3t03voH0:APA91bHDV2GKf7W7v6eMdfzj7Yie1YfP1FaV5KX7ltgDKK4ju7E0B8qjmeNhUlTdiSHvgmTQZ18T0vUsERF1cl60KsD32HbsZMWYVKehmKpWFPZiGFd0OUPM47XynN0qn4bnZYyqCS1X
+05-26 11:46:03.723 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:03.728 3143 3277 I AutoPushFeature: Received a new registration token from push service.
+05-26 11:46:03.753 1733 1733 W SurfaceFlinger: couldn't log to binary event log: overflow.
+05-26 11:46:03.756 3143 3277 D RustNativeSupport: findMegazordLibraryName(push, 0.58.1
+05-26 11:46:03.756 3143 3277 D RustNativeSupport: lib in use: none
+05-26 11:46:03.757 3143 3277 D RustNativeSupport: lib configured: megazord
+05-26 11:46:03.757 3143 3277 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:46:03.757 3143 3277 D RustNativeSupport: settled on megazord
+05-26 11:46:03.829 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:03.873 2534 2005 I PBSessionCacheImpl: Deleted sessionId[290782986460] from persistence.
+05-26 11:46:03.882 2534 2534 W SearchService: Abort, client detached.
+05-26 11:46:03.905 2534 2034 I WorkController: WorkProxy is not enqueued because WorkController is disposed: WorkProxy{Name=context::j, WorkerId=context, id=bcd7568}
+05-26 11:46:03.905 2534 2034 I WorkController: WorkProxy is not enqueued because WorkController is disposed: WorkProxy{Name=context::m, WorkerId=context, id=6b0dd81}
+05-26 11:46:03.906 2534 2034 I WorkController: WorkProxy is not enqueued because WorkController is disposed: WorkProxy{Name=context::n, WorkerId=context, id=f91ce26}
+05-26 11:46:03.908 2534 2034 I WorkController: WorkProxy is not enqueued because WorkController is disposed: WorkProxy{Name=context::p, WorkerId=context, id=5488a67}
+05-26 11:46:03.908 1832 1832 E netmgr : Failed to open QEMU pipe 'qemud:network': Invalid argument
+05-26 11:46:03.908 1832 1832 E netmgr : WifiForwarder unable to open QEMU pipe: Invalid argument
+05-26 11:46:03.928 2012 2265 D EGL_emulation: eglMakeCurrent: 0xe8b05420: ver 3 0 (tinfo 0xe8b03980)
+05-26 11:46:03.935 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:03.976 3143 3179 D GeckoThread: State changed to PROFILE_READY
+05-26 11:46:04.004 3143 3179 D GeckoThread: State changed to RUNNING
+05-26 11:46:04.010 3143 3179 I Gecko : -*- nsDNSServiceDiscovery.js : nsDNSServiceDiscovery
+05-26 11:46:04.028 3143 3179 I Gecko : 1590507964028 Marionette TRACE Marionette enabled
+05-26 11:46:04.040 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:04.142 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:04.193 3143 3143 I DefaultSupportedAddonsChecker: Register check for new supported add-ons
+05-26 11:46:04.206 3143 3179 I Gecko : 1590507964206 Marionette TRACE Received observer notification marionette-startup-requested
+05-26 11:46:04.207 3143 3179 I Gecko : 1590507964207 Marionette TRACE Waiting until startup recorder finished recording startup scripts...
+05-26 11:46:04.239 3143 3187 I SupportedAddonsWorker: Trying to check for new supported add-ons
+05-26 11:46:04.248 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:04.349 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:04.421 3143 3143 D App : Installed browser-icons extension
+05-26 11:46:04.451 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:04.459 3143 3179 D : HostConnection::get() New Host Connection established 0xd1ca4f80, tid 3179
+05-26 11:46:04.461 3143 3179 E EGL_emulation: tid 3179: eglBindAPI(1259): error 0x300c (EGL_BAD_PARAMETER)
+05-26 11:46:04.463 3143 3179 D EGL_emulation: eglCreateContext: 0xe5e99640: maj 3 min 0 rcv 3
+05-26 11:46:04.465 3143 3179 D EGL_emulation: eglMakeCurrent: 0xe5e99640: ver 3 0 (tinfo 0xe71136e0)
+05-26 11:46:04.552 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@2bcd886)
+05-26 11:46:04.554 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@2bcd886)
+05-26 11:46:04.557 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:04.662 3143 3260 D glean/ConceptFetchHttpUploader: Ping successfully sent (200)
+05-26 11:46:04.662 3143 3260 D glean/PingUploadWorker: 8ce65411-ef87-4223-8242-6b48e5d710d4 was deleted: true
+05-26 11:46:04.662 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:04.663 3143 3177 I WM-WorkerWrapper: Worker result SUCCESS for Work [ id=30b8d5b3-35f6-406c-87ae-45da79372bef, tags={ mozilla.telemetry.glean.scheduler.PingUploadWorker, mozac_service_glean_ping_upload_worker } ]
+05-26 11:46:04.669 1876 1978 D ConnectivityService: releasing NetworkRequest [ TRACK_DEFAULT id=238, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] (release request)
+05-26 11:46:04.712 1876 1884 I system_server: Background concurrent copying GC freed 70960(3MB) AllocSpace objects, 55(2MB) LOS objects, 19% free, 25MB/31MB, paused 2.462ms total 125.489ms
+05-26 11:46:04.768 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:04.819 3143 3143 D mozac-webcompat: Installed WebCompat webextension: webcompat@mozilla.com
+05-26 11:46:04.865 3143 3179 I Gecko : 1590507964865 Marionette TRACE All scripts recorded.
+05-26 11:46:04.865 3143 3179 I Gecko : 1590507964865 Marionette DEBUG Setting recommended pref apz.content_response_timeout to 60000
+05-26 11:46:04.866 3143 3179 I Gecko : 1590507964866 Marionette DEBUG Setting recommended pref browser.contentblocking.introCount to 99
+05-26 11:46:04.866 3143 3179 I Gecko : 1590507964866 Marionette DEBUG Setting recommended pref browser.download.panel.shown to true
+05-26 11:46:04.866 3143 3179 I Gecko : 1590507964866 Marionette DEBUG Setting recommended pref browser.newtabpage.enabled to false
+05-26 11:46:04.866 3143 3179 I Gecko : 1590507964866 Marionette DEBUG Setting recommended pref browser.safebrowsing.malware.enabled to false
+05-26 11:46:04.870 3143 3179 I Gecko : 1590507964870 Marionette DEBUG Setting recommended pref browser.safebrowsing.phishing.enabled to false
+05-26 11:46:04.872 3143 3179 I Gecko : 1590507964872 Marionette DEBUG Setting recommended pref browser.search.update to false
+05-26 11:46:04.872 3143 3179 I Gecko : 1590507964872 Marionette DEBUG Setting recommended pref browser.tabs.disableBackgroundZombification to false
+05-26 11:46:04.872 3143 3179 I Gecko : 1590507964872 Marionette DEBUG Setting recommended pref browser.tabs.remote.separatePrivilegedContentProcess to false
+05-26 11:46:04.873 3143 3179 I Gecko : 1590507964873 Marionette DEBUG Setting recommended pref browser.tabs.unloadOnLowMemory to false
+05-26 11:46:04.873 3143 3179 I Gecko : 1590507964873 Marionette DEBUG Setting recommended pref browser.tabs.warnOnCloseOtherTabs to false
+05-26 11:46:04.873 3143 3179 I Gecko : 1590507964873 Marionette DEBUG Setting recommended pref browser.tabs.warnOnOpen to false
+05-26 11:46:04.873 3143 3179 I Gecko : 1590507964873 Marionette DEBUG Setting recommended pref browser.usedOnWindows10.introURL to
+05-26 11:46:04.874 3143 3179 I Gecko : 1590507964873 Marionette DEBUG Setting recommended pref browser.urlbar.suggest.searches to false
+05-26 11:46:04.874 3143 3179 I Gecko : 1590507964874 Marionette DEBUG Setting recommended pref dom.disable_beforeunload to true
+05-26 11:46:04.874 3143 3179 I Gecko : 1590507964874 Marionette DEBUG Setting recommended pref dom.file.createInChild to true
+05-26 11:46:04.874 3143 3179 I Gecko : 1590507964874 Marionette DEBUG Setting recommended pref extensions.getAddons.cache.enabled to false
+05-26 11:46:04.874 4313 4313 E adbd : failed to connect to socket 'tcp:2829': Connection refused
+05-26 11:46:04.875 3143 3179 I Gecko : 1590507964875 Marionette DEBUG Setting recommended pref network.http.prompt-temp-redirect to false
+05-26 11:46:04.875 3143 3179 I Gecko : 1590507964875 Marionette DEBUG Setting recommended pref security.notification_enable_delay to 0
+05-26 11:46:04.875 3143 3179 I Gecko : 1590507964875 Marionette DEBUG Setting recommended pref signon.autofillForms to false
+05-26 11:46:04.876 3143 3179 I Gecko : 1590507964876 Marionette DEBUG Setting recommended pref signon.rememberSignons to false
+05-26 11:46:04.876 3143 3179 I Gecko : 1590507964876 Marionette DEBUG Setting recommended pref toolkit.cosmeticAnimations.enabled to false
+05-26 11:46:04.943 3143 3179 I Gecko : 1590507964943 Marionette INFO Listening on port 2829
+05-26 11:46:04.944 3143 3179 I Gecko : 1590507964944 Marionette DEBUG Marionette is listening
+05-26 11:46:04.988 3143 3179 I Gecko : 1590507964988 Marionette DEBUG Accepted connection 0 from 127.0.0.1:44851
+05-26 11:46:05.011 3143 3179 I Gecko : 1590507965011 Marionette DEBUG 0 -> [0,1,"WebDriver:NewSession",{"browserName":"firefox","pageLoadStrategy":"none"}]
+05-26 11:46:05.558 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@2053547)
+05-26 11:46:05.558 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@2053547)
+05-26 11:46:05.562 2482 11975 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 57, account#-517948760#
+05-26 11:46:05.659 3143 3177 I WM-WorkerWrapper: Worker result SUCCESS for Work [ id=7de11057-1656-49b2-aec1-1df4fd79ebc2, tags={ mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker.periodicWork, mozilla.components.feature.addons.migration.SupportedAddonsWorker } ]
+05-26 11:46:06.561 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@ef9a69d)
+05-26 11:46:06.563 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@ef9a69d)
+05-26 11:46:07.562 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@b7df712)
+05-26 11:46:07.565 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@b7df712)
+05-26 11:46:07.793 1876 1890 E memtrack: Couldn't load memtrack module
+05-26 11:46:07.793 1876 1890 W android.os.Debug: failed to get memory consumption info: -1
+05-26 11:46:07.900 3143 3143 I glean/Glean: Registering pings for org.mozilla.fenix.GleanMetrics.Pings
+05-26 11:46:07.928 3143 3188 I FenixApplication: Running post-visual completeness tasks...
+05-26 11:46:07.928 3143 3188 I FenixApplication: Storage initialization...
+05-26 11:46:07.928 3143 3143 I FenixApplication: Kicking-off account manager...
+05-26 11:46:07.929 3143 3143 I FenixApplication: 'Kicking-off account manager' took 0 ms
+05-26 11:46:07.930 3143 3188 I PlacesHistoryStorage: Warming up places storage...
+05-26 11:46:07.931 3143 3188 D RustNativeSupport: findMegazordLibraryName(places, 0.58.1
+05-26 11:46:07.931 3143 3188 D RustNativeSupport: lib in use: none
+05-26 11:46:07.931 3143 3188 D RustNativeSupport: lib configured: megazord
+05-26 11:46:07.931 3143 3188 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:46:07.931 3143 3188 D RustNativeSupport: settled on megazord
+05-26 11:46:07.932 3143 3188 D places_ffi: places_api_new
+05-26 11:46:07.955 3143 3188 D places::db::schema: Creating schema
+05-26 11:46:07.967 3143 3187 I App : ActivationPing - generating ping with the hashed id
+05-26 11:46:07.971 3143 3187 I App : ActivationPing - generating ping (has `identifier`: true)
+05-26 11:46:07.983 3143 3188 D sql_support::conn_ext: Transaction commited after 27.736ms
+05-26 11:46:07.983 3143 3188 D places_ffi: places_connection_new
+05-26 11:46:07.986 3143 3188 D places_ffi: places_connection_new
+05-26 11:46:07.987 3143 3188 I PlacesHistoryStorage: 'Warming up places storage' took 57 ms
+05-26 11:46:07.987 3143 3188 I PlacesBookmarksStorage: Warming up places storage...
+05-26 11:46:07.988 3143 3188 D places_ffi: places_connection_new
+05-26 11:46:07.988 3143 3173 I libglean_ffi: glean_core::ping: Collecting activation
+05-26 11:46:07.989 3143 3188 I PlacesBookmarksStorage: 'Warming up places storage' took 1 ms
+05-26 11:46:08.003 3143 3173 D libglean_ffi: glean_core::ping: Storing ping 'dbb2e9d4-aeca-440b-be38-c6d3f7a29037' at '/data/user/0/org.mozilla.fennec_aurora/glean_data/pending_pings/dbb2e9d4-aeca-440b-be38-c6d3f7a29037'
+05-26 11:46:08.003 3143 3173 I libglean_ffi: glean_core: The ping 'activation' was submitted and will be sent as soon as possible
+05-26 11:46:08.003 1739 1739 I keystore: 1 0
+05-26 11:46:08.011 3143 3188 I SyncableLoginsStorage: Warming up storage...
+05-26 11:46:08.015 3143 3188 D RustNativeSupport: findMegazordLibraryName(logins, 0.58.1
+05-26 11:46:08.015 3143 3188 D RustNativeSupport: lib in use: none
+05-26 11:46:08.015 3143 3188 D RustNativeSupport: lib configured: megazord
+05-26 11:46:08.015 3143 3188 D RustNativeSupport: lib version configured: 0.58.1
+05-26 11:46:08.015 3143 3188 D RustNativeSupport: settled on megazord
+05-26 11:46:08.016 3143 3188 D logins_ffi: sync15_passwords_state_new
+05-26 11:46:08.027 3143 3188 D logins::schema: Creating schema
+05-26 11:46:08.028 1876 2445 D ConnectivityService: requestNetwork for uid/pid:10092/3143 NetworkRequest [ TRACK_DEFAULT id=239, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ]
+05-26 11:46:08.028 1876 1975 D WIFI : got request NetworkRequest [ TRACK_DEFAULT id=239, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:46:08.029 1876 1975 D WIFI_UT : got request NetworkRequest [ TRACK_DEFAULT id=239, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:46:08.029 2131 2131 D PhoneSwitcherNetworkRequstListener: got request NetworkRequest [ TRACK_DEFAULT id=239, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] with score 60
+05-26 11:46:08.041 3143 3325 D glean/PingUploadWorker: Processing persisted pings at /data/user/0/org.mozilla.fennec_aurora/glean_data/pending_pings
+05-26 11:46:08.042 3143 3325 D glean/PingUploadWorker: Processing ping: dbb2e9d4-aeca-440b-be38-c6d3f7a29037
+05-26 11:46:08.044 3143 3325 D glean/ConceptFetchHttpUploader: Submitting ping to: https://incoming.telemetry.mozilla.org/submit/org-mozilla-fennec-aurora/activation/1/dbb2e9d4-aeca-440b-be38-c6d3f7a29037
+05-26 11:46:08.133 3143 3188 I SyncableLoginsStorage: 'Warming up storage' took 121 ms
+05-26 11:46:08.133 3143 3188 I FenixApplication: 'Storage initialization' took 205 ms
+05-26 11:46:08.567 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@6d5b4c5)
+05-26 11:46:08.569 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@6d5b4c5)
+05-26 11:46:08.589 3143 3325 D glean/ConceptFetchHttpUploader: Ping successfully sent (200)
+05-26 11:46:08.589 3143 3325 D glean/PingUploadWorker: dbb2e9d4-aeca-440b-be38-c6d3f7a29037 was deleted: true
+05-26 11:46:08.592 3143 3207 I WM-WorkerWrapper: Worker result SUCCESS for Work [ id=6620b187-5b00-46cd-a050-e01293de4e5f, tags={ mozilla.telemetry.glean.scheduler.PingUploadWorker, mozac_service_glean_ping_upload_worker } ]
+05-26 11:46:08.595 1876 1978 D ConnectivityService: releasing NetworkRequest [ TRACK_DEFAULT id=239, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10092] ] (release request)
+05-26 11:46:09.571 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@b702e1a)
+05-26 11:46:09.573 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@b702e1a)
+05-26 11:46:10.574 1876 2204 I GnssLocationProvider: WakeLock acquired by sendMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@eebbd4b)
+05-26 11:46:10.576 1876 1890 I GnssLocationProvider: WakeLock released by handleMessage(REPORT_SV_STATUS, 0, com.android.server.location.GnssLocationProvider$SvStatusInfo@eebbd4b)
+05-26 11:46:10.581 2482 11975 W ctxmgr : [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2482). Was: 3 for 57, account#-517948760#
+05-26 11:46:10.877 3143 3179 I Gecko : 1590507970877 Marionette DEBUG Closed connection 0
diff --git a/python/mozperftest/mozperftest/tests/data/hook.py b/python/mozperftest/mozperftest/tests/data/hook.py
new file mode 100644
index 0000000000..a49406e150
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/hook.py
@@ -0,0 +1,7 @@
+def doit(env):
+ return "OK"
+
+
+def on_exception(env, layer, exc):
+ # swallow the error and abort the run
+ return False
diff --git a/python/mozperftest/mozperftest/tests/data/hook_raises.py b/python/mozperftest/mozperftest/tests/data/hook_raises.py
new file mode 100644
index 0000000000..aaba445e81
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/hook_raises.py
@@ -0,0 +1,3 @@
+def on_exception(env, layer, exc):
+ # re-raise
+ raise exc
diff --git a/python/mozperftest/mozperftest/tests/data/hook_resume.py b/python/mozperftest/mozperftest/tests/data/hook_resume.py
new file mode 100644
index 0000000000..5460b2e770
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/hook_resume.py
@@ -0,0 +1,3 @@
+def on_exception(env, layer, exc):
+ # swallow the error and resume
+ return True
diff --git a/python/mozperftest/mozperftest/tests/data/hooks_iteration.py b/python/mozperftest/mozperftest/tests/data/hooks_iteration.py
new file mode 100644
index 0000000000..f7a30ad817
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/hooks_iteration.py
@@ -0,0 +1,2 @@
+def before_iterations(kwargs):
+ kwargs["test_iterations"] = 5
diff --git a/python/mozperftest/mozperftest/tests/data/hooks_state.py b/python/mozperftest/mozperftest/tests/data/hooks_state.py
new file mode 100644
index 0000000000..4847e3b650
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/hooks_state.py
@@ -0,0 +1,11 @@
+_GLOBAL = False
+
+
+def before_iterations(kw):
+ global _GLOBAL
+ _GLOBAL = True
+
+
+def before_runs(env, **kw):
+ if not _GLOBAL:
+ raise Exception("oops")
diff --git a/python/mozperftest/mozperftest/tests/data/logcat b/python/mozperftest/mozperftest/tests/data/logcat
new file mode 100644
index 0000000000..a7a5a0d56f
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/logcat
@@ -0,0 +1,5511 @@
+--------- beginning of main
+06-02 16:37:53.390 E/memtrack( 1869): Couldn't load memtrack module
+06-02 16:37:53.390 W/android.os.Debug( 1869): failed to get memory consumption info: -1
+06-02 16:37:54.156 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
+06-02 16:37:54.725 I/log ( 8804): logcat cleared
+06-02 16:37:59.165 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
+06-02 16:38:00.114 W/system_server( 1869): Long monitor contention with owner PackageInstaller (1929) at boolean com.android.server.pm.PackageInstallerSession$3.handleMessage(android.os.Message)(PackageInstallerSession.java:292) waiters=0 in android.content.pm.PackageInstaller$SessionInfo com.android.server.pm.PackageInstallerSession.generateInfo(boolean) for 1.379s
+06-02 16:38:00.117 D/hwcomposer( 1897): hw_composer sent 6 syncs in 60s
+--------- beginning of system
+06-02 16:38:00.336 I/ActivityManager( 1869): Force stopping org.mozilla.fenix.debug appid=10099 user=-1: installPackageLI
+06-02 16:38:00.336 I/ActivityManager( 1869): Killing 8565:org.mozilla.fenix.debug/u0a99 (adj 0): stop org.mozilla.fenix.debug
+06-02 16:38:00.339 W/libprocessgroup( 1869): kill(-8565, 9) failed: No such process
+06-02 16:38:00.341 W/ActivityManager( 1869): Force removing ActivityRecord{8c0a4c0 u0 org.mozilla.fenix.debug/.App t387}: app died, no saved state
+06-02 16:38:00.343 I/ServiceChildProcess( 8615): Service has been unbound. Stopping.
+06-02 16:38:00.378 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:00.379 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:00.380 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:00.380 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:00.380 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:00.381 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:00.381 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:00.381 W/libprocessgroup( 1869): kill(-8565, 9) failed: No such process
+06-02 16:38:00.382 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:00.382 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:00.382 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:00.382 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:00.385 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:00.388 I/PackageManager( 1869): Update package org.mozilla.fenix.debug code path from /data/app/org.mozilla.fenix.debug-0JI_FY2TAEvhwr-Ly_nbEQ== to /data/app/org.mozilla.fenix.debug-l0coAwl06p55SDu8S60N3w==; Retain data and using new
+06-02 16:38:00.388 I/PackageManager( 1869): Update package org.mozilla.fenix.debug resource path from /data/app/org.mozilla.fenix.debug-0JI_FY2TAEvhwr-Ly_nbEQ== to /data/app/org.mozilla.fenix.debug-l0coAwl06p55SDu8S60N3w==; Retain data and using new
+06-02 16:38:00.388 I/ActivityManager( 1869): Killing 8615:org.mozilla.fenix.debug:tab0/u0a99 (adj 0): stop org.mozilla.fenix.debug
+06-02 16:38:00.418 W/libprocessgroup( 1869): kill(-8565, 9) failed: No such process
+06-02 16:38:00.422 W/InputDispatcher( 1869): channel 'ce4529b org.mozilla.fenix.debug/org.mozilla.fenix.debug.App (server)' ~ Consumer closed input channel or an error occurred. events=0x9
+06-02 16:38:00.422 E/InputDispatcher( 1869): channel 'ce4529b org.mozilla.fenix.debug/org.mozilla.fenix.debug.App (server)' ~ Channel is unrecoverably broken and will be disposed!
+06-02 16:38:00.423 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:00.424 D/ ( 1728): HostConnection::get() New Host Connection established 0xe50f1280, tid 2157
+06-02 16:38:00.425 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:00.425 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90c90c0, tid 2157
+06-02 16:38:00.425 I/Zygote ( 1729): Process 8565 exited due to signal (9)
+06-02 16:38:00.425 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:00.425 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90c90c0, tid 2157
+06-02 16:38:00.426 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:00.432 I/WindowManager( 1869): WIN DEATH: Window{ce4529b u0 org.mozilla.fenix.debug/org.mozilla.fenix.debug.App}
+06-02 16:38:00.432 W/InputDispatcher( 1869): Attempted to unregister already unregistered input channel 'ce4529b org.mozilla.fenix.debug/org.mozilla.fenix.debug.App (server)'
+06-02 16:38:00.433 W/ActivityManager( 1869): setHasOverlayUi called on unknown pid: 8565
+06-02 16:38:00.435 W/SurfaceFlinger( 1728): Attempting to destroy on removed layer: Task=387#0
+06-02 16:38:00.435 W/SurfaceFlinger( 1728): Attempting to destroy on removed layer: AppWindowToken{f7b293e token=Token{8b8d5f9 ActivityRecord{8c0a4c0 u0 org.mozilla.fenix.debug/.App t387}}}#0
+06-02 16:38:00.450 D/installd( 1733): Detected label change from u:object_r:app_data_file:s0 to u:object_r:app_data_file:s0:c99,c256,c512,c768 at /data/data/org.mozilla.fenix.debug/code_cache; running recursive restorecon
+06-02 16:38:00.451 D/installd( 1733): Detected label change from u:object_r:app_data_file:s0 to u:object_r:app_data_file:s0:c99,c256,c512,c768 at /data/user_de/0/org.mozilla.fenix.debug/cache; running recursive restorecon
+06-02 16:38:00.452 D/PackageManager( 1869): Instant App installer not found with android.intent.action.INSTALL_INSTANT_APP_PACKAGE
+06-02 16:38:00.452 D/PackageManager( 1869): Clear ephemeral installer activity
+06-02 16:38:00.459 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:00.460 W/libprocessgroup( 1869): kill(-8565, 9) failed: No such process
+06-02 16:38:00.460 I/libprocessgroup( 1869): Successfully killed process cgroup uid 10099 pid 8565 in 121ms
+06-02 16:38:00.460 W/libprocessgroup( 1869): kill(-8615, 9) failed: No such process
+06-02 16:38:00.460 I/Zygote ( 1729): Process 8615 exited due to signal (9)
+06-02 16:38:00.471 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dda40, tid 1952
+06-02 16:38:00.471 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:00.480 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:00.500 W/libprocessgroup( 1869): kill(-8615, 9) failed: No such process
+06-02 16:38:00.500 I/libprocessgroup( 1869): Successfully killed process cgroup uid 10099 pid 8615 in 40ms
+06-02 16:38:00.507 D/SurfaceFlinger( 1728): duplicate layer name: changing com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity to com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#1
+06-02 16:38:00.510 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:00.523 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:00.533 D/EGL_emulation( 2402): eglMakeCurrent: 0xe1911c80: ver 3 0 (tinfo 0xc8cbe260)
+06-02 16:38:00.534 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90c90c0, tid 2157
+06-02 16:38:00.535 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:00.556 D/EGL_emulation( 2488): eglMakeCurrent: 0xe3385ae0: ver 3 0 (tinfo 0xe33838f0)
+06-02 16:38:00.560 I/GoogleInputMethod( 1996): onFinishInput() : Dummy InputConnection bound
+06-02 16:38:00.572 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:00.579 I/GoogleInputMethod( 1996): onStartInput() : Dummy InputConnection bound
+06-02 16:38:00.593 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:00.624 I/chatty ( 2002): uid=10024(com.android.systemui) RenderThread identical 4 lines
+06-02 16:38:00.630 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:00.634 I/system_server( 1869): Explicit concurrent copying GC freed 46216(2MB) AllocSpace objects, 14(664KB) LOS objects, 38% free, 9MB/15MB, paused 63us total 180.949ms
+06-02 16:38:00.641 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:00.710 I/chatty ( 2002): uid=10024(com.android.systemui) RenderThread identical 8 lines
+06-02 16:38:00.716 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:00.719 E/ ( 1733): Couldn't opendir /data/app/vmdl1830460407.tmp: No such file or directory
+06-02 16:38:00.719 E/installd( 1733): Failed to delete /data/app/vmdl1830460407.tmp: No such file or directory
+06-02 16:38:00.722 I/ActivityManager( 1869): Force stopping org.mozilla.fenix.debug appid=10099 user=0: pkg removed
+06-02 16:38:00.729 W/BroadcastQueue( 1869): Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REMOVED dat=package:org.mozilla.fenix.debug flg=0x4000010 (has extras) } to com.android.musicfx/.Compatibility$Receiver
+06-02 16:38:00.753 W/SessionLifecycleManager( 2402): Handover failed. Creating new session controller.
+06-02 16:38:00.787 W/BroadcastQueue( 1869): Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REMOVED dat=package:org.mozilla.fenix.debug flg=0x4000010 (has extras) } to com.google.android.googlequicksearchbox/com.google.android.apps.gsa.googlequicksearchbox.GelStubAppWatcher
+06-02 16:38:00.788 W/BroadcastQueue( 1869): Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_ADDED dat=package:org.mozilla.fenix.debug flg=0x4000010 (has extras) } to com.android.musicfx/.Compatibility$Receiver
+06-02 16:38:00.797 W/SurfaceFlinger( 1728): Attempting to set client state on removed layer: Surface(name=AppWindowToken{f0e79dc token=Token{f06ae4f ActivityRecord{533f0ae u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t2}}})/@0xc6dc2b9 - animation-leash#0
+06-02 16:38:00.797 W/SurfaceFlinger( 1728): Attempting to destroy on removed layer: Surface(name=AppWindowToken{f0e79dc token=Token{f06ae4f ActivityRecord{533f0ae u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t2}}})/@0xc6dc2b9 - animation-leash#0
+06-02 16:38:00.804 I/gle.android.gm( 2660): Waiting for a blocking GC ProfileSaver
+06-02 16:38:00.812 W/BroadcastQueue( 1869): Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_ADDED dat=package:org.mozilla.fenix.debug flg=0x4000010 (has extras) } to com.google.android.googlequicksearchbox/com.google.android.apps.gsa.googlequicksearchbox.GelStubAppWatcher
+06-02 16:38:00.812 W/BroadcastQueue( 1869): Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:org.mozilla.fenix.debug flg=0x4000010 (has extras) } to com.android.musicfx/.Compatibility$Receiver
+06-02 16:38:00.812 W/BroadcastQueue( 1869): Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:org.mozilla.fenix.debug flg=0x4000010 (has extras) } to com.google.android.apps.photos/.account.full.FetchAccountPropertiesAppUpgradeBroadcastReceiver
+06-02 16:38:00.812 W/BroadcastQueue( 1869): Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:org.mozilla.fenix.debug flg=0x4000010 (has extras) } to com.google.android.apps.photos/.account.full.SyncAccountsForLoginBroadcastReceiver
+06-02 16:38:00.812 W/BroadcastQueue( 1869): Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:org.mozilla.fenix.debug flg=0x4000010 (has extras) } to com.google.android.apps.photos/.experiments.phenotype.full.PhenotypeAppUpgradeBroadcastReceiver
+06-02 16:38:00.812 W/BroadcastQueue( 1869): Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:org.mozilla.fenix.debug flg=0x4000010 (has extras) } to com.google.android.apps.photos/.notificationchannels.AppUpdateBroadcastReceiver
+06-02 16:38:00.834 W/BroadcastQueue( 1869): Background execution not allowed: receiving Intent { act=android.intent.action.PACKAGE_REPLACED dat=package:org.mozilla.fenix.debug flg=0x4000010 (has extras) } to com.google.android.googlequicksearchbox/com.google.android.apps.gsa.googlequicksearchbox.GelStubAppWatcher
+06-02 16:38:00.841 I/s.nexuslaunche( 2488): Background concurrent copying GC freed 13104(735KB) AllocSpace objects, 9(504KB) LOS objects, 41% free, 8MB/14MB, paused 502us total 117.306ms
+06-02 16:38:00.849 D/CarrierSvcBindHelper( 2121): No carrier app for: 0
+06-02 16:38:00.849 I/Auth ( 2660): [SupervisedAccountIntentOperation] onHandleIntent(): android.intent.action.PACKAGE_ADDED
+06-02 16:38:00.850 I/Auth ( 2660): [SupervisedAccountIntentOperation] This operation is disabled
+06-02 16:38:00.850 D/CarrierSvcBindHelper( 2121): No carrier app for: 0
+06-02 16:38:00.852 W/droid.apps.doc( 8852): Unexpected CPU variant for X86 using defaults: x86
+06-02 16:38:00.857 I/ActivityManager( 1869): Start proc 8852:com.google.android.apps.docs/u0a69 for content provider com.google.android.apps.docs/.storagebackend.StorageBackendContentProvider
+06-02 16:38:00.871 E/system_server( 1869): No package ID 7f found for ID 0x7f0801a6.
+06-02 16:38:00.871 E/system_server( 1869): No package ID 7f found for ID 0x7f13011d.
+06-02 16:38:00.871 E/system_server( 1869): No package ID 7f found for ID 0x7f13011d.
+06-02 16:38:00.871 E/system_server( 1869): No package ID 7f found for ID 0x7f0801a4.
+06-02 16:38:00.871 E/system_server( 1869): No package ID 7f found for ID 0x7f13011c.
+06-02 16:38:00.871 E/system_server( 1869): No package ID 7f found for ID 0x7f13011c.
+06-02 16:38:00.871 I/ChromeSync( 2660): [Sync,SyncIntentOperation] Handling the intent: Intent { act=android.intent.action.PACKAGE_ADDED dat=package:org.mozilla.fenix.debug flg=0x4000010 cmp=com.google.android.gms/.chimera.GmsIntentOperationService (has extras) }.
+06-02 16:38:00.871 D/ImsResolver( 2121): maybeAddedImsService, packageName: org.mozilla.fenix.debug
+06-02 16:38:00.873 D/CarrierConfigLoader( 2121): mHandler: 9 phoneId: 0
+06-02 16:38:00.877 I/InputReader( 1869): Reconfiguring input devices. changes=0x00000010
+06-02 16:38:00.901 I/chatty ( 1869): uid=1000(system) InputReader identical 1 line
+06-02 16:38:00.903 I/InputReader( 1869): Reconfiguring input devices. changes=0x00000010
+06-02 16:38:00.921 I/gle.android.gm( 2660): WaitForGcToComplete blocked ProfileSaver on HeapTrim for 116.746ms
+06-02 16:38:00.927 W/PeopleContactsSync( 2660): CP2 sync disabled by gservices.
+06-02 16:38:00.936 I/droid.apps.doc( 8852): The ClassLoaderContext is a special shared library.
+06-02 16:38:00.941 I/droid.apps.doc( 8852): The ClassLoaderContext is a special shared library.
+06-02 16:38:00.976 W/LocationOracle( 2402): No location history returned by ContextManager
+06-02 16:38:00.984 W/Looper ( 1869): Slow delivery took 222ms main h=android.app.ActivityThread$H c=android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA@fad9455 m=0
+06-02 16:38:00.986 I/Telecom ( 1869): DefaultDialerCache: Refreshing default dialer for user 0: now com.google.android.dialer: DDC.oR@ALo
+06-02 16:38:00.999 D/AutofillUI( 1869): destroySaveUiUiThread(): already destroyed
+06-02 16:38:00.999 D/AutofillManagerServiceImpl( 1869): Set component for user 0 as AutofillServiceInfo[ServiceInfo{f14f90d com.google.android.gms.autofill.service.AutofillService}, settings:com.google.android.gms.autofill.ui.AutofillSettingsActivity, hasCompatPckgs:false]
+06-02 16:38:01.060 I/Icing ( 2660): IndexChimeraService.getServiceInterface callingPackage=com.google.android.gms componentName=AppsCorpus serviceId=32
+06-02 16:38:01.064 I/Icing ( 2660): IndexChimeraService.getServiceInterface callingPackage=com.google.android.gms componentName=AppsCorpus serviceId=36
+06-02 16:38:01.087 I/MicroDetectionWorker( 2402): #startMicroDetector [speakerMode: 0]
+06-02 16:38:01.087 I/AudioController( 2402): Using mInputStreamFactoryBuilder
+06-02 16:38:01.087 I/AudioController( 2402): Created new AudioSource
+06-02 16:38:01.089 I/MicroDetectionWorker( 2402): onReady
+06-02 16:38:01.114 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:01.137 W/ctxmgr ( 2473): [AclManager]No 3 for (accnt=account#-517948760#, com.google.android.gms(10008):UserVelocityProducer, vrsn=13280022, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 1, account#-517948760#
+06-02 16:38:01.150 I/Places ( 2473): Converted 0 out of 1 WiFi scans
+06-02 16:38:01.176 I/GAv4 ( 8852): Google Analytics 10.2.98 is starting up. To enable debug logging on a device run:
+06-02 16:38:01.176 I/GAv4 ( 8852): adb shell setprop log.tag.GAv4 DEBUG
+06-02 16:38:01.176 I/GAv4 ( 8852): adb logcat -s GAv4
+06-02 16:38:01.187 I/PlaceInferenceEngine( 2473): No beacon scan available - ignoring candidates.
+06-02 16:38:01.203 D/ ( 2002): HostConnection::get() New Host Connection established 0xe075c080, tid 2023
+06-02 16:38:01.216 D/gralloc_ranchu( 2002): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:01.217 D/ ( 2002): HostConnection::get() New Host Connection established 0xe075c080, tid 2023
+06-02 16:38:01.217 D/gralloc_ranchu( 2002): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:01.218 D/ ( 2002): HostConnection::get() New Host Connection established 0xe075cb40, tid 2023
+06-02 16:38:01.227 D/gralloc_ranchu( 2002): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:01.228 D/ ( 2002): HostConnection::get() New Host Connection established 0xe075cb40, tid 2023
+06-02 16:38:01.228 W/GAv4 ( 8852): AnalyticsReceiver is not registered or is disabled. Register the receiver for reliable dispatching on non-Google Play devices. See http://goo.gl/8Rd3yj for instructions.
+06-02 16:38:01.234 D/gralloc_ranchu( 2002): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:01.234 D/ ( 2002): HostConnection::get() New Host Connection established 0xe075cb40, tid 2023
+06-02 16:38:01.234 D/gralloc_ranchu( 2002): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:01.235 D/ ( 2002): HostConnection::get() New Host Connection established 0xe075cb40, tid 2023
+06-02 16:38:01.235 D/gralloc_ranchu( 2002): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:01.248 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):UserLocationProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 1, account#-517948760#
+06-02 16:38:01.250 W/GAv4 ( 8852): CampaignTrackingReceiver is not registered, not exported or is disabled. Installation campaign tracking is not possible. See http://goo.gl/8Rd3yj for instructions.
+06-02 16:38:01.253 W/FieldDefinition( 8852): Ignoring isIndexed constraint as field also has uniqueness constraint (on just this field, and therefore SQLite will have to create an index on that. For field: com.google.android.apps.docs.database.common.FieldDefinition$a@2f0c143
+06-02 16:38:01.256 W/GAv4 ( 8852): AnalyticsService not registered in the app manifest. Hits might not be delivered reliably. See http://goo.gl/8Rd3yj for instructions.
+06-02 16:38:01.275 I/Icing ( 2660): Usage reports ok 2, Failed Usage reports 0, indexed 0, rejected 0, imm upload false
+06-02 16:38:01.301 I/MicroRecognitionRunner( 2402): Starting detection.
+06-02 16:38:01.301 I/MicrophoneInputStream( 2402): mic_starting SR : 16000 CC : 16 SO : 6
+06-02 16:38:01.303 I/earchbox:searc( 2402): Background concurrent copying GC freed 16338(953KB) AllocSpace objects, 1(92KB) LOS objects, 44% free, 7MB/13MB, paused 50us total 209.099ms
+06-02 16:38:01.307 I/Icing ( 2660): Usage reports ok 0, Failed Usage reports 0, indexed 0, rejected 0, imm upload false
+06-02 16:38:01.307 E/ ( 1627): Request requires android.permission.RECORD_AUDIO
+06-02 16:38:01.307 E/AudioPolicyIntefaceImpl( 1627): getInputForAttr permission denied: recording not allowed for uid 10039 pid 2402
+06-02 16:38:01.307 E/AudioFlinger( 1627): createRecord() checkRecordThread_l failed
+06-02 16:38:01.308 E/IAudioFlinger( 2402): createRecord returned error -22
+06-02 16:38:01.308 E/AudioRecord( 2402): AudioFlinger could not create record track, status: -22
+06-02 16:38:01.310 E/AudioRecord-JNI( 2402): Error creating AudioRecord instance: initialization check failed with status -22.
+06-02 16:38:01.313 E/android.media.AudioRecord( 2402): Error code -20 when initializing native AudioRecord object.
+06-02 16:38:01.313 I/MicrophoneInputStream( 2402): mic_started SR : 16000 CC : 16 SO : 6
+06-02 16:38:01.313 E/ActivityThread( 2402): Failed to find provider info for com.google.android.apps.gsa.testing.ui.audio.recorded
+06-02 16:38:01.314 I/MicroDetectionWorker( 2402): onReady
+06-02 16:38:01.314 W/SpeechLevelGenerator( 2402): Really low audio levels detected. The audio input may have issues.
+06-02 16:38:01.319 I/MicrophoneInputStream( 2402): mic_close SR : 16000 CC : 16 SO : 6
+06-02 16:38:01.321 I/MicroRecognitionRunner( 2402): Detection finished
+06-02 16:38:01.321 W/ErrorReporter( 2402): reportError [type: 211, code: 524300]: Error reading from input stream
+06-02 16:38:01.323 I/MicroRecognitionRunner( 2402): Stopping hotword detection.
+06-02 16:38:01.338 W/ErrorProcessor( 2402): onFatalError, processing error from engine(4)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): com.google.android.apps.gsa.shared.speech.b.g: Error reading from input stream
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.staticplugins.microdetection.d.k.a(SourceFile:91)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.staticplugins.microdetection.d.l.run(Unknown Source:14)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at com.google.android.libraries.gsa.runner.a.a.b(SourceFile:32)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at com.google.android.libraries.gsa.runner.a.c.call(Unknown Source:4)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.shared.util.concurrent.b.g.run(Unknown Source:4)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at java.lang.Thread.run(Thread.java:764)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.shared.util.concurrent.b.i.run(SourceFile:6)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): Caused by: com.google.android.apps.gsa.shared.exception.GsaIOException: Error code: 393238 | Buffer overflow, no available space.
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.speech.audio.Tee.j(SourceFile:103)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.speech.audio.au.read(SourceFile:2)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at java.io.InputStream.read(InputStream.java:101)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.speech.audio.ao.run(SourceFile:17)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.speech.audio.an.run(SourceFile:2)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+06-02 16:38:01.338 W/ErrorProcessor( 2402): ... 10 more
+06-02 16:38:01.339 I/AudioController( 2402): internalShutdown
+06-02 16:38:01.340 I/MicroDetector( 2402): Keeping mic open: false
+06-02 16:38:01.340 I/MicroDetectionWorker( 2402): #onError(false)
+06-02 16:38:01.341 I/DeviceStateChecker( 2402): DeviceStateChecker cancelled
+06-02 16:38:01.346 I/Places ( 2473): ?: PlacesBleScanner start() with priority 2
+06-02 16:38:01.365 I/Places ( 2473): ?: PlacesBleScanner start() with priority 2
+06-02 16:38:01.365 I/PlaceInferenceEngine( 2473): [anon] Changed inference mode: 1
+06-02 16:38:01.369 I/Places ( 2473): Converted 0 out of 1 WiFi scans
+06-02 16:38:01.391 I/Places ( 2473): ?: PlacesBleScanner start() with priority 2
+06-02 16:38:01.398 I/Places ( 2473): ?: PlacesBleScanner start() with priority 2
+06-02 16:38:01.399 I/PlaceInferenceEngine( 2473): [anon] Changed inference mode: 1
+06-02 16:38:01.400 I/PlaceInferenceEngine( 2473): No beacon scan available - ignoring candidates.
+06-02 16:38:01.422 W/droid.apps.doc( 8852): Long monitor contention with owner Binder:8852_2 (8868) at void java.lang.Object.wait(long, int)(Object.java:-2) waiters=0 in com.google.android.apps.docs.storagebackend.StorageBackendContentProvider$a com.google.android.apps.docs.storagebackend.StorageBackendContentProvider.b() for 353ms
+06-02 16:38:01.423 I/Icing ( 2660): IndexChimeraService.getServiceInterface callingPackage=com.google.android.gms componentName=AppsCorpus serviceId=32
+06-02 16:38:01.423 I/Icing ( 2660): IndexChimeraService.getServiceInterface callingPackage=com.google.android.gms componentName=AppsCorpus serviceId=36
+06-02 16:38:01.435 I/ProvidersCache( 4535): Provider returned no roots. Possibly naughty: com.google.android.apps.docs.storage
+06-02 16:38:01.441 I/Places ( 2473): Converted 0 out of 1 WiFi scans
+06-02 16:38:01.454 I/Icing ( 2660): Usage reports ok 0, Failed Usage reports 0, indexed 0, rejected 0, imm upload false
+06-02 16:38:01.456 I/ProvidersCache( 4535): Provider returned no roots. Possibly naughty: com.google.android.apps.docs.storage
+06-02 16:38:01.458 W/Looper ( 1869): Drained
+06-02 16:38:01.465 I/PlaceInferenceEngine( 2473): No beacon scan available - ignoring candidates.
+06-02 16:38:01.467 I/Icing ( 2660): Usage reports ok 0, Failed Usage reports 0, indexed 0, rejected 0, imm upload false
+06-02 16:38:01.482 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):PlacesProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 18, account#-517948760#
+06-02 16:38:02.182 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):UserLocationProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 1, account#-517948760#
+06-02 16:38:02.360 I/Icing ( 2660): Indexing com.google.android.gms-apps from com.google.android.gms
+06-02 16:38:02.417 I/Icing ( 2660): Indexing com.google.android.gms-internal.3p:MobileApplication from com.google.android.gms
+06-02 16:38:02.425 I/Icing ( 2660): Indexing done com.google.android.gms-apps
+06-02 16:38:02.427 I/Icing ( 2660): Indexing done com.google.android.gms-internal.3p:MobileApplication
+06-02 16:38:02.510 I/Icing ( 2660): Indexing com.google.android.gms-apps from com.google.android.gms
+06-02 16:38:02.511 I/Icing ( 2660): Indexing done com.google.android.gms-apps
+06-02 16:38:02.975 I/ActivityManager( 1869): Force stopping org.mozilla.fenix.debug appid=10099 user=0: clear data
+06-02 16:38:02.976 I/ActivityManager( 1869): Force stopping org.mozilla.fenix.debug appid=10099 user=-1: clearApplicationUserData
+06-02 16:38:02.977 D/ZenLog ( 1869): config: removeAutomaticZenRules,ZenModeConfig[user=0,allowAlarms=true,allowMedia=true,allowSystem=false,allowReminders=false,allowEvents=false,allowCalls=true,allowRepeatCallers=true,allowMessages=false,allowCallsFrom=stars,allowMessagesFrom=contacts,suppressedVisualEffects=511,areChannelsBypassingDnd=false,automaticRules={EVENTS_DEFAULT_RULE=ZenRule[enabled=false,snoozing=false,name=Event,zenMode=ZEN_MODE_IMPORTANT_INTERRUPTIONS,conditionId=condition://android/event?userId=-10000&calendar=&reply=1,condition=Condition[id=condition://android/event?userId=-10000&calendar=&reply=1,summary=...,line1=...,line2=...,icon=0,state=STATE_FALSE,flags=2],component=ComponentInfo{android/com.android.server.notification.EventConditionProvider},id=EVENTS_DEFAULT_RULE,creationTime=1587308662810,enabler=null], EVERY_NIGHT_DEFAULT_RULE=ZenRule[enabled=false,snoozing=false,name=Sleeping,zenMode=ZEN_MODE_IMPORTANT_INTERRUPTIONS,conditionId=condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true,condition=Condition[id=condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true,summary=...,line1=...,line2=...,icon=0,state=STATE_FALSE,flags=2],component=ComponentInfo{android/com.android.server.notification.ScheduleConditionProvider},id=EVERY_NIGHT_DEFAULT_RULE,creationTime=1587308662810,enabler=null]},manualRule=null],Diff[]
+06-02 16:38:02.977 I/ConditionProviders( 1869): Disallowing condition provider org.mozilla.fenix.debug
+06-02 16:38:02.977 D/ZenLog ( 1869): set_zen_mode: off,removeAutomaticZenRules
+06-02 16:38:02.985 I/keystore( 1734): clear_uid 10099
+06-02 16:38:02.992 E/system_server( 1869): No package ID 7f found for ID 0x7f0801a6.
+06-02 16:38:02.992 E/system_server( 1869): No package ID 7f found for ID 0x7f13011d.
+06-02 16:38:02.992 E/system_server( 1869): No package ID 7f found for ID 0x7f13011d.
+06-02 16:38:02.992 E/system_server( 1869): No package ID 7f found for ID 0x7f0801a4.
+06-02 16:38:02.992 E/system_server( 1869): No package ID 7f found for ID 0x7f13011c.
+06-02 16:38:02.992 E/system_server( 1869): No package ID 7f found for ID 0x7f13011c.
+06-02 16:38:02.993 I/GeofencerStateMachine( 2473): removeGeofences: removeRequest=RemoveGeofencingRequest[REMOVE_ALL packageName=org.mozilla.fenix.debug]
+06-02 16:38:02.995 D/CarrierSvcBindHelper( 2121): No carrier app for: 0
+06-02 16:38:03.007 I/ProvidersCache( 4535): Provider returned no roots. Possibly naughty: com.google.android.apps.docs.storage
+06-02 16:38:03.013 D/vold ( 1558): Remounting 10099 as mode read
+06-02 16:38:03.014 I/LocationSettingsChecker( 2660): Removing dialog suppression flag for package org.mozilla.fenix.debug
+06-02 16:38:03.018 I/Icing ( 2660): doRemovePackageData org.mozilla.fenix.debug
+06-02 16:38:03.048 D/vold ( 1558): Remounting 10099 as mode write
+06-02 16:38:03.055 I/IcingNotification( 1996): Received intent: Intent { act=com.google.android.gms.icing.IME_NOTIFICATION flg=0x10 pkg=com.google.android.inputmethod.latin (has extras) }
+06-02 16:38:03.104 I/ActivityManager( 1869): Force stopping org.mozilla.fenix.debug appid=10099 user=-1: set debug app
+06-02 16:38:03.133 I/ActivityManager( 1869): START u0 {flg=0x10000000 cmp=org.mozilla.fenix.debug/.App (has extras)} from uid 0
+06-02 16:38:03.058 I/IcingNotification( 1996): Received intent: Intent { act=com.google.android.gms.icing.IME_NOTIFICATION flg=0x10 pkg=com.google.android.inputmethod.latin (has extras) }
+06-02 16:38:03.175 I/lla.fenix.debu( 8940): Not late-enabling -Xcheck:jni (already on)
+06-02 16:38:03.178 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):UserLocationProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 1, account#-517948760#
+06-02 16:38:03.184 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:03.185 I/ActivityManager( 1869): Start proc 8940:org.mozilla.fenix.debug/u0a99 for activity org.mozilla.fenix.debug/.App
+06-02 16:38:03.204 D/ ( 1869): HostConnection::get() New Host Connection established 0xc1e7f900, tid 1930
+06-02 16:38:03.246 W/lla.fenix.debu( 8940): Unexpected CPU variant for X86 using defaults: x86
+06-02 16:38:03.345 W/ActivityThread( 8940): Application org.mozilla.fenix.debug can be debugged on port 8100...
+06-02 16:38:03.353 I/lla.fenix.debu( 8940): The ClassLoaderContext is a special shared library.
+06-02 16:38:03.365 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:03.366 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:03.366 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:03.367 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:03.367 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:03.367 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:03.367 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:03.370 D/EGL_emulation( 2402): eglMakeCurrent: 0xe1911c80: ver 3 0 (tinfo 0xc8cbe260)
+06-02 16:38:03.375 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:03.378 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:03.381 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dd200, tid 2107
+06-02 16:38:03.381 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:03.383 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dd200, tid 2107
+06-02 16:38:03.383 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:03.385 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dd200, tid 2107
+06-02 16:38:03.385 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:03.386 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dd200, tid 2107
+06-02 16:38:03.387 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:03.392 D/EGL_emulation( 2488): eglMakeCurrent: 0xe3385ae0: ver 3 0 (tinfo 0xe33838f0)
+06-02 16:38:03.392 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:03.395 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dda00, tid 2107
+06-02 16:38:03.395 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:03.406 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dda00, tid 2107
+06-02 16:38:03.407 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:03.408 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dda00, tid 2107
+06-02 16:38:03.408 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:03.412 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:03.414 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dda00, tid 2107
+06-02 16:38:03.415 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:03.416 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:03.504 I/chatty ( 2002): uid=10024(com.android.systemui) RenderThread identical 9 lines
+06-02 16:38:03.518 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:04.180 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
+06-02 16:38:04.214 I/droid.apps.doc( 8852): The ClassLoaderContext is a special shared library.
+06-02 16:38:04.261 I/chatty ( 8852): uid=10069(com.google.android.apps.docs) TaskSchedulerLo identical 2 lines
+06-02 16:38:04.271 I/droid.apps.doc( 8852): The ClassLoaderContext is a special shared library.
+06-02 16:38:04.298 V/NativeCrypto( 8852): Registering com/google/android/gms/org/conscrypt/NativeCrypto's 284 native methods...
+06-02 16:38:04.340 D/NetworkSecurityConfig( 8852): No Network Security Config specified, using platform default
+06-02 16:38:04.345 I/ProviderInstaller( 8852): Installed default security provider GmsCore_OpenSSL
+06-02 16:38:04.534 D/FirebaseApp( 8940): Default FirebaseApp failed to initialize because no default options were found. This usually means that com.google.gms:google-services was not applied to your gradle project.
+06-02 16:38:04.534 I/FirebaseInitProvider( 8940): FirebaseApp initialization unsuccessful
+06-02 16:38:04.675 D/FenixApplication( 8940): Initializing Glean (uploadEnabled=true, isFennec=false)
+06-02 16:38:04.706 D/RustNativeSupport( 8940): findMegazordLibraryName(viaduct, 0.59.0
+06-02 16:38:04.706 D/RustNativeSupport( 8940): lib in use: none
+06-02 16:38:04.706 D/RustNativeSupport( 8940): lib configured: megazord
+06-02 16:38:04.707 D/RustNativeSupport( 8940): lib version configured: 0.59.0
+06-02 16:38:04.707 D/RustNativeSupport( 8940): settled on megazord
+06-02 16:38:04.794 D/libglean_ffi( 8940): glean_ffi: Android logging should be hooked up!
+06-02 16:38:04.799 I/glean/Glean( 8940): Registering pings for mozilla.telemetry.glean.GleanMetrics.Pings
+06-02 16:38:04.804 I/libglean_ffi( 8940): glean_core: Creating new Glean
+06-02 16:38:04.804 D/libglean_ffi( 8940): glean_core::database: Database path: "/data/user/0/org.mozilla.fenix.debug/glean_data/db"
+06-02 16:38:04.804 D/RustNativeSupport( 8940): findMegazordLibraryName(rustlog, 0.59.0
+06-02 16:38:04.804 D/RustNativeSupport( 8940): lib in use: none
+06-02 16:38:04.805 D/RustNativeSupport( 8940): lib configured: megazord
+06-02 16:38:04.805 D/RustNativeSupport( 8940): lib version configured: 0.59.0
+06-02 16:38:04.805 D/RustNativeSupport( 8940): settled on megazord
+06-02 16:38:04.805 I/libglean_ffi( 8940): glean_core::database: Database initialized
+06-02 16:38:04.812 I/rc_log_ffi::ios( 8940): rc_log adapter initialized!
+06-02 16:38:04.840 I/libglean_ffi( 8940): glean_ffi: Glean initialized
+06-02 16:38:04.875 I/GeckoRuntime( 8940): Adding debug configuration from: /data/local/tmp/org.mozilla.fenix.debug-geckoview-config.yaml
+06-02 16:38:04.876 D/GeckoDebugConfig( 8940): Adding environment variables from debug config: {MOZ_CRASHREPORTER=1, MOZ_CRASHREPORTER_NO_REPORT=1, MOZ_CRASHREPORTER_SHUTDOWN=1}
+06-02 16:38:04.876 D/GeckoDebugConfig( 8940): Adding arguments from debug config: [-marionette, -profile, /mnt/sdcard/org.mozilla.fenix.debug-geckodriver-profile]
+06-02 16:38:04.877 D/GeckoThread( 8940): State changed to LAUNCHED
+06-02 16:38:04.878 I/GeckoThread( 8940): preparing to run Gecko
+06-02 16:38:04.879 D/GeckoThread( 8940): env var: MOZ_CRASHREPORTER=1
+06-02 16:38:04.879 D/GeckoThread( 8940): env var: MOZ_CRASHREPORTER_NO_REPORT=1
+06-02 16:38:04.879 D/GeckoThread( 8940): env var: MOZ_CRASHREPORTER_SHUTDOWN=1
+06-02 16:38:04.911 D/GeckoThread( 8940): State changed to MOZGLUE_READY
+06-02 16:38:04.914 D/GeckoRuntime( 8940): Lifecycle: onCreate
+06-02 16:38:04.936 I/glean/MetricsPingSched( 8940): The application just updated. Send metrics ping now.
+06-02 16:38:04.947 W/Settings( 8940): Setting animator_duration_scale has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only global URI.
+06-02 16:38:04.952 E/GeckoLibLoad( 8940): Load sqlite start
+06-02 16:38:04.983 E/GeckoLibLoad( 8940): Load sqlite done
+06-02 16:38:04.983 E/GeckoLibLoad( 8940): Load nss start
+06-02 16:38:04.983 E/GeckoLibLoad( 8940): Load nss done
+06-02 16:38:04.996 I/glean/MetricsPingSched( 8940): Collecting the 'metrics' ping, now = Tue Jun 02 16:38:04 EDT 2020, startup = true, reason = upgrade
+06-02 16:38:05.031 E/GeckoLibLoad( 8940): Loaded libs in 47.602025ms total, 10ms(70ms) user, 30ms(40ms) system, 0(0) faults
+06-02 16:38:05.031 D/GeckoThread( 8940): State changed to LIBS_READY
+06-02 16:38:05.031 I/libglean_ffi( 8940): glean_core::ping: Collecting metrics
+06-02 16:38:05.031 I/libglean_ffi( 8940): glean_core::ping: Storage for metrics empty. Bailing out.
+06-02 16:38:05.031 I/libglean_ffi( 8940): glean_core: No content for ping 'metrics', therefore no ping queued.
+06-02 16:38:05.040 D/glean/MetricsPingSched( 8940): Scheduling the 'metrics' ping in 40915085ms
+06-02 16:38:05.043 W/GeckoThread( 8940): zerdatime 4649175 - runGecko
+06-02 16:38:05.049 D/GeckoProfile( 8940): Loading profile at: null name: default
+06-02 16:38:05.050 D/GeckoProfile( 8940): Created new profile dir.
+06-02 16:38:05.051 I/GeckoProfile( 8940): Enqueuing profile init.
+06-02 16:38:05.054 D/GeckoProfile( 8940): Found profile dir: /data/user/0/org.mozilla.fenix.debug/files/mozilla/qy7f9y6n.default
+06-02 16:38:05.054 D/GeckoProfile( 8940): Attempting to write new client ID properties
+06-02 16:38:05.057 D/GeckoProfile( 8940): Creating profile dir: /data/user/0/org.mozilla.fenix.debug/files/mozilla/qy7f9y6n.default
+06-02 16:38:05.077 D/LeakCanary( 8940): Updated AppWatcher.config: Config(no changes)
+06-02 16:38:05.088 I/Gecko:DumpUtils( 8940): Fifo watcher disabled via pref.
+06-02 16:38:05.113 D/GeckoSysInfo( 8940): System memory: 1494MB.
+06-02 16:38:05.113 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/os/MessageQueue;->next()Landroid/os/Message; (light greylist, JNI)
+06-02 16:38:05.113 D/LeakCanary( 8940): Updated LeakCanary.config: Config(no changes)
+06-02 16:38:05.114 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/MessageQueue;->next()Landroid/os/Message;
+06-02 16:38:05.114 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.114 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.114 D/StrictMode( 8940): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:05.114 D/StrictMode( 8940): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:05.114 W/lla.fenix.debu( 8940): Accessing hidden field Landroid/os/MessageQueue;->mMessages:Landroid/os/Message; (light greylist, JNI)
+06-02 16:38:05.115 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/MessageQueue;->mMessages:Landroid/os/Message;
+06-02 16:38:05.115 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.115 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.115 D/StrictMode( 8940): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:05.115 D/StrictMode( 8940): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:05.117 W/lla.fenix.debu( 8940): Accessing hidden field Ljava/lang/Boolean;->value:Z (light greylist, JNI)
+06-02 16:38:05.117 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Boolean;->value:Z
+06-02 16:38:05.117 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.117 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.117 D/StrictMode( 8940): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:05.117 D/StrictMode( 8940): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:05.117 W/lla.fenix.debu( 8940): Accessing hidden field Ljava/lang/Integer;->value:I (light greylist, JNI)
+06-02 16:38:05.118 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Integer;->value:I
+06-02 16:38:05.118 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.118 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.118 D/StrictMode( 8940): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:05.118 D/StrictMode( 8940): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:05.118 W/lla.fenix.debu( 8940): Accessing hidden field Ljava/lang/Double;->value:D (light greylist, JNI)
+06-02 16:38:05.119 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Double;->value:D
+06-02 16:38:05.119 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.119 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.119 D/StrictMode( 8940): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:05.119 D/StrictMode( 8940): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:05.120 D/GeckoThread( 8940): State changed to JNI_READY
+06-02 16:38:05.120 D/App ( 8940): DebugMetricController: start
+06-02 16:38:05.120 D/App ( 8940): DebugMetricController: start
+06-02 16:38:05.122 W/PushConfig( 8940): No firebase configuration found; cannot support push service.
+06-02 16:38:05.174 D/ServiceAllocator( 8940): org.mozilla.gecko.process.GeckoChildProcessServices$tab0 updateBindings: BACKGROUND priority, 0 importance, 2 successful binds, 0 failed binds, 0 successful unbinds, 0 failed unbinds
+06-02 16:38:05.189 D/StrictMode( 8940): StrictMode policy violation; ~duration=351 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:05.189 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:05.189 D/StrictMode( 8940): at java.io.FileInputStream.<init>(FileInputStream.java:163)
+06-02 16:38:05.189 D/StrictMode( 8940): at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:49)
+06-02 16:38:05.189 D/StrictMode( 8940): at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+06-02 16:38:05.189 D/StrictMode( 8940): at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+06-02 16:38:05.189 D/StrictMode( 8940): at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+06-02 16:38:05.189 D/StrictMode( 8940): at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+06-02 16:38:05.189 D/StrictMode( 8940): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+06-02 16:38:05.189 D/StrictMode( 8940): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:05.189 D/StrictMode( 8940): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:05.189 D/StrictMode( 8940): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:05.189 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:05.189 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:05.189 D/StrictMode( 8940): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:05.189 D/StrictMode( 8940): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:05.189 D/StrictMode( 8940): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:05.189 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:05.189 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:05.189 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:05.189 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:05.189 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:05.189 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:05.189 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:05.194 D/StrictMode( 8940): StrictMode policy violation; ~duration=336 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:05.194 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:05.194 D/StrictMode( 8940): at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+06-02 16:38:05.194 D/StrictMode( 8940): at libcore.io.IoBridge.read(IoBridge.java:501)
+06-02 16:38:05.194 D/StrictMode( 8940): at java.io.FileInputStream.read(FileInputStream.java:307)
+06-02 16:38:05.194 D/StrictMode( 8940): at java.io.FilterInputStream.read(FilterInputStream.java:133)
+06-02 16:38:05.194 D/StrictMode( 8940): at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.UnicodeReader.init(UnicodeReader.java:92)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:124)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1177)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:195)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:107)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+06-02 16:38:05.194 D/StrictMode( 8940): at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+06-02 16:38:05.194 D/StrictMode( 8940): at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:05.194 D/StrictMode( 8940): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:05.194 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:05.194 D/StrictMode( 8940): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:05.194 D/StrictMode( 8940): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:05.194 D/StrictMode( 8940): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:05.194 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:05.194 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:05.194 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:05.194 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:05.194 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:05.194 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:05.194 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:05.200 D/StrictMode( 8940): StrictMode policy violation; ~duration=336 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:05.200 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:05.200 D/StrictMode( 8940): at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+06-02 16:38:05.200 D/StrictMode( 8940): at libcore.io.IoBridge.read(IoBridge.java:501)
+06-02 16:38:05.200 D/StrictMode( 8940): at java.io.FileInputStream.read(FileInputStream.java:307)
+06-02 16:38:05.200 D/StrictMode( 8940): at java.io.FilterInputStream.read(FilterInputStream.java:133)
+06-02 16:38:05.200 D/StrictMode( 8940): at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+06-02 16:38:05.200 D/StrictMode( 8940): at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:288)
+06-02 16:38:05.200 D/StrictMode( 8940): at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:351)
+06-02 16:38:05.200 D/StrictMode( 8940): at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:180)
+06-02 16:38:05.200 D/StrictMode( 8940): at java.io.InputStreamReader.read(InputStreamReader.java:184)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1177)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:195)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:107)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+06-02 16:38:05.200 D/StrictMode( 8940): at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+06-02 16:38:05.200 D/StrictMode( 8940): at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:05.200 D/StrictMode( 8940): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:05.200 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:05.200 D/StrictMode( 8940): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:05.200 D/StrictMode( 8940): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:05.200 D/StrictMode( 8940): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:05.200 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:05.200 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:05.200 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:05.200 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:05.200 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:05.200 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:05.200 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:05.202 I/enix.debug:tab( 8988): Not late-enabling -Xcheck:jni (already on)
+06-02 16:38:05.203 D/StrictMode( 8940): StrictMode policy violation; ~duration=320 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:05.203 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:05.203 D/StrictMode( 8940): at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+06-02 16:38:05.203 D/StrictMode( 8940): at libcore.io.IoBridge.read(IoBridge.java:501)
+06-02 16:38:05.203 D/StrictMode( 8940): at java.io.FileInputStream.read(FileInputStream.java:307)
+06-02 16:38:05.203 D/StrictMode( 8940): at java.io.FilterInputStream.read(FilterInputStream.java:133)
+06-02 16:38:05.203 D/StrictMode( 8940): at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+06-02 16:38:05.203 D/StrictMode( 8940): at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:288)
+06-02 16:38:05.203 D/StrictMode( 8940): at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:351)
+06-02 16:38:05.203 D/StrictMode( 8940): at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:180)
+06-02 16:38:05.203 D/StrictMode( 8940): at java.io.InputStreamReader.read(InputStreamReader.java:184)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:136)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.scanner.ScannerImpl.scanPlain(ScannerImpl.java:1999)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.scanner.ScannerImpl.fetchPlain(ScannerImpl.java:1044)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:399)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockSequenceEntry.produce(ParserImpl.java:504)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.composer.Composer.composeSequenceNode(Composer.java:188)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:142)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:236)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:227)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:215)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:144)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:85)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:108)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+06-02 16:38:05.203 D/StrictMode( 8940): at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+06-02 16:38:05.203 D/StrictMode( 8940): at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:05.203 D/StrictMode( 8940): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:05.203 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:05.203 D/StrictMode( 8940): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:05.203 D/StrictMode( 8940): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:05.203 D/StrictMode( 8940): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:05.203 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:05.203 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:05.203 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:05.203 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:05.203 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:05.203 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:05.203 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:05.205 D/StrictMode( 8940): StrictMode policy violation; ~duration=266 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:05.205 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:05.205 D/StrictMode( 8940): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:05.205 D/StrictMode( 8940): at java.io.File.exists(File.java:815)
+06-02 16:38:05.205 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:05.205 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:05.205 D/StrictMode( 8940): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:05.205 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:05.205 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:05.205 D/StrictMode( 8940): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:05.205 D/StrictMode( 8940): at mozilla.components.browser.engine.gecko.GeckoEngine.<init>(GeckoEngine.kt:68)
+06-02 16:38:05.205 D/StrictMode( 8940): at mozilla.components.browser.engine.gecko.GeckoEngine.<init>(GeckoEngine.kt:63)
+06-02 16:38:05.205 D/StrictMode( 8940): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:76)
+06-02 16:38:05.205 D/StrictMode( 8940): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:05.205 D/StrictMode( 8940): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:05.205 D/StrictMode( 8940): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:05.205 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:05.205 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:05.205 D/StrictMode( 8940): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:05.205 D/StrictMode( 8940): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:05.205 D/StrictMode( 8940): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:05.205 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:05.205 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:05.205 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:05.205 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:05.205 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:05.205 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:05.205 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:05.205 I/ActivityManager( 1869): Start proc 8988:org.mozilla.fenix.debug:tab0/u0a99 for service org.mozilla.fenix.debug/org.mozilla.gecko.process.GeckoChildProcessServices$tab0
+06-02 16:38:05.206 D/StrictMode( 8940): StrictMode policy violation; ~duration=112 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:05.206 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:05.206 D/StrictMode( 8940): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:05.206 D/StrictMode( 8940): at java.io.File.exists(File.java:815)
+06-02 16:38:05.206 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:05.206 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:05.206 D/StrictMode( 8940): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:05.206 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:05.206 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:05.206 D/StrictMode( 8940): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:05.206 D/StrictMode( 8940): at androidx.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:119)
+06-02 16:38:05.206 D/StrictMode( 8940): at org.mozilla.fenix.DebugFenixApplication.setupLeakCanary(DebugFenixApplication.kt:15)
+06-02 16:38:05.206 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:140)
+06-02 16:38:05.206 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:05.206 D/StrictMode( 8940): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:05.206 D/StrictMode( 8940): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:05.206 D/StrictMode( 8940): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:05.206 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:05.206 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:05.206 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:05.206 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:05.206 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:05.206 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:05.206 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:05.207 D/StrictMode( 8940): StrictMode policy violation; ~duration=110 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:05.207 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:05.207 D/StrictMode( 8940): at android.app.SharedPreferencesImpl.awaitLoadedLocked(SharedPreferencesImpl.java:256)
+06-02 16:38:05.207 D/StrictMode( 8940): at android.app.SharedPreferencesImpl.getBoolean(SharedPreferencesImpl.java:325)
+06-02 16:38:05.207 D/StrictMode( 8940): at org.mozilla.fenix.DebugFenixApplication.setupLeakCanary(DebugFenixApplication.kt:16)
+06-02 16:38:05.207 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:140)
+06-02 16:38:05.207 D/StrictMode( 8940): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:05.207 D/StrictMode( 8940): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:05.207 D/StrictMode( 8940): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:05.207 D/StrictMode( 8940): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:05.207 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:05.207 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:05.207 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:05.207 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:05.207 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:05.207 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:05.207 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:05.262 W/enix.debug:tab( 8988): Unexpected CPU variant for X86 using defaults: x86
+06-02 16:38:05.304 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/content/res/Resources$Theme;->rebase()V (dark greylist, reflection)
+06-02 16:38:05.309 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/content/res/Resources$Theme;->rebase()V
+06-02 16:38:05.309 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.309 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.309 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:05.309 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:2064)
+06-02 16:38:05.309 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethod(Class.java:2047)
+06-02 16:38:05.309 D/StrictMode( 8940): at androidx.core.content.res.ResourcesCompat$ThemeCompat$ImplApi23.rebase(ResourcesCompat.java:501)
+06-02 16:38:05.309 D/StrictMode( 8940): at androidx.core.content.res.ResourcesCompat$ThemeCompat.rebase(ResourcesCompat.java:477)
+06-02 16:38:05.309 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.attachBaseContext2(AppCompatDelegateImpl.java:465)
+06-02 16:38:05.309 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:107)
+06-02 16:38:05.309 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:19)
+06-02 16:38:05.309 D/StrictMode( 8940): at android.app.Activity.attach(Activity.java:7051)
+06-02 16:38:05.309 D/StrictMode( 8940): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+06-02 16:38:05.309 D/StrictMode( 8940): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:05.309 D/StrictMode( 8940): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:05.309 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:05.309 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:05.309 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:05.309 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:05.309 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:05.309 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:05.309 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:05.309 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:05.309 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): Failed to retrieve rebase() method
+06-02 16:38:05.314 I/ResourcesCompat( 8940): java.lang.NoSuchMethodException: rebase []
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at java.lang.Class.getMethod(Class.java:2068)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at java.lang.Class.getDeclaredMethod(Class.java:2047)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at androidx.core.content.res.ResourcesCompat$ThemeCompat$ImplApi23.rebase(ResourcesCompat.java:501)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at androidx.core.content.res.ResourcesCompat$ThemeCompat.rebase(ResourcesCompat.java:477)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.attachBaseContext2(AppCompatDelegateImpl.java:465)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:107)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:19)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at android.app.Activity.attach(Activity.java:7051)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:05.314 I/ResourcesCompat( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:05.335 I/enix.debug:tab( 8988): The ClassLoaderContext is a special shared library.
+06-02 16:38:05.356 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/graphics/drawable/Drawable;->getOpticalInsets()Landroid/graphics/Insets; (light greylist, linking)
+06-02 16:38:05.356 W/lla.fenix.debu( 8940): Accessing hidden field Landroid/graphics/Insets;->left:I (light greylist, linking)
+06-02 16:38:05.357 W/lla.fenix.debu( 8940): Accessing hidden field Landroid/graphics/Insets;->right:I (light greylist, linking)
+06-02 16:38:05.357 W/lla.fenix.debu( 8940): Accessing hidden field Landroid/graphics/Insets;->top:I (light greylist, linking)
+06-02 16:38:05.357 W/lla.fenix.debu( 8940): Accessing hidden field Landroid/graphics/Insets;->bottom:I (light greylist, linking)
+06-02 16:38:05.361 D/GeckoViewStartup( 8940): observe: app-startup
+06-02 16:38:05.391 D/GeckoViewConsole( 8940): enabled = true
+06-02 16:38:05.453 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/view/View;->getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate; (light greylist, linking)
+06-02 16:38:05.461 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
+06-02 16:38:05.466 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
+06-02 16:38:05.466 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.466 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.466 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:05.466 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:2064)
+06-02 16:38:05.466 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethod(Class.java:2047)
+06-02 16:38:05.466 D/StrictMode( 8940): at androidx.appcompat.widget.ViewUtils.<clinit>(ViewUtils.java:44)
+06-02 16:38:05.466 D/StrictMode( 8940): at androidx.appcompat.widget.ViewUtils.makeOptionalFitsSystemWindows(ViewUtils.java:80)
+06-02 16:38:05.466 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:970)
+06-02 16:38:05.466 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:803)
+06-02 16:38:05.466 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:692)
+06-02 16:38:05.466 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
+06-02 16:38:05.466 D/StrictMode( 8940): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:130)
+06-02 16:38:05.466 D/StrictMode( 8940): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:05.466 D/StrictMode( 8940): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:05.466 D/StrictMode( 8940): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:05.466 D/StrictMode( 8940): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:05.466 D/StrictMode( 8940): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:05.466 D/StrictMode( 8940): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:05.466 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:05.466 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:05.466 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:05.466 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:05.466 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:05.466 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:05.466 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:05.466 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:05.466 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:05.468 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
+06-02 16:38:05.470 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V
+06-02 16:38:05.470 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.470 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.470 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:05.470 D/StrictMode( 8940): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:05.470 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:05.470 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:05.470 D/StrictMode( 8940): at androidx.appcompat.widget.ViewUtils.makeOptionalFitsSystemWindows(ViewUtils.java:84)
+06-02 16:38:05.470 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:970)
+06-02 16:38:05.470 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:803)
+06-02 16:38:05.470 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:692)
+06-02 16:38:05.470 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
+06-02 16:38:05.470 D/StrictMode( 8940): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:130)
+06-02 16:38:05.470 D/StrictMode( 8940): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:05.470 D/StrictMode( 8940): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:05.470 D/StrictMode( 8940): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:05.470 D/StrictMode( 8940): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:05.470 D/StrictMode( 8940): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:05.470 D/StrictMode( 8940): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:05.470 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:05.470 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:05.470 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:05.470 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:05.470 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:05.470 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:05.470 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:05.470 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:05.470 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:05.546 I/GeckoConsole( 8940): No chrome package registered for chrome://browser/content/built_in_addons.json
+06-02 16:38:05.598 I/AJC ( 8940): isPerformanceTest
+06-02 16:38:05.601 I/AJC ( 8940): isPerformanceTest : isPhonePlugged: true
+06-02 16:38:05.601 I/AJC ( 8940): isPerformanceTest : isAdbEnabled: true
+06-02 16:38:05.606 D/App ( 8940): DebugMetricController: track event: org.mozilla.fenix.components.metrics.Event$DismissedOnboarding@6354493
+06-02 16:38:05.893 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/graphics/FontFamily;-><init>()V (light greylist, reflection)
+06-02 16:38:05.900 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;-><init>()V
+06-02 16:38:05.900 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.900 D/StrictMode( 8940): at java.lang.Class.getDeclaredConstructorInternal(Native Method)
+06-02 16:38:05.900 D/StrictMode( 8940): at java.lang.Class.getConstructor0(Class.java:2325)
+06-02 16:38:05.900 D/StrictMode( 8940): at java.lang.Class.getConstructor(Class.java:1725)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainFontFamilyCtor(TypefaceCompatApi26Impl.java:321)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:84)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:05.900 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:05.900 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:05.900 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:05.900 D/StrictMode( 8940): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:05.900 D/StrictMode( 8940): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:05.900 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:05.900 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:05.900 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
+06-02 16:38:05.900 D/StrictMode( 8940): at
+06-02 16:38:05.901 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/graphics/FontFamily;->addFontFromAssetManager(Landroid/content/res/AssetManager;Ljava/lang/String;IZIII[Landroid/graphics/fonts/FontVariationAxis;)Z (light greylist, reflection)
+06-02 16:38:05.914 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;->addFontFromAssetManager(Landroid/content/res/AssetManager;Ljava/lang/String;IZIII[Landroid/graphics/fonts/FontVariationAxis;)Z
+06-02 16:38:05.914 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.914 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:05.914 D/StrictMode( 8940): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:05.914 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:05.914 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainAddFontFromAssetManagerMethod(TypefaceCompatApi26Impl.java:326)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:85)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:05.914 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:05.914 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:05.914 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:05.914 D/StrictMode( 8940): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:05.914 D/StrictMode( 8940): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:05.914 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:05.914 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:05.914 D/StrictMode( 8940): at androidx.fragme
+06-02 16:38:05.915 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/graphics/FontFamily;->addFontFromBuffer(Ljava/nio/ByteBuffer;I[Landroid/graphics/fonts/FontVariationAxis;II)Z (light greylist, reflection)
+06-02 16:38:05.924 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;->addFontFromBuffer(Ljava/nio/ByteBuffer;I[Landroid/graphics/fonts/FontVariationAxis;II)Z
+06-02 16:38:05.924 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.924 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:05.924 D/StrictMode( 8940): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:05.924 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:05.924 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainAddFontFromBufferMethod(TypefaceCompatApi26Impl.java:333)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:86)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:05.924 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:05.924 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:05.924 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:05.924 D/StrictMode( 8940): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:05.924 D/StrictMode( 8940): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:05.924 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:05.924 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:05.924 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.removeRedundantOperati
+06-02 16:38:05.924 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/graphics/FontFamily;->freeze()Z (light greylist, reflection)
+06-02 16:38:05.931 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;->freeze()Z
+06-02 16:38:05.931 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.931 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:05.931 D/StrictMode( 8940): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:05.931 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:05.931 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainFreezeMethod(TypefaceCompatApi26Impl.java:339)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:87)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:05.931 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:05.931 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:05.931 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:05.931 D/StrictMode( 8940): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:05.931 D/StrictMode( 8940): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:05.931 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:05.931 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:05.931 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.execPe
+06-02 16:38:05.931 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/graphics/FontFamily;->abortCreation()V (light greylist, reflection)
+06-02 16:38:05.938 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;->abortCreation()V
+06-02 16:38:05.938 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.938 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:05.938 D/StrictMode( 8940): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:05.938 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:05.938 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainAbortCreationMethod(TypefaceCompatApi26Impl.java:343)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:88)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:05.938 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:05.938 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:05.938 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:05.938 D/StrictMode( 8940): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:05.938 D/StrictMode( 8940): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:05.938 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:05.938 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:05.938 D/StrictMode( 8940): at androidx.fragment.app.Fragment
+06-02 16:38:05.943 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/graphics/Typeface;->createFromFamiliesWithDefault([Landroid/graphics/FontFamily;Ljava/lang/String;II)Landroid/graphics/Typeface; (light greylist, reflection)
+06-02 16:38:05.948 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/Typeface;->createFromFamiliesWithDefault([Landroid/graphics/FontFamily;Ljava/lang/String;II)Landroid/graphics/Typeface;
+06-02 16:38:05.948 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:05.948 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:05.948 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:2064)
+06-02 16:38:05.948 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethod(Class.java:2047)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi28Impl.obtainCreateFromFamiliesWithDefaultMethod(TypefaceCompatApi28Impl.java:62)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:89)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:05.948 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:05.948 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:05.948 D/StrictMode( 8940): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:05.948 D/StrictMode( 8940): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:05.948 D/StrictMode( 8940): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:05.948 D/StrictMode( 8940): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:05.948 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:05.948 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentMa
+06-02 16:38:05.990 I/droid.apps.doc( 8852): Waiting for a blocking GC ProfileSaver
+06-02 16:38:06.011 I/droid.apps.doc( 8852): WaitForGcToComplete blocked ProfileSaver on HeapTrim for 20.559ms
+06-02 16:38:06.052 I/EventLogSendingHelper( 2402): Sending log events.
+06-02 16:38:06.103 D/GeckoThread( 8940): State changed to PROFILE_READY
+06-02 16:38:06.164 D/GeckoViewStartup( 8940): observe: profile-after-change
+06-02 16:38:06.183 D/GeckoViewTelemetryController( 8940): setup - canRecordPrereleaseData true, canRecordReleaseData true
+06-02 16:38:06.247 D/GeckoRuntime( 8940): Lifecycle: onStart
+06-02 16:38:06.250 D/GeckoThread( 8940): State changed to RUNNING
+06-02 16:38:06.252 D/GeckoRuntime( 8940): Lifecycle: onResume
+06-02 16:38:06.256 D/GeckoNetworkManager( 8940): Incoming event start for state OffNoListeners -> OnNoListeners
+06-02 16:38:06.258 D/GeckoNetworkManager( 8940): New network state: UP, WIFI, WIFI
+06-02 16:38:06.264 D/OpenGLRenderer( 8940): Skia GL Pipeline
+06-02 16:38:06.277 I/Gecko ( 8940): -*- nsDNSServiceDiscovery.js : nsDNSServiceDiscovery
+06-02 16:38:06.302 E/SurfaceFlinger( 1728): ro.sf.lcd_density must be defined as a build property
+06-02 16:38:06.327 D/StrictMode( 8940): StrictMode policy violation; ~duration=1066 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:06.327 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:06.327 D/StrictMode( 8940): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:06.327 D/StrictMode( 8940): at java.io.File.exists(File.java:815)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.app.ContextImpl.getDataDir(ContextImpl.java:2253)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:550)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:06.327 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleManager$Storage.getSharedPreferences(LocaleManager.kt:123)
+06-02 16:38:06.327 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleManager$Storage.getLocale(LocaleManager.kt:99)
+06-02 16:38:06.327 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleManager.getCurrentLocale(LocaleManager.kt:42)
+06-02 16:38:06.327 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleManager.updateResources$support_locale_release(LocaleManager.kt:72)
+06-02 16:38:06.327 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:18)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.app.Activity.attach(Activity.java:7051)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:06.327 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:06.327 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:06.327 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:06.327 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:06.328 D/StrictMode( 8940): StrictMode policy violation; ~duration=1066 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:06.328 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:06.328 D/StrictMode( 8940): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:06.328 D/StrictMode( 8940): at java.io.File.exists(File.java:815)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:06.328 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleManager$Storage.getSharedPreferences(LocaleManager.kt:123)
+06-02 16:38:06.328 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleManager$Storage.getLocale(LocaleManager.kt:99)
+06-02 16:38:06.328 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleManager.getCurrentLocale(LocaleManager.kt:42)
+06-02 16:38:06.328 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleManager.updateResources$support_locale_release(LocaleManager.kt:72)
+06-02 16:38:06.328 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:18)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.app.Activity.attach(Activity.java:7051)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:06.328 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:06.328 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:06.328 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:06.328 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:06.332 D/StrictMode( 8940): StrictMode policy violation; ~duration=725 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:06.332 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:06.332 D/StrictMode( 8940): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:06.332 D/StrictMode( 8940): at java.io.File.exists(File.java:815)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.ContextImpl.getDataDir(ContextImpl.java:2253)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:550)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:06.332 D/StrictMode( 8940): at org.mozilla.fenix.onboarding.FenixOnboarding.<init>(FenixOnboarding.kt:15)
+06-02 16:38:06.332 D/StrictMode( 8940): at org.mozilla.fenix.perf.Performance.disableOnboarding(Performance.kt:72)
+06-02 16:38:06.332 D/StrictMode( 8940): at org.mozilla.fenix.perf.Performance.processIntentIfPerformanceTest(Performance.kt:32)
+06-02 16:38:06.332 D/StrictMode( 8940): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:145)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:06.332 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:06.332 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:06.332 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:06.332 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:06.342 D/StrictMode( 8940): StrictMode policy violation; ~duration=725 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:06.342 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:06.342 D/StrictMode( 8940): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:06.342 D/StrictMode( 8940): at java.io.File.exists(File.java:815)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:06.342 D/StrictMode( 8940): at org.mozilla.fenix.onboarding.FenixOnboarding.<init>(FenixOnboarding.kt:15)
+06-02 16:38:06.342 D/StrictMode( 8940): at org.mozilla.fenix.perf.Performance.disableOnboarding(Performance.kt:72)
+06-02 16:38:06.342 D/StrictMode( 8940): at org.mozilla.fenix.perf.Performance.processIntentIfPerformanceTest(Performance.kt:32)
+06-02 16:38:06.342 D/StrictMode( 8940): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:145)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:06.342 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:06.342 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:06.342 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:06.342 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:06.348 D/StrictMode( 8940): StrictMode policy violation; ~duration=724 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:06.348 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.app.SharedPreferencesImpl.awaitLoadedLocked(SharedPreferencesImpl.java:256)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.app.SharedPreferencesImpl.edit(SharedPreferencesImpl.java:349)
+06-02 16:38:06.348 D/StrictMode( 8940): at org.mozilla.fenix.onboarding.FenixOnboarding.setOnboardedVersion(FenixOnboarding.kt:42)
+06-02 16:38:06.348 D/StrictMode( 8940): at org.mozilla.fenix.onboarding.FenixOnboarding.finish(FenixOnboarding.kt:25)
+06-02 16:38:06.348 D/StrictMode( 8940): at org.mozilla.fenix.perf.Performance.disableOnboarding(Performance.kt:72)
+06-02 16:38:06.348 D/StrictMode( 8940): at org.mozilla.fenix.perf.Performance.processIntentIfPerformanceTest(Performance.kt:32)
+06-02 16:38:06.348 D/StrictMode( 8940): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:145)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:06.348 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:06.348 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:06.348 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:06.348 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:06.352 D/StrictMode( 8940): StrictMode policy violation; ~duration=237 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:06.352 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:06.352 D/StrictMode( 8940): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:06.352 D/StrictMode( 8940): at java.io.File.exists(File.java:815)
+06-02 16:38:06.352 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:06.352 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:06.352 D/StrictMode( 8940): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:06.352 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:06.352 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:06.352 D/StrictMode( 8940): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:06.352 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleManager$Storage.getSharedPreferences(LocaleManager.kt:123)
+06-02 16:38:06.352 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleManager$Storage.getLocale(LocaleManager.kt:99)
+06-02 16:38:06.352 D/StrictMode( 8940): at mozilla.components.support.locale.LocaleManager.getCurrentLocale(LocaleManager.kt:42)
+06-02 16:38:06.352 D/StrictMode( 8940): at org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt.getSelectedLocale(LocaleManagerExtension.kt:39)
+06-02 16:38:06.352 D/StrictMode( 8940): at org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt.getSelectedLocale$default(LocaleManagerExtension.kt:37)
+06-02 16:38:06.352 D/StrictMode( 8940): at org.mozilla.fenix.components.TopSiteStorage.addDefaultTopSites(TopSiteStorage.kt:57)
+06-02 16:38:06.352 D/StrictMode( 8940): at org.mozilla.fenix.components.TopSiteStorage.<init>(TopSiteStorage.kt:30)
+06-02 16:38:06.352 D/StrictMode( 8940): at org.mozilla.fenix.components.Core$topSiteStorage$2.invoke(Core.kt:216)
+06-02 16:38:06.352 D/StrictMode( 8940): at org.mozilla.fenix.components.Core$topSiteStorage$2.invoke(Core.kt:57)
+06-02 16:38:06.352 D/StrictMode( 8940): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:06.352 D/StrictMode( 8940): at org.mozilla.fenix.components.Core.getTopSiteStorage(Unknown Source:8)
+06-02 16:38:06.352 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment$onCreateView$2.invoke(HomeFragment.kt:210)
+06-02 16:38:06.352 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment$onCreateView$2.invoke(HomeFragment.kt:114)
+06-02 16:38:06.352 D/StrictMode( 8940): at org.mozilla.fenix.components.StoreProviderFactory.create(StoreProvider.kt:42)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
+06-02 16:38:06.352 D/StrictMode( 8940): at org.mozilla.fenix.components.StoreProvider$Companion.get(StoreProvider.kt:46)
+06-02 16:38:06.352 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:203)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
+06-02 16:38:06.352 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
+06-02 16:38:06.352 D/StrictMode( 8940): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
+06-02 16:38:06.352 D/StrictMode( 8940):
+06-02 16:38:06.368 D/StrictMode( 8940): StrictMode policy violation; ~duration=131 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:06.368 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:06.368 D/StrictMode( 8940): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:06.368 D/StrictMode( 8940): at java.io.File.exists(File.java:815)
+06-02 16:38:06.368 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:06.368 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:06.368 D/StrictMode( 8940): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:06.368 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:06.368 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:06.368 D/StrictMode( 8940): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:06.368 D/StrictMode( 8940): at org.mozilla.fenix.components.AccountAbnormalities.<init>(AccountAbnormalities.kt:78)
+06-02 16:38:06.368 D/StrictMode( 8940): at org.mozilla.fenix.components.AccountAbnormalities.<init>(AccountAbnormalities.kt:60)
+06-02 16:38:06.368 D/StrictMode( 8940): at org.mozilla.fenix.components.BackgroundServices.<init>(BackgroundServices.kt:103)
+06-02 16:38:06.368 D/StrictMode( 8940): at org.mozilla.fenix.components.Components$backgroundServices$2.invoke(Components.kt:34)
+06-02 16:38:06.368 D/StrictMode( 8940): at org.mozilla.fenix.components.Components$backgroundServices$2.invoke(Components.kt:32)
+06-02 16:38:06.368 D/StrictMode( 8940): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:06.368 D/StrictMode( 8940): at org.mozilla.fenix.components.Components.getBackgroundServices(Unknown Source:7)
+06-02 16:38:06.368 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2.invoke(HomeMenu.kt:131)
+06-02 16:38:06.368 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2.invoke(HomeMenu.kt:31)
+06-02 16:38:06.368 D/StrictMode( 8940): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:06.368 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeMenu.getCoreMenuItems(Unknown Source:7)
+06-02 16:38:06.368 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeMenu.<init>(HomeMenu.kt:170)
+06-02 16:38:06.368 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment.createHomeMenu(HomeFragment.kt:668)
+06-02 16:38:06.368 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment.onViewCreated(HomeFragment.kt:337)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:332)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
+06-02 16:38:06.368 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
+06-02 16:38:06.368 D/StrictMode( 8940): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
+06-02 16:38:06.368 D/StrictMode( 8940): at android.app.Activity.performStart(Activity.java:7157)
+06-02 16:38:06.368 D/StrictMode( 8940): at android.app.ActivityThread.handleStartActivity(ActivityThread.java:2937)
+06-02 16:38:06.368 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
+06-02 16:38:06.368 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
+06-02 16:38:06.368 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
+06-02 16:38:06.368 D/StrictMode( 8940): at android.app.servertransaction.TransactionExecutor.execute(Transa
+06-02 16:38:06.379 D/StrictMode( 8940): StrictMode policy violation; ~duration=96 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:06.379 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:06.379 D/StrictMode( 8940): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:06.379 D/StrictMode( 8940): at java.io.File.exists(File.java:815)
+06-02 16:38:06.379 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:06.379 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:06.379 D/StrictMode( 8940): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:06.379 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:06.379 D/StrictMode( 8940): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:06.379 D/StrictMode( 8940): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:06.379 D/StrictMode( 8940): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:06.379 D/StrictMode( 8940): at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:526)
+06-02 16:38:06.379 D/StrictMode( 8940): at org.mozilla.fenix.whatsnew.SharedPreferenceWhatsNewStorage.<init>(WhatsNewStorage.kt:35)
+06-02 16:38:06.379 D/StrictMode( 8940): at org.mozilla.fenix.whatsnew.WhatsNew$Companion.shouldHighlightWhatsNew(WhatsNew.kt:71)
+06-02 16:38:06.379 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2$whatsNewItem$1.invoke(HomeMenu.kt:92)
+06-02 16:38:06.379 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2$whatsNewItem$1.invoke(HomeMenu.kt:31)
+06-02 16:38:06.379 D/StrictMode( 8940): at mozilla.components.browser.menu.ext.BrowserMenuItemKt$getHighlight$3.invoke(BrowserMenuItem.kt:18)
+06-02 16:38:06.379 D/StrictMode( 8940): at mozilla.components.browser.menu.ext.BrowserMenuItemKt$getHighlight$3.invoke(Unknown Source:2)
+06-02 16:38:06.379 D/StrictMode( 8940): at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:133)
+06-02 16:38:06.379 D/StrictMode( 8940): at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:156)
+06-02 16:38:06.379 D/StrictMode( 8940): at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:176)
+06-02 16:38:06.379 D/StrictMode( 8940): at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:131)
+06-02 16:38:06.379 D/StrictMode( 8940): at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:156)
+06-02 16:38:06.379 D/StrictMode( 8940): at mozilla.components.browser.menu.ext.BrowserMenuItemKt.getHighlight(BrowserMenuItem.kt:31)
+06-02 16:38:06.379 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2.invoke(HomeMenu.kt:149)
+06-02 16:38:06.379 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2.invoke(HomeMenu.kt:31)
+06-02 16:38:06.379 D/StrictMode( 8940): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:06.379 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeMenu.getCoreMenuItems(Unknown Source:7)
+06-02 16:38:06.379 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeMenu.<init>(HomeMenu.kt:170)
+06-02 16:38:06.379 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment.createHomeMenu(HomeFragment.kt:668)
+06-02 16:38:06.379 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment.onViewCreated(HomeFragment.kt:337)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:332)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
+06-02 16:38:06.379 D/StrictMode( 8940): at androidx.appcompat.app.AppCompatAc
+06-02 16:38:06.383 D/LeakCanary( 8940): LeakCanary is running and ready to detect leaks
+06-02 16:38:06.386 I/libglean_ffi( 8940): glean_core::ping: Collecting baseline
+06-02 16:38:06.398 D/libglean_ffi( 8940): glean_core::ping: Storing ping '0f17279d-898f-4274-874d-358ab99b6d4e' at '/data/user/0/org.mozilla.fenix.debug/glean_data/pending_pings/0f17279d-898f-4274-874d-358ab99b6d4e'
+06-02 16:38:06.399 I/libglean_ffi( 8940): glean_core: The ping 'baseline' was submitted and will be sent as soon as possible
+06-02 16:38:06.424 D/GeckoNetworkManager( 8940): Incoming event enableNotifications for state OnNoListeners -> OnWithListeners
+06-02 16:38:06.431 D/GeckoNetworkManager( 8940): New network state: UP, WIFI, WIFI
+06-02 16:38:06.436 W/ActivityManager( 1869): Receiver with filter android.content.IntentFilter@68a603a already registered for pid 8940, callerPackage is org.mozilla.fenix.debug
+06-02 16:38:06.439 D/GeckoNetworkManager( 8940): Incoming event receivedUpdate for state OnWithListeners -> OnWithListeners
+06-02 16:38:06.440 D/GeckoNetworkManager( 8940): New network state: UP, WIFI, WIFI
+06-02 16:38:06.449 D/GeckoViewStartup( 8940): onEvent GeckoView:SetLocale
+06-02 16:38:06.459 D/GeckoViewStartup( 8940): onEvent GeckoView:ResetUserPrefs
+06-02 16:38:06.493 D/GeckoViewRemoteDebugger( 8940): onInit
+06-02 16:38:06.495 D/GeckoViewConsole( 8940): enabled = false
+06-02 16:38:06.540 D/WIFI_UT ( 1869): got request NetworkRequest [ TRACK_DEFAULT id=33, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10099] ] with score 60
+06-02 16:38:06.540 D/WIFI ( 1869): got request NetworkRequest [ TRACK_DEFAULT id=33, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10099] ] with score 60
+06-02 16:38:06.541 D/PhoneSwitcherNetworkRequstListener( 2121): got request NetworkRequest [ TRACK_DEFAULT id=33, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10099] ] with score 60
+06-02 16:38:06.548 I/lla.fenix.debu( 8940): Background concurrent copying GC freed 21002(1731KB) AllocSpace objects, 41(1252KB) LOS objects, 49% free, 4MB/8MB, paused 488us total 183.846ms
+06-02 16:38:06.562 D/GeckoViewStartup( 8940): onEvent GeckoView:SetLocale
+06-02 16:38:06.563 D/GeckoViewStartup( 8940): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:06.578 I/chatty ( 8940): uid=10099(org.mozilla.fenix.debug) identical 1 line
+06-02 16:38:06.584 D/GeckoViewStartup( 8940): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:06.587 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:06.596 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:06.602 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:06.607 D/ ( 8940): HostConnection::get() New Host Connection established 0xcd97f0c0, tid 9026
+06-02 16:38:06.614 D/GeckoViewStartup( 8940): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:06.616 I/ConfigStore( 8940): android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
+06-02 16:38:06.616 D/GeckoThread( 8988): State changed to LAUNCHED
+06-02 16:38:06.616 I/ConfigStore( 8940): android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
+06-02 16:38:06.616 I/OpenGLRenderer( 8940): Initialized EGL, version 1.4
+06-02 16:38:06.616 D/OpenGLRenderer( 8940): Swap behavior 1
+06-02 16:38:06.616 W/OpenGLRenderer( 8940): Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
+06-02 16:38:06.616 D/OpenGLRenderer( 8940): Swap behavior 0
+06-02 16:38:06.617 D/EGL_emulation( 8940): eglCreateContext: 0xe33868c0: maj 3 min 0 rcv 3
+06-02 16:38:06.618 D/GeckoViewStartup( 8940): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:06.619 I/GeckoThread( 8988): preparing to run Gecko
+06-02 16:38:06.619 D/EGL_emulation( 8940): eglMakeCurrent: 0xe33868c0: ver 3 0 (tinfo 0xb3475200)
+06-02 16:38:06.624 E/SurfaceFlinger( 1728): ro.sf.lcd_density must be defined as a build property
+06-02 16:38:06.631 D/GeckoViewStartup( 8940): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:06.636 W/lla.fenix.debu( 8940): Accessing hidden field Landroid/os/Trace;->TRACE_TAG_APP:J (light greylist, reflection)
+06-02 16:38:06.641 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->TRACE_TAG_APP:J
+06-02 16:38:06.641 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:06.641 D/StrictMode( 8940): at java.lang.Class.getPublicFieldRecursive(Native Method)
+06-02 16:38:06.641 D/StrictMode( 8940): at java.lang.Class.getField(Class.java:1599)
+06-02 16:38:06.641 D/StrictMode( 8940): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:48)
+06-02 16:38:06.641 D/StrictMode( 8940): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:06.641 D/StrictMode( 8940): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.641 D/StrictMode( 8940): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:06.641 D/StrictMode( 8940): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:06.641 D/StrictMode( 8940): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:06.641 D/StrictMode( 8940): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.641 D/StrictMode( 8940): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:06.641 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:06.641 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:06.641 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:06.641 D/StrictMode( 8940): at com.and
+06-02 16:38:06.641 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/os/Trace;->isTagEnabled(J)Z (light greylist, reflection)
+06-02 16:38:06.645 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->isTagEnabled(J)Z
+06-02 16:38:06.645 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:06.645 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:06.645 D/StrictMode( 8940): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:06.645 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:06.645 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:06.645 D/StrictMode( 8940): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:51)
+06-02 16:38:06.645 D/StrictMode( 8940): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:06.645 D/StrictMode( 8940): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.645 D/StrictMode( 8940): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:06.645 D/StrictMode( 8940): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:06.645 D/StrictMode( 8940): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:06.645 D/StrictMode( 8940): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.645 D/StrictMode( 8940): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:06.645 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:06.645 D/StrictMode( 8940): at java.lang.reflect.Method.invoke
+06-02 16:38:06.645 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V (light greylist, reflection)
+06-02 16:38:06.653 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V
+06-02 16:38:06.653 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:06.653 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:06.653 D/StrictMode( 8940): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:06.653 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:06.653 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:06.653 D/StrictMode( 8940): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:52)
+06-02 16:38:06.653 D/StrictMode( 8940): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:06.653 D/StrictMode( 8940): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.653 D/StrictMode( 8940): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:06.653 D/StrictMode( 8940): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:06.653 D/StrictMode( 8940): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:06.653 D/StrictMode( 8940): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.653 D/StrictMode( 8940): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:06.653 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:06.653 D/StrictMode( 8940): at java.lang
+06-02 16:38:06.653 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V (light greylist, reflection)
+06-02 16:38:06.658 D/GeckoViewStartup( 8940): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:06.661 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V
+06-02 16:38:06.661 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:06.661 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:06.661 D/StrictMode( 8940): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:06.661 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:06.661 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:06.661 D/StrictMode( 8940): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:54)
+06-02 16:38:06.661 D/StrictMode( 8940): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:06.661 D/StrictMode( 8940): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.661 D/StrictMode( 8940): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:06.661 D/StrictMode( 8940): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:06.661 D/StrictMode( 8940): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:06.661 D/StrictMode( 8940): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.661 D/StrictMode( 8940): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:06.661 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:06.661 D/StrictMode( 8940): at java.lang.r
+06-02 16:38:06.662 W/lla.fenix.debu( 8940): Accessing hidden method Landroid/os/Trace;->traceCounter(JLjava/lang/String;I)V (light greylist, reflection)
+06-02 16:38:06.663 D/GeckoViewStartup( 8940): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:06.664 D/GeckoViewStartup( 8940): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:06.670 D/StrictMode( 8940): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->traceCounter(JLjava/lang/String;I)V
+06-02 16:38:06.670 D/StrictMode( 8940): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:06.670 D/StrictMode( 8940): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:06.670 D/StrictMode( 8940): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:06.670 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:06.670 D/StrictMode( 8940): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:06.670 D/StrictMode( 8940): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:56)
+06-02 16:38:06.670 D/StrictMode( 8940): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:06.670 D/StrictMode( 8940): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.670 D/StrictMode( 8940): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:06.670 D/StrictMode( 8940): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:06.670 D/StrictMode( 8940): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:06.670 D/StrictMode( 8940): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:06.670 D/StrictMode( 8940): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.View.layout(View.java:20672)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:06.670 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:06.670 D/StrictMode( 8940): at java.lang.re
+06-02 16:38:06.673 D/GeckoViewStartup( 8940): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:06.693 D/GeckoViewStartup( 8940): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:06.702 D/GeckoNetworkManager( 8940): Incoming event receivedUpdate for state OnWithListeners -> OnWithListeners
+06-02 16:38:06.703 D/GeckoNetworkManager( 8940): New network state: UP, WIFI, WIFI
+06-02 16:38:06.715 D/GeckoViewConsole( 8940): onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"webcompat@mozilla.com","locationUri":"resource://android/assets/extensions/webcompat/"}
+06-02 16:38:06.727 D/GeckoViewConsole( 8940): onEvent GeckoView:WebExtension:List null
+06-02 16:38:06.730 D/GeckoViewConsole( 8940): onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"mozacBrowserIcons","locationUri":"resource://android/assets/extensions/browser-icons/"}
+06-02 16:38:06.735 D/GeckoViewConsole( 8940): onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"mozacBrowserAds","locationUri":"resource://android/assets/extensions/ads/"}
+06-02 16:38:06.736 D/EGL_emulation( 8940): eglMakeCurrent: 0xe33868c0: ver 3 0 (tinfo 0xb3475200)
+06-02 16:38:06.737 D/GeckoViewConsole( 8940): onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"BrowserCookiesExtension","locationUri":"resource://android/assets/extensions/cookies/"}
+06-02 16:38:06.782 D/glean/PingUploadWorker( 8940): Processing persisted pings at /data/user/0/org.mozilla.fenix.debug/glean_data/pending_pings
+06-02 16:38:06.782 D/glean/PingUploadWorker( 8940): Processing ping: 0f17279d-898f-4274-874d-358ab99b6d4e
+06-02 16:38:06.784 I/ActivityManager( 1869): Displayed org.mozilla.fenix.debug/.App: +3s625ms
+06-02 16:38:06.787 I/GoogleInputMethod( 1996): onFinishInput() : Dummy InputConnection bound
+06-02 16:38:06.789 I/GoogleInputMethod( 1996): onStartInput() : Dummy InputConnection bound
+06-02 16:38:06.800 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:06.803 I/DefaultSupportedAddonsChecker( 8940): Register check for new supported add-ons
+06-02 16:38:06.808 D/glean/ConceptFetchHttpUploader( 8940): Submitting ping to: https://incoming.telemetry.mozilla.org/submit/org-mozilla-fenix-debug/baseline/1/0f17279d-898f-4274-874d-358ab99b6d4e
+06-02 16:38:06.838 D/StrictMode( 8940): StrictMode policy violation; ~duration=26 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:06.838 D/StrictMode( 8940): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:06.838 D/StrictMode( 8940): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:06.838 D/StrictMode( 8940): at java.io.File.exists(File.java:815)
+06-02 16:38:06.838 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:06.838 D/StrictMode( 8940): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:06.838 D/StrictMode( 8940): at android.app.ContextImpl.getFilesDir(ContextImpl.java:641)
+06-02 16:38:06.838 D/StrictMode( 8940): at android.content.ContextWrapper.getFilesDir(ContextWrapper.java:239)
+06-02 16:38:06.838 D/StrictMode( 8940): at mozilla.components.feature.tab.collections.TabCollectionStorage.<init>(TabCollectionStorage.kt:29)
+06-02 16:38:06.838 D/StrictMode( 8940): at org.mozilla.fenix.components.TabCollectionStorage$collectionStorage$2.invoke(TabCollectionStorage.kt:52)
+06-02 16:38:06.838 D/StrictMode( 8940): at org.mozilla.fenix.components.TabCollectionStorage$collectionStorage$2.invoke(TabCollectionStorage.kt:23)
+06-02 16:38:06.838 D/StrictMode( 8940): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:06.838 D/StrictMode( 8940): at org.mozilla.fenix.components.TabCollectionStorage.getCollectionStorage(Unknown Source:7)
+06-02 16:38:06.838 D/StrictMode( 8940): at org.mozilla.fenix.components.TabCollectionStorage.getCollections(TabCollectionStorage.kt:70)
+06-02 16:38:06.838 D/StrictMode( 8940): at org.mozilla.fenix.components.TabCollectionStorage.getCollections$default(TabCollectionStorage.kt:69)
+06-02 16:38:06.838 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment.subscribeToTabCollections(HomeFragment.kt:750)
+06-02 16:38:06.838 D/StrictMode( 8940): at org.mozilla.fenix.home.HomeFragment.onStart(HomeFragment.kt:404)
+06-02 16:38:06.838 D/StrictMode( 8940): at androidx.fragment.app.Fragment.performStart(Fragment.java:2730)
+06-02 16:38:06.838 D/StrictMode( 8940): at androidx.fragment.app.FragmentStateManager.start(FragmentStateManager.java:365)
+06-02 16:38:06.838 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1194)
+06-02 16:38:06.838 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
+06-02 16:38:06.838 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
+06-02 16:38:06.838 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
+06-02 16:38:06.838 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.completeExecute(FragmentManager.java:2125)
+06-02 16:38:06.838 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager$StartEnterTransitionListener.completeTransaction(FragmentManager.java:3022)
+06-02 16:38:06.838 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.executePostponedTransaction(FragmentManager.java:1895)
+06-02 16:38:06.838 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.ensureExecReady(FragmentManager.java:1803)
+06-02 16:38:06.838 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1843)
+06-02 16:38:06.838 D/StrictMode( 8940): at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
+06-02 16:38:06.838 D/StrictMode( 8940): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:06.838 D/StrictMode( 8940): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:06.838 D/StrictMode( 8940): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:06.838 D/StrictMode( 8940): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:06.838 D/StrictMode( 8940): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:06.838 D/StrictMode( 8940): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:06.838 D/StrictMode( 8940): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:06.902 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:06.956 D/gralloc_ranchu( 1869): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:06.958 D/ ( 1869): HostConnection::get() New Host Connection established 0xc1e7f900, tid 1930
+06-02 16:38:06.961 D/gralloc_ranchu( 1869): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:06.961 D/ ( 1869): HostConnection::get() New Host Connection established 0xc1e7f900, tid 1930
+06-02 16:38:06.961 D/gralloc_ranchu( 1869): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:06.963 D/ ( 1869): HostConnection::get() New Host Connection established 0xc1e7f900, tid 1930
+06-02 16:38:06.967 D/gralloc_ranchu( 1869): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:06.967 W/SurfaceFlinger( 1728): Attempting to set client state on removed layer: Splash Screen org.mozilla.fenix.debug#0
+06-02 16:38:06.967 W/SurfaceFlinger( 1728): Attempting to destroy on removed layer: Splash Screen org.mozilla.fenix.debug#0
+06-02 16:38:06.971 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:06.972 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:06.973 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:06.973 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:06.974 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:06.974 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:06.974 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:06.981 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:07.005 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:07.012 I/SupportedAddonsWorker( 8940): Trying to check for new supported add-ons
+06-02 16:38:07.013 E/BatteryExternalStatsWorker( 1869): no controller energy info supplied for wifi
+06-02 16:38:07.059 W/SurfaceFlinger( 1728): couldn't log to binary event log: overflow.
+06-02 16:38:07.106 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:07.117 I/ActivityManager( 1869): Fully drawn org.mozilla.fenix.debug/.App: +3s965ms
+06-02 16:38:07.174 I/PBSessionCacheImpl( 2402): Deleted sessionId[359508686488] from persistence.
+06-02 16:38:07.183 W/SearchService( 2402): Abort, client detached.
+06-02 16:38:07.208 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:07.302 D/App ( 8940): Installed browser-icons extension
+06-02 16:38:07.314 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:07.343 D/ ( 8940): HostConnection::get() New Host Connection established 0xcb89acc0, tid 8968
+06-02 16:38:07.345 E/EGL_emulation( 8940): tid 8968: eglBindAPI(1259): error 0x300c (EGL_BAD_PARAMETER)
+06-02 16:38:07.348 D/EGL_emulation( 8940): eglCreateContext: 0xad7f82a0: maj 3 min 0 rcv 3
+06-02 16:38:07.349 D/EGL_emulation( 8940): eglMakeCurrent: 0xad7f82a0: ver 3 0 (tinfo 0xe3383c90)
+06-02 16:38:07.378 E/GeckoConsole( 8940): [JavaScript Error: "NetworkError when attempting to fetch resource."]
+06-02 16:38:07.378 E/GeckoConsole( 8940): get@resource://services-settings/RemoteSettingsClient.jsm:350:12
+06-02 16:38:07.422 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:07.458 D/glean/ConceptFetchHttpUploader( 8940): Ping successfully sent (200)
+06-02 16:38:07.459 D/glean/PingUploadWorker( 8940): 0f17279d-898f-4274-874d-358ab99b6d4e was deleted: true
+06-02 16:38:07.462 I/WM-WorkerWrapper( 8940): Worker result SUCCESS for Work [ id=1bfad7a1-b690-499c-855a-ee2262e5654a, tags={ mozilla.telemetry.glean.scheduler.PingUploadWorker, mozac_service_glean_ping_upload_worker } ]
+06-02 16:38:07.531 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:07.549 W/GeckoConsole( 8940): [JavaScript Warning: "Security wrapper denied access to property "ONE_QUARTER" on privileged Javascript object. Support for exposing privileged objects to untrusted content via __exposedProps__ has been removed - use WebIDL bindings or Components.utils.cloneInto instead. Note that only the first denied property access from a given global object will be reported." {file: "moz-extension://427eb36c-07f3-4ee8-9b9b-c2d41f22dafb/data/picture_in_picture_overrides.js" line: 26}]
+06-02 16:38:07.582 D/mozac-webcompat( 8940): Installed WebCompat webextension: webcompat@mozilla.com
+06-02 16:38:07.584 D/BrowserIcons( 8940): Loaded icon (source = DOWNLOAD): https://www.youtube.com/
+06-02 16:38:07.633 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:07.640 D/BrowserIcons( 8940): Loaded icon (source = DOWNLOAD): https://www.wikipedia.org/
+06-02 16:38:07.651 E/GeckoConsole( 8940): [JavaScript Error: "can't access property "startupData", state is undefined" {file: "resource://gre/modules/addons/XPIProvider.jsm" line: 3079}]
+06-02 16:38:07.651 E/GeckoConsole( 8940): setStartupData@resource://gre/modules/addons/XPIProvider.jsm:3079:5
+06-02 16:38:07.651 E/GeckoConsole( 8940): saveStartupData@resource://gre/modules/Extension.jsm:2035:17
+06-02 16:38:07.651 E/GeckoConsole( 8940): _writePersistentListeners@resource://gre/modules/ExtensionCommon.jsm:2271:15
+06-02 16:38:07.651 E/GeckoConsole( 8940): savePersistentListener@resource://gre/modules/ExtensionCommon.jsm:2362:18
+06-02 16:38:07.651 E/GeckoConsole( 8940): addListener@resource://gre/modules/ExtensionCommon.jsm:2495:20
+06-02 16:38:07.651 E/GeckoConsole( 8940): addListener@resource://gre/modules/ExtensionCommon.jsm:2550:38
+06-02 16:38:07.651 E/GeckoConsole( 8940): recvAddListener@resource://gre/modules/ExtensionParent.jsm:1079:13
+06-02 16:38:07.693 I/chatty ( 8940): uid=10099(org.mozilla.fenix.debug) identical 24 lines
+06-02 16:38:07.721 E/GeckoConsole( 8940): [JavaScript Error: "can't access property "startupData", state is undefined" {file: "resource://gre/modules/addons/XPIProvider.jsm" line: 3079}]
+06-02 16:38:07.721 E/GeckoConsole( 8940): setStartupData@resource://gre/modules/addons/XPIProvider.jsm:3079:5
+06-02 16:38:07.721 E/GeckoConsole( 8940): saveStartupData@resource://gre/modules/Extension.jsm:2035:17
+06-02 16:38:07.721 E/GeckoConsole( 8940): _writePersistentListeners@resource://gre/modules/ExtensionCommon.jsm:2271:15
+06-02 16:38:07.721 E/GeckoConsole( 8940): savePersistentListener@resource://gre/modules/ExtensionCommon.jsm:2362:18
+06-02 16:38:07.721 E/GeckoConsole( 8940): addListener@resource://gre/modules/ExtensionCommon.jsm:2495:20
+06-02 16:38:07.721 E/GeckoConsole( 8940): addListener@resource://gre/modules/ExtensionCommon.jsm:2550:38
+06-02 16:38:07.721 E/GeckoConsole( 8940): recvAddListener@resource://gre/modules/ExtensionParent.jsm:1079:13
+06-02 16:38:07.738 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:07.792 I/Gecko ( 8940): 1591130287792 Marionette INFO Listening on port 2829
+06-02 16:38:08.089 I/WM-WorkerWrapper( 8940): Worker result SUCCESS for Work [ id=d35286d8-b66e-412d-86a5-6db8a316b5b9, tags={ mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker.periodicWork, mozilla.components.feature.addons.migration.SupportedAddonsWorker } ]
+06-02 16:38:10.179 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
+06-02 16:38:11.089 I/EventLogSendingHelper( 2402): Sending log events.
+06-02 16:38:11.106 I/WorkController( 2402): WorkProxy is not enqueued because WorkController is disposed: WorkProxy{Name=context::j, WorkerId=context, id=9ec66b4}
+06-02 16:38:11.106 I/WorkController( 2402): WorkProxy is not enqueued because WorkController is disposed: WorkProxy{Name=context::m, WorkerId=context, id=42ac2dd}
+06-02 16:38:11.106 I/WorkController( 2402): WorkProxy is not enqueued because WorkController is disposed: WorkProxy{Name=context::n, WorkerId=context, id=1827e52}
+06-02 16:38:11.106 I/WorkController( 2402): WorkProxy is not enqueued because WorkController is disposed: WorkProxy{Name=context::p, WorkerId=context, id=c78f523}
+06-02 16:38:11.123 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:11.677 I/FenixApplication( 8940): Kicking-off account manager...
+06-02 16:38:11.677 I/FenixApplication( 8940): Running post-visual completeness tasks...
+06-02 16:38:11.678 I/FenixApplication( 8940): Storage initialization...
+06-02 16:38:11.679 I/PlacesHistoryStorage( 8940): Warming up places storage...
+06-02 16:38:11.681 D/RustNativeSupport( 8940): findMegazordLibraryName(places, 0.59.0
+06-02 16:38:11.681 D/RustNativeSupport( 8940): lib in use: none
+06-02 16:38:11.681 D/RustNativeSupport( 8940): lib configured: megazord
+06-02 16:38:11.681 D/RustNativeSupport( 8940): lib version configured: 0.59.0
+06-02 16:38:11.681 D/RustNativeSupport( 8940): settled on megazord
+06-02 16:38:11.682 I/FirefoxAccountStateMachine( 8940): Enabling/updating sync with a new SyncConfig: SyncConfig(supportedEngines=[mozilla.components.service.fxa.SyncEngine$History@b024ebc, mozilla.components.service.fxa.SyncEngine$Bookmarks@560fe45, mozilla.components.service.fxa.SyncEngine$Passwords@623799a], syncPeriodInMinutes=240)
+06-02 16:38:11.683 D/places_ffi( 8940): places_api_new
+06-02 16:38:11.684 I/BgSyncManager( 8940): Periodic syncing enabled at a 240 interval
+06-02 16:38:11.684 I/FirefoxAccountStateMachine( 8940): Sync is enabled
+06-02 16:38:11.688 I/FenixApplication( 8940): 'Kicking-off account manager' took 10 ms
+06-02 16:38:11.688 I/FirefoxAccountStateMachine( 8940): Processing event Init for state Start. Next state is Start
+06-02 16:38:11.701 D/places::db::schema( 8940): Creating schema
+06-02 16:38:11.701 I/keystore( 1734): del USRPKEY_org.mozilla.fenix.debug 10099
+06-02 16:38:11.702 I/keystore( 1734): del USRCERT_org.mozilla.fenix.debug 10099
+06-02 16:38:11.702 I/keystore( 1734): del CACERT_org.mozilla.fenix.debug 10099
+06-02 16:38:11.726 I/FirefoxAccountStateMachine( 8940): Ran 'Init' side-effects for state Start, got successive event AccountNotFound
+06-02 16:38:11.727 I/FirefoxAccountStateMachine( 8940): Processing event AccountNotFound for state Start. Next state is NotAuthenticated
+06-02 16:38:11.728 D/sql_support::conn_ext( 8940): Transaction commited after 27.615273ms
+06-02 16:38:11.729 D/places_ffi( 8940): places_connection_new
+06-02 16:38:11.731 D/RustNativeSupport( 8940): findMegazordLibraryName(fxaclient, 0.59.0
+06-02 16:38:11.731 D/RustNativeSupport( 8940): lib in use: none
+06-02 16:38:11.731 D/RustNativeSupport( 8940): lib configured: megazord
+06-02 16:38:11.731 D/RustNativeSupport( 8940): lib version configured: 0.59.0
+06-02 16:38:11.731 D/RustNativeSupport( 8940): settled on megazord
+06-02 16:38:11.732 D/places_ffi( 8940): places_connection_new
+06-02 16:38:11.732 D/fxaclient_ffi( 8940): fxa_new
+06-02 16:38:11.734 W/FirefoxAccountStateMachine( 8940): Got invalid event Init for state NotAuthenticated.
+06-02 16:38:11.735 I/PlacesHistoryStorage( 8940): 'Warming up places storage' took 56 ms
+06-02 16:38:11.736 I/PlacesBookmarksStorage( 8940): Warming up places storage...
+06-02 16:38:11.736 D/places_ffi( 8940): places_connection_new
+06-02 16:38:11.739 I/PlacesBookmarksStorage( 8940): 'Warming up places storage' took 2 ms
+06-02 16:38:11.798 I/keystore( 1734): 1 0
+06-02 16:38:11.802 I/SyncableLoginsStorage( 8940): Warming up storage...
+06-02 16:38:11.812 D/RustNativeSupport( 8940): findMegazordLibraryName(logins, 0.59.0
+06-02 16:38:11.813 D/RustNativeSupport( 8940): lib in use: none
+06-02 16:38:11.813 D/RustNativeSupport( 8940): lib configured: megazord
+06-02 16:38:11.813 D/RustNativeSupport( 8940): lib version configured: 0.59.0
+06-02 16:38:11.813 D/RustNativeSupport( 8940): settled on megazord
+06-02 16:38:11.815 D/logins_ffi( 8940): sync15_passwords_state_new
+06-02 16:38:11.823 D/logins::schema( 8940): Creating schema
+06-02 16:38:11.945 I/SyncableLoginsStorage( 8940): 'Warming up storage' took 142 ms
+06-02 16:38:11.945 I/FenixApplication( 8940): 'Storage initialization' took 267 ms
+06-02 16:38:15.194 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
+06-02 16:38:16.329 E/memtrack( 1869): Couldn't load memtrack module
+06-02 16:38:16.329 W/android.os.Debug( 1869): failed to get memory consumption info: -1
+06-02 16:38:16.789 E/memtrack( 1869): Couldn't load memtrack module
+06-02 16:38:16.789 W/android.os.Debug( 1869): failed to get memory consumption info: -1
+06-02 16:38:20.216 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
+06-02 16:38:22.963 I/ActivityManager( 1869): Force stopping org.mozilla.fenix.debug appid=10099 user=0: clear data
+06-02 16:38:22.964 I/ActivityManager( 1869): Killing 8940:org.mozilla.fenix.debug/u0a99 (adj 0): stop org.mozilla.fenix.debug
+06-02 16:38:22.964 W/libprocessgroup( 1869): kill(-8940, 9) failed: No such process
+06-02 16:38:22.965 W/ActivityManager( 1869): Force removing ActivityRecord{caea9f6 u0 org.mozilla.fenix.debug/.App t388}: app died, no saved state
+06-02 16:38:22.965 I/ServiceChildProcess( 8988): Service has been unbound. Stopping.
+06-02 16:38:22.983 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:22.984 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c33c0, tid 5209
+06-02 16:38:22.984 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:22.984 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c33c0, tid 5209
+06-02 16:38:22.984 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:22.985 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c33c0, tid 5209
+06-02 16:38:22.985 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:22.985 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c33c0, tid 5209
+06-02 16:38:22.985 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:22.985 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c33c0, tid 5209
+06-02 16:38:22.985 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:22.989 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c33c0, tid 5209
+06-02 16:38:22.991 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:22.992 I/ActivityManager( 1869): Killing 8988:org.mozilla.fenix.debug:tab0/u0a99 (adj 0): stop org.mozilla.fenix.debug
+06-02 16:38:22.994 I/ActivityManager( 1869): Force stopping org.mozilla.fenix.debug appid=10099 user=-1: clearApplicationUserData
+06-02 16:38:22.995 D/ZenLog ( 1869): config: removeAutomaticZenRules,ZenModeConfig[user=0,allowAlarms=true,allowMedia=true,allowSystem=false,allowReminders=false,allowEvents=false,allowCalls=true,allowRepeatCallers=true,allowMessages=false,allowCallsFrom=stars,allowMessagesFrom=contacts,suppressedVisualEffects=511,areChannelsBypassingDnd=false,automaticRules={EVENTS_DEFAULT_RULE=ZenRule[enabled=false,snoozing=false,name=Event,zenMode=ZEN_MODE_IMPORTANT_INTERRUPTIONS,conditionId=condition://android/event?userId=-10000&calendar=&reply=1,condition=Condition[id=condition://android/event?userId=-10000&calendar=&reply=1,summary=...,line1=...,line2=...,icon=0,state=STATE_FALSE,flags=2],component=ComponentInfo{android/com.android.server.notification.EventConditionProvider},id=EVENTS_DEFAULT_RULE,creationTime=1587308662810,enabler=null], EVERY_NIGHT_DEFAULT_RULE=ZenRule[enabled=false,snoozing=false,name=Sleeping,zenMode=ZEN_MODE_IMPORTANT_INTERRUPTIONS,conditionId=condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true,condition=Condition[id=condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true,summary=...,line1=...,line2=...,icon=0,state=STATE_FALSE,flags=2],component=ComponentInfo{android/com.android.server.notification.ScheduleConditionProvider},id=EVERY_NIGHT_DEFAULT_RULE,creationTime=1587308662810,enabler=null]},manualRule=null],Diff[]
+06-02 16:38:22.995 I/ConditionProviders( 1869): Disallowing condition provider org.mozilla.fenix.debug
+06-02 16:38:22.996 E/memtrack( 1869): Couldn't load memtrack module
+06-02 16:38:22.996 W/android.os.Debug( 1869): failed to get memory consumption info: -1
+06-02 16:38:22.996 D/ZenLog ( 1869): set_zen_mode: off,removeAutomaticZenRules
+06-02 16:38:23.002 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:23.009 W/libprocessgroup( 1869): kill(-8940, 9) failed: No such process
+06-02 16:38:23.009 I/keystore( 1734): clear_uid 10099
+06-02 16:38:23.010 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:23.026 D/SurfaceFlinger( 1728): duplicate layer name: changing com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity to com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#1
+06-02 16:38:23.028 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:23.030 W/InputDispatcher( 1869): channel 'd4edb65 org.mozilla.fenix.debug/org.mozilla.fenix.debug.App (server)' ~ Consumer closed input channel or an error occurred. events=0x9
+06-02 16:38:23.030 E/InputDispatcher( 1869): channel 'd4edb65 org.mozilla.fenix.debug/org.mozilla.fenix.debug.App (server)' ~ Channel is unrecoverably broken and will be disposed!
+06-02 16:38:23.031 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.031 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dda40, tid 1952
+06-02 16:38:23.032 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.032 D/ ( 1728): HostConnection::get() New Host Connection established 0xe7e99140, tid 1952
+06-02 16:38:23.032 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.033 D/ ( 1728): HostConnection::get() New Host Connection established 0xe7e99140, tid 1952
+06-02 16:38:23.033 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.040 I/WindowManager( 1869): WIN DEATH: Window{d4edb65 u0 org.mozilla.fenix.debug/org.mozilla.fenix.debug.App}
+06-02 16:38:23.040 W/InputDispatcher( 1869): Attempted to unregister already unregistered input channel 'd4edb65 org.mozilla.fenix.debug/org.mozilla.fenix.debug.App (server)'
+06-02 16:38:23.042 D/EGL_emulation( 2402): eglMakeCurrent: 0xe1911c80: ver 3 0 (tinfo 0xc8cbe260)
+06-02 16:38:23.044 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:23.044 W/ActivityManager( 1869): setHasOverlayUi called on unknown pid: 8940
+06-02 16:38:23.049 I/Zygote ( 1729): Process 8940 exited due to signal (9)
+06-02 16:38:23.050 W/libprocessgroup( 1869): kill(-8940, 9) failed: No such process
+06-02 16:38:23.050 I/libprocessgroup( 1869): Successfully killed process cgroup uid 10099 pid 8940 in 85ms
+06-02 16:38:23.050 W/SurfaceFlinger( 1728): Attempting to destroy on removed layer: AppWindowToken{369c864 token=Token{86b81f7 ActivityRecord{caea9f6 u0 org.mozilla.fenix.debug/.App t388}}}#0
+06-02 16:38:23.050 W/SurfaceFlinger( 1728): Attempting to destroy on removed layer: Task=388#0
+06-02 16:38:23.054 W/libprocessgroup( 1869): kill(-8988, 9) failed: No such process
+06-02 16:38:23.054 I/ActivityManager( 1869): Force stopping org.mozilla.fenix.debug appid=10099 user=0: from pid 9106
+06-02 16:38:23.057 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:23.059 I/Zygote ( 1729): Process 8988 exited due to signal (9)
+06-02 16:38:23.072 I/GoogleInputMethod( 1996): onFinishInput() : Dummy InputConnection bound
+06-02 16:38:23.072 I/GoogleInputMethod( 1996): onStartInput() : Dummy InputConnection bound
+06-02 16:38:23.081 D/EGL_emulation( 2488): eglMakeCurrent: 0xe3385ae0: ver 3 0 (tinfo 0xe33838f0)
+06-02 16:38:23.082 D/CarrierSvcBindHelper( 2121): No carrier app for: 0
+06-02 16:38:23.089 W/SessionLifecycleManager( 2402): Handover failed. Creating new session controller.
+06-02 16:38:23.099 W/libprocessgroup( 1869): kill(-8988, 9) failed: No such process
+06-02 16:38:23.099 I/libprocessgroup( 1869): Successfully killed process cgroup uid 10099 pid 8988 in 45ms
+06-02 16:38:23.105 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.112 V/SettingsProvider( 1869): Notifying for 0: content://settings/global/debug_app
+06-02 16:38:23.123 I/GeofencerStateMachine( 2473): removeGeofences: removeRequest=RemoveGeofencingRequest[REMOVE_ALL packageName=org.mozilla.fenix.debug]
+06-02 16:38:23.124 D/CarrierSvcBindHelper( 2121): No carrier app for: 0
+06-02 16:38:23.125 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.128 E/system_server( 1869): No package ID 7f found for ID 0x7f0801a6.
+06-02 16:38:23.128 E/system_server( 1869): No package ID 7f found for ID 0x7f13011d.
+06-02 16:38:23.128 E/system_server( 1869): No package ID 7f found for ID 0x7f13011d.
+06-02 16:38:23.128 E/system_server( 1869): No package ID 7f found for ID 0x7f0801a4.
+06-02 16:38:23.128 E/system_server( 1869): No package ID 7f found for ID 0x7f13011c.
+06-02 16:38:23.128 E/system_server( 1869): No package ID 7f found for ID 0x7f13011c.
+06-02 16:38:23.129 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.147 E/BatteryExternalStatsWorker( 1869): no controller energy info supplied for wifi
+06-02 16:38:23.145 I/chatty ( 2002): uid=10024(com.android.systemui) RenderThread identical 1 line
+06-02 16:38:23.149 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.151 I/.gms.persisten( 2473): Background concurrent copying GC freed 150132(6MB) AllocSpace objects, 3(60KB) LOS objects, 45% free, 7MB/13MB, paused 85us total 138.429ms
+06-02 16:38:23.159 D/vold ( 1558): Remounting 10099 as mode read
+06-02 16:38:23.161 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.166 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.168 I/LocationSettingsChecker( 2660): Removing dialog suppression flag for package org.mozilla.fenix.debug
+06-02 16:38:23.180 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.183 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.184 W/LocationOracle( 2402): No location history returned by ContextManager
+06-02 16:38:23.193 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.210 D/vold ( 1558): Remounting 10099 as mode write
+06-02 16:38:23.198 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.219 I/Icing ( 2660): doRemovePackageData org.mozilla.fenix.debug
+06-02 16:38:23.219 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.223 W/ctxmgr ( 2473): [AclManager]No 3 for (accnt=account#-517948760#, com.google.android.gms(10008):UserVelocityProducer, vrsn=13280022, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 1, account#-517948760#
+06-02 16:38:23.223 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.227 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.235 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.238 I/system_server( 1869): Background concurrent copying GC freed 69934(4MB) AllocSpace objects, 41(1540KB) LOS objects, 36% free, 10MB/16MB, paused 82us total 208.824ms
+06-02 16:38:23.240 I/ProvidersCache( 4535): Provider returned no roots. Possibly naughty: com.google.android.apps.docs.storage
+06-02 16:38:23.248 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.251 I/MicroDetectionWorker( 2402): #startMicroDetector [speakerMode: 0]
+06-02 16:38:23.251 I/AudioController( 2402): Using mInputStreamFactoryBuilder
+06-02 16:38:23.252 I/AudioController( 2402): Created new AudioSource
+06-02 16:38:23.253 I/MicroDetectionWorker( 2402): onReady
+06-02 16:38:23.256 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.305 I/MicroRecognitionRunner( 2402): Starting detection.
+06-02 16:38:23.306 I/MicrophoneInputStream( 2402): mic_starting SR : 16000 CC : 16 SO : 6
+06-02 16:38:23.307 E/ ( 1627): Request requires android.permission.RECORD_AUDIO
+06-02 16:38:23.307 E/AudioPolicyIntefaceImpl( 1627): getInputForAttr permission denied: recording not allowed for uid 10039 pid 2402
+06-02 16:38:23.307 E/AudioFlinger( 1627): createRecord() checkRecordThread_l failed
+06-02 16:38:23.308 E/IAudioFlinger( 2402): createRecord returned error -22
+06-02 16:38:23.308 E/AudioRecord( 2402): AudioFlinger could not create record track, status: -22
+06-02 16:38:23.308 E/AudioRecord-JNI( 2402): Error creating AudioRecord instance: initialization check failed with status -22.
+06-02 16:38:23.309 E/android.media.AudioRecord( 2402): Error code -20 when initializing native AudioRecord object.
+06-02 16:38:23.309 I/MicrophoneInputStream( 2402): mic_started SR : 16000 CC : 16 SO : 6
+06-02 16:38:23.309 E/ActivityThread( 2402): Failed to find provider info for com.google.android.apps.gsa.testing.ui.audio.recorded
+06-02 16:38:23.309 I/MicroDetectionWorker( 2402): onReady
+06-02 16:38:23.311 I/MicrophoneInputStream( 2402): mic_close SR : 16000 CC : 16 SO : 6
+06-02 16:38:23.311 I/MicroRecognitionRunner( 2402): Detection finished
+06-02 16:38:23.311 W/ErrorReporter( 2402): reportError [type: 211, code: 524300]: Error reading from input stream
+06-02 16:38:23.311 I/MicroRecognitionRunner( 2402): Stopping hotword detection.
+06-02 16:38:23.312 W/ErrorProcessor( 2402): onFatalError, processing error from engine(4)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): com.google.android.apps.gsa.shared.speech.b.g: Error reading from input stream
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.staticplugins.microdetection.d.k.a(SourceFile:91)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.staticplugins.microdetection.d.l.run(Unknown Source:14)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at com.google.android.libraries.gsa.runner.a.a.b(SourceFile:32)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at com.google.android.libraries.gsa.runner.a.c.call(Unknown Source:4)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.shared.util.concurrent.b.g.run(Unknown Source:4)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at java.lang.Thread.run(Thread.java:764)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.shared.util.concurrent.b.i.run(SourceFile:6)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): Caused by: com.google.android.apps.gsa.shared.exception.GsaIOException: Error code: 393238 | Buffer overflow, no available space.
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.speech.audio.Tee.j(SourceFile:103)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.speech.audio.au.read(SourceFile:2)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at java.io.InputStream.read(InputStream.java:101)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.speech.audio.ao.run(SourceFile:17)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.speech.audio.an.run(SourceFile:2)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+06-02 16:38:23.312 W/ErrorProcessor( 2402): ... 10 more
+06-02 16:38:23.312 I/AudioController( 2402): internalShutdown
+06-02 16:38:23.313 I/MicroDetector( 2402): Keeping mic open: false
+06-02 16:38:23.313 I/DeviceStateChecker( 2402): DeviceStateChecker cancelled
+06-02 16:38:23.313 I/MicroDetectionWorker( 2402): #onError(false)
+06-02 16:38:23.324 I/ActivityManager( 1869): Force stopping org.mozilla.fenix.debug appid=10099 user=-1: set debug app
+06-02 16:38:23.324 V/SettingsProvider( 1869): Notifying for 0: content://settings/global/debug_app
+06-02 16:38:23.328 I/Places ( 2473): ?: PlacesBleScanner start() with priority 2
+06-02 16:38:23.337 I/Places ( 2473): ?: PlacesBleScanner start() with priority 2
+06-02 16:38:23.337 I/PlaceInferenceEngine( 2473): [anon] Changed inference mode: 1
+06-02 16:38:23.345 I/Places ( 2473): Converted 0 out of 1 WiFi scans
+06-02 16:38:23.357 I/ActivityManager( 1869): START u0 {flg=0x10000000 cmp=org.mozilla.fenix.debug/.App (has extras)} from uid 0
+06-02 16:38:23.364 I/Places ( 2473): ?: PlacesBleScanner start() with priority 2
+06-02 16:38:23.372 I/Places ( 2473): ?: PlacesBleScanner start() with priority 2
+06-02 16:38:23.374 I/PlaceInferenceEngine( 2473): [anon] Changed inference mode: 1
+06-02 16:38:23.380 I/PlaceInferenceEngine( 2473): No beacon scan available - ignoring candidates.
+06-02 16:38:23.381 I/lla.fenix.debu( 9156): Not late-enabling -Xcheck:jni (already on)
+06-02 16:38:23.386 I/ActivityManager( 1869): Start proc 9156:org.mozilla.fenix.debug/u0a99 for activity org.mozilla.fenix.debug/.App
+06-02 16:38:23.390 I/Places ( 2473): Converted 0 out of 1 WiFi scans
+06-02 16:38:23.399 W/lla.fenix.debu( 9156): Unexpected CPU variant for X86 using defaults: x86
+06-02 16:38:23.402 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:23.403 I/PlaceInferenceEngine( 2473): No beacon scan available - ignoring candidates.
+06-02 16:38:23.410 D/ ( 1869): HostConnection::get() New Host Connection established 0xcb8a3340, tid 1930
+06-02 16:38:23.419 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):PlacesProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 18, account#-517948760#
+06-02 16:38:23.454 W/ActivityThread( 9156): Application org.mozilla.fenix.debug can be debugged on port 8100...
+06-02 16:38:23.457 I/lla.fenix.debu( 9156): The ClassLoaderContext is a special shared library.
+06-02 16:38:23.470 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.470 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c33c0, tid 5209
+06-02 16:38:23.471 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.471 D/EGL_emulation( 2402): eglMakeCurrent: 0xe1911c80: ver 3 0 (tinfo 0xc8cbe260)
+06-02 16:38:23.472 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c33c0, tid 5209
+06-02 16:38:23.472 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.472 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c33c0, tid 5209
+06-02 16:38:23.472 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.474 D/EGL_emulation( 2488): eglMakeCurrent: 0xe3385ae0: ver 3 0 (tinfo 0xe33838f0)
+06-02 16:38:23.476 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.477 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90ddac0, tid 1952
+06-02 16:38:23.477 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.479 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c33c0, tid 5209
+06-02 16:38:23.479 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.480 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90ddd80, tid 1756
+06-02 16:38:23.480 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90ddac0, tid 1952
+06-02 16:38:23.480 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.480 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.481 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90ddd80, tid 1756
+06-02 16:38:23.481 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90ddac0, tid 1952
+06-02 16:38:23.481 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.482 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90ddd80, tid 1756
+06-02 16:38:23.482 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.482 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.482 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90ddac0, tid 1952
+06-02 16:38:23.483 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:23.484 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:23.594 I/chatty ( 2002): uid=10024(com.android.systemui) RenderThread identical 13 lines
+06-02 16:38:23.600 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:24.020 D/FirebaseApp( 9156): Default FirebaseApp failed to initialize because no default options were found. This usually means that com.google.gms:google-services was not applied to your gradle project.
+06-02 16:38:24.020 I/FirebaseInitProvider( 9156): FirebaseApp initialization unsuccessful
+06-02 16:38:24.088 D/FenixApplication( 9156): Initializing Glean (uploadEnabled=true, isFennec=false)
+06-02 16:38:24.100 D/RustNativeSupport( 9156): findMegazordLibraryName(viaduct, 0.59.0
+06-02 16:38:24.100 D/RustNativeSupport( 9156): lib in use: none
+06-02 16:38:24.100 D/RustNativeSupport( 9156): lib configured: megazord
+06-02 16:38:24.100 D/RustNativeSupport( 9156): lib version configured: 0.59.0
+06-02 16:38:24.100 D/RustNativeSupport( 9156): settled on megazord
+06-02 16:38:24.147 D/libglean_ffi( 9156): glean_ffi: Android logging should be hooked up!
+06-02 16:38:24.150 I/glean/Glean( 9156): Registering pings for mozilla.telemetry.glean.GleanMetrics.Pings
+06-02 16:38:24.152 I/libglean_ffi( 9156): glean_core: Creating new Glean
+06-02 16:38:24.152 D/libglean_ffi( 9156): glean_core::database: Database path: "/data/user/0/org.mozilla.fenix.debug/glean_data/db"
+06-02 16:38:24.152 I/libglean_ffi( 9156): glean_core::database: Database initialized
+06-02 16:38:24.153 D/RustNativeSupport( 9156): findMegazordLibraryName(rustlog, 0.59.0
+06-02 16:38:24.153 D/RustNativeSupport( 9156): lib in use: none
+06-02 16:38:24.153 D/RustNativeSupport( 9156): lib configured: megazord
+06-02 16:38:24.153 D/RustNativeSupport( 9156): lib version configured: 0.59.0
+06-02 16:38:24.153 D/RustNativeSupport( 9156): settled on megazord
+06-02 16:38:24.155 I/rc_log_ffi::ios( 9156): rc_log adapter initialized!
+06-02 16:38:24.170 I/libglean_ffi( 9156): glean_ffi: Glean initialized
+06-02 16:38:24.170 I/GeckoRuntime( 9156): Adding debug configuration from: /data/local/tmp/org.mozilla.fenix.debug-geckoview-config.yaml
+06-02 16:38:24.170 D/GeckoDebugConfig( 9156): Adding environment variables from debug config: {MOZ_CRASHREPORTER=1, MOZ_CRASHREPORTER_NO_REPORT=1, MOZ_CRASHREPORTER_SHUTDOWN=1}
+06-02 16:38:24.170 D/GeckoDebugConfig( 9156): Adding arguments from debug config: [-marionette, -profile, /mnt/sdcard/org.mozilla.fenix.debug-geckodriver-profile]
+06-02 16:38:24.171 D/GeckoThread( 9156): State changed to LAUNCHED
+06-02 16:38:24.172 I/GeckoThread( 9156): preparing to run Gecko
+06-02 16:38:24.173 D/GeckoThread( 9156): env var: MOZ_CRASHREPORTER=1
+06-02 16:38:24.173 D/GeckoThread( 9156): env var: MOZ_CRASHREPORTER_NO_REPORT=1
+06-02 16:38:24.173 D/GeckoThread( 9156): env var: MOZ_CRASHREPORTER_SHUTDOWN=1
+06-02 16:38:24.178 D/GeckoRuntime( 9156): Lifecycle: onCreate
+06-02 16:38:24.181 D/GeckoThread( 9156): State changed to MOZGLUE_READY
+06-02 16:38:24.200 W/Settings( 9156): Setting animator_duration_scale has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only global URI.
+06-02 16:38:24.204 E/GeckoLibLoad( 9156): Load sqlite start
+06-02 16:38:24.216 E/GeckoLibLoad( 9156): Load sqlite done
+06-02 16:38:24.216 E/GeckoLibLoad( 9156): Load nss start
+06-02 16:38:24.216 E/GeckoLibLoad( 9156): Load nss done
+06-02 16:38:24.227 I/glean/MetricsPingSched( 9156): The application just updated. Send metrics ping now.
+06-02 16:38:24.246 I/glean/MetricsPingSched( 9156): Collecting the 'metrics' ping, now = Tue Jun 02 16:38:24 EDT 2020, startup = true, reason = upgrade
+06-02 16:38:24.262 D/LeakCanary( 9156): Updated AppWatcher.config: Config(no changes)
+06-02 16:38:24.274 E/GeckoLibLoad( 9156): Loaded libs in 58.434504ms total, 0ms(60ms) user, 40ms(70ms) system, 0(0) faults
+06-02 16:38:24.275 D/GeckoThread( 9156): State changed to LIBS_READY
+06-02 16:38:24.275 I/libglean_ffi( 9156): glean_core::ping: Collecting metrics
+06-02 16:38:24.275 I/libglean_ffi( 9156): glean_core::ping: Storage for metrics empty. Bailing out.
+06-02 16:38:24.275 I/libglean_ffi( 9156): glean_core: No content for ping 'metrics', therefore no ping queued.
+06-02 16:38:24.276 D/glean/MetricsPingSched( 9156): Scheduling the 'metrics' ping in 40895781ms
+06-02 16:38:24.278 W/GeckoThread( 9156): zerdatime 4668409 - runGecko
+06-02 16:38:24.280 D/GeckoProfile( 9156): Loading profile at: null name: default
+06-02 16:38:24.281 D/GeckoProfile( 9156): Created new profile dir.
+06-02 16:38:24.282 I/GeckoProfile( 9156): Enqueuing profile init.
+06-02 16:38:24.284 D/GeckoProfile( 9156): Found profile dir: /data/user/0/org.mozilla.fenix.debug/files/mozilla/9w50stya.default
+06-02 16:38:24.284 D/GeckoProfile( 9156): Attempting to write new client ID properties
+06-02 16:38:24.285 D/GeckoProfile( 9156): Creating profile dir: /data/user/0/org.mozilla.fenix.debug/files/mozilla/9w50stya.default
+06-02 16:38:24.286 D/LeakCanary( 9156): Updated LeakCanary.config: Config(no changes)
+06-02 16:38:24.289 D/App ( 9156): DebugMetricController: start
+06-02 16:38:24.289 D/App ( 9156): DebugMetricController: start
+06-02 16:38:24.291 W/PushConfig( 9156): No firebase configuration found; cannot support push service.
+06-02 16:38:24.299 I/Gecko:DumpUtils( 9156): Fifo watcher disabled via pref.
+06-02 16:38:24.302 D/StrictMode( 9156): StrictMode policy violation; ~duration=144 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.302 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.302 D/StrictMode( 9156): at java.io.FileInputStream.<init>(FileInputStream.java:163)
+06-02 16:38:24.302 D/StrictMode( 9156): at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:49)
+06-02 16:38:24.302 D/StrictMode( 9156): at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+06-02 16:38:24.302 D/StrictMode( 9156): at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+06-02 16:38:24.302 D/StrictMode( 9156): at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+06-02 16:38:24.302 D/StrictMode( 9156): at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+06-02 16:38:24.302 D/StrictMode( 9156): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+06-02 16:38:24.302 D/StrictMode( 9156): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:24.302 D/StrictMode( 9156): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:24.302 D/StrictMode( 9156): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:24.302 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:24.302 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:24.302 D/StrictMode( 9156): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:24.302 D/StrictMode( 9156): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:24.302 D/StrictMode( 9156): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:24.302 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:24.302 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.302 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.302 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.302 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.302 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.302 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.303 D/StrictMode( 9156): StrictMode policy violation; ~duration=140 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.303 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.303 D/StrictMode( 9156): at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+06-02 16:38:24.303 D/StrictMode( 9156): at libcore.io.IoBridge.read(IoBridge.java:501)
+06-02 16:38:24.303 D/StrictMode( 9156): at java.io.FileInputStream.read(FileInputStream.java:307)
+06-02 16:38:24.303 D/StrictMode( 9156): at java.io.FilterInputStream.read(FilterInputStream.java:133)
+06-02 16:38:24.303 D/StrictMode( 9156): at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.UnicodeReader.init(UnicodeReader.java:92)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:124)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1177)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:195)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:107)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+06-02 16:38:24.303 D/StrictMode( 9156): at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+06-02 16:38:24.303 D/StrictMode( 9156): at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:24.303 D/StrictMode( 9156): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:24.303 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:24.303 D/StrictMode( 9156): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:24.303 D/StrictMode( 9156): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:24.303 D/StrictMode( 9156): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:24.303 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:24.303 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.303 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.303 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.303 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.303 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.303 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.305 D/StrictMode( 9156): StrictMode policy violation; ~duration=140 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.305 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.305 D/StrictMode( 9156): at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+06-02 16:38:24.305 D/StrictMode( 9156): at libcore.io.IoBridge.read(IoBridge.java:501)
+06-02 16:38:24.305 D/StrictMode( 9156): at java.io.FileInputStream.read(FileInputStream.java:307)
+06-02 16:38:24.305 D/StrictMode( 9156): at java.io.FilterInputStream.read(FilterInputStream.java:133)
+06-02 16:38:24.305 D/StrictMode( 9156): at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+06-02 16:38:24.305 D/StrictMode( 9156): at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:288)
+06-02 16:38:24.305 D/StrictMode( 9156): at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:351)
+06-02 16:38:24.305 D/StrictMode( 9156): at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:180)
+06-02 16:38:24.305 D/StrictMode( 9156): at java.io.InputStreamReader.read(InputStreamReader.java:184)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1177)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:195)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:107)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+06-02 16:38:24.305 D/StrictMode( 9156): at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+06-02 16:38:24.305 D/StrictMode( 9156): at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:24.305 D/StrictMode( 9156): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:24.305 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:24.305 D/StrictMode( 9156): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:24.305 D/StrictMode( 9156): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:24.305 D/StrictMode( 9156): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:24.305 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:24.305 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.305 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.305 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.305 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.305 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.305 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.308 D/StrictMode( 9156): StrictMode policy violation; ~duration=133 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.308 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.308 D/StrictMode( 9156): at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+06-02 16:38:24.308 D/StrictMode( 9156): at libcore.io.IoBridge.read(IoBridge.java:501)
+06-02 16:38:24.308 D/StrictMode( 9156): at java.io.FileInputStream.read(FileInputStream.java:307)
+06-02 16:38:24.308 D/StrictMode( 9156): at java.io.FilterInputStream.read(FilterInputStream.java:133)
+06-02 16:38:24.308 D/StrictMode( 9156): at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+06-02 16:38:24.308 D/StrictMode( 9156): at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:288)
+06-02 16:38:24.308 D/StrictMode( 9156): at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:351)
+06-02 16:38:24.308 D/StrictMode( 9156): at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:180)
+06-02 16:38:24.308 D/StrictMode( 9156): at java.io.InputStreamReader.read(InputStreamReader.java:184)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:136)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.scanner.ScannerImpl.scanPlain(ScannerImpl.java:1999)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.scanner.ScannerImpl.fetchPlain(ScannerImpl.java:1044)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:399)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockSequenceEntry.produce(ParserImpl.java:504)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.composer.Composer.composeSequenceNode(Composer.java:188)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:142)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:236)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:227)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:215)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:144)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:85)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:108)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+06-02 16:38:24.308 D/StrictMode( 9156): at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+06-02 16:38:24.308 D/StrictMode( 9156): at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:24.308 D/StrictMode( 9156): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:24.308 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:24.308 D/StrictMode( 9156): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:24.308 D/StrictMode( 9156): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:24.308 D/StrictMode( 9156): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:24.308 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:24.308 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.308 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.308 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.308 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.308 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.308 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.311 D/StrictMode( 9156): StrictMode policy violation; ~duration=120 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.311 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.311 D/StrictMode( 9156): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:24.311 D/StrictMode( 9156): at java.io.File.exists(File.java:815)
+06-02 16:38:24.311 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:24.311 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:24.311 D/StrictMode( 9156): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:24.311 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:24.311 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:24.311 D/StrictMode( 9156): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:24.311 D/StrictMode( 9156): at mozilla.components.browser.engine.gecko.GeckoEngine.<init>(GeckoEngine.kt:68)
+06-02 16:38:24.311 D/StrictMode( 9156): at mozilla.components.browser.engine.gecko.GeckoEngine.<init>(GeckoEngine.kt:63)
+06-02 16:38:24.311 D/StrictMode( 9156): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:76)
+06-02 16:38:24.311 D/StrictMode( 9156): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:24.311 D/StrictMode( 9156): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:24.311 D/StrictMode( 9156): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:24.311 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:24.311 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:24.311 D/StrictMode( 9156): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:24.311 D/StrictMode( 9156): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:24.311 D/StrictMode( 9156): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:24.311 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:24.311 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.311 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.311 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.311 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.311 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.311 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.312 D/StrictMode( 9156): StrictMode policy violation; ~duration=43 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.312 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.312 D/StrictMode( 9156): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:24.312 D/StrictMode( 9156): at java.io.File.exists(File.java:815)
+06-02 16:38:24.312 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:24.312 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:24.312 D/StrictMode( 9156): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:24.312 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:24.312 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:24.312 D/StrictMode( 9156): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:24.312 D/StrictMode( 9156): at androidx.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:119)
+06-02 16:38:24.312 D/StrictMode( 9156): at org.mozilla.fenix.DebugFenixApplication.setupLeakCanary(DebugFenixApplication.kt:15)
+06-02 16:38:24.312 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:140)
+06-02 16:38:24.312 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:24.312 D/StrictMode( 9156): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:24.312 D/StrictMode( 9156): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:24.312 D/StrictMode( 9156): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:24.312 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:24.312 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.312 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.312 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.312 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.312 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.312 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.313 D/StrictMode( 9156): StrictMode policy violation; ~duration=41 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.313 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.313 D/StrictMode( 9156): at android.app.SharedPreferencesImpl.awaitLoadedLocked(SharedPreferencesImpl.java:256)
+06-02 16:38:24.313 D/StrictMode( 9156): at android.app.SharedPreferencesImpl.getBoolean(SharedPreferencesImpl.java:325)
+06-02 16:38:24.313 D/StrictMode( 9156): at org.mozilla.fenix.DebugFenixApplication.setupLeakCanary(DebugFenixApplication.kt:16)
+06-02 16:38:24.313 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:140)
+06-02 16:38:24.313 D/StrictMode( 9156): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:24.313 D/StrictMode( 9156): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:24.313 D/StrictMode( 9156): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:24.313 D/StrictMode( 9156): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:24.313 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:24.313 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.313 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.313 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.313 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.313 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.313 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.317 D/GeckoSysInfo( 9156): System memory: 1494MB.
+06-02 16:38:24.317 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/os/MessageQueue;->next()Landroid/os/Message; (light greylist, JNI)
+06-02 16:38:24.318 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/MessageQueue;->next()Landroid/os/Message;
+06-02 16:38:24.318 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.318 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.318 D/StrictMode( 9156): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:24.318 D/StrictMode( 9156): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:24.318 W/lla.fenix.debu( 9156): Accessing hidden field Landroid/os/MessageQueue;->mMessages:Landroid/os/Message; (light greylist, JNI)
+06-02 16:38:24.318 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/MessageQueue;->mMessages:Landroid/os/Message;
+06-02 16:38:24.318 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.318 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.318 D/StrictMode( 9156): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:24.318 D/StrictMode( 9156): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:24.319 W/lla.fenix.debu( 9156): Accessing hidden field Ljava/lang/Boolean;->value:Z (light greylist, JNI)
+06-02 16:38:24.319 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Boolean;->value:Z
+06-02 16:38:24.319 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.319 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.319 D/StrictMode( 9156): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:24.319 D/StrictMode( 9156): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:24.319 W/lla.fenix.debu( 9156): Accessing hidden field Ljava/lang/Integer;->value:I (light greylist, JNI)
+06-02 16:38:24.320 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Integer;->value:I
+06-02 16:38:24.320 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.320 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.320 D/StrictMode( 9156): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:24.320 D/StrictMode( 9156): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:24.320 W/lla.fenix.debu( 9156): Accessing hidden field Ljava/lang/Double;->value:D (light greylist, JNI)
+06-02 16:38:24.320 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Double;->value:D
+06-02 16:38:24.320 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.320 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.320 D/StrictMode( 9156): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:24.320 D/StrictMode( 9156): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:24.321 D/GeckoThread( 9156): State changed to JNI_READY
+06-02 16:38:24.325 D/ServiceAllocator( 9156): org.mozilla.gecko.process.GeckoChildProcessServices$tab0 updateBindings: BACKGROUND priority, 0 importance, 2 successful binds, 0 failed binds, 0 successful unbinds, 0 failed unbinds
+06-02 16:38:24.331 I/enix.debug:tab( 9201): Not late-enabling -Xcheck:jni (already on)
+06-02 16:38:24.337 I/ActivityManager( 1869): Start proc 9201:org.mozilla.fenix.debug:tab0/u0a99 for service org.mozilla.fenix.debug/org.mozilla.gecko.process.GeckoChildProcessServices$tab0
+06-02 16:38:24.341 W/enix.debug:tab( 9201): Unexpected CPU variant for X86 using defaults: x86
+06-02 16:38:24.370 I/enix.debug:tab( 9201): The ClassLoaderContext is a special shared library.
+06-02 16:38:24.380 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/content/res/Resources$Theme;->rebase()V (dark greylist, reflection)
+06-02 16:38:24.381 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/content/res/Resources$Theme;->rebase()V
+06-02 16:38:24.381 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.381 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.381 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:24.381 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:2064)
+06-02 16:38:24.381 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethod(Class.java:2047)
+06-02 16:38:24.381 D/StrictMode( 9156): at androidx.core.content.res.ResourcesCompat$ThemeCompat$ImplApi23.rebase(ResourcesCompat.java:501)
+06-02 16:38:24.381 D/StrictMode( 9156): at androidx.core.content.res.ResourcesCompat$ThemeCompat.rebase(ResourcesCompat.java:477)
+06-02 16:38:24.381 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.attachBaseContext2(AppCompatDelegateImpl.java:465)
+06-02 16:38:24.381 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:107)
+06-02 16:38:24.381 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:19)
+06-02 16:38:24.381 D/StrictMode( 9156): at android.app.Activity.attach(Activity.java:7051)
+06-02 16:38:24.381 D/StrictMode( 9156): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+06-02 16:38:24.381 D/StrictMode( 9156): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:24.381 D/StrictMode( 9156): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:24.381 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:24.381 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:24.381 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:24.381 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.381 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.381 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.381 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.381 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.381 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): Failed to retrieve rebase() method
+06-02 16:38:24.383 I/ResourcesCompat( 9156): java.lang.NoSuchMethodException: rebase []
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at java.lang.Class.getMethod(Class.java:2068)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at java.lang.Class.getDeclaredMethod(Class.java:2047)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at androidx.core.content.res.ResourcesCompat$ThemeCompat$ImplApi23.rebase(ResourcesCompat.java:501)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at androidx.core.content.res.ResourcesCompat$ThemeCompat.rebase(ResourcesCompat.java:477)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.attachBaseContext2(AppCompatDelegateImpl.java:465)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:107)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:19)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at android.app.Activity.attach(Activity.java:7051)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.383 I/ResourcesCompat( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.391 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/graphics/drawable/Drawable;->getOpticalInsets()Landroid/graphics/Insets; (light greylist, linking)
+06-02 16:38:24.391 W/lla.fenix.debu( 9156): Accessing hidden field Landroid/graphics/Insets;->left:I (light greylist, linking)
+06-02 16:38:24.391 W/lla.fenix.debu( 9156): Accessing hidden field Landroid/graphics/Insets;->right:I (light greylist, linking)
+06-02 16:38:24.391 W/lla.fenix.debu( 9156): Accessing hidden field Landroid/graphics/Insets;->top:I (light greylist, linking)
+06-02 16:38:24.391 W/lla.fenix.debu( 9156): Accessing hidden field Landroid/graphics/Insets;->bottom:I (light greylist, linking)
+06-02 16:38:24.428 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/view/View;->getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate; (light greylist, linking)
+06-02 16:38:24.434 D/GeckoViewStartup( 9156): observe: app-startup
+06-02 16:38:24.434 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
+06-02 16:38:24.435 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
+06-02 16:38:24.435 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.435 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.435 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:24.435 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:2064)
+06-02 16:38:24.435 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethod(Class.java:2047)
+06-02 16:38:24.435 D/StrictMode( 9156): at androidx.appcompat.widget.ViewUtils.<clinit>(ViewUtils.java:44)
+06-02 16:38:24.435 D/StrictMode( 9156): at androidx.appcompat.widget.ViewUtils.makeOptionalFitsSystemWindows(ViewUtils.java:80)
+06-02 16:38:24.435 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:970)
+06-02 16:38:24.435 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:803)
+06-02 16:38:24.435 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:692)
+06-02 16:38:24.435 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
+06-02 16:38:24.435 D/StrictMode( 9156): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:130)
+06-02 16:38:24.435 D/StrictMode( 9156): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:24.435 D/StrictMode( 9156): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:24.435 D/StrictMode( 9156): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:24.435 D/StrictMode( 9156): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:24.435 D/StrictMode( 9156): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:24.435 D/StrictMode( 9156): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:24.435 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:24.435 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:24.435 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:24.435 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.435 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.435 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.435 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.435 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.435 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.435 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
+06-02 16:38:24.436 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V
+06-02 16:38:24.436 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.436 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.436 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:24.436 D/StrictMode( 9156): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:24.436 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:24.436 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:24.436 D/StrictMode( 9156): at androidx.appcompat.widget.ViewUtils.makeOptionalFitsSystemWindows(ViewUtils.java:84)
+06-02 16:38:24.436 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:970)
+06-02 16:38:24.436 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:803)
+06-02 16:38:24.436 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:692)
+06-02 16:38:24.436 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
+06-02 16:38:24.436 D/StrictMode( 9156): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:130)
+06-02 16:38:24.436 D/StrictMode( 9156): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:24.436 D/StrictMode( 9156): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:24.436 D/StrictMode( 9156): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:24.436 D/StrictMode( 9156): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:24.436 D/StrictMode( 9156): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:24.436 D/StrictMode( 9156): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:24.436 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:24.436 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:24.436 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:24.436 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.436 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.436 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.436 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.436 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.436 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.442 D/GeckoViewConsole( 9156): enabled = true
+06-02 16:38:24.482 I/AJC ( 9156): isPerformanceTest
+06-02 16:38:24.483 I/AJC ( 9156): isPerformanceTest : isPhonePlugged: true
+06-02 16:38:24.483 I/AJC ( 9156): isPerformanceTest : isAdbEnabled: true
+06-02 16:38:24.487 D/App ( 9156): DebugMetricController: track event: org.mozilla.fenix.components.metrics.Event$DismissedOnboarding@6354493
+06-02 16:38:24.505 I/GeckoConsole( 9156): No chrome package registered for chrome://browser/content/built_in_addons.json
+06-02 16:38:24.582 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/graphics/FontFamily;-><init>()V (light greylist, reflection)
+06-02 16:38:24.585 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;-><init>()V
+06-02 16:38:24.585 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.585 D/StrictMode( 9156): at java.lang.Class.getDeclaredConstructorInternal(Native Method)
+06-02 16:38:24.585 D/StrictMode( 9156): at java.lang.Class.getConstructor0(Class.java:2325)
+06-02 16:38:24.585 D/StrictMode( 9156): at java.lang.Class.getConstructor(Class.java:1725)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainFontFamilyCtor(TypefaceCompatApi26Impl.java:321)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:84)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:24.585 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:24.585 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:24.585 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:24.585 D/StrictMode( 9156): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:24.585 D/StrictMode( 9156): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:24.585 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:24.585 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:24.585 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
+06-02 16:38:24.585 D/StrictMode( 9156): at
+06-02 16:38:24.585 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/graphics/FontFamily;->addFontFromAssetManager(Landroid/content/res/AssetManager;Ljava/lang/String;IZIII[Landroid/graphics/fonts/FontVariationAxis;)Z (light greylist, reflection)
+06-02 16:38:24.588 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;->addFontFromAssetManager(Landroid/content/res/AssetManager;Ljava/lang/String;IZIII[Landroid/graphics/fonts/FontVariationAxis;)Z
+06-02 16:38:24.588 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.588 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:24.588 D/StrictMode( 9156): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:24.588 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:24.588 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainAddFontFromAssetManagerMethod(TypefaceCompatApi26Impl.java:326)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:85)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:24.588 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:24.588 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:24.588 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:24.588 D/StrictMode( 9156): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:24.588 D/StrictMode( 9156): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:24.588 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:24.588 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:24.588 D/StrictMode( 9156): at androidx.fragme
+06-02 16:38:24.588 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/graphics/FontFamily;->addFontFromBuffer(Ljava/nio/ByteBuffer;I[Landroid/graphics/fonts/FontVariationAxis;II)Z (light greylist, reflection)
+06-02 16:38:24.590 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;->addFontFromBuffer(Ljava/nio/ByteBuffer;I[Landroid/graphics/fonts/FontVariationAxis;II)Z
+06-02 16:38:24.590 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.590 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:24.590 D/StrictMode( 9156): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:24.590 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:24.590 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainAddFontFromBufferMethod(TypefaceCompatApi26Impl.java:333)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:86)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:24.590 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:24.590 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:24.590 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:24.590 D/StrictMode( 9156): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:24.590 D/StrictMode( 9156): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:24.590 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:24.590 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:24.590 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.removeRedundantOperati
+06-02 16:38:24.591 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/graphics/FontFamily;->freeze()Z (light greylist, reflection)
+06-02 16:38:24.591 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;->freeze()Z
+06-02 16:38:24.591 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.591 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:24.591 D/StrictMode( 9156): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:24.591 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:24.591 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainFreezeMethod(TypefaceCompatApi26Impl.java:339)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:87)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:24.591 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:24.591 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:24.591 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:24.591 D/StrictMode( 9156): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:24.591 D/StrictMode( 9156): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:24.591 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:24.591 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:24.591 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.execPe
+06-02 16:38:24.591 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/graphics/FontFamily;->abortCreation()V (light greylist, reflection)
+06-02 16:38:24.592 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;->abortCreation()V
+06-02 16:38:24.592 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.592 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:24.592 D/StrictMode( 9156): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:24.592 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:24.592 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainAbortCreationMethod(TypefaceCompatApi26Impl.java:343)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:88)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:24.592 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:24.592 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:24.592 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:24.592 D/StrictMode( 9156): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:24.592 D/StrictMode( 9156): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:24.592 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:24.592 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:24.592 D/StrictMode( 9156): at androidx.fragment.app.Fragment
+06-02 16:38:24.592 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/graphics/Typeface;->createFromFamiliesWithDefault([Landroid/graphics/FontFamily;Ljava/lang/String;II)Landroid/graphics/Typeface; (light greylist, reflection)
+06-02 16:38:24.594 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/Typeface;->createFromFamiliesWithDefault([Landroid/graphics/FontFamily;Ljava/lang/String;II)Landroid/graphics/Typeface;
+06-02 16:38:24.594 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:24.594 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:24.594 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:2064)
+06-02 16:38:24.594 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethod(Class.java:2047)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi28Impl.obtainCreateFromFamiliesWithDefaultMethod(TypefaceCompatApi28Impl.java:62)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:89)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:24.594 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:24.594 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:24.594 D/StrictMode( 9156): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:24.594 D/StrictMode( 9156): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:24.594 D/StrictMode( 9156): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:24.594 D/StrictMode( 9156): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:24.594 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:24.594 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentMa
+06-02 16:38:24.706 D/GeckoRuntime( 9156): Lifecycle: onStart
+06-02 16:38:24.710 D/GeckoRuntime( 9156): Lifecycle: onResume
+06-02 16:38:24.713 D/GeckoNetworkManager( 9156): Incoming event start for state OffNoListeners -> OnNoListeners
+06-02 16:38:24.714 D/GeckoNetworkManager( 9156): New network state: UP, WIFI, WIFI
+06-02 16:38:24.716 D/OpenGLRenderer( 9156): Skia GL Pipeline
+06-02 16:38:24.733 E/SurfaceFlinger( 1728): ro.sf.lcd_density must be defined as a build property
+06-02 16:38:24.756 D/StrictMode( 9156): StrictMode policy violation; ~duration=372 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.756 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.756 D/StrictMode( 9156): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:24.756 D/StrictMode( 9156): at java.io.File.exists(File.java:815)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.app.ContextImpl.getDataDir(ContextImpl.java:2253)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:550)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:24.756 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleManager$Storage.getSharedPreferences(LocaleManager.kt:123)
+06-02 16:38:24.756 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleManager$Storage.getLocale(LocaleManager.kt:99)
+06-02 16:38:24.756 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleManager.getCurrentLocale(LocaleManager.kt:42)
+06-02 16:38:24.756 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleManager.updateResources$support_locale_release(LocaleManager.kt:72)
+06-02 16:38:24.756 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:18)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.app.Activity.attach(Activity.java:7051)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.756 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.756 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.756 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.756 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.762 D/StrictMode( 9156): StrictMode policy violation; ~duration=372 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.762 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.762 D/StrictMode( 9156): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:24.762 D/StrictMode( 9156): at java.io.File.exists(File.java:815)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:24.762 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleManager$Storage.getSharedPreferences(LocaleManager.kt:123)
+06-02 16:38:24.762 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleManager$Storage.getLocale(LocaleManager.kt:99)
+06-02 16:38:24.762 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleManager.getCurrentLocale(LocaleManager.kt:42)
+06-02 16:38:24.762 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleManager.updateResources$support_locale_release(LocaleManager.kt:72)
+06-02 16:38:24.762 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:18)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.app.Activity.attach(Activity.java:7051)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.762 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.762 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.762 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.762 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.765 D/StrictMode( 9156): StrictMode policy violation; ~duration=259 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.765 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.765 D/StrictMode( 9156): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:24.765 D/StrictMode( 9156): at java.io.File.exists(File.java:815)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.ContextImpl.getDataDir(ContextImpl.java:2253)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:550)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:24.765 D/StrictMode( 9156): at org.mozilla.fenix.onboarding.FenixOnboarding.<init>(FenixOnboarding.kt:15)
+06-02 16:38:24.765 D/StrictMode( 9156): at org.mozilla.fenix.perf.Performance.disableOnboarding(Performance.kt:72)
+06-02 16:38:24.765 D/StrictMode( 9156): at org.mozilla.fenix.perf.Performance.processIntentIfPerformanceTest(Performance.kt:32)
+06-02 16:38:24.765 D/StrictMode( 9156): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:145)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.765 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.765 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.765 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.765 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.772 D/StrictMode( 9156): StrictMode policy violation; ~duration=259 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.772 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.772 D/StrictMode( 9156): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:24.772 D/StrictMode( 9156): at java.io.File.exists(File.java:815)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:24.772 D/StrictMode( 9156): at org.mozilla.fenix.onboarding.FenixOnboarding.<init>(FenixOnboarding.kt:15)
+06-02 16:38:24.772 D/StrictMode( 9156): at org.mozilla.fenix.perf.Performance.disableOnboarding(Performance.kt:72)
+06-02 16:38:24.772 D/StrictMode( 9156): at org.mozilla.fenix.perf.Performance.processIntentIfPerformanceTest(Performance.kt:32)
+06-02 16:38:24.772 D/StrictMode( 9156): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:145)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.772 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.772 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.772 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.772 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.774 D/StrictMode( 9156): StrictMode policy violation; ~duration=257 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.774 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.app.SharedPreferencesImpl.awaitLoadedLocked(SharedPreferencesImpl.java:256)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.app.SharedPreferencesImpl.edit(SharedPreferencesImpl.java:349)
+06-02 16:38:24.774 D/StrictMode( 9156): at org.mozilla.fenix.onboarding.FenixOnboarding.setOnboardedVersion(FenixOnboarding.kt:42)
+06-02 16:38:24.774 D/StrictMode( 9156): at org.mozilla.fenix.onboarding.FenixOnboarding.finish(FenixOnboarding.kt:25)
+06-02 16:38:24.774 D/StrictMode( 9156): at org.mozilla.fenix.perf.Performance.disableOnboarding(Performance.kt:72)
+06-02 16:38:24.774 D/StrictMode( 9156): at org.mozilla.fenix.perf.Performance.processIntentIfPerformanceTest(Performance.kt:32)
+06-02 16:38:24.774 D/StrictMode( 9156): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:145)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:24.774 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:24.774 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:24.774 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:24.774 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:24.775 D/StrictMode( 9156): StrictMode policy violation; ~duration=100 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.775 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.775 D/StrictMode( 9156): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:24.775 D/StrictMode( 9156): at java.io.File.exists(File.java:815)
+06-02 16:38:24.775 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:24.775 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:24.775 D/StrictMode( 9156): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:24.775 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:24.775 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:24.775 D/StrictMode( 9156): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:24.775 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleManager$Storage.getSharedPreferences(LocaleManager.kt:123)
+06-02 16:38:24.775 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleManager$Storage.getLocale(LocaleManager.kt:99)
+06-02 16:38:24.775 D/StrictMode( 9156): at mozilla.components.support.locale.LocaleManager.getCurrentLocale(LocaleManager.kt:42)
+06-02 16:38:24.775 D/StrictMode( 9156): at org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt.getSelectedLocale(LocaleManagerExtension.kt:39)
+06-02 16:38:24.775 D/StrictMode( 9156): at org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt.getSelectedLocale$default(LocaleManagerExtension.kt:37)
+06-02 16:38:24.775 D/StrictMode( 9156): at org.mozilla.fenix.components.TopSiteStorage.addDefaultTopSites(TopSiteStorage.kt:57)
+06-02 16:38:24.775 D/StrictMode( 9156): at org.mozilla.fenix.components.TopSiteStorage.<init>(TopSiteStorage.kt:30)
+06-02 16:38:24.775 D/StrictMode( 9156): at org.mozilla.fenix.components.Core$topSiteStorage$2.invoke(Core.kt:216)
+06-02 16:38:24.775 D/StrictMode( 9156): at org.mozilla.fenix.components.Core$topSiteStorage$2.invoke(Core.kt:57)
+06-02 16:38:24.775 D/StrictMode( 9156): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:24.775 D/StrictMode( 9156): at org.mozilla.fenix.components.Core.getTopSiteStorage(Unknown Source:8)
+06-02 16:38:24.775 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment$onCreateView$2.invoke(HomeFragment.kt:210)
+06-02 16:38:24.775 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment$onCreateView$2.invoke(HomeFragment.kt:114)
+06-02 16:38:24.775 D/StrictMode( 9156): at org.mozilla.fenix.components.StoreProviderFactory.create(StoreProvider.kt:42)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
+06-02 16:38:24.775 D/StrictMode( 9156): at org.mozilla.fenix.components.StoreProvider$Companion.get(StoreProvider.kt:46)
+06-02 16:38:24.775 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:203)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
+06-02 16:38:24.775 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
+06-02 16:38:24.775 D/StrictMode( 9156): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
+06-02 16:38:24.775 D/StrictMode( 9156):
+06-02 16:38:24.779 D/StrictMode( 9156): StrictMode policy violation; ~duration=58 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.779 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.779 D/StrictMode( 9156): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:24.779 D/StrictMode( 9156): at java.io.File.exists(File.java:815)
+06-02 16:38:24.779 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:24.779 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:24.779 D/StrictMode( 9156): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:24.779 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:24.779 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:24.779 D/StrictMode( 9156): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:24.779 D/StrictMode( 9156): at org.mozilla.fenix.components.AccountAbnormalities.<init>(AccountAbnormalities.kt:78)
+06-02 16:38:24.779 D/StrictMode( 9156): at org.mozilla.fenix.components.AccountAbnormalities.<init>(AccountAbnormalities.kt:60)
+06-02 16:38:24.779 D/StrictMode( 9156): at org.mozilla.fenix.components.BackgroundServices.<init>(BackgroundServices.kt:103)
+06-02 16:38:24.779 D/StrictMode( 9156): at org.mozilla.fenix.components.Components$backgroundServices$2.invoke(Components.kt:34)
+06-02 16:38:24.779 D/StrictMode( 9156): at org.mozilla.fenix.components.Components$backgroundServices$2.invoke(Components.kt:32)
+06-02 16:38:24.779 D/StrictMode( 9156): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:24.779 D/StrictMode( 9156): at org.mozilla.fenix.components.Components.getBackgroundServices(Unknown Source:7)
+06-02 16:38:24.779 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2.invoke(HomeMenu.kt:131)
+06-02 16:38:24.779 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2.invoke(HomeMenu.kt:31)
+06-02 16:38:24.779 D/StrictMode( 9156): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:24.779 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeMenu.getCoreMenuItems(Unknown Source:7)
+06-02 16:38:24.779 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeMenu.<init>(HomeMenu.kt:170)
+06-02 16:38:24.779 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment.createHomeMenu(HomeFragment.kt:668)
+06-02 16:38:24.779 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment.onViewCreated(HomeFragment.kt:337)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:332)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
+06-02 16:38:24.779 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
+06-02 16:38:24.779 D/StrictMode( 9156): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
+06-02 16:38:24.779 D/StrictMode( 9156): at android.app.Activity.performStart(Activity.java:7157)
+06-02 16:38:24.779 D/StrictMode( 9156): at android.app.ActivityThread.handleStartActivity(ActivityThread.java:2937)
+06-02 16:38:24.779 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
+06-02 16:38:24.779 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
+06-02 16:38:24.779 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
+06-02 16:38:24.779 D/StrictMode( 9156): at android.app.servertransaction.TransactionExecutor.execute(Transac
+06-02 16:38:24.782 D/StrictMode( 9156): StrictMode policy violation; ~duration=47 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:24.782 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:24.782 D/StrictMode( 9156): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:24.782 D/StrictMode( 9156): at java.io.File.exists(File.java:815)
+06-02 16:38:24.782 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:24.782 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:24.782 D/StrictMode( 9156): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:24.782 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:24.782 D/StrictMode( 9156): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:24.782 D/StrictMode( 9156): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:24.782 D/StrictMode( 9156): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:24.782 D/StrictMode( 9156): at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:526)
+06-02 16:38:24.782 D/StrictMode( 9156): at org.mozilla.fenix.whatsnew.SharedPreferenceWhatsNewStorage.<init>(WhatsNewStorage.kt:35)
+06-02 16:38:24.782 D/StrictMode( 9156): at org.mozilla.fenix.whatsnew.WhatsNew$Companion.shouldHighlightWhatsNew(WhatsNew.kt:71)
+06-02 16:38:24.782 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2$whatsNewItem$1.invoke(HomeMenu.kt:92)
+06-02 16:38:24.782 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2$whatsNewItem$1.invoke(HomeMenu.kt:31)
+06-02 16:38:24.782 D/StrictMode( 9156): at mozilla.components.browser.menu.ext.BrowserMenuItemKt$getHighlight$3.invoke(BrowserMenuItem.kt:18)
+06-02 16:38:24.782 D/StrictMode( 9156): at mozilla.components.browser.menu.ext.BrowserMenuItemKt$getHighlight$3.invoke(Unknown Source:2)
+06-02 16:38:24.782 D/StrictMode( 9156): at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:133)
+06-02 16:38:24.782 D/StrictMode( 9156): at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:156)
+06-02 16:38:24.782 D/StrictMode( 9156): at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:176)
+06-02 16:38:24.782 D/StrictMode( 9156): at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:131)
+06-02 16:38:24.782 D/StrictMode( 9156): at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:156)
+06-02 16:38:24.782 D/StrictMode( 9156): at mozilla.components.browser.menu.ext.BrowserMenuItemKt.getHighlight(BrowserMenuItem.kt:31)
+06-02 16:38:24.782 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2.invoke(HomeMenu.kt:149)
+06-02 16:38:24.782 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2.invoke(HomeMenu.kt:31)
+06-02 16:38:24.782 D/StrictMode( 9156): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:24.782 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeMenu.getCoreMenuItems(Unknown Source:7)
+06-02 16:38:24.782 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeMenu.<init>(HomeMenu.kt:170)
+06-02 16:38:24.782 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment.createHomeMenu(HomeFragment.kt:668)
+06-02 16:38:24.782 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment.onViewCreated(HomeFragment.kt:337)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:332)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
+06-02 16:38:24.782 D/StrictMode( 9156): at androidx.appcompat.app.AppCompatAc
+06-02 16:38:24.782 D/LeakCanary( 9156): LeakCanary is running and ready to detect leaks
+06-02 16:38:24.787 I/libglean_ffi( 9156): glean_core::ping: Collecting baseline
+06-02 16:38:24.796 D/libglean_ffi( 9156): glean_core::ping: Storing ping 'df517eba-b482-412e-a056-0d6679710e3c' at '/data/user/0/org.mozilla.fenix.debug/glean_data/pending_pings/df517eba-b482-412e-a056-0d6679710e3c'
+06-02 16:38:24.796 I/libglean_ffi( 9156): glean_core: The ping 'baseline' was submitted and will be sent as soon as possible
+06-02 16:38:24.819 D/GeckoNetworkManager( 9156): Incoming event enableNotifications for state OnNoListeners -> OnWithListeners
+06-02 16:38:24.820 D/GeckoNetworkManager( 9156): New network state: UP, WIFI, WIFI
+06-02 16:38:24.820 W/ActivityManager( 1869): Receiver with filter android.content.IntentFilter@d1608ed already registered for pid 9156, callerPackage is org.mozilla.fenix.debug
+06-02 16:38:24.827 D/GeckoNetworkManager( 9156): Incoming event receivedUpdate for state OnWithListeners -> OnWithListeners
+06-02 16:38:24.828 D/GeckoNetworkManager( 9156): New network state: UP, WIFI, WIFI
+06-02 16:38:24.898 D/GeckoThread( 9156): State changed to PROFILE_READY
+06-02 16:38:24.904 D/GeckoThread( 9201): State changed to LAUNCHED
+06-02 16:38:24.904 I/GeckoThread( 9201): preparing to run Gecko
+06-02 16:38:24.915 D/WIFI_UT ( 1869): got request NetworkRequest [ TRACK_DEFAULT id=34, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10099] ] with score 60
+06-02 16:38:24.915 D/WIFI ( 1869): got request NetworkRequest [ TRACK_DEFAULT id=34, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10099] ] with score 60
+06-02 16:38:24.915 D/PhoneSwitcherNetworkRequstListener( 2121): got request NetworkRequest [ TRACK_DEFAULT id=34, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10099] ] with score 60
+06-02 16:38:24.933 I/lla.fenix.debu( 9156): Background concurrent copying GC freed 16527(1436KB) AllocSpace objects, 30(1032KB) LOS objects, 49% free, 4MB/9MB, paused 264us total 150.694ms
+06-02 16:38:24.952 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:24.952 D/GeckoViewStartup( 9156): observe: profile-after-change
+06-02 16:38:24.957 D/GeckoViewTelemetryController( 9156): setup - canRecordPrereleaseData true, canRecordReleaseData true
+06-02 16:38:24.962 D/ ( 1728): HostConnection::get() New Host Connection established 0xe50f1400, tid 1952
+06-02 16:38:24.963 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:24.970 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:24.987 D/ ( 9156): HostConnection::get() New Host Connection established 0xe33a0f40, tid 9245
+06-02 16:38:24.991 I/ConfigStore( 9156): android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
+06-02 16:38:24.991 I/ConfigStore( 9156): android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
+06-02 16:38:24.991 I/OpenGLRenderer( 9156): Initialized EGL, version 1.4
+06-02 16:38:24.991 D/OpenGLRenderer( 9156): Swap behavior 1
+06-02 16:38:24.992 W/OpenGLRenderer( 9156): Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
+06-02 16:38:24.992 D/OpenGLRenderer( 9156): Swap behavior 0
+06-02 16:38:24.993 D/EGL_emulation( 9156): eglCreateContext: 0xe33868c0: maj 3 min 0 rcv 3
+06-02 16:38:24.994 D/EGL_emulation( 9156): eglMakeCurrent: 0xe33868c0: ver 3 0 (tinfo 0xb35fe0f0)
+06-02 16:38:24.996 E/SurfaceFlinger( 1728): ro.sf.lcd_density must be defined as a build property
+06-02 16:38:24.999 D/GeckoThread( 9156): State changed to RUNNING
+06-02 16:38:25.001 W/lla.fenix.debu( 9156): Accessing hidden field Landroid/os/Trace;->TRACE_TAG_APP:J (light greylist, reflection)
+06-02 16:38:25.003 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->TRACE_TAG_APP:J
+06-02 16:38:25.003 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:25.003 D/StrictMode( 9156): at java.lang.Class.getPublicFieldRecursive(Native Method)
+06-02 16:38:25.003 D/StrictMode( 9156): at java.lang.Class.getField(Class.java:1599)
+06-02 16:38:25.003 D/StrictMode( 9156): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:48)
+06-02 16:38:25.003 D/StrictMode( 9156): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:25.003 D/StrictMode( 9156): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.003 D/StrictMode( 9156): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:25.003 D/StrictMode( 9156): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:25.003 D/StrictMode( 9156): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:25.003 D/StrictMode( 9156): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.003 D/StrictMode( 9156): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:25.003 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:25.003 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:25.003 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:25.003 D/StrictMode( 9156): at com.and
+06-02 16:38:25.003 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/os/Trace;->isTagEnabled(J)Z (light greylist, reflection)
+06-02 16:38:25.006 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->isTagEnabled(J)Z
+06-02 16:38:25.006 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:25.006 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:25.006 D/StrictMode( 9156): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:25.006 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:25.006 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:25.006 D/StrictMode( 9156): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:51)
+06-02 16:38:25.006 D/StrictMode( 9156): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:25.006 D/StrictMode( 9156): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.006 D/StrictMode( 9156): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:25.006 D/StrictMode( 9156): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:25.006 D/StrictMode( 9156): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:25.006 D/StrictMode( 9156): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.006 D/StrictMode( 9156): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:25.006 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:25.006 D/StrictMode( 9156): at java.lang.reflect.Method.invoke
+06-02 16:38:25.006 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V (light greylist, reflection)
+06-02 16:38:25.008 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V
+06-02 16:38:25.008 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:25.008 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:25.008 D/StrictMode( 9156): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:25.008 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:25.008 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:25.008 D/StrictMode( 9156): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:52)
+06-02 16:38:25.008 D/StrictMode( 9156): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:25.008 D/StrictMode( 9156): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.008 D/StrictMode( 9156): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:25.008 D/StrictMode( 9156): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:25.008 D/StrictMode( 9156): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:25.008 D/StrictMode( 9156): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.008 D/StrictMode( 9156): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:25.008 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:25.008 D/StrictMode( 9156): at java.lang
+06-02 16:38:25.008 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V (light greylist, reflection)
+06-02 16:38:25.013 I/Gecko ( 9156): -*- nsDNSServiceDiscovery.js : nsDNSServiceDiscovery
+06-02 16:38:25.013 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V
+06-02 16:38:25.013 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:25.013 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:25.013 D/StrictMode( 9156): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:25.013 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:25.013 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:25.013 D/StrictMode( 9156): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:54)
+06-02 16:38:25.013 D/StrictMode( 9156): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:25.013 D/StrictMode( 9156): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.013 D/StrictMode( 9156): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:25.013 D/StrictMode( 9156): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:25.013 D/StrictMode( 9156): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:25.013 D/StrictMode( 9156): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.013 D/StrictMode( 9156): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:25.013 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:25.013 D/StrictMode( 9156): at java.lang.r
+06-02 16:38:25.013 W/lla.fenix.debu( 9156): Accessing hidden method Landroid/os/Trace;->traceCounter(JLjava/lang/String;I)V (light greylist, reflection)
+06-02 16:38:25.016 D/StrictMode( 9156): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->traceCounter(JLjava/lang/String;I)V
+06-02 16:38:25.016 D/StrictMode( 9156): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:25.016 D/StrictMode( 9156): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:25.016 D/StrictMode( 9156): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:25.016 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:25.016 D/StrictMode( 9156): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:25.016 D/StrictMode( 9156): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:56)
+06-02 16:38:25.016 D/StrictMode( 9156): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:25.016 D/StrictMode( 9156): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.016 D/StrictMode( 9156): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:25.016 D/StrictMode( 9156): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:25.016 D/StrictMode( 9156): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:25.016 D/StrictMode( 9156): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:25.016 D/StrictMode( 9156): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.View.layout(View.java:20672)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:25.016 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:25.016 D/StrictMode( 9156): at java.lang.re
+06-02 16:38:25.028 D/GeckoNetworkManager( 9156): Incoming event receivedUpdate for state OnWithListeners -> OnWithListeners
+06-02 16:38:25.029 D/GeckoNetworkManager( 9156): New network state: UP, WIFI, WIFI
+06-02 16:38:25.051 D/EGL_emulation( 9156): eglMakeCurrent: 0xe33868c0: ver 3 0 (tinfo 0xb35fe0f0)
+06-02 16:38:25.069 D/GeckoViewStartup( 9156): onEvent GeckoView:SetLocale
+06-02 16:38:25.070 D/GeckoViewStartup( 9156): onEvent GeckoView:ResetUserPrefs
+06-02 16:38:25.080 I/ActivityManager( 1869): Displayed org.mozilla.fenix.debug/.App: +1s708ms
+06-02 16:38:25.082 I/GoogleInputMethod( 1996): onFinishInput() : Dummy InputConnection bound
+06-02 16:38:25.082 I/GoogleInputMethod( 1996): onStartInput() : Dummy InputConnection bound
+06-02 16:38:25.082 D/glean/PingUploadWorker( 9156): Processing persisted pings at /data/user/0/org.mozilla.fenix.debug/glean_data/pending_pings
+06-02 16:38:25.083 D/glean/PingUploadWorker( 9156): Processing ping: df517eba-b482-412e-a056-0d6679710e3c
+06-02 16:38:25.088 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:25.091 D/GeckoViewRemoteDebugger( 9156): onInit
+06-02 16:38:25.092 D/GeckoViewConsole( 9156): enabled = false
+06-02 16:38:25.092 D/glean/ConceptFetchHttpUploader( 9156): Submitting ping to: https://incoming.telemetry.mozilla.org/submit/org-mozilla-fenix-debug/baseline/1/df517eba-b482-412e-a056-0d6679710e3c
+06-02 16:38:25.134 D/GeckoViewStartup( 9156): onEvent GeckoView:SetLocale
+06-02 16:38:25.135 D/GeckoViewStartup( 9156): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:25.138 W/SurfaceFlinger( 1728): couldn't log to binary event log: overflow.
+06-02 16:38:25.149 D/GeckoViewStartup( 9156): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:25.153 D/StrictMode( 9156): StrictMode policy violation; ~duration=24 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:25.153 D/StrictMode( 9156): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:25.153 D/StrictMode( 9156): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:25.153 D/StrictMode( 9156): at java.io.File.exists(File.java:815)
+06-02 16:38:25.153 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:25.153 D/StrictMode( 9156): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:25.153 D/StrictMode( 9156): at android.app.ContextImpl.getFilesDir(ContextImpl.java:641)
+06-02 16:38:25.153 D/StrictMode( 9156): at android.content.ContextWrapper.getFilesDir(ContextWrapper.java:239)
+06-02 16:38:25.153 D/StrictMode( 9156): at mozilla.components.feature.tab.collections.TabCollectionStorage.<init>(TabCollectionStorage.kt:29)
+06-02 16:38:25.153 D/StrictMode( 9156): at org.mozilla.fenix.components.TabCollectionStorage$collectionStorage$2.invoke(TabCollectionStorage.kt:52)
+06-02 16:38:25.153 D/StrictMode( 9156): at org.mozilla.fenix.components.TabCollectionStorage$collectionStorage$2.invoke(TabCollectionStorage.kt:23)
+06-02 16:38:25.153 D/StrictMode( 9156): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:25.153 D/StrictMode( 9156): at org.mozilla.fenix.components.TabCollectionStorage.getCollectionStorage(Unknown Source:7)
+06-02 16:38:25.153 D/StrictMode( 9156): at org.mozilla.fenix.components.TabCollectionStorage.getCollections(TabCollectionStorage.kt:70)
+06-02 16:38:25.153 D/StrictMode( 9156): at org.mozilla.fenix.components.TabCollectionStorage.getCollections$default(TabCollectionStorage.kt:69)
+06-02 16:38:25.153 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment.subscribeToTabCollections(HomeFragment.kt:750)
+06-02 16:38:25.153 D/StrictMode( 9156): at org.mozilla.fenix.home.HomeFragment.onStart(HomeFragment.kt:404)
+06-02 16:38:25.153 D/StrictMode( 9156): at androidx.fragment.app.Fragment.performStart(Fragment.java:2730)
+06-02 16:38:25.153 D/StrictMode( 9156): at androidx.fragment.app.FragmentStateManager.start(FragmentStateManager.java:365)
+06-02 16:38:25.153 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1194)
+06-02 16:38:25.153 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
+06-02 16:38:25.153 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
+06-02 16:38:25.153 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
+06-02 16:38:25.153 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.completeExecute(FragmentManager.java:2125)
+06-02 16:38:25.153 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager$StartEnterTransitionListener.completeTransaction(FragmentManager.java:3022)
+06-02 16:38:25.153 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.executePostponedTransaction(FragmentManager.java:1895)
+06-02 16:38:25.153 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.ensureExecReady(FragmentManager.java:1803)
+06-02 16:38:25.153 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1843)
+06-02 16:38:25.153 D/StrictMode( 9156): at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
+06-02 16:38:25.153 D/StrictMode( 9156): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:25.153 D/StrictMode( 9156): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:25.153 D/StrictMode( 9156): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:25.153 D/StrictMode( 9156): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:25.153 D/StrictMode( 9156): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:25.153 D/StrictMode( 9156): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:25.153 D/StrictMode( 9156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:25.159 D/GeckoViewStartup( 9156): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:25.184 I/chatty ( 9156): uid=10099(org.mozilla.fenix.debug) identical 1 line
+06-02 16:38:25.187 D/GeckoViewStartup( 9156): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:25.190 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:25.209 D/GeckoViewStartup( 9156): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:25.230 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
+06-02 16:38:25.244 D/gralloc_ranchu( 1869): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:25.245 D/ ( 1869): HostConnection::get() New Host Connection established 0xcb8a3340, tid 1930
+06-02 16:38:25.246 D/gralloc_ranchu( 1869): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:25.247 W/SurfaceFlinger( 1728): Attempting to set client state on removed layer: Splash Screen org.mozilla.fenix.debug#0
+06-02 16:38:25.247 W/SurfaceFlinger( 1728): Attempting to destroy on removed layer: Splash Screen org.mozilla.fenix.debug#0
+06-02 16:38:25.250 I/PBSessionCacheImpl( 2402): Deleted sessionId[359508686711] from persistence.
+06-02 16:38:25.253 W/SearchService( 2402): Abort, client detached.
+06-02 16:38:25.259 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:25.260 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:25.260 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:25.265 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:25.293 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:25.302 D/GeckoViewStartup( 9156): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:25.318 I/chatty ( 9156): uid=10099(org.mozilla.fenix.debug) identical 3 lines
+06-02 16:38:25.319 D/GeckoViewStartup( 9156): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:25.324 D/GeckoViewConsole( 9156): onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"webcompat@mozilla.com","locationUri":"resource://android/assets/extensions/webcompat/"}
+06-02 16:38:25.330 D/GeckoViewConsole( 9156): onEvent GeckoView:WebExtension:List null
+06-02 16:38:25.331 D/GeckoViewConsole( 9156): onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"mozacBrowserIcons","locationUri":"resource://android/assets/extensions/browser-icons/"}
+06-02 16:38:25.332 D/GeckoViewConsole( 9156): onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"mozacBrowserAds","locationUri":"resource://android/assets/extensions/ads/"}
+06-02 16:38:25.333 D/GeckoViewConsole( 9156): onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"BrowserCookiesExtension","locationUri":"resource://android/assets/extensions/cookies/"}
+06-02 16:38:25.364 E/BatteryExternalStatsWorker( 1869): no controller energy info supplied for wifi
+06-02 16:38:25.396 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:25.415 I/ActivityManager( 1869): Fully drawn org.mozilla.fenix.debug/.App: +2s48ms
+06-02 16:38:25.456 I/DefaultSupportedAddonsChecker( 9156): Register check for new supported add-ons
+06-02 16:38:25.478 I/SupportedAddonsWorker( 9156): Trying to check for new supported add-ons
+06-02 16:38:25.501 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:25.554 D/App ( 9156): Installed browser-icons extension
+06-02 16:38:25.596 D/ ( 9156): HostConnection::get() New Host Connection established 0xcb89ecc0, tid 9185
+06-02 16:38:25.597 E/EGL_emulation( 9156): tid 9185: eglBindAPI(1259): error 0x300c (EGL_BAD_PARAMETER)
+06-02 16:38:25.599 D/EGL_emulation( 9156): eglCreateContext: 0xae25e060: maj 3 min 0 rcv 3
+06-02 16:38:25.602 D/EGL_emulation( 9156): eglMakeCurrent: 0xae25e060: ver 3 0 (tinfo 0xaf7eb740)
+06-02 16:38:25.604 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:25.656 E/GeckoConsole( 9156): [JavaScript Error: "NetworkError when attempting to fetch resource."]
+06-02 16:38:25.656 E/GeckoConsole( 9156): get@resource://services-settings/RemoteSettingsClient.jsm:350:12
+06-02 16:38:25.710 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:25.765 D/glean/ConceptFetchHttpUploader( 9156): Ping successfully sent (200)
+06-02 16:38:25.766 D/glean/PingUploadWorker( 9156): df517eba-b482-412e-a056-0d6679710e3c was deleted: true
+06-02 16:38:25.767 I/WM-WorkerWrapper( 9156): Worker result SUCCESS for Work [ id=0ef26001-ff6c-4e5f-aa78-4728cca0a169, tags={ mozilla.telemetry.glean.scheduler.PingUploadWorker, mozac_service_glean_ping_upload_worker } ]
+06-02 16:38:25.786 W/GeckoConsole( 9156): [JavaScript Warning: "Security wrapper denied access to property "ONE_QUARTER" on privileged Javascript object. Support for exposing privileged objects to untrusted content via __exposedProps__ has been removed - use WebIDL bindings or Components.utils.cloneInto instead. Note that only the first denied property access from a given global object will be reported." {file: "moz-extension://0b97d1ec-4efa-4cee-bc30-34776dc45bb8/data/picture_in_picture_overrides.js" line: 26}]
+06-02 16:38:25.805 D/BrowserIcons( 9156): Loaded icon (source = DOWNLOAD): https://www.wikipedia.org/
+06-02 16:38:25.811 D/BrowserIcons( 9156): Loaded icon (source = DOWNLOAD): https://www.youtube.com/
+06-02 16:38:25.814 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:25.856 D/mozac-webcompat( 9156): Installed WebCompat webextension: webcompat@mozilla.com
+06-02 16:38:25.918 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:25.935 I/Gecko ( 9156): 1591130305935 Marionette INFO Listening on port 2829
+06-02 16:38:25.949 E/GeckoConsole( 9156): [JavaScript Error: "can't access property "startupData", state is undefined" {file: "resource://gre/modules/addons/XPIProvider.jsm" line: 3079}]
+06-02 16:38:25.949 E/GeckoConsole( 9156): setStartupData@resource://gre/modules/addons/XPIProvider.jsm:3079:5
+06-02 16:38:25.949 E/GeckoConsole( 9156): saveStartupData@resource://gre/modules/Extension.jsm:2035:17
+06-02 16:38:25.949 E/GeckoConsole( 9156): _writePersistentListeners@resource://gre/modules/ExtensionCommon.jsm:2271:15
+06-02 16:38:25.949 E/GeckoConsole( 9156): savePersistentListener@resource://gre/modules/ExtensionCommon.jsm:2362:18
+06-02 16:38:25.949 E/GeckoConsole( 9156): addListener@resource://gre/modules/ExtensionCommon.jsm:2495:20
+06-02 16:38:25.949 E/GeckoConsole( 9156): addListener@resource://gre/modules/ExtensionCommon.jsm:2550:38
+06-02 16:38:25.949 E/GeckoConsole( 9156): recvAddListener@resource://gre/modules/ExtensionParent.jsm:1079:13
+06-02 16:38:25.977 I/chatty ( 9156): uid=10099(org.mozilla.fenix.debug) identical 24 lines
+06-02 16:38:26.006 E/GeckoConsole( 9156): [JavaScript Error: "can't access property "startupData", state is undefined" {file: "resource://gre/modules/addons/XPIProvider.jsm" line: 3079}]
+06-02 16:38:26.006 E/GeckoConsole( 9156): setStartupData@resource://gre/modules/addons/XPIProvider.jsm:3079:5
+06-02 16:38:26.006 E/GeckoConsole( 9156): saveStartupData@resource://gre/modules/Extension.jsm:2035:17
+06-02 16:38:26.006 E/GeckoConsole( 9156): _writePersistentListeners@resource://gre/modules/ExtensionCommon.jsm:2271:15
+06-02 16:38:26.006 E/GeckoConsole( 9156): savePersistentListener@resource://gre/modules/ExtensionCommon.jsm:2362:18
+06-02 16:38:26.006 E/GeckoConsole( 9156): addListener@resource://gre/modules/ExtensionCommon.jsm:2495:20
+06-02 16:38:26.006 E/GeckoConsole( 9156): addListener@resource://gre/modules/ExtensionCommon.jsm:2550:38
+06-02 16:38:26.006 E/GeckoConsole( 9156): recvAddListener@resource://gre/modules/ExtensionParent.jsm:1079:13
+06-02 16:38:26.812 I/WM-WorkerWrapper( 9156): Worker result SUCCESS for Work [ id=460bd936-fd2a-47c2-be1a-4fee8bde7995, tags={ mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker.periodicWork, mozilla.components.feature.addons.migration.SupportedAddonsWorker } ]
+06-02 16:38:28.256 I/EventLogSendingHelper( 2402): Sending log events.
+06-02 16:38:30.021 I/FenixApplication( 9156): Kicking-off account manager...
+06-02 16:38:30.022 I/FenixApplication( 9156): Running post-visual completeness tasks...
+06-02 16:38:30.022 I/FenixApplication( 9156): Storage initialization...
+06-02 16:38:30.024 I/PlacesHistoryStorage( 9156): Warming up places storage...
+06-02 16:38:30.027 D/RustNativeSupport( 9156): findMegazordLibraryName(places, 0.59.0
+06-02 16:38:30.027 D/RustNativeSupport( 9156): lib in use: none
+06-02 16:38:30.027 D/RustNativeSupport( 9156): lib configured: megazord
+06-02 16:38:30.027 D/RustNativeSupport( 9156): lib version configured: 0.59.0
+06-02 16:38:30.027 D/RustNativeSupport( 9156): settled on megazord
+06-02 16:38:30.028 I/FirefoxAccountStateMachine( 9156): Enabling/updating sync with a new SyncConfig: SyncConfig(supportedEngines=[mozilla.components.service.fxa.SyncEngine$History@623799a, mozilla.components.service.fxa.SyncEngine$Bookmarks@343e2cb, mozilla.components.service.fxa.SyncEngine$Passwords@7039aa8], syncPeriodInMinutes=240)
+06-02 16:38:30.029 D/places_ffi( 9156): places_api_new
+06-02 16:38:30.029 I/BgSyncManager( 9156): Periodic syncing enabled at a 240 interval
+06-02 16:38:30.030 I/FirefoxAccountStateMachine( 9156): Sync is enabled
+06-02 16:38:30.032 I/FenixApplication( 9156): 'Kicking-off account manager' took 10 ms
+06-02 16:38:30.033 I/FirefoxAccountStateMachine( 9156): Processing event Init for state Start. Next state is Start
+06-02 16:38:30.060 I/keystore( 1734): del USRPKEY_org.mozilla.fenix.debug 10099
+06-02 16:38:30.061 I/keystore( 1734): del USRCERT_org.mozilla.fenix.debug 10099
+06-02 16:38:30.061 I/keystore( 1734): del CACERT_org.mozilla.fenix.debug 10099
+06-02 16:38:30.085 D/places::db::schema( 9156): Creating schema
+06-02 16:38:30.085 I/FirefoxAccountStateMachine( 9156): Ran 'Init' side-effects for state Start, got successive event AccountNotFound
+06-02 16:38:30.085 I/FirefoxAccountStateMachine( 9156): Processing event AccountNotFound for state Start. Next state is NotAuthenticated
+06-02 16:38:30.089 D/RustNativeSupport( 9156): findMegazordLibraryName(fxaclient, 0.59.0
+06-02 16:38:30.089 D/RustNativeSupport( 9156): lib in use: none
+06-02 16:38:30.089 D/RustNativeSupport( 9156): lib configured: megazord
+06-02 16:38:30.089 D/RustNativeSupport( 9156): lib version configured: 0.59.0
+06-02 16:38:30.089 D/RustNativeSupport( 9156): settled on megazord
+06-02 16:38:30.090 D/fxaclient_ffi( 9156): fxa_new
+06-02 16:38:30.092 W/FirefoxAccountStateMachine( 9156): Got invalid event Init for state NotAuthenticated.
+06-02 16:38:30.112 D/sql_support::conn_ext( 9156): Transaction commited after 27.875555ms
+06-02 16:38:30.112 D/places_ffi( 9156): places_connection_new
+06-02 16:38:30.116 D/places_ffi( 9156): places_connection_new
+06-02 16:38:30.117 I/PlacesHistoryStorage( 9156): 'Warming up places storage' took 92 ms
+06-02 16:38:30.118 I/PlacesBookmarksStorage( 9156): Warming up places storage...
+06-02 16:38:30.118 D/places_ffi( 9156): places_connection_new
+06-02 16:38:30.152 I/PlacesBookmarksStorage( 9156): 'Warming up places storage' took 33 ms
+06-02 16:38:30.175 I/keystore( 1734): 1 0
+06-02 16:38:30.182 I/SyncableLoginsStorage( 9156): Warming up storage...
+06-02 16:38:30.190 D/RustNativeSupport( 9156): findMegazordLibraryName(logins, 0.59.0
+06-02 16:38:30.190 D/RustNativeSupport( 9156): lib in use: none
+06-02 16:38:30.190 D/RustNativeSupport( 9156): lib configured: megazord
+06-02 16:38:30.190 D/RustNativeSupport( 9156): lib version configured: 0.59.0
+06-02 16:38:30.190 D/RustNativeSupport( 9156): settled on megazord
+06-02 16:38:30.192 D/logins_ffi( 9156): sync15_passwords_state_new
+06-02 16:38:30.195 D/logins::schema( 9156): Creating schema
+06-02 16:38:30.242 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
+06-02 16:38:30.288 I/SyncableLoginsStorage( 9156): 'Warming up storage' took 105 ms
+06-02 16:38:30.288 I/FenixApplication( 9156): 'Storage initialization' took 265 ms
+06-02 16:38:30.301 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:33.287 I/EventLogSendingHelper( 2402): Sending log events.
+06-02 16:38:35.144 E/memtrack( 1869): Couldn't load memtrack module
+06-02 16:38:35.144 W/android.os.Debug( 1869): failed to get memory consumption info: -1
+06-02 16:38:35.160 E/memtrack( 1869): Couldn't load memtrack module
+06-02 16:38:35.160 W/android.os.Debug( 1869): failed to get memory consumption info: -1
+06-02 16:38:35.258 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
+06-02 16:38:40.266 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
+06-02 16:38:42.115 E/netmgr ( 1826): Failed to open QEMU pipe 'qemud:network': Invalid argument
+06-02 16:38:42.116 E/netmgr ( 1826): WifiForwarder unable to open QEMU pipe: Invalid argument
+06-02 16:38:42.976 I/ActivityManager( 1869): Force stopping org.mozilla.fenix.debug appid=10099 user=0: clear data
+06-02 16:38:42.976 I/ActivityManager( 1869): Killing 9156:org.mozilla.fenix.debug/u0a99 (adj 0): stop org.mozilla.fenix.debug
+06-02 16:38:42.978 W/libprocessgroup( 1869): kill(-9156, 9) failed: No such process
+06-02 16:38:42.982 W/ActivityManager( 1869): Force removing ActivityRecord{39437d1 u0 org.mozilla.fenix.debug/.App t389}: app died, no saved state
+06-02 16:38:42.984 I/ServiceChildProcess( 9201): Service has been unbound. Stopping.
+06-02 16:38:42.996 I/ActivityManager( 1869): Killing 9201:org.mozilla.fenix.debug:tab0/u0a99 (adj 0): stop org.mozilla.fenix.debug
+06-02 16:38:43.001 D/ZenLog ( 1869): config: removeAutomaticZenRules,ZenModeConfig[user=0,allowAlarms=true,allowMedia=true,allowSystem=false,allowReminders=false,allowEvents=false,allowCalls=true,allowRepeatCallers=true,allowMessages=false,allowCallsFrom=stars,allowMessagesFrom=contacts,suppressedVisualEffects=511,areChannelsBypassingDnd=false,automaticRules={EVENTS_DEFAULT_RULE=ZenRule[enabled=false,snoozing=false,name=Event,zenMode=ZEN_MODE_IMPORTANT_INTERRUPTIONS,conditionId=condition://android/event?userId=-10000&calendar=&reply=1,condition=Condition[id=condition://android/event?userId=-10000&calendar=&reply=1,summary=...,line1=...,line2=...,icon=0,state=STATE_FALSE,flags=2],component=ComponentInfo{android/com.android.server.notification.EventConditionProvider},id=EVENTS_DEFAULT_RULE,creationTime=1587308662810,enabler=null], EVERY_NIGHT_DEFAULT_RULE=ZenRule[enabled=false,snoozing=false,name=Sleeping,zenMode=ZEN_MODE_IMPORTANT_INTERRUPTIONS,conditionId=condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true,condition=Condition[id=condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true,summary=...,line1=...,line2=...,icon=0,state=STATE_FALSE,flags=2],component=ComponentInfo{android/com.android.server.notification.ScheduleConditionProvider},id=EVERY_NIGHT_DEFAULT_RULE,creationTime=1587308662810,enabler=null]},manualRule=null],Diff[]
+06-02 16:38:43.001 I/ConditionProviders( 1869): Disallowing condition provider org.mozilla.fenix.debug
+06-02 16:38:43.001 D/ZenLog ( 1869): set_zen_mode: off,removeAutomaticZenRules
+06-02 16:38:43.002 E/memtrack( 1869): Couldn't load memtrack module
+06-02 16:38:43.002 W/android.os.Debug( 1869): failed to get memory consumption info: -1
+06-02 16:38:43.006 I/ActivityManager( 1869): Force stopping org.mozilla.fenix.debug appid=10099 user=-1: clearApplicationUserData
+06-02 16:38:43.009 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.010 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:43.010 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.010 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:43.010 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.010 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:43.010 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.011 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:43.011 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.011 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:43.011 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.016 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:43.023 W/libprocessgroup( 1869): kill(-9156, 9) failed: No such process
+06-02 16:38:43.025 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:43.041 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:43.045 I/keystore( 1734): clear_uid 10099
+06-02 16:38:43.049 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:43.057 D/SurfaceFlinger( 1728): duplicate layer name: changing com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity to com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity#1
+06-02 16:38:43.062 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:43.069 D/ ( 1728): HostConnection::get() New Host Connection established 0xe9a181c0, tid 1752
+06-02 16:38:43.069 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:43.070 W/libprocessgroup( 1869): kill(-9156, 9) failed: No such process
+06-02 16:38:43.071 E/system_server( 1869): No package ID 7f found for ID 0x7f0801a6.
+06-02 16:38:43.071 E/system_server( 1869): No package ID 7f found for ID 0x7f13011d.
+06-02 16:38:43.071 E/system_server( 1869): No package ID 7f found for ID 0x7f13011d.
+06-02 16:38:43.071 E/system_server( 1869): No package ID 7f found for ID 0x7f0801a4.
+06-02 16:38:43.071 E/system_server( 1869): No package ID 7f found for ID 0x7f13011c.
+06-02 16:38:43.071 E/system_server( 1869): No package ID 7f found for ID 0x7f13011c.
+06-02 16:38:43.073 I/GeofencerStateMachine( 2473): removeGeofences: removeRequest=RemoveGeofencingRequest[REMOVE_ALL packageName=org.mozilla.fenix.debug]
+06-02 16:38:43.079 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:43.081 I/Zygote ( 1729): Process 9201 exited due to signal (9)
+06-02 16:38:43.087 D/CarrierSvcBindHelper( 2121): No carrier app for: 0
+06-02 16:38:43.096 W/InputMethodManagerService( 1869): Got RemoteException sending setActive(false) notification to pid 9156 uid 10099
+06-02 16:38:43.101 D/EGL_emulation( 2488): eglMakeCurrent: 0xe3385ae0: ver 3 0 (tinfo 0xe33838f0)
+06-02 16:38:43.101 I/GoogleInputMethod( 1996): onFinishInput() : Dummy InputConnection bound
+06-02 16:38:43.102 I/GoogleInputMethod( 1996): onStartInput() : Dummy InputConnection bound
+06-02 16:38:43.103 D/EGL_emulation( 2402): eglMakeCurrent: 0xe1911c80: ver 3 0 (tinfo 0xc8cbe260)
+06-02 16:38:43.104 W/InputDispatcher( 1869): channel '99fbb04 org.mozilla.fenix.debug/org.mozilla.fenix.debug.App (server)' ~ Consumer closed input channel or an error occurred. events=0x9
+06-02 16:38:43.104 E/InputDispatcher( 1869): channel '99fbb04 org.mozilla.fenix.debug/org.mozilla.fenix.debug.App (server)' ~ Channel is unrecoverably broken and will be disposed!
+06-02 16:38:43.110 D/ ( 1728): HostConnection::get() New Host Connection established 0xe7e991c0, tid 2107
+06-02 16:38:43.110 I/WindowManager( 1869): WIN DEATH: Window{99fbb04 u0 org.mozilla.fenix.debug/org.mozilla.fenix.debug.App}
+06-02 16:38:43.110 W/InputDispatcher( 1869): Attempted to unregister already unregistered input channel '99fbb04 org.mozilla.fenix.debug/org.mozilla.fenix.debug.App (server)'
+06-02 16:38:43.112 W/libprocessgroup( 1869): kill(-9156, 9) failed: No such process
+06-02 16:38:43.112 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.112 D/ ( 1728): HostConnection::get() New Host Connection established 0xe7e991c0, tid 2107
+06-02 16:38:43.113 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.113 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90c9100, tid 2107
+06-02 16:38:43.113 W/ActivityManager( 1869): setHasOverlayUi called on unknown pid: 9156
+06-02 16:38:43.113 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.113 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90c9100, tid 2107
+06-02 16:38:43.113 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.118 W/SurfaceFlinger( 1728): Attempting to destroy on removed layer: AppWindowToken{97cb537 token=Token{bc3a236 ActivityRecord{39437d1 u0 org.mozilla.fenix.debug/.App t389}}}#0
+06-02 16:38:43.118 W/SurfaceFlinger( 1728): Attempting to destroy on removed layer: Task=389#0
+06-02 16:38:43.120 I/Zygote ( 1729): Process 9156 exited due to signal (9)
+06-02 16:38:43.124 D/vold ( 1558): Remounting 10099 as mode read
+06-02 16:38:43.132 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.144 I/LocationSettingsChecker( 2660): Removing dialog suppression flag for package org.mozilla.fenix.debug
+06-02 16:38:43.145 W/SessionLifecycleManager( 2402): Handover failed. Creating new session controller.
+06-02 16:38:43.148 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.149 W/libprocessgroup( 1869): kill(-9156, 9) failed: No such process
+06-02 16:38:43.149 I/libprocessgroup( 1869): Successfully killed process cgroup uid 10099 pid 9156 in 170ms
+06-02 16:38:43.152 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.157 I/ActivityManager( 1869): Force stopping org.mozilla.fenix.debug appid=10099 user=0: from pid 9326
+06-02 16:38:43.160 D/CarrierSvcBindHelper( 2121): No carrier app for: 0
+06-02 16:38:43.160 W/libprocessgroup( 1869): kill(-9201, 9) failed: No such process
+06-02 16:38:43.160 I/libprocessgroup( 1869): Successfully killed process cgroup uid 10099 pid 9201 in 0ms
+06-02 16:38:43.168 I/Icing ( 2660): doRemovePackageData org.mozilla.fenix.debug
+06-02 16:38:43.169 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.177 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.179 I/ProvidersCache( 4535): Provider returned no roots. Possibly naughty: com.google.android.apps.docs.storage
+06-02 16:38:43.187 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.195 D/vold ( 1558): Remounting 10099 as mode write
+06-02 16:38:43.191 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.203 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.204 W/LocationOracle( 2402): No location history returned by ContextManager
+06-02 16:38:43.207 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.228 V/SettingsProvider( 1869): Notifying for 0: content://settings/global/debug_app
+06-02 16:38:43.239 I/chatty ( 2002): uid=10024(com.android.systemui) RenderThread identical 3 lines
+06-02 16:38:43.243 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.257 W/ctxmgr ( 2473): [AclManager]No 3 for (accnt=account#-517948760#, com.google.android.gms(10008):UserVelocityProducer, vrsn=13280022, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 1, account#-517948760#
+06-02 16:38:43.269 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.274 I/MicroDetectionWorker( 2402): #startMicroDetector [speakerMode: 0]
+06-02 16:38:43.275 I/AudioController( 2402): Using mInputStreamFactoryBuilder
+06-02 16:38:43.275 I/AudioController( 2402): Created new AudioSource
+06-02 16:38:43.275 I/MicroDetectionWorker( 2402): onReady
+06-02 16:38:43.276 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.290 I/chatty ( 2002): uid=10024(com.android.systemui) RenderThread identical 2 lines
+06-02 16:38:43.293 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.303 I/MicroRecognitionRunner( 2402): Starting detection.
+06-02 16:38:43.307 I/MicrophoneInputStream( 2402): mic_starting SR : 16000 CC : 16 SO : 6
+06-02 16:38:43.308 E/ ( 1627): Request requires android.permission.RECORD_AUDIO
+06-02 16:38:43.309 E/AudioPolicyIntefaceImpl( 1627): getInputForAttr permission denied: recording not allowed for uid 10039 pid 2402
+06-02 16:38:43.309 E/AudioFlinger( 1627): createRecord() checkRecordThread_l failed
+06-02 16:38:43.309 E/IAudioFlinger( 2402): createRecord returned error -22
+06-02 16:38:43.309 E/AudioRecord( 2402): AudioFlinger could not create record track, status: -22
+06-02 16:38:43.309 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.309 E/AudioRecord-JNI( 2402): Error creating AudioRecord instance: initialization check failed with status -22.
+06-02 16:38:43.311 E/android.media.AudioRecord( 2402): Error code -20 when initializing native AudioRecord object.
+06-02 16:38:43.311 I/MicrophoneInputStream( 2402): mic_started SR : 16000 CC : 16 SO : 6
+06-02 16:38:43.312 E/ActivityThread( 2402): Failed to find provider info for com.google.android.apps.gsa.testing.ui.audio.recorded
+06-02 16:38:43.312 W/SpeechLevelGenerator( 2402): Really low audio levels detected. The audio input may have issues.
+06-02 16:38:43.312 I/MicroDetectionWorker( 2402): onReady
+06-02 16:38:43.314 I/ActivityManager( 1869): Force stopping org.mozilla.fenix.debug appid=10099 user=-1: set debug app
+06-02 16:38:43.315 V/SettingsProvider( 1869): Notifying for 0: content://settings/global/debug_app
+06-02 16:38:43.316 I/MicrophoneInputStream( 2402): mic_close SR : 16000 CC : 16 SO : 6
+06-02 16:38:43.317 I/MicroRecognitionRunner( 2402): Detection finished
+06-02 16:38:43.317 W/ErrorReporter( 2402): reportError [type: 211, code: 524300]: Error reading from input stream
+06-02 16:38:43.319 W/ErrorProcessor( 2402): onFatalError, processing error from engine(4)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): com.google.android.apps.gsa.shared.speech.b.g: Error reading from input stream
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.staticplugins.microdetection.d.k.a(SourceFile:91)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.staticplugins.microdetection.d.l.run(Unknown Source:14)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at com.google.android.libraries.gsa.runner.a.a.b(SourceFile:32)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at com.google.android.libraries.gsa.runner.a.c.call(Unknown Source:4)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at java.util.concurrent.FutureTask.run(FutureTask.java:266)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.shared.util.concurrent.b.g.run(Unknown Source:4)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.shared.util.concurrent.b.aw.run(SourceFile:4)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at java.lang.Thread.run(Thread.java:764)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.shared.util.concurrent.b.i.run(SourceFile:6)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): Caused by: com.google.android.apps.gsa.shared.exception.GsaIOException: Error code: 393238 | Buffer overflow, no available space.
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.speech.audio.Tee.j(SourceFile:103)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.speech.audio.au.read(SourceFile:2)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at java.io.InputStream.read(InputStream.java:101)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.speech.audio.ao.run(SourceFile:17)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at com.google.android.apps.gsa.speech.audio.an.run(SourceFile:2)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
+06-02 16:38:43.319 W/ErrorProcessor( 2402): ... 10 more
+06-02 16:38:43.319 I/MicroRecognitionRunner( 2402): Stopping hotword detection.
+06-02 16:38:43.320 I/AudioController( 2402): internalShutdown
+06-02 16:38:43.328 I/MicroDetector( 2402): Keeping mic open: false
+06-02 16:38:43.328 I/MicroDetectionWorker( 2402): #onError(false)
+06-02 16:38:43.328 I/DeviceStateChecker( 2402): DeviceStateChecker cancelled
+06-02 16:38:43.350 I/ActivityManager( 1869): START u0 {flg=0x10000000 cmp=org.mozilla.fenix.debug/.App (has extras)} from uid 0
+06-02 16:38:43.358 I/Places ( 2473): ?: PlacesBleScanner start() with priority 2
+06-02 16:38:43.364 I/Places ( 2473): ?: PlacesBleScanner start() with priority 2
+06-02 16:38:43.370 I/PlaceInferenceEngine( 2473): [anon] Changed inference mode: 1
+06-02 16:38:43.384 I/lla.fenix.debu( 9365): Not late-enabling -Xcheck:jni (already on)
+06-02 16:38:43.385 I/ActivityManager( 1869): Start proc 9365:org.mozilla.fenix.debug/u0a99 for activity org.mozilla.fenix.debug/.App
+06-02 16:38:43.388 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:43.395 I/Places ( 2473): ?: PlacesBleScanner start() with priority 2
+06-02 16:38:43.400 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dda40, tid 2107
+06-02 16:38:43.401 D/ ( 1869): HostConnection::get() New Host Connection established 0xc1b060c0, tid 1930
+06-02 16:38:43.418 W/lla.fenix.debu( 9365): Unexpected CPU variant for X86 using defaults: x86
+06-02 16:38:43.429 I/Places ( 2473): ?: PlacesBleScanner start() with priority 2
+06-02 16:38:43.430 I/PlaceInferenceEngine( 2473): [anon] Changed inference mode: 1
+06-02 16:38:43.457 I/Places ( 2473): Converted 0 out of 1 WiFi scans
+06-02 16:38:43.467 I/PlaceInferenceEngine( 2473): No beacon scan available - ignoring candidates.
+06-02 16:38:43.472 W/ActivityThread( 9365): Application org.mozilla.fenix.debug can be debugged on port 8100...
+06-02 16:38:43.478 I/lla.fenix.debu( 9365): The ClassLoaderContext is a special shared library.
+06-02 16:38:43.488 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):PlacesProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 18, account#-517948760#
+06-02 16:38:43.492 D/EGL_emulation( 2488): eglMakeCurrent: 0xe3385ae0: ver 3 0 (tinfo 0xe33838f0)
+06-02 16:38:43.492 D/EGL_emulation( 2402): eglMakeCurrent: 0xe1911c80: ver 3 0 (tinfo 0xc8cbe260)
+06-02 16:38:43.494 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.495 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dda40, tid 2107
+06-02 16:38:43.495 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.495 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dda40, tid 2107
+06-02 16:38:43.496 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.496 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90dda40, tid 2107
+06-02 16:38:43.496 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.497 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.499 D/ ( 1728): HostConnection::get() New Host Connection established 0xe50f1400, tid 1952
+06-02 16:38:43.499 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.499 D/ ( 1728): HostConnection::get() New Host Connection established 0xe50f1400, tid 1952
+06-02 16:38:43.499 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.499 D/ ( 1728): HostConnection::get() New Host Connection established 0xe50f1400, tid 1952
+06-02 16:38:43.499 D/gralloc_ranchu( 1728): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.504 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:43.508 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.509 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:43.509 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.510 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:43.510 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.510 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:43.511 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:43.513 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.515 D/ ( 1728): HostConnection::get() New Host Connection established 0xe50f1280, tid 1952
+06-02 16:38:43.517 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:43.523 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:43.634 I/chatty ( 2002): uid=10024(com.android.systemui) RenderThread identical 13 lines
+06-02 16:38:43.636 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:44.078 D/FirebaseApp( 9365): Default FirebaseApp failed to initialize because no default options were found. This usually means that com.google.gms:google-services was not applied to your gradle project.
+06-02 16:38:44.078 I/FirebaseInitProvider( 9365): FirebaseApp initialization unsuccessful
+06-02 16:38:44.149 D/FenixApplication( 9365): Initializing Glean (uploadEnabled=true, isFennec=false)
+06-02 16:38:44.163 D/RustNativeSupport( 9365): findMegazordLibraryName(viaduct, 0.59.0
+06-02 16:38:44.163 D/RustNativeSupport( 9365): lib in use: none
+06-02 16:38:44.164 D/RustNativeSupport( 9365): lib configured: megazord
+06-02 16:38:44.164 D/RustNativeSupport( 9365): lib version configured: 0.59.0
+06-02 16:38:44.164 D/RustNativeSupport( 9365): settled on megazord
+06-02 16:38:44.222 D/libglean_ffi( 9365): glean_ffi: Android logging should be hooked up!
+06-02 16:38:44.224 I/glean/Glean( 9365): Registering pings for mozilla.telemetry.glean.GleanMetrics.Pings
+06-02 16:38:44.225 I/libglean_ffi( 9365): glean_core: Creating new Glean
+06-02 16:38:44.225 D/libglean_ffi( 9365): glean_core::database: Database path: "/data/user/0/org.mozilla.fenix.debug/glean_data/db"
+06-02 16:38:44.226 I/libglean_ffi( 9365): glean_core::database: Database initialized
+06-02 16:38:44.226 D/RustNativeSupport( 9365): findMegazordLibraryName(rustlog, 0.59.0
+06-02 16:38:44.226 D/RustNativeSupport( 9365): lib in use: none
+06-02 16:38:44.226 D/RustNativeSupport( 9365): lib configured: megazord
+06-02 16:38:44.226 D/RustNativeSupport( 9365): lib version configured: 0.59.0
+06-02 16:38:44.226 D/RustNativeSupport( 9365): settled on megazord
+06-02 16:38:44.228 I/rc_log_ffi::ios( 9365): rc_log adapter initialized!
+06-02 16:38:44.245 I/GeckoRuntime( 9365): Adding debug configuration from: /data/local/tmp/org.mozilla.fenix.debug-geckoview-config.yaml
+06-02 16:38:44.245 D/GeckoDebugConfig( 9365): Adding environment variables from debug config: {MOZ_CRASHREPORTER=1, MOZ_CRASHREPORTER_NO_REPORT=1, MOZ_CRASHREPORTER_SHUTDOWN=1}
+06-02 16:38:44.246 D/GeckoDebugConfig( 9365): Adding arguments from debug config: [-marionette, -profile, /mnt/sdcard/org.mozilla.fenix.debug-geckodriver-profile]
+06-02 16:38:44.246 I/libglean_ffi( 9365): glean_ffi: Glean initialized
+06-02 16:38:44.247 D/GeckoThread( 9365): State changed to LAUNCHED
+06-02 16:38:44.247 I/GeckoThread( 9365): preparing to run Gecko
+06-02 16:38:44.249 D/GeckoThread( 9365): env var: MOZ_CRASHREPORTER=1
+06-02 16:38:44.249 D/GeckoThread( 9365): env var: MOZ_CRASHREPORTER_NO_REPORT=1
+06-02 16:38:44.249 D/GeckoThread( 9365): env var: MOZ_CRASHREPORTER_SHUTDOWN=1
+06-02 16:38:44.259 D/GeckoRuntime( 9365): Lifecycle: onCreate
+06-02 16:38:44.267 D/GeckoThread( 9365): State changed to MOZGLUE_READY
+06-02 16:38:44.288 W/Settings( 9365): Setting animator_duration_scale has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only global URI.
+06-02 16:38:44.292 E/GeckoLibLoad( 9365): Load sqlite start
+06-02 16:38:44.299 I/glean/MetricsPingSched( 9365): The application just updated. Send metrics ping now.
+06-02 16:38:44.303 E/GeckoLibLoad( 9365): Load sqlite done
+06-02 16:38:44.303 E/GeckoLibLoad( 9365): Load nss start
+06-02 16:38:44.303 E/GeckoLibLoad( 9365): Load nss done
+06-02 16:38:44.320 I/glean/MetricsPingSched( 9365): Collecting the 'metrics' ping, now = Tue Jun 02 16:38:44 EDT 2020, startup = true, reason = upgrade
+06-02 16:38:44.345 D/LeakCanary( 9365): Updated AppWatcher.config: Config(no changes)
+06-02 16:38:44.357 E/GeckoLibLoad( 9365): Loaded libs in 53.254794ms total, 20ms(80ms) user, 20ms(30ms) system, 0(0) faults
+06-02 16:38:44.357 D/GeckoThread( 9365): State changed to LIBS_READY
+06-02 16:38:44.357 I/libglean_ffi( 9365): glean_core::ping: Collecting metrics
+06-02 16:38:44.357 I/libglean_ffi( 9365): glean_core::ping: Storage for metrics empty. Bailing out.
+06-02 16:38:44.357 I/libglean_ffi( 9365): glean_core: No content for ping 'metrics', therefore no ping queued.
+06-02 16:38:44.360 D/glean/MetricsPingSched( 9365): Scheduling the 'metrics' ping in 40875709ms
+06-02 16:38:44.361 W/GeckoThread( 9365): zerdatime 4688492 - runGecko
+06-02 16:38:44.363 D/GeckoProfile( 9365): Loading profile at: null name: default
+06-02 16:38:44.364 D/GeckoProfile( 9365): Created new profile dir.
+06-02 16:38:44.365 I/GeckoProfile( 9365): Enqueuing profile init.
+06-02 16:38:44.368 D/GeckoProfile( 9365): Found profile dir: /data/user/0/org.mozilla.fenix.debug/files/mozilla/68sf7sou.default
+06-02 16:38:44.368 D/GeckoProfile( 9365): Attempting to write new client ID properties
+06-02 16:38:44.369 D/GeckoProfile( 9365): Creating profile dir: /data/user/0/org.mozilla.fenix.debug/files/mozilla/68sf7sou.default
+06-02 16:38:44.370 D/LeakCanary( 9365): Updated LeakCanary.config: Config(no changes)
+06-02 16:38:44.373 D/App ( 9365): DebugMetricController: start
+06-02 16:38:44.373 D/App ( 9365): DebugMetricController: start
+06-02 16:38:44.374 W/PushConfig( 9365): No firebase configuration found; cannot support push service.
+06-02 16:38:44.383 I/Gecko:DumpUtils( 9365): Fifo watcher disabled via pref.
+06-02 16:38:44.388 D/StrictMode( 9365): StrictMode policy violation; ~duration=164 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:44.388 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:44.388 D/StrictMode( 9365): at java.io.FileInputStream.<init>(FileInputStream.java:163)
+06-02 16:38:44.388 D/StrictMode( 9365): at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:49)
+06-02 16:38:44.388 D/StrictMode( 9365): at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+06-02 16:38:44.388 D/StrictMode( 9365): at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+06-02 16:38:44.388 D/StrictMode( 9365): at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+06-02 16:38:44.388 D/StrictMode( 9365): at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+06-02 16:38:44.388 D/StrictMode( 9365): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+06-02 16:38:44.388 D/StrictMode( 9365): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:44.388 D/StrictMode( 9365): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:44.388 D/StrictMode( 9365): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:44.388 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:44.388 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:44.388 D/StrictMode( 9365): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:44.388 D/StrictMode( 9365): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:44.388 D/StrictMode( 9365): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:44.388 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:44.388 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:44.388 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:44.388 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:44.388 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:44.388 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:44.388 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:44.390 D/StrictMode( 9365): StrictMode policy violation; ~duration=159 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:44.390 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:44.390 D/StrictMode( 9365): at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+06-02 16:38:44.390 D/StrictMode( 9365): at libcore.io.IoBridge.read(IoBridge.java:501)
+06-02 16:38:44.390 D/StrictMode( 9365): at java.io.FileInputStream.read(FileInputStream.java:307)
+06-02 16:38:44.390 D/StrictMode( 9365): at java.io.FilterInputStream.read(FilterInputStream.java:133)
+06-02 16:38:44.390 D/StrictMode( 9365): at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.UnicodeReader.init(UnicodeReader.java:92)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:124)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1177)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:195)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:107)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+06-02 16:38:44.390 D/StrictMode( 9365): at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+06-02 16:38:44.390 D/StrictMode( 9365): at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:44.390 D/StrictMode( 9365): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:44.390 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:44.390 D/StrictMode( 9365): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:44.390 D/StrictMode( 9365): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:44.390 D/StrictMode( 9365): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:44.390 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:44.390 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:44.390 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:44.390 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:44.390 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:44.390 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:44.390 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:44.392 D/StrictMode( 9365): StrictMode policy violation; ~duration=159 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:44.392 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:44.392 D/StrictMode( 9365): at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+06-02 16:38:44.392 D/StrictMode( 9365): at libcore.io.IoBridge.read(IoBridge.java:501)
+06-02 16:38:44.392 D/StrictMode( 9365): at java.io.FileInputStream.read(FileInputStream.java:307)
+06-02 16:38:44.392 D/StrictMode( 9365): at java.io.FilterInputStream.read(FilterInputStream.java:133)
+06-02 16:38:44.392 D/StrictMode( 9365): at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+06-02 16:38:44.392 D/StrictMode( 9365): at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:288)
+06-02 16:38:44.392 D/StrictMode( 9365): at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:351)
+06-02 16:38:44.392 D/StrictMode( 9365): at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:180)
+06-02 16:38:44.392 D/StrictMode( 9365): at java.io.InputStreamReader.read(InputStreamReader.java:184)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1177)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:195)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:107)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+06-02 16:38:44.392 D/StrictMode( 9365): at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+06-02 16:38:44.392 D/StrictMode( 9365): at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:44.392 D/StrictMode( 9365): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:44.392 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:44.392 D/StrictMode( 9365): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:44.392 D/StrictMode( 9365): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:44.392 D/StrictMode( 9365): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:44.392 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:44.392 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:44.392 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:44.392 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:44.392 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:44.392 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:44.392 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:44.396 D/StrictMode( 9365): StrictMode policy violation; ~duration=146 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:44.396 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:44.396 D/StrictMode( 9365): at libcore.io.BlockGuardOs.read(BlockGuardOs.java:253)
+06-02 16:38:44.396 D/StrictMode( 9365): at libcore.io.IoBridge.read(IoBridge.java:501)
+06-02 16:38:44.396 D/StrictMode( 9365): at java.io.FileInputStream.read(FileInputStream.java:307)
+06-02 16:38:44.396 D/StrictMode( 9365): at java.io.FilterInputStream.read(FilterInputStream.java:133)
+06-02 16:38:44.396 D/StrictMode( 9365): at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
+06-02 16:38:44.396 D/StrictMode( 9365): at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:288)
+06-02 16:38:44.396 D/StrictMode( 9365): at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:351)
+06-02 16:38:44.396 D/StrictMode( 9365): at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:180)
+06-02 16:38:44.396 D/StrictMode( 9365): at java.io.InputStreamReader.read(InputStreamReader.java:184)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:136)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.scanner.ScannerImpl.scanPlain(ScannerImpl.java:1999)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.scanner.ScannerImpl.fetchPlain(ScannerImpl.java:1044)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:399)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockSequenceEntry.produce(ParserImpl.java:504)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.composer.Composer.composeSequenceNode(Composer.java:188)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:142)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:236)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:227)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:215)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:144)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:85)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:108)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:141)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:525)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.yaml.snakeyaml.Yaml.load(Yaml.java:453)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.mozilla.gecko.util.DebugConfig.fromFile(DebugConfig.java:51)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.mozilla.geckoview.GeckoRuntime.init(GeckoRuntime.java:363)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.mozilla.geckoview.GeckoRuntime.create(GeckoRuntime.java:574)
+06-02 16:38:44.396 D/StrictMode( 9365): at GeckoProvider.createRuntime(GeckoProvider.kt:58)
+06-02 16:38:44.396 D/StrictMode( 9365): at GeckoProvider.getOrCreateRuntime(GeckoProvider.kt:28)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:79)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:44.396 D/StrictMode( 9365): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:44.396 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:44.396 D/StrictMode( 9365): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:44.396 D/StrictMode( 9365): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:44.396 D/StrictMode( 9365): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:44.396 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:44.396 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:44.396 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:44.396 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:44.396 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:44.396 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:44.396 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:44.399 D/StrictMode( 9365): StrictMode policy violation; ~duration=120 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:44.399 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:44.399 D/StrictMode( 9365): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:44.399 D/StrictMode( 9365): at java.io.File.exists(File.java:815)
+06-02 16:38:44.399 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:44.399 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:44.399 D/StrictMode( 9365): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:44.399 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:44.399 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:44.399 D/StrictMode( 9365): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:44.399 D/StrictMode( 9365): at mozilla.components.browser.engine.gecko.GeckoEngine.<init>(GeckoEngine.kt:68)
+06-02 16:38:44.399 D/StrictMode( 9365): at mozilla.components.browser.engine.gecko.GeckoEngine.<init>(GeckoEngine.kt:63)
+06-02 16:38:44.399 D/StrictMode( 9365): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:76)
+06-02 16:38:44.399 D/StrictMode( 9365): at org.mozilla.fenix.components.Core$engine$2.invoke(Core.kt:57)
+06-02 16:38:44.399 D/StrictMode( 9365): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:44.399 D/StrictMode( 9365): at org.mozilla.fenix.components.Core.getEngine(Unknown Source:7)
+06-02 16:38:44.399 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:128)
+06-02 16:38:44.399 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:44.399 D/StrictMode( 9365): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:44.399 D/StrictMode( 9365): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:44.399 D/StrictMode( 9365): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:44.399 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:44.399 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:44.399 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:44.399 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:44.399 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:44.399 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:44.399 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:44.402 D/StrictMode( 9365): StrictMode policy violation; ~duration=46 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:44.402 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:44.402 D/StrictMode( 9365): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:44.402 D/StrictMode( 9365): at java.io.File.exists(File.java:815)
+06-02 16:38:44.402 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:44.402 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:44.402 D/StrictMode( 9365): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:44.402 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:44.402 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:44.402 D/StrictMode( 9365): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:44.402 D/StrictMode( 9365): at androidx.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:119)
+06-02 16:38:44.402 D/StrictMode( 9365): at org.mozilla.fenix.DebugFenixApplication.setupLeakCanary(DebugFenixApplication.kt:15)
+06-02 16:38:44.402 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:140)
+06-02 16:38:44.402 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:44.402 D/StrictMode( 9365): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:44.402 D/StrictMode( 9365): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:44.402 D/StrictMode( 9365): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:44.402 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:44.402 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:44.402 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:44.402 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:44.402 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:44.402 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:44.402 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:44.404 D/StrictMode( 9365): StrictMode policy violation; ~duration=43 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:44.404 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:44.404 D/StrictMode( 9365): at android.app.SharedPreferencesImpl.awaitLoadedLocked(SharedPreferencesImpl.java:256)
+06-02 16:38:44.404 D/StrictMode( 9365): at android.app.SharedPreferencesImpl.getBoolean(SharedPreferencesImpl.java:325)
+06-02 16:38:44.404 D/StrictMode( 9365): at org.mozilla.fenix.DebugFenixApplication.setupLeakCanary(DebugFenixApplication.kt:16)
+06-02 16:38:44.404 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.setupInMainProcessOnly(FenixApplication.kt:140)
+06-02 16:38:44.404 D/StrictMode( 9365): at org.mozilla.fenix.FenixApplication.onCreate(FenixApplication.kt:90)
+06-02 16:38:44.404 D/StrictMode( 9365): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
+06-02 16:38:44.404 D/StrictMode( 9365): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
+06-02 16:38:44.404 D/StrictMode( 9365): at android.app.ActivityThread.access$1100(ActivityThread.java:199)
+06-02 16:38:44.404 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
+06-02 16:38:44.404 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:44.404 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:44.404 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:44.404 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:44.404 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:44.404 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:44.406 D/GeckoSysInfo( 9365): System memory: 1494MB.
+06-02 16:38:44.406 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/os/MessageQueue;->next()Landroid/os/Message; (light greylist, JNI)
+06-02 16:38:44.406 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/MessageQueue;->next()Landroid/os/Message;
+06-02 16:38:44.406 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.406 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.406 D/StrictMode( 9365): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:44.406 D/StrictMode( 9365): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:44.406 W/lla.fenix.debu( 9365): Accessing hidden field Landroid/os/MessageQueue;->mMessages:Landroid/os/Message; (light greylist, JNI)
+06-02 16:38:44.406 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/MessageQueue;->mMessages:Landroid/os/Message;
+06-02 16:38:44.406 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.406 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.406 D/StrictMode( 9365): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:44.406 D/StrictMode( 9365): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:44.408 W/lla.fenix.debu( 9365): Accessing hidden field Ljava/lang/Boolean;->value:Z (light greylist, JNI)
+06-02 16:38:44.409 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Boolean;->value:Z
+06-02 16:38:44.409 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.409 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.409 D/StrictMode( 9365): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:44.409 D/StrictMode( 9365): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:44.409 W/lla.fenix.debu( 9365): Accessing hidden field Ljava/lang/Integer;->value:I (light greylist, JNI)
+06-02 16:38:44.409 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Integer;->value:I
+06-02 16:38:44.409 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.409 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.409 D/StrictMode( 9365): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:44.409 D/StrictMode( 9365): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:44.409 W/lla.fenix.debu( 9365): Accessing hidden field Ljava/lang/Double;->value:D (light greylist, JNI)
+06-02 16:38:44.410 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Ljava/lang/Double;->value:D
+06-02 16:38:44.410 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.410 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.410 D/StrictMode( 9365): at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)
+06-02 16:38:44.410 D/StrictMode( 9365): at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:449)
+06-02 16:38:44.410 D/GeckoThread( 9365): State changed to JNI_READY
+06-02 16:38:44.456 D/ServiceAllocator( 9365): org.mozilla.gecko.process.GeckoChildProcessServices$tab0 updateBindings: BACKGROUND priority, 0 importance, 2 successful binds, 0 failed binds, 0 successful unbinds, 0 failed unbinds
+06-02 16:38:44.465 I/enix.debug:tab( 9414): Not late-enabling -Xcheck:jni (already on)
+06-02 16:38:44.465 I/ActivityManager( 1869): Start proc 9414:org.mozilla.fenix.debug:tab0/u0a99 for service org.mozilla.fenix.debug/org.mozilla.gecko.process.GeckoChildProcessServices$tab0
+06-02 16:38:44.493 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/content/res/Resources$Theme;->rebase()V (dark greylist, reflection)
+06-02 16:38:44.493 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/content/res/Resources$Theme;->rebase()V
+06-02 16:38:44.493 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.493 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.493 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:44.493 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:2064)
+06-02 16:38:44.493 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethod(Class.java:2047)
+06-02 16:38:44.493 D/StrictMode( 9365): at androidx.core.content.res.ResourcesCompat$ThemeCompat$ImplApi23.rebase(ResourcesCompat.java:501)
+06-02 16:38:44.493 D/StrictMode( 9365): at androidx.core.content.res.ResourcesCompat$ThemeCompat.rebase(ResourcesCompat.java:477)
+06-02 16:38:44.493 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.attachBaseContext2(AppCompatDelegateImpl.java:465)
+06-02 16:38:44.493 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:107)
+06-02 16:38:44.493 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:19)
+06-02 16:38:44.493 D/StrictMode( 9365): at android.app.Activity.attach(Activity.java:7051)
+06-02 16:38:44.493 D/StrictMode( 9365): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+06-02 16:38:44.493 D/StrictMode( 9365): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:44.493 D/StrictMode( 9365): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:44.493 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:44.493 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:44.493 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:44.493 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:44.493 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:44.493 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:44.493 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:44.493 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:44.493 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:44.494 W/enix.debug:tab( 9414): Unexpected CPU variant for X86 using defaults: x86
+06-02 16:38:44.495 I/ResourcesCompat( 9365): Failed to retrieve rebase() method
+06-02 16:38:44.495 I/ResourcesCompat( 9365): java.lang.NoSuchMethodException: rebase []
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at java.lang.Class.getMethod(Class.java:2068)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at java.lang.Class.getDeclaredMethod(Class.java:2047)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at androidx.core.content.res.ResourcesCompat$ThemeCompat$ImplApi23.rebase(ResourcesCompat.java:501)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at androidx.core.content.res.ResourcesCompat$ThemeCompat.rebase(ResourcesCompat.java:477)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.attachBaseContext2(AppCompatDelegateImpl.java:465)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at androidx.appcompat.app.AppCompatActivity.attachBaseContext(AppCompatActivity.java:107)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:19)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at android.app.Activity.attach(Activity.java:7051)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:44.495 I/ResourcesCompat( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:44.515 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/graphics/drawable/Drawable;->getOpticalInsets()Landroid/graphics/Insets; (light greylist, linking)
+06-02 16:38:44.515 W/lla.fenix.debu( 9365): Accessing hidden field Landroid/graphics/Insets;->left:I (light greylist, linking)
+06-02 16:38:44.515 W/lla.fenix.debu( 9365): Accessing hidden field Landroid/graphics/Insets;->right:I (light greylist, linking)
+06-02 16:38:44.515 W/lla.fenix.debu( 9365): Accessing hidden field Landroid/graphics/Insets;->top:I (light greylist, linking)
+06-02 16:38:44.515 W/lla.fenix.debu( 9365): Accessing hidden field Landroid/graphics/Insets;->bottom:I (light greylist, linking)
+06-02 16:38:44.531 I/enix.debug:tab( 9414): The ClassLoaderContext is a special shared library.
+06-02 16:38:44.554 D/GeckoViewStartup( 9365): observe: app-startup
+06-02 16:38:44.560 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/view/View;->getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate; (light greylist, linking)
+06-02 16:38:44.561 D/GeckoViewConsole( 9365): enabled = true
+06-02 16:38:44.564 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
+06-02 16:38:44.568 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
+06-02 16:38:44.568 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.568 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.568 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:44.568 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:2064)
+06-02 16:38:44.568 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethod(Class.java:2047)
+06-02 16:38:44.568 D/StrictMode( 9365): at androidx.appcompat.widget.ViewUtils.<clinit>(ViewUtils.java:44)
+06-02 16:38:44.568 D/StrictMode( 9365): at androidx.appcompat.widget.ViewUtils.makeOptionalFitsSystemWindows(ViewUtils.java:80)
+06-02 16:38:44.568 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:970)
+06-02 16:38:44.568 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:803)
+06-02 16:38:44.568 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:692)
+06-02 16:38:44.568 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
+06-02 16:38:44.568 D/StrictMode( 9365): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:130)
+06-02 16:38:44.568 D/StrictMode( 9365): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:44.568 D/StrictMode( 9365): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:44.568 D/StrictMode( 9365): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:44.568 D/StrictMode( 9365): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:44.568 D/StrictMode( 9365): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:44.568 D/StrictMode( 9365): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:44.568 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:44.568 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:44.568 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:44.568 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:44.568 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:44.568 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:44.568 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:44.568 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:44.568 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:44.569 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
+06-02 16:38:44.573 E/storaged( 1741): getDiskStats failed with result NOT_SUPPORTED and size 0
+06-02 16:38:44.577 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V
+06-02 16:38:44.577 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.577 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.577 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:44.577 D/StrictMode( 9365): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:44.577 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:44.577 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:44.577 D/StrictMode( 9365): at androidx.appcompat.widget.ViewUtils.makeOptionalFitsSystemWindows(ViewUtils.java:84)
+06-02 16:38:44.577 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:970)
+06-02 16:38:44.577 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:803)
+06-02 16:38:44.577 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:692)
+06-02 16:38:44.577 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
+06-02 16:38:44.577 D/StrictMode( 9365): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:130)
+06-02 16:38:44.577 D/StrictMode( 9365): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:44.577 D/StrictMode( 9365): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:44.577 D/StrictMode( 9365): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:44.577 D/StrictMode( 9365): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:44.577 D/StrictMode( 9365): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:44.577 D/StrictMode( 9365): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:44.577 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:44.577 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:44.577 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:44.577 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:44.577 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:44.577 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:44.577 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:44.577 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:44.577 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:44.635 I/AJC ( 9365): isPerformanceTest
+06-02 16:38:44.636 I/AJC ( 9365): isPerformanceTest : isPhonePlugged: true
+06-02 16:38:44.636 I/AJC ( 9365): isPerformanceTest : isAdbEnabled: true
+06-02 16:38:44.640 D/App ( 9365): DebugMetricController: track event: org.mozilla.fenix.components.metrics.Event$DismissedOnboarding@da9a582
+06-02 16:38:44.642 I/GeckoConsole( 9365): No chrome package registered for chrome://browser/content/built_in_addons.json
+06-02 16:38:44.766 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/graphics/FontFamily;-><init>()V (light greylist, reflection)
+06-02 16:38:44.772 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;-><init>()V
+06-02 16:38:44.772 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.772 D/StrictMode( 9365): at java.lang.Class.getDeclaredConstructorInternal(Native Method)
+06-02 16:38:44.772 D/StrictMode( 9365): at java.lang.Class.getConstructor0(Class.java:2325)
+06-02 16:38:44.772 D/StrictMode( 9365): at java.lang.Class.getConstructor(Class.java:1725)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainFontFamilyCtor(TypefaceCompatApi26Impl.java:321)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:84)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:44.772 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:44.772 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:44.772 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:44.772 D/StrictMode( 9365): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:44.772 D/StrictMode( 9365): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:44.772 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:44.772 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:44.772 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
+06-02 16:38:44.772 D/StrictMode( 9365): at
+06-02 16:38:44.772 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/graphics/FontFamily;->addFontFromAssetManager(Landroid/content/res/AssetManager;Ljava/lang/String;IZIII[Landroid/graphics/fonts/FontVariationAxis;)Z (light greylist, reflection)
+06-02 16:38:44.774 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;->addFontFromAssetManager(Landroid/content/res/AssetManager;Ljava/lang/String;IZIII[Landroid/graphics/fonts/FontVariationAxis;)Z
+06-02 16:38:44.774 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.774 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:44.774 D/StrictMode( 9365): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:44.774 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:44.774 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainAddFontFromAssetManagerMethod(TypefaceCompatApi26Impl.java:326)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:85)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:44.774 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:44.774 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:44.774 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:44.774 D/StrictMode( 9365): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:44.774 D/StrictMode( 9365): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:44.774 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:44.774 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:44.774 D/StrictMode( 9365): at androidx.fragme
+06-02 16:38:44.774 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/graphics/FontFamily;->addFontFromBuffer(Ljava/nio/ByteBuffer;I[Landroid/graphics/fonts/FontVariationAxis;II)Z (light greylist, reflection)
+06-02 16:38:44.777 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;->addFontFromBuffer(Ljava/nio/ByteBuffer;I[Landroid/graphics/fonts/FontVariationAxis;II)Z
+06-02 16:38:44.777 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.777 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:44.777 D/StrictMode( 9365): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:44.777 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:44.777 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainAddFontFromBufferMethod(TypefaceCompatApi26Impl.java:333)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:86)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:44.777 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:44.777 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:44.777 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:44.777 D/StrictMode( 9365): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:44.777 D/StrictMode( 9365): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:44.777 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:44.777 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:44.777 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.removeRedundantOperati
+06-02 16:38:44.777 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/graphics/FontFamily;->freeze()Z (light greylist, reflection)
+06-02 16:38:44.780 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;->freeze()Z
+06-02 16:38:44.780 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.780 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:44.780 D/StrictMode( 9365): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:44.780 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:44.780 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainFreezeMethod(TypefaceCompatApi26Impl.java:339)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:87)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:44.780 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:44.780 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:44.780 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:44.780 D/StrictMode( 9365): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:44.780 D/StrictMode( 9365): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:44.780 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:44.780 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:44.780 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.execPe
+06-02 16:38:44.780 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/graphics/FontFamily;->abortCreation()V (light greylist, reflection)
+06-02 16:38:44.781 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/FontFamily;->abortCreation()V
+06-02 16:38:44.781 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.781 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:44.781 D/StrictMode( 9365): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:44.781 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:44.781 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi26Impl.obtainAbortCreationMethod(TypefaceCompatApi26Impl.java:343)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:88)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:44.781 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:44.781 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:44.781 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:44.781 D/StrictMode( 9365): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:44.781 D/StrictMode( 9365): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:44.781 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:44.781 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:44.781 D/StrictMode( 9365): at androidx.fragment.app.Fragment
+06-02 16:38:44.781 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/graphics/Typeface;->createFromFamiliesWithDefault([Landroid/graphics/FontFamily;Ljava/lang/String;II)Landroid/graphics/Typeface; (light greylist, reflection)
+06-02 16:38:44.788 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/graphics/Typeface;->createFromFamiliesWithDefault([Landroid/graphics/FontFamily;Ljava/lang/String;II)Landroid/graphics/Typeface;
+06-02 16:38:44.788 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:44.788 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:44.788 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:2064)
+06-02 16:38:44.788 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethod(Class.java:2047)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi28Impl.obtainCreateFromFamiliesWithDefaultMethod(TypefaceCompatApi28Impl.java:62)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi26Impl.<init>(TypefaceCompatApi26Impl.java:89)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompatApi28Impl.<init>(TypefaceCompatApi28Impl.java:36)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompat.<clinit>(TypefaceCompat.java:51)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.core.graphics.TypefaceCompat.create(TypefaceCompat.java:194)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.setTypeface(AppCompatTextView.java:708)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.widget.TextView.resolveStyleAndSetTypeface(TextView.java:2037)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.widget.TextView.setTypefaceFromAttrs(TextView.java:2008)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.widget.TextView.applyTextAppearance(TextView.java:3640)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.widget.TextView.<init>(TextView.java:1498)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.widget.TextView.<init>(TextView.java:869)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:100)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:95)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:194)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1548)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1599)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
+06-02 16:38:44.788 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:30)
+06-02 16:38:44.788 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(TabCounter.kt:22)
+06-02 16:38:44.788 D/StrictMode( 9365): at org.mozilla.fenix.components.toolbar.TabCounter.<init>(Unknown Source:6)
+06-02 16:38:44.788 D/StrictMode( 9365): at java.lang.reflect.Constructor.newInstance0(Native Method)
+06-02 16:38:44.788 D/StrictMode( 9365): at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.createView(LayoutInflater.java:647)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
+06-02 16:38:44.788 D/StrictMode( 9365): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
+06-02 16:38:44.788 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:183)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:44.788 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentMa
+06-02 16:38:44.960 D/GeckoRuntime( 9365): Lifecycle: onStart
+06-02 16:38:44.963 D/GeckoRuntime( 9365): Lifecycle: onResume
+06-02 16:38:44.966 D/GeckoNetworkManager( 9365): Incoming event start for state OffNoListeners -> OnNoListeners
+06-02 16:38:44.968 D/GeckoNetworkManager( 9365): New network state: UP, WIFI, WIFI
+06-02 16:38:44.972 D/OpenGLRenderer( 9365): Skia GL Pipeline
+06-02 16:38:44.987 E/SurfaceFlinger( 1728): ro.sf.lcd_density must be defined as a build property
+06-02 16:38:44.998 D/StrictMode( 9365): StrictMode policy violation; ~duration=528 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:44.998 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:44.998 D/StrictMode( 9365): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:44.998 D/StrictMode( 9365): at java.io.File.exists(File.java:815)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.app.ContextImpl.getDataDir(ContextImpl.java:2253)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:550)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:44.998 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleManager$Storage.getSharedPreferences(LocaleManager.kt:123)
+06-02 16:38:44.998 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleManager$Storage.getLocale(LocaleManager.kt:99)
+06-02 16:38:44.998 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleManager.getCurrentLocale(LocaleManager.kt:42)
+06-02 16:38:44.998 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleManager.updateResources$support_locale_release(LocaleManager.kt:72)
+06-02 16:38:44.998 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:18)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.app.Activity.attach(Activity.java:7051)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:44.998 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:44.998 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:44.998 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:44.998 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:45.001 D/StrictMode( 9365): StrictMode policy violation; ~duration=528 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:45.001 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:45.001 D/StrictMode( 9365): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:45.001 D/StrictMode( 9365): at java.io.File.exists(File.java:815)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:45.001 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleManager$Storage.getSharedPreferences(LocaleManager.kt:123)
+06-02 16:38:45.001 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleManager$Storage.getLocale(LocaleManager.kt:99)
+06-02 16:38:45.001 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleManager.getCurrentLocale(LocaleManager.kt:42)
+06-02 16:38:45.001 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleManager.updateResources$support_locale_release(LocaleManager.kt:72)
+06-02 16:38:45.001 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleAwareAppCompatActivity.attachBaseContext(LocaleAwareAppCompatActivity.kt:18)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.app.Activity.attach(Activity.java:7051)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2873)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:45.001 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:45.001 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:45.001 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:45.001 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:45.005 D/StrictMode( 9365): StrictMode policy violation; ~duration=360 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:45.005 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:45.005 D/StrictMode( 9365): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:45.005 D/StrictMode( 9365): at java.io.File.exists(File.java:815)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.ContextImpl.getDataDir(ContextImpl.java:2253)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:550)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:45.005 D/StrictMode( 9365): at org.mozilla.fenix.onboarding.FenixOnboarding.<init>(FenixOnboarding.kt:15)
+06-02 16:38:45.005 D/StrictMode( 9365): at org.mozilla.fenix.perf.Performance.disableOnboarding(Performance.kt:72)
+06-02 16:38:45.005 D/StrictMode( 9365): at org.mozilla.fenix.perf.Performance.processIntentIfPerformanceTest(Performance.kt:32)
+06-02 16:38:45.005 D/StrictMode( 9365): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:145)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:45.005 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:45.005 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:45.005 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:45.005 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:45.008 D/StrictMode( 9365): StrictMode policy violation; ~duration=360 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:45.008 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:45.008 D/StrictMode( 9365): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:45.008 D/StrictMode( 9365): at java.io.File.exists(File.java:815)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:45.008 D/StrictMode( 9365): at org.mozilla.fenix.onboarding.FenixOnboarding.<init>(FenixOnboarding.kt:15)
+06-02 16:38:45.008 D/StrictMode( 9365): at org.mozilla.fenix.perf.Performance.disableOnboarding(Performance.kt:72)
+06-02 16:38:45.008 D/StrictMode( 9365): at org.mozilla.fenix.perf.Performance.processIntentIfPerformanceTest(Performance.kt:32)
+06-02 16:38:45.008 D/StrictMode( 9365): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:145)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:45.008 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:45.008 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:45.008 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:45.008 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:45.009 D/StrictMode( 9365): StrictMode policy violation; ~duration=359 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:45.009 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.app.SharedPreferencesImpl.awaitLoadedLocked(SharedPreferencesImpl.java:256)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.app.SharedPreferencesImpl.edit(SharedPreferencesImpl.java:349)
+06-02 16:38:45.009 D/StrictMode( 9365): at org.mozilla.fenix.onboarding.FenixOnboarding.setOnboardedVersion(FenixOnboarding.kt:42)
+06-02 16:38:45.009 D/StrictMode( 9365): at org.mozilla.fenix.onboarding.FenixOnboarding.finish(FenixOnboarding.kt:25)
+06-02 16:38:45.009 D/StrictMode( 9365): at org.mozilla.fenix.perf.Performance.disableOnboarding(Performance.kt:72)
+06-02 16:38:45.009 D/StrictMode( 9365): at org.mozilla.fenix.perf.Performance.processIntentIfPerformanceTest(Performance.kt:32)
+06-02 16:38:45.009 D/StrictMode( 9365): at org.mozilla.fenix.HomeActivity.onCreate(HomeActivity.kt:145)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.app.Activity.performCreate(Activity.java:7136)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.app.Activity.performCreate(Activity.java:7127)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:106)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:45.009 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:45.009 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:45.009 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:45.009 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:45.017 D/StrictMode( 9365): StrictMode policy violation; ~duration=138 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:45.017 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:45.017 D/StrictMode( 9365): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:45.017 D/StrictMode( 9365): at java.io.File.exists(File.java:815)
+06-02 16:38:45.017 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:45.017 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:45.017 D/StrictMode( 9365): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:45.017 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:45.017 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:45.017 D/StrictMode( 9365): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:45.017 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleManager$Storage.getSharedPreferences(LocaleManager.kt:123)
+06-02 16:38:45.017 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleManager$Storage.getLocale(LocaleManager.kt:99)
+06-02 16:38:45.017 D/StrictMode( 9365): at mozilla.components.support.locale.LocaleManager.getCurrentLocale(LocaleManager.kt:42)
+06-02 16:38:45.017 D/StrictMode( 9365): at org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt.getSelectedLocale(LocaleManagerExtension.kt:39)
+06-02 16:38:45.017 D/StrictMode( 9365): at org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt.getSelectedLocale$default(LocaleManagerExtension.kt:37)
+06-02 16:38:45.017 D/StrictMode( 9365): at org.mozilla.fenix.components.TopSiteStorage.addDefaultTopSites(TopSiteStorage.kt:57)
+06-02 16:38:45.017 D/StrictMode( 9365): at org.mozilla.fenix.components.TopSiteStorage.<init>(TopSiteStorage.kt:30)
+06-02 16:38:45.017 D/StrictMode( 9365): at org.mozilla.fenix.components.Core$topSiteStorage$2.invoke(Core.kt:216)
+06-02 16:38:45.017 D/StrictMode( 9365): at org.mozilla.fenix.components.Core$topSiteStorage$2.invoke(Core.kt:57)
+06-02 16:38:45.017 D/StrictMode( 9365): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:45.017 D/StrictMode( 9365): at org.mozilla.fenix.components.Core.getTopSiteStorage(Unknown Source:8)
+06-02 16:38:45.017 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment$onCreateView$2.invoke(HomeFragment.kt:210)
+06-02 16:38:45.017 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment$onCreateView$2.invoke(HomeFragment.kt:114)
+06-02 16:38:45.017 D/StrictMode( 9365): at org.mozilla.fenix.components.StoreProviderFactory.create(StoreProvider.kt:42)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
+06-02 16:38:45.017 D/StrictMode( 9365): at org.mozilla.fenix.components.StoreProvider$Companion.get(StoreProvider.kt:46)
+06-02 16:38:45.017 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment.onCreateView(HomeFragment.kt:203)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
+06-02 16:38:45.017 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
+06-02 16:38:45.017 D/StrictMode( 9365): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
+06-02 16:38:45.017 D/StrictMode( 9365):
+06-02 16:38:45.023 D/StrictMode( 9365): StrictMode policy violation; ~duration=66 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:45.023 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:45.023 D/StrictMode( 9365): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:45.023 D/StrictMode( 9365): at java.io.File.exists(File.java:815)
+06-02 16:38:45.023 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:45.023 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:45.023 D/StrictMode( 9365): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:45.023 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:45.023 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:45.023 D/StrictMode( 9365): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:45.023 D/StrictMode( 9365): at org.mozilla.fenix.components.AccountAbnormalities.<init>(AccountAbnormalities.kt:78)
+06-02 16:38:45.023 D/StrictMode( 9365): at org.mozilla.fenix.components.AccountAbnormalities.<init>(AccountAbnormalities.kt:60)
+06-02 16:38:45.023 D/StrictMode( 9365): at org.mozilla.fenix.components.BackgroundServices.<init>(BackgroundServices.kt:103)
+06-02 16:38:45.023 D/StrictMode( 9365): at org.mozilla.fenix.components.Components$backgroundServices$2.invoke(Components.kt:34)
+06-02 16:38:45.023 D/StrictMode( 9365): at org.mozilla.fenix.components.Components$backgroundServices$2.invoke(Components.kt:32)
+06-02 16:38:45.023 D/StrictMode( 9365): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:45.023 D/StrictMode( 9365): at org.mozilla.fenix.components.Components.getBackgroundServices(Unknown Source:7)
+06-02 16:38:45.023 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2.invoke(HomeMenu.kt:131)
+06-02 16:38:45.023 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2.invoke(HomeMenu.kt:31)
+06-02 16:38:45.023 D/StrictMode( 9365): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:45.023 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeMenu.getCoreMenuItems(Unknown Source:7)
+06-02 16:38:45.023 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeMenu.<init>(HomeMenu.kt:170)
+06-02 16:38:45.023 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment.createHomeMenu(HomeFragment.kt:668)
+06-02 16:38:45.023 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment.onViewCreated(HomeFragment.kt:337)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:332)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
+06-02 16:38:45.023 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
+06-02 16:38:45.023 D/StrictMode( 9365): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
+06-02 16:38:45.023 D/StrictMode( 9365): at android.app.Activity.performStart(Activity.java:7157)
+06-02 16:38:45.023 D/StrictMode( 9365): at android.app.ActivityThread.handleStartActivity(ActivityThread.java:2937)
+06-02 16:38:45.023 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
+06-02 16:38:45.023 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
+06-02 16:38:45.023 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
+06-02 16:38:45.023 D/StrictMode( 9365): at android.app.servertransaction.TransactionExecutor.execute(Transac
+06-02 16:38:45.029 D/StrictMode( 9365): StrictMode policy violation; ~duration=48 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:45.029 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:45.029 D/StrictMode( 9365): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:45.029 D/StrictMode( 9365): at java.io.File.exists(File.java:815)
+06-02 16:38:45.029 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:45.029 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:45.029 D/StrictMode( 9365): at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
+06-02 16:38:45.029 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
+06-02 16:38:45.029 D/StrictMode( 9365): at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
+06-02 16:38:45.029 D/StrictMode( 9365): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:45.029 D/StrictMode( 9365): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
+06-02 16:38:45.029 D/StrictMode( 9365): at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:526)
+06-02 16:38:45.029 D/StrictMode( 9365): at org.mozilla.fenix.whatsnew.SharedPreferenceWhatsNewStorage.<init>(WhatsNewStorage.kt:35)
+06-02 16:38:45.029 D/StrictMode( 9365): at org.mozilla.fenix.whatsnew.WhatsNew$Companion.shouldHighlightWhatsNew(WhatsNew.kt:71)
+06-02 16:38:45.029 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2$whatsNewItem$1.invoke(HomeMenu.kt:92)
+06-02 16:38:45.029 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2$whatsNewItem$1.invoke(HomeMenu.kt:31)
+06-02 16:38:45.029 D/StrictMode( 9365): at mozilla.components.browser.menu.ext.BrowserMenuItemKt$getHighlight$3.invoke(BrowserMenuItem.kt:18)
+06-02 16:38:45.029 D/StrictMode( 9365): at mozilla.components.browser.menu.ext.BrowserMenuItemKt$getHighlight$3.invoke(Unknown Source:2)
+06-02 16:38:45.029 D/StrictMode( 9365): at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:133)
+06-02 16:38:45.029 D/StrictMode( 9365): at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:156)
+06-02 16:38:45.029 D/StrictMode( 9365): at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:176)
+06-02 16:38:45.029 D/StrictMode( 9365): at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:131)
+06-02 16:38:45.029 D/StrictMode( 9365): at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:156)
+06-02 16:38:45.029 D/StrictMode( 9365): at mozilla.components.browser.menu.ext.BrowserMenuItemKt.getHighlight(BrowserMenuItem.kt:31)
+06-02 16:38:45.029 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2.invoke(HomeMenu.kt:149)
+06-02 16:38:45.029 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeMenu$coreMenuItems$2.invoke(HomeMenu.kt:31)
+06-02 16:38:45.029 D/StrictMode( 9365): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:45.029 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeMenu.getCoreMenuItems(Unknown Source:7)
+06-02 16:38:45.029 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeMenu.<init>(HomeMenu.kt:170)
+06-02 16:38:45.029 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment.createHomeMenu(HomeFragment.kt:668)
+06-02 16:38:45.029 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment.onViewCreated(HomeFragment.kt:337)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:332)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
+06-02 16:38:45.029 D/StrictMode( 9365): at androidx.appcompat.app.AppCompatAc
+06-02 16:38:45.030 D/LeakCanary( 9365): LeakCanary is running and ready to detect leaks
+06-02 16:38:45.055 I/libglean_ffi( 9365): glean_core::ping: Collecting baseline
+06-02 16:38:45.066 D/libglean_ffi( 9365): glean_core::ping: Storing ping 'f2c83a47-027f-4c73-8ff2-9bc7dc060222' at '/data/user/0/org.mozilla.fenix.debug/glean_data/pending_pings/f2c83a47-027f-4c73-8ff2-9bc7dc060222'
+06-02 16:38:45.066 I/libglean_ffi( 9365): glean_core: The ping 'baseline' was submitted and will be sent as soon as possible
+06-02 16:38:45.068 D/GeckoNetworkManager( 9365): Incoming event enableNotifications for state OnNoListeners -> OnWithListeners
+06-02 16:38:45.070 D/GeckoNetworkManager( 9365): New network state: UP, WIFI, WIFI
+06-02 16:38:45.071 W/ActivityManager( 1869): Receiver with filter android.content.IntentFilter@d026f98 already registered for pid 9365, callerPackage is org.mozilla.fenix.debug
+06-02 16:38:45.087 D/GeckoNetworkManager( 9365): Incoming event receivedUpdate for state OnWithListeners -> OnWithListeners
+06-02 16:38:45.090 D/GeckoNetworkManager( 9365): New network state: UP, WIFI, WIFI
+06-02 16:38:45.117 D/GeckoThread( 9365): State changed to PROFILE_READY
+06-02 16:38:45.186 D/GeckoViewStartup( 9365): observe: profile-after-change
+06-02 16:38:45.190 D/WIFI_UT ( 1869): got request NetworkRequest [ TRACK_DEFAULT id=35, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10099] ] with score 60
+06-02 16:38:45.190 D/WIFI ( 1869): got request NetworkRequest [ TRACK_DEFAULT id=35, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10099] ] with score 60
+06-02 16:38:45.190 D/PhoneSwitcherNetworkRequstListener( 2121): got request NetworkRequest [ TRACK_DEFAULT id=35, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED Unwanted: Uid: 10099] ] with score 60
+06-02 16:38:45.195 D/GeckoViewTelemetryController( 9365): setup - canRecordPrereleaseData true, canRecordReleaseData true
+06-02 16:38:45.244 D/GeckoThread( 9365): State changed to RUNNING
+06-02 16:38:45.246 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:45.252 D/ ( 1728): HostConnection::get() New Host Connection established 0xe90ddf00, tid 1756
+06-02 16:38:45.253 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:45.254 I/lla.fenix.debu( 9365): Background concurrent copying GC freed 21920(1766KB) AllocSpace objects, 40(1216KB) LOS objects, 49% free, 4MB/9MB, paused 1.515ms total 189.223ms
+06-02 16:38:45.261 D/gralloc_ranchu( 1619): gralloc_alloc: Creating ashmem region of size 9334784
+06-02 16:38:45.263 I/Gecko ( 9365): -*- nsDNSServiceDiscovery.js : nsDNSServiceDiscovery
+06-02 16:38:45.275 D/GeckoThread( 9414): State changed to LAUNCHED
+06-02 16:38:45.277 I/GeckoThread( 9414): preparing to run Gecko
+06-02 16:38:45.278 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
+06-02 16:38:45.280 D/ ( 9365): HostConnection::get() New Host Connection established 0xe51aef80, tid 9452
+06-02 16:38:45.283 I/ConfigStore( 9365): android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
+06-02 16:38:45.284 I/ConfigStore( 9365): android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
+06-02 16:38:45.284 I/OpenGLRenderer( 9365): Initialized EGL, version 1.4
+06-02 16:38:45.284 D/OpenGLRenderer( 9365): Swap behavior 1
+06-02 16:38:45.284 W/OpenGLRenderer( 9365): Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
+06-02 16:38:45.284 D/OpenGLRenderer( 9365): Swap behavior 0
+06-02 16:38:45.285 D/EGL_emulation( 9365): eglCreateContext: 0xe51a88e0: maj 3 min 0 rcv 3
+06-02 16:38:45.286 D/EGL_emulation( 9365): eglMakeCurrent: 0xe51a88e0: ver 3 0 (tinfo 0xe1995a60)
+06-02 16:38:45.288 E/SurfaceFlinger( 1728): ro.sf.lcd_density must be defined as a build property
+06-02 16:38:45.307 W/lla.fenix.debu( 9365): Accessing hidden field Landroid/os/Trace;->TRACE_TAG_APP:J (light greylist, reflection)
+06-02 16:38:45.312 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->TRACE_TAG_APP:J
+06-02 16:38:45.312 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:45.312 D/StrictMode( 9365): at java.lang.Class.getPublicFieldRecursive(Native Method)
+06-02 16:38:45.312 D/StrictMode( 9365): at java.lang.Class.getField(Class.java:1599)
+06-02 16:38:45.312 D/StrictMode( 9365): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:48)
+06-02 16:38:45.312 D/StrictMode( 9365): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:45.312 D/StrictMode( 9365): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.312 D/StrictMode( 9365): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:45.312 D/StrictMode( 9365): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:45.312 D/StrictMode( 9365): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:45.312 D/StrictMode( 9365): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.312 D/StrictMode( 9365): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:45.312 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:45.312 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:45.312 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:45.312 D/StrictMode( 9365): at com.and
+06-02 16:38:45.312 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/os/Trace;->isTagEnabled(J)Z (light greylist, reflection)
+06-02 16:38:45.316 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->isTagEnabled(J)Z
+06-02 16:38:45.316 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:45.316 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:45.316 D/StrictMode( 9365): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:45.316 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:45.316 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:45.316 D/StrictMode( 9365): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:51)
+06-02 16:38:45.316 D/StrictMode( 9365): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:45.316 D/StrictMode( 9365): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.316 D/StrictMode( 9365): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:45.316 D/StrictMode( 9365): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:45.316 D/StrictMode( 9365): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:45.316 D/StrictMode( 9365): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.316 D/StrictMode( 9365): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:45.316 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:45.316 D/StrictMode( 9365): at java.lang.reflect.Method.invoke
+06-02 16:38:45.316 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V (light greylist, reflection)
+06-02 16:38:45.323 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V
+06-02 16:38:45.323 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:45.323 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:45.323 D/StrictMode( 9365): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:45.323 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:45.323 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:45.323 D/StrictMode( 9365): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:52)
+06-02 16:38:45.323 D/StrictMode( 9365): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:45.323 D/StrictMode( 9365): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.323 D/StrictMode( 9365): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:45.323 D/StrictMode( 9365): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:45.323 D/StrictMode( 9365): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:45.323 D/StrictMode( 9365): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.323 D/StrictMode( 9365): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:45.323 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:45.323 D/StrictMode( 9365): at java.lang
+06-02 16:38:45.323 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V (light greylist, reflection)
+06-02 16:38:45.326 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V
+06-02 16:38:45.326 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:45.326 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:45.326 D/StrictMode( 9365): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:45.326 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:45.326 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:45.326 D/StrictMode( 9365): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:54)
+06-02 16:38:45.326 D/StrictMode( 9365): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:45.326 D/StrictMode( 9365): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.326 D/StrictMode( 9365): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:45.326 D/StrictMode( 9365): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:45.326 D/StrictMode( 9365): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:45.326 D/StrictMode( 9365): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.326 D/StrictMode( 9365): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:45.326 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:45.326 D/StrictMode( 9365): at java.lang.r
+06-02 16:38:45.327 W/lla.fenix.debu( 9365): Accessing hidden method Landroid/os/Trace;->traceCounter(JLjava/lang/String;I)V (light greylist, reflection)
+06-02 16:38:45.330 D/StrictMode( 9365): StrictMode policy violation: android.os.strictmode.NonSdkApiUsedViolation: Landroid/os/Trace;->traceCounter(JLjava/lang/String;I)V
+06-02 16:38:45.330 D/StrictMode( 9365): at android.os.StrictMode.lambda$static$1(StrictMode.java:428)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)
+06-02 16:38:45.330 D/StrictMode( 9365): at java.lang.Class.getDeclaredMethodInternal(Native Method)
+06-02 16:38:45.330 D/StrictMode( 9365): at java.lang.Class.getPublicMethodRecursive(Class.java:2075)
+06-02 16:38:45.330 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:2063)
+06-02 16:38:45.330 D/StrictMode( 9365): at java.lang.Class.getMethod(Class.java:1690)
+06-02 16:38:45.330 D/StrictMode( 9365): at androidx.core.os.TraceCompat.<clinit>(TraceCompat.java:56)
+06-02 16:38:45.330 D/StrictMode( 9365): at androidx.core.os.TraceCompat.beginSection(TraceCompat.java:100)
+06-02 16:38:45.330 D/StrictMode( 9365): at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4403)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.330 D/StrictMode( 9365): at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
+06-02 16:38:45.330 D/StrictMode( 9365): at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
+06-02 16:38:45.330 D/StrictMode( 9365): at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
+06-02 16:38:45.330 D/StrictMode( 9365): at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
+06-02 16:38:45.330 D/StrictMode( 9365): at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.View.layout(View.java:20672)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.ViewGroup.layout(ViewGroup.java:6194)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2792)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2319)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.Choreographer.doCallbacks(Choreographer.java:761)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.Choreographer.doFrame(Choreographer.java:696)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:45.330 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:45.330 D/StrictMode( 9365): at java.lang.re
+06-02 16:38:45.335 D/GeckoNetworkManager( 9365): Incoming event receivedUpdate for state OnWithListeners -> OnWithListeners
+06-02 16:38:45.336 D/GeckoNetworkManager( 9365): New network state: UP, WIFI, WIFI
+06-02 16:38:45.363 D/EGL_emulation( 9365): eglMakeCurrent: 0xe51a88e0: ver 3 0 (tinfo 0xe1995a60)
+06-02 16:38:45.406 D/glean/PingUploadWorker( 9365): Processing persisted pings at /data/user/0/org.mozilla.fenix.debug/glean_data/pending_pings
+06-02 16:38:45.406 D/glean/PingUploadWorker( 9365): Processing ping: f2c83a47-027f-4c73-8ff2-9bc7dc060222
+06-02 16:38:45.413 I/ActivityManager( 1869): Displayed org.mozilla.fenix.debug/.App: +2s34ms
+06-02 16:38:45.414 I/GoogleInputMethod( 1996): onFinishInput() : Dummy InputConnection bound
+06-02 16:38:45.414 I/GoogleInputMethod( 1996): onStartInput() : Dummy InputConnection bound
+06-02 16:38:45.418 D/glean/ConceptFetchHttpUploader( 9365): Submitting ping to: https://incoming.telemetry.mozilla.org/submit/org-mozilla-fenix-debug/baseline/1/f2c83a47-027f-4c73-8ff2-9bc7dc060222
+06-02 16:38:45.426 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:45.443 D/GeckoViewStartup( 9365): onEvent GeckoView:SetLocale
+06-02 16:38:45.444 D/GeckoViewStartup( 9365): onEvent GeckoView:ResetUserPrefs
+06-02 16:38:45.459 D/GeckoViewRemoteDebugger( 9365): onInit
+06-02 16:38:45.459 D/GeckoViewConsole( 9365): enabled = false
+06-02 16:38:45.475 D/StrictMode( 9365): StrictMode policy violation; ~duration=23 ms: android.os.strictmode.DiskReadViolation
+06-02 16:38:45.475 D/StrictMode( 9365): at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
+06-02 16:38:45.475 D/StrictMode( 9365): at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
+06-02 16:38:45.475 D/StrictMode( 9365): at java.io.File.exists(File.java:815)
+06-02 16:38:45.475 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
+06-02 16:38:45.475 D/StrictMode( 9365): at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
+06-02 16:38:45.475 D/StrictMode( 9365): at android.app.ContextImpl.getFilesDir(ContextImpl.java:641)
+06-02 16:38:45.475 D/StrictMode( 9365): at android.content.ContextWrapper.getFilesDir(ContextWrapper.java:239)
+06-02 16:38:45.475 D/StrictMode( 9365): at mozilla.components.feature.tab.collections.TabCollectionStorage.<init>(TabCollectionStorage.kt:29)
+06-02 16:38:45.475 D/StrictMode( 9365): at org.mozilla.fenix.components.TabCollectionStorage$collectionStorage$2.invoke(TabCollectionStorage.kt:52)
+06-02 16:38:45.475 D/StrictMode( 9365): at org.mozilla.fenix.components.TabCollectionStorage$collectionStorage$2.invoke(TabCollectionStorage.kt:23)
+06-02 16:38:45.475 D/StrictMode( 9365): at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
+06-02 16:38:45.475 D/StrictMode( 9365): at org.mozilla.fenix.components.TabCollectionStorage.getCollectionStorage(Unknown Source:7)
+06-02 16:38:45.475 D/StrictMode( 9365): at org.mozilla.fenix.components.TabCollectionStorage.getCollections(TabCollectionStorage.kt:70)
+06-02 16:38:45.475 D/StrictMode( 9365): at org.mozilla.fenix.components.TabCollectionStorage.getCollections$default(TabCollectionStorage.kt:69)
+06-02 16:38:45.475 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment.subscribeToTabCollections(HomeFragment.kt:750)
+06-02 16:38:45.475 D/StrictMode( 9365): at org.mozilla.fenix.home.HomeFragment.onStart(HomeFragment.kt:404)
+06-02 16:38:45.475 D/StrictMode( 9365): at androidx.fragment.app.Fragment.performStart(Fragment.java:2730)
+06-02 16:38:45.475 D/StrictMode( 9365): at androidx.fragment.app.FragmentStateManager.start(FragmentStateManager.java:365)
+06-02 16:38:45.475 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1194)
+06-02 16:38:45.475 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
+06-02 16:38:45.475 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
+06-02 16:38:45.475 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
+06-02 16:38:45.475 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.completeExecute(FragmentManager.java:2125)
+06-02 16:38:45.475 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager$StartEnterTransitionListener.completeTransaction(FragmentManager.java:3022)
+06-02 16:38:45.475 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.executePostponedTransaction(FragmentManager.java:1895)
+06-02 16:38:45.475 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.ensureExecReady(FragmentManager.java:1803)
+06-02 16:38:45.475 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1843)
+06-02 16:38:45.475 D/StrictMode( 9365): at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
+06-02 16:38:45.475 D/StrictMode( 9365): at android.os.Handler.handleCallback(Handler.java:873)
+06-02 16:38:45.475 D/StrictMode( 9365): at android.os.Handler.dispatchMessage(Handler.java:99)
+06-02 16:38:45.475 D/StrictMode( 9365): at android.os.Looper.loop(Looper.java:193)
+06-02 16:38:45.475 D/StrictMode( 9365): at android.app.ActivityThread.main(ActivityThread.java:6669)
+06-02 16:38:45.475 D/StrictMode( 9365): at java.lang.reflect.Method.invoke(Native Method)
+06-02 16:38:45.475 D/StrictMode( 9365): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
+06-02 16:38:45.475 D/StrictMode( 9365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
+06-02 16:38:45.518 D/GeckoViewStartup( 9365): onEvent GeckoView:SetLocale
+06-02 16:38:45.519 D/GeckoViewStartup( 9365): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:45.528 D/GeckoViewStartup( 9365): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:45.532 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:45.534 D/GeckoViewStartup( 9365): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:45.549 I/chatty ( 9365): uid=10099(org.mozilla.fenix.debug) Gecko identical 2 lines
+06-02 16:38:45.562 D/GeckoViewStartup( 9365): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:45.568 D/gralloc_ranchu( 1869): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:45.569 D/ ( 1869): HostConnection::get() New Host Connection established 0xc1b060c0, tid 1930
+06-02 16:38:45.570 D/gralloc_ranchu( 1869): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:45.571 D/ ( 1869): HostConnection::get() New Host Connection established 0xc1b060c0, tid 1930
+06-02 16:38:45.571 D/gralloc_ranchu( 1869): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:45.572 D/ ( 1869): HostConnection::get() New Host Connection established 0xc1b060c0, tid 1930
+06-02 16:38:45.572 D/gralloc_ranchu( 1869): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:45.573 W/SurfaceFlinger( 1728): Attempting to set client state on removed layer: Splash Screen org.mozilla.fenix.debug#0
+06-02 16:38:45.573 W/SurfaceFlinger( 1728): Attempting to destroy on removed layer: Splash Screen org.mozilla.fenix.debug#0
+06-02 16:38:45.580 D/GeckoViewStartup( 9365): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:45.584 D/GeckoViewStartup( 9365): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:45.584 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:45.585 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:45.585 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:45.585 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:45.586 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:45.586 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:45.586 D/gralloc_ranchu( 1897): gralloc_unregister_buffer: exiting HostConnection (is buffer-handling thread)
+06-02 16:38:45.588 D/GeckoViewStartup( 9365): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:45.594 D/ ( 1897): HostConnection::get() New Host Connection established 0xed7c3080, tid 1897
+06-02 16:38:45.595 D/GeckoViewStartup( 9365): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:45.595 D/GeckoViewStartup( 9365): onEvent GeckoView:SetDefaultPrefs
+06-02 16:38:45.602 D/GeckoViewConsole( 9365): onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"webcompat@mozilla.com","locationUri":"resource://android/assets/extensions/webcompat/"}
+06-02 16:38:45.607 D/GeckoViewConsole( 9365): onEvent GeckoView:WebExtension:List null
+06-02 16:38:45.609 D/GeckoViewConsole( 9365): onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"mozacBrowserIcons","locationUri":"resource://android/assets/extensions/browser-icons/"}
+06-02 16:38:45.610 D/GeckoViewConsole( 9365): onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"mozacBrowserAds","locationUri":"resource://android/assets/extensions/ads/"}
+06-02 16:38:45.611 D/GeckoViewConsole( 9365): onEvent GeckoView:RegisterWebExtension {"allowContentMessaging":true,"id":"BrowserCookiesExtension","locationUri":"resource://android/assets/extensions/cookies/"}
+06-02 16:38:45.638 E/adbd ( 4408): failed to connect to socket 'tcp:2829': Connection refused
+06-02 16:38:45.730 I/ActivityManager( 1869): Fully drawn org.mozilla.fenix.debug/.App: +2s360ms
+06-02 16:38:45.736 I/Gecko ( 9365): 1591130325735 Marionette INFO Listening on port 2829
+06-02 16:38:45.738 I/DefaultSupportedAddonsChecker( 9365): Register check for new supported add-ons
+06-02 16:38:45.798 I/SupportedAddonsWorker( 9365): Trying to check for new supported add-ons
+06-02 16:38:45.922 D/App ( 9365): Installed browser-icons extension
+06-02 16:38:45.933 D/ ( 9365): HostConnection::get() New Host Connection established 0xce299840, tid 9393
+06-02 16:38:45.934 E/EGL_emulation( 9365): tid 9393: eglBindAPI(1259): error 0x300c (EGL_BAD_PARAMETER)
+06-02 16:38:45.936 D/EGL_emulation( 9365): eglCreateContext: 0xae005040: maj 3 min 0 rcv 3
+06-02 16:38:45.938 D/EGL_emulation( 9365): eglMakeCurrent: 0xae005040: ver 3 0 (tinfo 0xe9131ba0)
+06-02 16:38:45.976 E/GeckoConsole( 9365): [JavaScript Error: "NetworkError when attempting to fetch resource."]
+06-02 16:38:45.976 E/GeckoConsole( 9365): get@resource://services-settings/RemoteSettingsClient.jsm:350:12
+06-02 16:38:46.028 D/glean/ConceptFetchHttpUploader( 9365): Ping successfully sent (200)
+06-02 16:38:46.028 D/glean/PingUploadWorker( 9365): f2c83a47-027f-4c73-8ff2-9bc7dc060222 was deleted: true
+06-02 16:38:46.031 I/WM-WorkerWrapper( 9365): Worker result SUCCESS for Work [ id=07b3427a-abbb-48f8-b3a5-aa6f1e13a994, tags={ mozilla.telemetry.glean.scheduler.PingUploadWorker, mozac_service_glean_ping_upload_worker } ]
+06-02 16:38:46.112 D/BrowserIcons( 9365): Loaded icon (source = DOWNLOAD): https://www.youtube.com/
+06-02 16:38:46.163 D/BrowserIcons( 9365): Loaded icon (source = DOWNLOAD): https://www.wikipedia.org/
+06-02 16:38:46.216 W/GeckoConsole( 9365): [JavaScript Warning: "Security wrapper denied access to property "ONE_QUARTER" on privileged Javascript object. Support for exposing privileged objects to untrusted content via __exposedProps__ has been removed - use WebIDL bindings or Components.utils.cloneInto instead. Note that only the first denied property access from a given global object will be reported." {file: "moz-extension://d5e9c9f4-8e39-47cd-b0bd-15e32f8acf11/data/picture_in_picture_overrides.js" line: 26}]
+06-02 16:38:46.227 W/SurfaceFlinger( 1728): couldn't log to binary event log: overflow.
+06-02 16:38:46.234 D/mozac-webcompat( 9365): Installed WebCompat webextension: webcompat@mozilla.com
+06-02 16:38:46.282 E/GeckoConsole( 9365): [JavaScript Error: "can't access property "startupData", state is undefined" {file: "resource://gre/modules/addons/XPIProvider.jsm" line: 3079}]
+06-02 16:38:46.282 E/GeckoConsole( 9365): setStartupData@resource://gre/modules/addons/XPIProvider.jsm:3079:5
+06-02 16:38:46.282 E/GeckoConsole( 9365): saveStartupData@resource://gre/modules/Extension.jsm:2035:17
+06-02 16:38:46.282 E/GeckoConsole( 9365): _writePersistentListeners@resource://gre/modules/ExtensionCommon.jsm:2271:15
+06-02 16:38:46.282 E/GeckoConsole( 9365): savePersistentListener@resource://gre/modules/ExtensionCommon.jsm:2362:18
+06-02 16:38:46.282 E/GeckoConsole( 9365): addListener@resource://gre/modules/ExtensionCommon.jsm:2495:20
+06-02 16:38:46.282 E/GeckoConsole( 9365): addListener@resource://gre/modules/ExtensionCommon.jsm:2550:38
+06-02 16:38:46.282 E/GeckoConsole( 9365): recvAddListener@resource://gre/modules/ExtensionParent.jsm:1079:13
+06-02 16:38:46.294 I/chatty ( 9365): uid=10099(org.mozilla.fenix.debug) Gecko identical 24 lines
+06-02 16:38:46.336 E/GeckoConsole( 9365): [JavaScript Error: "can't access property "startupData", state is undefined" {file: "resource://gre/modules/addons/XPIProvider.jsm" line: 3079}]
+06-02 16:38:46.336 E/GeckoConsole( 9365): setStartupData@resource://gre/modules/addons/XPIProvider.jsm:3079:5
+06-02 16:38:46.336 E/GeckoConsole( 9365): saveStartupData@resource://gre/modules/Extension.jsm:2035:17
+06-02 16:38:46.336 E/GeckoConsole( 9365): _writePersistentListeners@resource://gre/modules/ExtensionCommon.jsm:2271:15
+06-02 16:38:46.336 E/GeckoConsole( 9365): savePersistentListener@resource://gre/modules/ExtensionCommon.jsm:2362:18
+06-02 16:38:46.336 E/GeckoConsole( 9365): addListener@resource://gre/modules/ExtensionCommon.jsm:2495:20
+06-02 16:38:46.336 E/GeckoConsole( 9365): addListener@resource://gre/modules/ExtensionCommon.jsm:2550:38
+06-02 16:38:46.336 E/GeckoConsole( 9365): recvAddListener@resource://gre/modules/ExtensionParent.jsm:1079:13
+06-02 16:38:46.342 I/PBSessionCacheImpl( 2402): Deleted sessionId[359508686912] from persistence.
+06-02 16:38:46.345 W/SearchService( 2402): Abort, client detached.
+06-02 16:38:46.471 D/WificondControl( 1869): Scan result ready event
+06-02 16:38:46.796 I/WM-WorkerWrapper( 9365): Worker result SUCCESS for Work [ id=2fa60760-cfd5-4e94-b83f-a9793a0ebc54, tags={ mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker.periodicWork, mozilla.components.feature.addons.migration.SupportedAddonsWorker } ]
+06-02 16:38:48.279 I/EventLogSendingHelper( 2402): Sending log events.
+06-02 16:38:50.279 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
+06-02 16:38:50.338 I/FenixApplication( 9365): Kicking-off account manager...
+06-02 16:38:50.338 I/FenixApplication( 9365): Running post-visual completeness tasks...
+06-02 16:38:50.338 I/FenixApplication( 9365): Storage initialization...
+06-02 16:38:50.341 I/PlacesHistoryStorage( 9365): Warming up places storage...
+06-02 16:38:50.344 D/RustNativeSupport( 9365): findMegazordLibraryName(places, 0.59.0
+06-02 16:38:50.344 D/RustNativeSupport( 9365): lib in use: none
+06-02 16:38:50.344 D/RustNativeSupport( 9365): lib configured: megazord
+06-02 16:38:50.344 D/RustNativeSupport( 9365): lib version configured: 0.59.0
+06-02 16:38:50.344 D/RustNativeSupport( 9365): settled on megazord
+06-02 16:38:50.344 I/FirefoxAccountStateMachine( 9365): Enabling/updating sync with a new SyncConfig: SyncConfig(supportedEngines=[mozilla.components.service.fxa.SyncEngine$History@49c28e, mozilla.components.service.fxa.SyncEngine$Bookmarks@834aaf, mozilla.components.service.fxa.SyncEngine$Passwords@b024ebc], syncPeriodInMinutes=240)
+06-02 16:38:50.346 I/BgSyncManager( 9365): Periodic syncing enabled at a 240 interval
+06-02 16:38:50.346 D/places_ffi( 9365): places_api_new
+06-02 16:38:50.346 I/FirefoxAccountStateMachine( 9365): Sync is enabled
+06-02 16:38:50.348 I/FenixApplication( 9365): 'Kicking-off account manager' took 10 ms
+06-02 16:38:50.349 I/FirefoxAccountStateMachine( 9365): Processing event Init for state Start. Next state is Start
+06-02 16:38:50.363 I/keystore( 1734): del USRPKEY_org.mozilla.fenix.debug 10099
+06-02 16:38:50.364 I/keystore( 1734): del USRCERT_org.mozilla.fenix.debug 10099
+06-02 16:38:50.364 I/keystore( 1734): del CACERT_org.mozilla.fenix.debug 10099
+06-02 16:38:50.367 D/places::db::schema( 9365): Creating schema
+06-02 16:38:50.382 I/FirefoxAccountStateMachine( 9365): Ran 'Init' side-effects for state Start, got successive event AccountNotFound
+06-02 16:38:50.382 I/FirefoxAccountStateMachine( 9365): Processing event AccountNotFound for state Start. Next state is NotAuthenticated
+06-02 16:38:50.387 D/RustNativeSupport( 9365): findMegazordLibraryName(fxaclient, 0.59.0
+06-02 16:38:50.387 D/RustNativeSupport( 9365): lib in use: none
+06-02 16:38:50.387 D/RustNativeSupport( 9365): lib configured: megazord
+06-02 16:38:50.387 D/RustNativeSupport( 9365): lib version configured: 0.59.0
+06-02 16:38:50.387 D/RustNativeSupport( 9365): settled on megazord
+06-02 16:38:50.389 D/fxaclient_ffi( 9365): fxa_new
+06-02 16:38:50.391 W/FirefoxAccountStateMachine( 9365): Got invalid event Init for state NotAuthenticated.
+06-02 16:38:50.415 D/sql_support::conn_ext( 9365): Transaction commited after 48.284882ms
+06-02 16:38:50.415 D/places_ffi( 9365): places_connection_new
+06-02 16:38:50.421 D/places_ffi( 9365): places_connection_new
+06-02 16:38:50.425 I/PlacesHistoryStorage( 9365): 'Warming up places storage' took 84 ms
+06-02 16:38:50.427 I/PlacesBookmarksStorage( 9365): Warming up places storage...
+06-02 16:38:50.427 D/places_ffi( 9365): places_connection_new
+06-02 16:38:50.431 I/PlacesBookmarksStorage( 9365): 'Warming up places storage' took 3 ms
+06-02 16:38:50.450 I/keystore( 1734): 1 0
+06-02 16:38:50.461 I/SyncableLoginsStorage( 9365): Warming up storage...
+06-02 16:38:50.479 D/RustNativeSupport( 9365): findMegazordLibraryName(logins, 0.59.0
+06-02 16:38:50.479 D/RustNativeSupport( 9365): lib in use: none
+06-02 16:38:50.479 D/RustNativeSupport( 9365): lib configured: megazord
+06-02 16:38:50.479 D/RustNativeSupport( 9365): lib version configured: 0.59.0
+06-02 16:38:50.479 D/RustNativeSupport( 9365): settled on megazord
+06-02 16:38:50.484 D/logins_ffi( 9365): sync15_passwords_state_new
+06-02 16:38:50.493 D/logins::schema( 9365): Creating schema
+06-02 16:38:50.609 I/SyncableLoginsStorage( 9365): 'Warming up storage' took 147 ms
+06-02 16:38:50.609 I/FenixApplication( 9365): 'Storage initialization' took 270 ms
+06-02 16:38:51.401 D/EGL_emulation( 2002): eglMakeCurrent: 0xe3385900: ver 3 0 (tinfo 0xe33839b0)
+06-02 16:38:53.250 I/EventLogSendingHelper( 2402): Sending log events.
+06-02 16:38:53.453 E/memtrack( 1869): Couldn't load memtrack module
+06-02 16:38:53.453 W/android.os.Debug( 1869): failed to get memory consumption info: -1
+06-02 16:38:55.290 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
+06-02 16:38:55.416 E/memtrack( 1869): Couldn't load memtrack module
+06-02 16:38:55.417 W/android.os.Debug( 1869): failed to get memory consumption info: -1
+06-02 16:38:55.430 E/memtrack( 1869): Couldn't load memtrack module
+06-02 16:38:55.430 W/android.os.Debug( 1869): failed to get memory consumption info: -1
+06-02 16:39:00.023 D/hwcomposer( 1897): hw_composer sent 60 syncs in 60s
+06-02 16:39:00.309 W/ctxmgr ( 2473): [AclManager]No 2 for (accnt=account#-517948760#, com.google.android.gms(10008):IndoorOutdoorProducer, vrsn=13280000, 0, 3pPkg = null , 3pMdlId = null , pid = 2473). Was: 3 for 57, account#-517948760#
diff --git a/python/mozperftest/mozperftest/tests/data/mozinfo.json b/python/mozperftest/mozperftest/tests/data/mozinfo.json
new file mode 100644
index 0000000000..f8789c5123
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/mozinfo.json
@@ -0,0 +1 @@
+{"appname": "firefox", "artifact": false, "asan": false, "bin_suffix": "", "bits": 64, "buildapp": "browser", "buildtype_guess": "opt", "cc_type": "clang", "ccov": false, "crashreporter": true, "datareporting": true, "debug": false, "devedition": false, "early_beta_or_earlier": true, "healthreport": true, "mozconfig": "/Users/tarek/Dev/gecko/mozilla-central-opt/browser/config/mozconfig", "nightly_build": true, "normandy": true, "official": false, "os": "mac", "pgo": false, "platform_guess": "macosx64", "processor": "x86_64", "release_or_beta": false, "require_signing": false, "stylo": true, "sync": true, "telemetry": false, "tests_enabled": true, "toolkit": "cocoa", "topsrcdir": "/Users/tarek/Dev/gecko/mozilla-central-opt", "tsan": false, "ubsan": false, "updater": true} \ No newline at end of file
diff --git a/python/mozperftest/mozperftest/tests/data/multiple_transforms_error/test_transformer_1.py b/python/mozperftest/mozperftest/tests/data/multiple_transforms_error/test_transformer_1.py
new file mode 100644
index 0000000000..2cfbc47e28
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/multiple_transforms_error/test_transformer_1.py
@@ -0,0 +1,6 @@
+class TestTransformer1(object):
+ def transform(self, data):
+ pass
+
+ def merge(self, sde):
+ pass
diff --git a/python/mozperftest/mozperftest/tests/data/multiple_transforms_error/test_transformer_1_copy.py b/python/mozperftest/mozperftest/tests/data/multiple_transforms_error/test_transformer_1_copy.py
new file mode 100644
index 0000000000..2cfbc47e28
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/multiple_transforms_error/test_transformer_1_copy.py
@@ -0,0 +1,6 @@
+class TestTransformer1(object):
+ def transform(self, data):
+ pass
+
+ def merge(self, sde):
+ pass
diff --git a/python/mozperftest/mozperftest/tests/data/perftestetl_plugin/test_transformer_perftestetl_plugin_1.py b/python/mozperftest/mozperftest/tests/data/perftestetl_plugin/test_transformer_perftestetl_plugin_1.py
new file mode 100644
index 0000000000..2cfbc47e28
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/perftestetl_plugin/test_transformer_perftestetl_plugin_1.py
@@ -0,0 +1,6 @@
+class TestTransformer1(object):
+ def transform(self, data):
+ pass
+
+ def merge(self, sde):
+ pass
diff --git a/python/mozperftest/mozperftest/tests/data/perftestetl_plugin/test_transformer_perftestetl_plugin_2.py b/python/mozperftest/mozperftest/tests/data/perftestetl_plugin/test_transformer_perftestetl_plugin_2.py
new file mode 100644
index 0000000000..f681095b20
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/perftestetl_plugin/test_transformer_perftestetl_plugin_2.py
@@ -0,0 +1,6 @@
+class TestTransformer2(object):
+ def transform(self, data):
+ pass
+
+ def merge(self, sde):
+ pass
diff --git a/python/mozperftest/mozperftest/tests/data/samples/head.js b/python/mozperftest/mozperftest/tests/data/samples/head.js
new file mode 100644
index 0000000000..e29b227f93
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/samples/head.js
@@ -0,0 +1,7 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/* exported require */
+
+"use strict";
+
diff --git a/python/mozperftest/mozperftest/tests/data/samples/perftest_example.js b/python/mozperftest/mozperftest/tests/data/samples/perftest_example.js
new file mode 100644
index 0000000000..52162dedf1
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/samples/perftest_example.js
@@ -0,0 +1,46 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+/* eslint-env node */
+"use strict";
+
+var someVar;
+
+someVar = 2;
+
+async function setUp(context) {
+ context.log.info("setUp example!");
+}
+
+async function test(context, commands) {
+ context.log.info("Test with setUp/tearDown example!");
+ await commands.measure.start("https://www.sitespeed.io/");
+ await commands.measure.start("https://www.mozilla.org/en-US/");
+}
+
+async function tearDown(context) {
+ context.log.info("tearDown example!");
+}
+
+module.noexport = {};
+
+module.exports = {
+ setUp,
+ tearDown,
+ test,
+ owner: "Performance Testing Team",
+ name: "Example",
+ description: "The description of the example test.",
+ longDescription: `
+ This is a longer description of the test perhaps including information
+ about how it should be run locally or links to relevant information.
+ `,
+ supportedBrowsers: ["Fenix nightly", "Geckoview_example", "Fennec", "Firefox"],
+ supportedPlatforms: ["Android", "Desktop"],
+ options: {
+ default: {perfherder: true, verbose: false},
+ linux: {perfherder_metrics: [{name:"speed",unit:"bps_lin"}], verbose: true},
+ mac: {perfherder_metrics: [{name:"speed",unit:"bps_mac"}], verbose: true},
+ win: {perfherder_metrics: [{name:"speed",unit:"bps_win"}], verbose: true}
+ }
+};
diff --git a/python/mozperftest/mozperftest/tests/data/samples/test_mochitest.html b/python/mozperftest/mozperftest/tests/data/samples/test_mochitest.html
new file mode 100644
index 0000000000..4751b41470
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/samples/test_mochitest.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Sample mochitest performance test</title>
+</head>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<script src="utils.js"></script>
+<script>
+
+ // Used for testing ScriptInfo HTML Parsing in mozperftest
+ var perfMetadata = {
+ owner: "Performance Team",
+ name: "Test test",
+ description: "N/A",
+ options: {
+ default: {
+ perfherder: true,
+ perfherder_metrics: [
+ { name: "Registration", unit: "ms" },
+ ],
+ verbose: true,
+ manifest: "mochitest-common.ini",
+ manifest_flavor: "plain",
+ },
+ },
+ };
+
+ add_task(async () => {});
+
+</script>
+<body>
+</body>
+</html>
diff --git a/python/mozperftest/mozperftest/tests/data/samples/test_mochitest_multiscript.html b/python/mozperftest/mozperftest/tests/data/samples/test_mochitest_multiscript.html
new file mode 100644
index 0000000000..521ccecf76
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/samples/test_mochitest_multiscript.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Sample mochitest performance test - multiscript</title>
+</head>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<script src="utils.js"></script>
+<script>
+
+ // Used for testing ScriptInfo HTML Parsing in mozperftest
+ add_task(async () => {});
+
+</script>
+<script>
+
+ var perfMetadata = {
+ owner: "Performance Team",
+ name: "Test test",
+ description: "N/A",
+ options: {
+ default: {
+ perfherder: true,
+ perfherder_metrics: [
+ { name: "Registration", unit: "ms" },
+ ],
+ verbose: true,
+ manifest: "mochitest-common.ini",
+ manifest_flavor: "plain",
+ },
+ },
+ };
+
+</script>
+<body>
+</body>
+</html>
diff --git a/python/mozperftest/mozperftest/tests/data/samples/test_perftest_WPT_init_file.js b/python/mozperftest/mozperftest/tests/data/samples/test_perftest_WPT_init_file.js
new file mode 100644
index 0000000000..eee6f61234
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/samples/test_perftest_WPT_init_file.js
@@ -0,0 +1,113 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+/* eslint-env node */
+"use strict";
+function setUp() {}
+
+function tearDown() {}
+
+function test() {}
+
+module.exports = {
+ setUp,
+ tearDown,
+ test,
+ owner: "Performance Testing Team",
+ name: "webpagetest",
+ description:
+ "Run webpagetest performance pageload tests on Firefox against Alexa top 50 websites",
+ longDescription: `This mozperftest gets webpagetest to run pageload tests on Firefox against the 50 most popular
+ websites and provide data. The full list of data returned from webpagetest: firstContentfulPaint,
+ timeToContentfulPaint, visualComplete90, firstPaint, visualComplete99, visualComplete, SpeedIndex, bytesIn, bytesOut,
+ TTFB, fullyLoadedCPUms, fullyLoadedCPUpct, domElements, domContentLoadedEventStart, domContentLoadedEventEnd,
+ loadEventStart, loadEventEnd`,
+ options: {
+ test_parameters: {
+ location: "ec2-us-east-1",
+ browser: "Firefox",
+ connection: "Cable",
+ timeout_limit: 21600,
+ wait_between_requests: 5,
+ statistics: ["average", "median", "standardDeviation"],
+ label: "",
+ runs: 3,
+ fvonly: 0,
+ private: 0,
+ web10: 0,
+ script: "",
+ block: "",
+ video: 1,
+ tcpdump: 0,
+ noimages: 0,
+ keepua: 1,
+ uastring: "",
+ htmlbody: 0,
+ custom: "",
+ ignoreSSL: 0,
+ appendua: "",
+ injectScript: "",
+ disableAVIF: 0,
+ disableWEBP: 0,
+ disableJXL: 0,
+ },
+ test_list: [
+ "google.com",
+ "youtube.com",
+ "facebook.com",
+ "qq.com",
+ "baidu.com",
+ "sohu.com",
+ "360.cn",
+ "jd.com",
+ "amazon.com",
+ "yahoo.com",
+ "zoom.us",
+ "sina.com.cn",
+ "live.com",
+ "reddit.com",
+ "netflix.com",
+ "microsoft.com",
+ "instagram.com",
+ "panda.tv",
+ "google.com.hk",
+ "csdn.net",
+ "bing.com",
+ "vk.com",
+ "yahoo.co.jp",
+ "twitter.com",
+ "naver.com",
+ "canva.com",
+ "ebay.com",
+ "force.com",
+ "amazon.in",
+ "adobe.com",
+ "aliexpress.com",
+ "linkedin.com",
+ "tianya.cn",
+ "yy.com",
+ "huanqiu.com",
+ "amazon.co.jp",
+ "okezone.com",
+ ],
+ browser_metrics: [
+ "firstContentfulPaint",
+ "timeToContentfulPaint",
+ "visualComplete90",
+ "firstPaint",
+ "visualComplete99",
+ "visualComplete",
+ "SpeedIndex",
+ "bytesIn",
+ "bytesOut",
+ "TTFB",
+ "fullyLoadedCPUms",
+ "fullyLoadedCPUpct",
+ "domElements",
+ "domContentLoadedEventStart",
+ "domContentLoadedEventEnd",
+ "loadEventStart",
+ "loadEventEnd",
+ ],
+ },
+};
diff --git a/python/mozperftest/mozperftest/tests/data/samples/test_perftest_android_startup.js b/python/mozperftest/mozperftest/tests/data/samples/test_perftest_android_startup.js
new file mode 100644
index 0000000000..f704bf67a0
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/samples/test_perftest_android_startup.js
@@ -0,0 +1,34 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+/* eslint-env node */
+"use strict";
+
+async function test(context, commands) {}
+
+module.exports = {
+ test,
+ owner: "Performance Team",
+ name: "android-startup",
+ description: "Measures cold process view time",
+ longDescription: `
+ This test launches the appropriate android app, simulating a opening a link through VIEW intent
+ workflow. The application is launched with the intent action
+ android.intent.action.VIEW loading a trivially simple website. The reported
+ metric is the time from process start to navigationStart, reported as processLaunchToNavStart
+ `,
+ usage: `
+ ./mach perftest --flavor mobile-browser --AndroidStartUp testing/performance/perftest_android_startup.js
+ --browsertime-cycles=0 --AndroidStartUp-test-name=cold_view_nav_start --perfherder --hooks
+ testing/performance/hooks_android_startup.py --AndroidStartUp-product=fenix
+ --AndroidStartUp-release-channel=nightly
+ `,
+ options: {
+ test_parameters: {
+ single_date: null, // Dates in YYYY.MM.DD format
+ date_range: [], // 2 Dates in YYYY.MM.DD format the first and last date(inclusive)
+ startup_cache: true,
+ test_cycles: 50,
+ },
+ },
+};
diff --git a/python/mozperftest/mozperftest/tests/data/samples/test_xpcshell.js b/python/mozperftest/mozperftest/tests/data/samples/test_xpcshell.js
new file mode 100644
index 0000000000..5796f23a64
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/samples/test_xpcshell.js
@@ -0,0 +1,39 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+
+add_task(async function dummy_test() {
+ /*
+ * Do some test here, get some metrics
+ */
+ var metrics = {"metrics1": 1, "metrics2": 2};
+ info("perfMetrics", metrics);
+ info("perfMetrics", {"metrics3": 3});
+ await true;
+});
+
+var anotherVar = {
+ something: "cool"
+};
+
+var perfMetadata = {
+ owner: "Performance Testing Team",
+ name: "Example",
+ description: "The description of the example test.",
+ longDescription: `
+ This is a longer description of the test perhaps including information
+ about how it should be run locally or links to relevant information.
+ `,
+ supportedBrowsers: ["Firefox"],
+ supportedPlatforms: ["Desktop"],
+ options: {
+ default: {perfherder: true},
+ linux: {perfherder_metrics: [{name:"speed",unit: "bps_lin"}]},
+ mac: {perfherder_metrics: [{name:"speed",unit: "bps_mac"}]},
+ win: {perfherder_metrics: [{name:"speed",unit: "bps_win"}]},
+ wat: {},
+ }
+};
diff --git a/python/mozperftest/mozperftest/tests/data/samples/test_xpcshell_flavor2.js b/python/mozperftest/mozperftest/tests/data/samples/test_xpcshell_flavor2.js
new file mode 100644
index 0000000000..3223f6c603
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/samples/test_xpcshell_flavor2.js
@@ -0,0 +1,35 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+var anotherVar = {
+ something: "cool"
+};
+
+var perfMetadata = {
+ owner: "Performance Testing Team",
+ name: "Example",
+ description: "The description of the example test.",
+ longDescription: `
+ This is a longer description of the test perhaps including information
+ about how it should be run locally or links to relevant information.
+ `,
+ supportedBrowsers: ["Firefox"],
+ supportedPlatforms: ["Desktop"],
+ options: {
+ default: {perfherder: true},
+ linux: {perfherder_metrics: [{name:"speed",unit: "bps_lin"}]},
+ mac: {perfherder_metrics: [{name:"speed",unit: "bps_mac"}]},
+ win: {perfherder_metrics: [{name:"speed",unit: "bps_win"}]}
+ }
+};
+
+function run_next_test() {
+ // do something
+}
+
+function run_test() {
+ // do something
+}
diff --git a/python/mozperftest/mozperftest/tests/data/samples/xpcshell.ini b/python/mozperftest/mozperftest/tests/data/samples/xpcshell.ini
new file mode 100644
index 0000000000..47c62f7d15
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/samples/xpcshell.ini
@@ -0,0 +1,5 @@
+[DEFAULT]
+head = head.js
+firefox-appdir = browser
+
+[test_xpcshell.js]
diff --git a/python/mozperftest/mozperftest/tests/data/xpcshell b/python/mozperftest/mozperftest/tests/data/xpcshell
new file mode 100644
index 0000000000..792d600548
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/data/xpcshell
@@ -0,0 +1 @@
+#
diff --git a/python/mozperftest/mozperftest/tests/fetched_artifact.zip b/python/mozperftest/mozperftest/tests/fetched_artifact.zip
new file mode 100644
index 0000000000..3f6431896b
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/fetched_artifact.zip
Binary files differ
diff --git a/python/mozperftest/mozperftest/tests/support.py b/python/mozperftest/mozperftest/tests/support.py
new file mode 100644
index 0000000000..ba202ad380
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/support.py
@@ -0,0 +1,122 @@
+import contextlib
+import os
+import shutil
+import subprocess
+import sys
+import tempfile
+from pathlib import Path
+from unittest.mock import MagicMock
+
+from mozperftest import utils
+from mozperftest.environment import MachEnvironment
+from mozperftest.hooks import Hooks
+from mozperftest.metadata import Metadata
+from mozperftest.script import ScriptInfo
+
+HERE = Path(__file__).parent
+ROOT = Path(HERE, "..", "..", "..", "..").resolve()
+EXAMPLE_TESTS_DIR = os.path.join(HERE, "data", "samples")
+EXAMPLE_TEST = os.path.join(EXAMPLE_TESTS_DIR, "perftest_example.js")
+EXAMPLE_XPCSHELL_TEST = Path(EXAMPLE_TESTS_DIR, "test_xpcshell.js")
+EXAMPLE_XPCSHELL_TEST2 = Path(EXAMPLE_TESTS_DIR, "test_xpcshell_flavor2.js")
+EXAMPLE_MOCHITEST_TEST = Path(EXAMPLE_TESTS_DIR, "test_mochitest.html")
+EXAMPLE_MOCHITEST_TEST2 = Path(EXAMPLE_TESTS_DIR, "test_mochitest_multiscript.html")
+EXAMPLE_WPT_TEST = Path(EXAMPLE_TESTS_DIR, "test_perftest_WPT_init_file.js")
+BT_DATA = Path(HERE, "data", "browsertime-results", "browsertime.json")
+BT_DATA_VIDEO = Path(HERE, "data", "browsertime-results-video", "browsertime.json")
+DMG = Path(HERE, "data", "firefox.dmg")
+MOZINFO = Path(HERE, "data", "mozinfo.json")
+EXAMPLE_ANDROID_STARTUP_TEST = Path(
+ EXAMPLE_TESTS_DIR, "test_perftest_android_startup.js"
+)
+
+
+@contextlib.contextmanager
+def temp_file(name="temp", content=None):
+ tempdir = tempfile.mkdtemp()
+ path = os.path.join(tempdir, name)
+ if content is not None:
+ with open(path, "w") as f:
+ f.write(content)
+ try:
+ yield path
+ finally:
+ shutil.rmtree(tempdir)
+
+
+def get_running_env(**kwargs):
+ from mozbuild.base import MozbuildObject
+
+ config = MozbuildObject.from_environment()
+ mach_cmd = MagicMock()
+
+ def get_binary_path(*args):
+ return ""
+
+ def run_pip(args):
+ subprocess.check_call(
+ [sys.executable, "-m", "pip"] + args,
+ stderr=subprocess.STDOUT,
+ cwd=config.topsrcdir,
+ universal_newlines=True,
+ )
+
+ mach_cmd.get_binary_path = get_binary_path
+ mach_cmd.topsrcdir = config.topsrcdir
+ mach_cmd.topobjdir = config.topobjdir
+ mach_cmd.distdir = config.distdir
+ mach_cmd.bindir = config.bindir
+ mach_cmd._mach_context = MagicMock()
+ mach_cmd._mach_context.state_dir = tempfile.mkdtemp()
+ mach_cmd.run_process.return_value = 0
+ mach_cmd.virtualenv_manager = MagicMock()
+ mach_cmd.virtualenv_manager.python_path = sys.executable
+ mach_cmd.virtualenv_manager.bin_path = Path(sys.executable).parent
+ mach_cmd.virtualenv_manager._run_pip = run_pip
+
+ mach_args = {
+ "flavor": "desktop-browser",
+ "test_objects": None,
+ "resolve_tests": True,
+ "browsertime-clobber": False,
+ "browsertime-install-url": None,
+ }
+ mach_args.update(kwargs)
+ hooks = Hooks(mach_cmd, mach_args.pop("hooks", None))
+ tests = mach_args.get("tests", [])
+ if len(tests) > 0:
+ script = ScriptInfo(tests[0])
+ else:
+ script = None
+ env = MachEnvironment(mach_cmd, hooks=hooks, **mach_args)
+ metadata = Metadata(mach_cmd, env, "desktop-browser", script)
+ return mach_cmd, metadata, env
+
+
+def requests_content(chunks=None):
+ if chunks is None:
+ chunks = [b"some ", b"content"]
+
+ def _content(*args, **kw):
+ class Resp:
+ def iter_content(self, **kw):
+ for chunk in chunks:
+ yield chunk
+
+ return Resp()
+
+ return _content
+
+
+@contextlib.contextmanager
+def running_on_try(on_try=True):
+ old = utils.ON_TRY
+ utils.ON_TRY = on_try
+ try:
+ if on_try:
+ with utils.temporary_env(MOZ_AUTOMATION="1"):
+ yield
+ else:
+ yield
+ finally:
+ utils.ON_TRY = old
diff --git a/python/mozperftest/mozperftest/tests/test_android.py b/python/mozperftest/mozperftest/tests/test_android.py
new file mode 100644
index 0000000000..484bdbf92e
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_android.py
@@ -0,0 +1,331 @@
+#!/usr/bin/env python
+import pathlib
+from unittest import mock
+
+import mozunit
+import pytest
+
+from mozperftest.environment import SYSTEM
+from mozperftest.system.android import DeviceError
+from mozperftest.system.android_perf_tuner import PerformanceTuner
+from mozperftest.tests.support import get_running_env, requests_content, temp_file
+from mozperftest.utils import silence
+
+
+class FakeDevice:
+ def __init__(self, **args):
+ self.apps = []
+ self._logger = mock.MagicMock()
+ self._have_su = True
+ self._have_android_su = True
+ self._have_root_shell = True
+ self.is_rooted = True
+
+ def clear_logcat(self, *args, **kwargs):
+ return True
+
+ def shell_output(self, *args, **kwargs):
+ return "A Fake Device"
+
+ def shell_bool(self, *args, **kwargs):
+ return True
+
+ def uninstall_app(self, apk_name):
+ return True
+
+ def install_app(self, apk, replace=True):
+ if apk not in self.apps:
+ self.apps.append(apk)
+
+ def is_app_installed(self, app_name):
+ return True
+
+
+@mock.patch("mozperftest.system.android.ADBLoggedDevice", new=FakeDevice)
+def test_android():
+ args = {
+ "flavor": "mobile-browser",
+ "android-install-apk": ["this.apk"],
+ "android": True,
+ "android-timeout": 30,
+ "android-capture-adb": "stdout",
+ "android-app-name": "org.mozilla.fenix",
+ }
+
+ mach_cmd, metadata, env = get_running_env(**args)
+ system = env.layers[SYSTEM]
+ with system as android, silence(system):
+ android(metadata)
+
+
+@mock.patch("mozperftest.system.android.ADBLoggedDevice")
+def test_android_perf_tuning_rooted(device):
+ # Check to make sure that performance tuning runs
+ # on rooted devices correctly
+ device._have_su = True
+ device._have_android_su = True
+ device._have_root_shell = True
+ device.is_rooted = True
+ with mock.patch(
+ "mozperftest.system.android_perf_tuner.PerformanceTuner.set_kernel_performance_parameters"
+ ) as mockfunc:
+ tuner = PerformanceTuner(device)
+ tuner.tune_performance()
+ mockfunc.assert_called()
+
+
+@mock.patch("mozperftest.system.android.ADBLoggedDevice")
+def test_android_perf_tuning_nonrooted(device):
+ # Check to make sure that performance tuning runs
+ # on non-rooted devices correctly
+ device._have_su = False
+ device._have_android_su = False
+ device._have_root_shell = False
+ device.is_rooted = False
+ with mock.patch(
+ "mozperftest.system.android_perf_tuner.PerformanceTuner.set_kernel_performance_parameters"
+ ) as mockfunc:
+ tuner = PerformanceTuner(device)
+ tuner.tune_performance()
+ mockfunc.assert_not_called()
+
+
+class Device:
+ def __init__(self, name, rooted=True):
+ self.device_name = name
+ self.is_rooted = rooted
+ self.call_counts = 0
+
+ @property
+ def _logger(self):
+ return self
+
+ def noop(self, *args, **kw):
+ pass
+
+ debug = error = info = clear_logcat = noop
+
+ def shell_bool(self, *args, **kw):
+ self.call_counts += 1
+ return True
+
+ def shell_output(self, *args, **kw):
+ self.call_counts += 1
+ return self.device_name
+
+
+def test_android_perf_tuning_all_calls():
+ # Check without mocking PerformanceTuner functions
+ for name in ["?"]:
+ device = Device(name)
+ tuner = PerformanceTuner(device)
+ tuner.tune_performance()
+ assert device.call_counts > 1
+
+
+@mock.patch("mozperftest.system.android_perf_tuner.PerformanceTuner")
+@mock.patch("mozperftest.system.android.ADBLoggedDevice")
+def test_android_with_perftuning(device, tuner):
+ args = {
+ "flavor": "mobile-browser",
+ "android-install-apk": ["this.apk"],
+ "android": True,
+ "android-timeout": 30,
+ "android-capture-adb": "stdout",
+ "android-app-name": "org.mozilla.fenix",
+ "android-perf-tuning": True,
+ }
+ tuner.return_value = tuner
+
+ mach_cmd, metadata, env = get_running_env(**args)
+ system = env.layers[SYSTEM]
+ with system as android, silence(system):
+ android(metadata)
+
+ # Make sure the tuner was actually called
+ tuner.tune_performance.assert_called()
+
+
+def test_android_failure():
+ # no patching so it'll try for real and fail
+ args = {
+ "flavor": "mobile-browser",
+ "android-install-apk": ["this"],
+ "android": True,
+ "android-timeout": 120,
+ "android-app-name": "org.mozilla.fenix",
+ "android-capture-adb": "stdout",
+ }
+
+ mach_cmd, metadata, env = get_running_env(**args)
+ system = env.layers[SYSTEM]
+ with system as android, silence(system), pytest.raises(DeviceError):
+ android(metadata)
+
+
+@mock.patch(
+ "mozperftest.system.android.AndroidDevice.custom_apk_exists", new=lambda x: False
+)
+@mock.patch("mozperftest.utils.requests.get", new=requests_content())
+@mock.patch("mozperftest.system.android.ADBLoggedDevice")
+def test_android_apk_alias(device):
+ args = {
+ "flavor": "mobile-browser",
+ "android-install-apk": ["fenix_nightly_armeabi_v7a"],
+ "android": True,
+ "android-app-name": "org.mozilla.fenix",
+ "android-capture-adb": "stdout",
+ }
+
+ mach_cmd, metadata, env = get_running_env(**args)
+ system = env.layers[SYSTEM]
+ with system as android, silence(system):
+ android(metadata)
+
+ assert device.mock_calls[1][1][0] == "org.mozilla.fenix"
+ assert device.mock_calls[2][1][0].endswith("target.apk")
+
+
+@mock.patch("mozperftest.utils.requests.get", new=requests_content())
+@mock.patch("mozperftest.system.android.ADBLoggedDevice")
+def test_android_timeout(device):
+ args = {
+ "flavor": "mobile-browser",
+ "android-install-apk": ["gve_nightly_api16"],
+ "android": True,
+ "android-timeout": 60,
+ "android-app-name": "org.mozilla.geckoview_example",
+ "android-capture-adb": "stdout",
+ }
+
+ mach_cmd, metadata, env = get_running_env(**args)
+ system = env.layers[SYSTEM]
+ with system as android, silence(system):
+ android(metadata)
+ options = device.mock_calls[0][-1]
+ assert options["timeout"] == 60
+
+
+@mock.patch("mozperftest.utils.requests.get", new=requests_content())
+def test_android_log_adb():
+ with temp_file() as log_adb:
+ args = {
+ "flavor": "mobile-browser",
+ "android-install-apk": ["gve_nightly_api16"],
+ "android": True,
+ "android-timeout": 60,
+ "android-app-name": "org.mozilla.geckoview_example",
+ "android-capture-adb": log_adb,
+ }
+
+ mach_cmd, metadata, env = get_running_env(**args)
+ system = env.layers[SYSTEM]
+ with system as android, silence(system), pytest.raises(DeviceError):
+ android(metadata)
+ with open(log_adb) as f:
+ assert "DEBUG ADBLoggedDevice" in f.read()
+
+
+@mock.patch("mozperftest.utils.requests.get", new=requests_content())
+@mock.patch("mozperftest.system.android.ADBLoggedDevice")
+def test_android_log_cat(device):
+ with temp_file() as log_cat:
+ args = {
+ "flavor": "mobile-browser",
+ "android-install-apk": ["gve_nightly_api16"],
+ "android": True,
+ "android-timeout": 60,
+ "android-app-name": "org.mozilla.geckoview_example",
+ "android-capture-logcat": log_cat,
+ "android-clear-logcat": True,
+ "android-capture-adb": "stdout",
+ }
+
+ mach_cmd, metadata, env = get_running_env(**args)
+ system = env.layers[SYSTEM]
+ andro = system.layers[1]
+
+ with system as layer, silence(system):
+ andro.device = device
+ andro.device.get_logcat = mock.Mock(result_value=[])
+ layer(metadata)
+
+ andro.device.get_logcat.assert_called()
+ andro.device.clear_logcat.assert_called()
+
+
+@mock.patch("mozperftest.system.android.AndroidDevice.setup", new=mock.MagicMock)
+@mock.patch("mozperftest.system.android.Path")
+@mock.patch("mozperftest.system.android.ADBLoggedDevice", new=FakeDevice)
+def test_android_custom_apk(mozperftest_android_path):
+ args = {
+ "flavor": "mobile-browser",
+ "android": True,
+ }
+
+ with temp_file(name="user_upload.apk", content="") as sample_apk:
+ sample_apk = pathlib.Path(sample_apk)
+ mozperftest_android_path.return_value = sample_apk
+
+ mach_cmd, metadata, env = get_running_env(**args)
+ system = env.layers[SYSTEM]
+ android = system.layers[1]
+
+ with system as _, silence(system):
+ assert android._custom_apk_path is None
+ assert android.custom_apk_exists()
+ assert android.custom_apk_path == sample_apk
+
+ mozperftest_android_path.assert_called_once()
+
+
+@mock.patch("mozperftest.system.android.AndroidDevice.setup", new=mock.MagicMock)
+@mock.patch("mozperftest.system.android.Path.exists")
+@mock.patch("mozperftest.system.android.ADBLoggedDevice", new=FakeDevice)
+def test_android_custom_apk_nonexistent(path_exists):
+ args = {
+ "flavor": "mobile-browser",
+ "android": True,
+ }
+
+ path_exists.return_value = False
+
+ mach_cmd, metadata, env = get_running_env(**args)
+ system = env.layers[SYSTEM]
+ android = system.layers[1]
+
+ with system as _, silence(system):
+ assert android._custom_apk_path is None
+ assert not android.custom_apk_exists()
+ assert android.custom_apk_path is None
+
+ path_exists.assert_called()
+
+
+@mock.patch("mozperftest.system.android.Path")
+@mock.patch("mozperftest.system.android.ADBLoggedDevice", new=FakeDevice)
+def test_android_setup_custom_apk(mozperftest_android_path):
+ args = {
+ "flavor": "mobile-browser",
+ "android": True,
+ }
+
+ with temp_file(name="user_upload.apk", content="") as sample_apk:
+ sample_apk = pathlib.Path(sample_apk)
+ mozperftest_android_path.return_value = sample_apk
+
+ mach_cmd, metadata, env = get_running_env(**args)
+ system = env.layers[SYSTEM]
+ android = system.layers[1]
+
+ with system as _, silence(system):
+ # The custom apk should be found immediately, and it
+ # should replace any --android-install-apk settings
+ assert android._custom_apk_path == sample_apk
+ assert env.get_arg("android-install-apk") == [sample_apk]
+
+ mozperftest_android_path.assert_called_once()
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_android_startup.py b/python/mozperftest/mozperftest/tests/test_android_startup.py
new file mode 100644
index 0000000000..9620a7d901
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_android_startup.py
@@ -0,0 +1,285 @@
+import copy
+import json
+import pathlib
+import random
+import time
+from datetime import date
+from unittest import mock
+
+import mozunit
+import pytest
+import requests
+
+from mozperftest.system import android_startup
+from mozperftest.system.android_startup import (
+ AndroidStartUpInstallError,
+ AndroidStartUpMatchingError,
+ AndroidStartUpUnknownTestError,
+)
+from mozperftest.tests.support import (
+ EXAMPLE_ANDROID_STARTUP_TEST,
+ get_running_env,
+ temp_file,
+)
+
+SAMPLE_APK_METADATA = {
+ "name": "fenix_nightly_armeabi-v7a_2022_09_27.apk",
+ "date": date(2022, 9, 27),
+ "commit": "",
+ "architecture": "armeabi-v7a",
+ "product": "fenix",
+}
+
+ARGS = {
+ "AndroidStartUp-test-name": "cold_view_nav_start",
+ "AndroidStartUp-product": "fenix",
+ "AndroidStartUp-release-channel": "nightly",
+ "apk_metadata": SAMPLE_APK_METADATA,
+ "test-date": "2023.01.01",
+}
+
+
+class FakeDevice:
+ def __init__(self, **kwargs):
+ self.name = ""
+ pass
+
+ def uninstall_app(self, app):
+ pass
+
+ def install_app(self, app_name):
+ return app_name
+
+ def is_app_installed(self, name):
+ self.name = name
+ if name == "is_app_installed_fail":
+ return False
+ else:
+ return True
+
+ def stop_application(self, package_id):
+ pass
+
+ def shell(self, cmd):
+ pass
+
+ def shell_output(self, cmd):
+ if cmd == "logcat -d":
+ return (
+ "ActivityManager: Start proc 23943:org.mozilla.fenix/u0a283 \n"
+ "ActivityManager: Start proc 23942:org.mozilla.fenix/u0a283 \n"
+ "11-23 14:10:13.391 13135 13135 I "
+ "GeckoSession: handleMessage GeckoView:PageStart uri=\n"
+ "11-23 14:10:13.391 13135 13135 I "
+ "GeckoSession: handleMessage GeckoView:PageStart uri="
+ )
+ if self.name == "name_for_intent_not_2_lines":
+ return "3 \n lines \n not 2"
+ elif self.name == "name_for_multiple_Totaltime_strings":
+ return "2 lines but \n no TotalTime"
+ elif self.name == "name_for_single_total_time":
+ return "TotalTime: 123 \n test"
+
+
+def setup_metadata(metadata, **kwargs):
+ new_metadata = copy.copy(metadata)
+ for key, value in kwargs.items():
+ new_metadata[key] = value
+ return new_metadata
+
+
+def running_env(**kw):
+ return get_running_env(flavor="mobile-browser", **kw)
+
+
+def init_mocked_request(status_code, **kwargs):
+ mock_data = {}
+ for key, value in kwargs.items():
+ mock_data["data"][key] = value
+ mock_request = requests.Response()
+ mock_request.status_code = status_code
+ mock_request._content = json.dumps(mock_data).encode("utf-8")
+ return mock_request
+
+
+@mock.patch(
+ "mozperftest.system.android.AndroidDevice.custom_apk_exists", new=lambda x: False
+)
+@mock.patch(
+ "mozdevice.ADBDevice",
+ new=FakeDevice,
+)
+@mock.patch("requests.get", return_value=init_mocked_request(200))
+@mock.patch("time.sleep", return_value=time.sleep(0))
+def test_install_of_nightly_failed(*mocked):
+ SAMPLE_APK_METADATA["name"] = "is_app_installed_fail"
+ ARGS["apk_metadata"] = SAMPLE_APK_METADATA
+ mach_cmd, metadata, env = running_env(
+ tests=[str(EXAMPLE_ANDROID_STARTUP_TEST)], **ARGS
+ )
+ test = android_startup.AndroidStartUp(env, mach_cmd)
+ with pytest.raises(AndroidStartUpInstallError):
+ test.run(metadata)
+ SAMPLE_APK_METADATA["name"] = "fenix_nightly_armeabi-v7a_2022_09_27.apk"
+ ARGS["apk_metadata"] = SAMPLE_APK_METADATA
+ pass
+
+
+@mock.patch(
+ "mozdevice.ADBDevice",
+ new=FakeDevice,
+)
+@mock.patch("time.sleep", return_value=time.sleep(0))
+def test_invalid_test_name(*mocked):
+ ARGS["AndroidStartUp-test-name"] = "BAD TEST NAME"
+ mach_cmd, metadata, env = running_env(
+ tests=[str(EXAMPLE_ANDROID_STARTUP_TEST)], **ARGS
+ )
+ test = android_startup.AndroidStartUp(env, mach_cmd)
+ with pytest.raises(AndroidStartUpUnknownTestError):
+ test.run(metadata)
+ ARGS["AndroidStartUp-test-name"] = "cold_main_first_frame"
+ pass
+
+
+@mock.patch(
+ "mozperftest.system.android.AndroidDevice.custom_apk_exists", new=lambda x: False
+)
+@mock.patch(
+ "mozdevice.ADBDevice",
+ new=FakeDevice,
+)
+@mock.patch("time.sleep", return_value=time.sleep(0))
+def test_multiple_matching_lines(*mocked):
+ SAMPLE_APK_METADATA["name"] = "name_for_intent_not_2_lines"
+ ARGS["apk_metadata"] = SAMPLE_APK_METADATA
+ mach_cmd, metadata, env = running_env(
+ tests=[str(EXAMPLE_ANDROID_STARTUP_TEST)], **ARGS
+ )
+ test = android_startup.AndroidStartUp(env, mach_cmd)
+ with pytest.raises(AndroidStartUpMatchingError):
+ test.run(metadata)
+ SAMPLE_APK_METADATA["name"] = "fenix_nightly_armeabi-v7a_2022_09_27.apk"
+ ARGS["apk_metadata"] = SAMPLE_APK_METADATA
+ pass
+
+
+@mock.patch(
+ "mozperftest.system.android.AndroidDevice.custom_apk_exists", new=lambda x: False
+)
+@mock.patch(
+ "mozdevice.ADBDevice",
+ new=FakeDevice,
+)
+@mock.patch("time.sleep", return_value=time.sleep(0))
+def test_multiple_total_time_prefix(*mocked):
+ SAMPLE_APK_METADATA["name"] = "name_for_multiple_Totaltime_strings"
+ ARGS["apk_metadata"] = SAMPLE_APK_METADATA
+ mach_cmd, metadata, env = running_env(
+ tests=[str(EXAMPLE_ANDROID_STARTUP_TEST)], **ARGS
+ )
+ test = android_startup.AndroidStartUp(env, mach_cmd)
+ with pytest.raises(AndroidStartUpMatchingError):
+ test.run(metadata)
+ SAMPLE_APK_METADATA["name"] = "fenix_nightly_armeabi-v7a_2022_09_27.apk"
+ ARGS["apk_metadata"] = SAMPLE_APK_METADATA
+ pass
+
+
+@mock.patch(
+ "mozperftest.system.android.AndroidDevice.custom_apk_exists", new=lambda x: False
+)
+@mock.patch(
+ "mozdevice.ADBDevice",
+ new=FakeDevice,
+)
+@mock.patch("time.sleep", return_value=time.sleep(0))
+def test_multiple_start_proc_lines(*mocked):
+ SAMPLE_APK_METADATA["name"] = "name_for_multiple_Totaltime_strings"
+ ARGS["apk_metadata"] = SAMPLE_APK_METADATA
+ ARGS["apk_metadata"] = SAMPLE_APK_METADATA
+ mach_cmd, metadata, env = running_env(
+ tests=[str(EXAMPLE_ANDROID_STARTUP_TEST)], **ARGS
+ )
+ test = android_startup.AndroidStartUp(env, mach_cmd)
+ with pytest.raises(AndroidStartUpMatchingError):
+ test.run(metadata)
+ SAMPLE_APK_METADATA["name"] = "fenix_nightly_armeabi-v7a_2022_09_27.apk"
+ ARGS["apk_metadata"] = SAMPLE_APK_METADATA
+ pass
+
+
+@mock.patch(
+ "mozperftest.system.android.AndroidDevice.custom_apk_exists", new=lambda x: False
+)
+@mock.patch(
+ "mozdevice.ADBDevice",
+ new=FakeDevice,
+)
+@mock.patch("time.sleep", return_value=time.sleep(0))
+@mock.patch(
+ "mozperftest.system.android_startup.AndroidStartUp.get_measurement",
+ return_value=random.randint(500, 1000),
+)
+def test_perfherder_layer(*mocked):
+ SAMPLE_APK_METADATA["name"] = "name_for_multiple_Totaltime_strings"
+ ARGS["apk_metadata"] = SAMPLE_APK_METADATA
+ mach_cmd, metadata, env = running_env(
+ tests=[str(EXAMPLE_ANDROID_STARTUP_TEST)], **ARGS
+ )
+ test = android_startup.AndroidStartUp(env, mach_cmd)
+ test.run(metadata)
+
+
+@mock.patch("mozperftest.system.android.Path")
+@mock.patch(
+ "mozdevice.ADBDevice",
+ new=FakeDevice,
+)
+@mock.patch("time.sleep", return_value=time.sleep(0))
+@mock.patch(
+ "mozperftest.system.android_startup.AndroidStartUp.get_measurement",
+ return_value=random.randint(500, 1000),
+)
+def test_custom_apk_startup(get_measurement_mock, time_sleep_mock, path_mock):
+ SAMPLE_APK_METADATA["name"] = "name_for_multiple_Totaltime_strings"
+ ARGS["apk_metadata"] = SAMPLE_APK_METADATA
+ mach_cmd, metadata, env = running_env(
+ tests=[str(EXAMPLE_ANDROID_STARTUP_TEST)], **ARGS
+ )
+
+ with temp_file(name="user_upload.apk", content="") as sample_apk:
+ sample_apk = pathlib.Path(sample_apk)
+ path_mock.return_value = sample_apk
+
+ with mock.patch(
+ "mozperftest.system.android_startup.AndroidStartUp.run_tests"
+ ) as _:
+ test = android_startup.AndroidStartUp(env, mach_cmd)
+ test.run_tests = lambda: True
+ test.package_id = "FakeID"
+ assert test.run_performance_analysis(SAMPLE_APK_METADATA)
+
+
+@mock.patch(
+ "mozperftest.system.android.AndroidDevice.custom_apk_exists", new=lambda x: False
+)
+@mock.patch(
+ "mozdevice.ADBDevice",
+ new=FakeDevice,
+)
+@mock.patch("time.sleep", return_value=time.sleep(0))
+def test_get_measurement_from_nav_start_logcat_match_error(*mocked):
+ SAMPLE_APK_METADATA["name"] = "name_for_single_total_time"
+ ARGS["apk_metadata"] = SAMPLE_APK_METADATA
+ ARGS["AndroidStartUp-test-name"] = "cold_view_nav_start"
+ mach_cmd, metadata, env = running_env(
+ tests=[str(EXAMPLE_ANDROID_STARTUP_TEST)], **ARGS
+ )
+ test = android_startup.AndroidStartUp(env, mach_cmd)
+ with pytest.raises(AndroidStartUpMatchingError):
+ test.run(metadata)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_androidlog.py b/python/mozperftest/mozperftest/tests/test_androidlog.py
new file mode 100644
index 0000000000..b7aa56b704
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_androidlog.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python
+import pathlib
+from unittest import mock
+
+import mozunit
+
+from mozperftest.environment import METRICS, SYSTEM, TEST
+from mozperftest.tests.support import EXAMPLE_TEST, get_running_env, temp_file
+from mozperftest.utils import temp_dir
+
+HERE = pathlib.Path(__file__).parent
+LOGCAT = HERE / "data" / "logcat"
+
+
+def fetch(self, url):
+ return str(HERE / "fetched_artifact.zip")
+
+
+class FakeDevice:
+ def __init__(self, **args):
+ self.apps = []
+
+ def uninstall_app(self, apk_name):
+ return True
+
+ def install_app(self, apk, replace=True):
+ if apk not in self.apps:
+ self.apps.append(apk)
+
+ def is_app_installed(self, app_name):
+ return True
+
+ def get_logcat(self):
+ with LOGCAT.open() as f:
+ for line in f:
+ yield line
+
+
+@mock.patch("mozperftest.test.browsertime.runner.install_package")
+@mock.patch(
+ "mozperftest.test.noderunner.NodeRunner.verify_node_install", new=lambda x: True
+)
+@mock.patch("mozbuild.artifact_cache.ArtifactCache.fetch", new=fetch)
+@mock.patch(
+ "mozperftest.test.browsertime.runner.BrowsertimeRunner._setup_node_packages",
+ new=lambda x, y: None,
+)
+@mock.patch("mozperftest.system.android.ADBLoggedDevice", new=FakeDevice)
+def test_android_log(*mocked):
+ with temp_file() as logcat, temp_dir() as output:
+ args = {
+ "flavor": "mobile-browser",
+ "android-install-apk": ["this.apk"],
+ "android": True,
+ "console": True,
+ "android-timeout": 30,
+ "android-capture-adb": "stdout",
+ "android-capture-logcat": logcat,
+ "android-app-name": "org.mozilla.fenix",
+ "androidlog": True,
+ "output": output,
+ "browsertime-no-window-recorder": False,
+ "browsertime-viewport-size": "1234x567",
+ "tests": [EXAMPLE_TEST],
+ }
+
+ mach_cmd, metadata, env = get_running_env(**args)
+
+ with env.layers[SYSTEM] as sys, env.layers[TEST] as andro:
+ metadata = andro(sys(metadata))
+
+ # we want to drop the first result
+ metadata._results = metadata._results[1:]
+ with env.layers[METRICS] as metrics:
+ metadata = metrics(metadata)
+
+ assert pathlib.Path(output, "LogCatstd-output.json").exists()
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_argparser.py b/python/mozperftest/mozperftest/tests/test_argparser.py
new file mode 100644
index 0000000000..35051772b1
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_argparser.py
@@ -0,0 +1,159 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+from datetime import date
+
+import mozunit
+import pytest
+
+from mozperftest.argparser import (
+ Options,
+ PerftestArgumentParser,
+ PerftestToolsArgumentParser,
+)
+
+
+def test_argparser():
+ parser = PerftestArgumentParser()
+ args = ["test_one.js"]
+ res = parser.parse_args(args)
+ assert res.tests == ["test_one.js"]
+
+
+def test_argparser_defaults():
+ parser = PerftestArgumentParser()
+ args = ["test_one.js"]
+ res = parser.parse_args(args)
+ assert res.console_simplify_exclude == ["statistics"]
+
+
+def test_options():
+ assert Options.args["--proxy"]["help"] == "Activates the proxy layer"
+ assert Options.args["--no-browsertime"]["help"] == (
+ "Deactivates the " "browsertime layer"
+ )
+
+
+def test_layer_option():
+ parser = PerftestArgumentParser()
+ assert parser.parse_args(["--notebook-metrics"]) == parser.parse_args(
+ ["--notebook-metrics", "--notebook"]
+ )
+ assert parser.parse_known_args(["--notebook-metrics"]) == parser.parse_known_args(
+ ["--notebook-metrics", "--notebook"]
+ )
+
+
+def test_bad_test_date():
+ parser = PerftestArgumentParser()
+ args = ["test_one.js", "--test-date", "bleh"]
+ with pytest.raises(SystemExit):
+ parser.parse_args(args)
+
+
+def test_test_date_today():
+ parser = PerftestArgumentParser()
+ args = ["test_one.js", "--test-date", "today"]
+ res = parser.parse_args(args)
+ assert res.test_date == date.today().strftime("%Y.%m.%d")
+
+
+def test_perfherder_metrics():
+ parser = PerftestArgumentParser()
+ args = [
+ "test_one.js",
+ "--perfherder-metrics",
+ "name:foo,unit:ms,alertThreshold:2",
+ "name:baz,unit:count,alertThreshold:2,lowerIsBetter:false",
+ ]
+
+ res = parser.parse_args(args)
+ assert res.perfherder_metrics[0]["name"] == "foo"
+ assert res.perfherder_metrics[1]["alertThreshold"] == 2
+
+ args = [
+ "test_one.js",
+ "--perfherder-metrics",
+ "name:foo,unit:ms,alertThreshold:2",
+ "name:baz,UNKNOWN:count,alertThreshold:2,lowerIsBetter:false",
+ ]
+
+ with pytest.raises(SystemExit):
+ parser.parse_args(args)
+
+ args = [
+ "test_one.js",
+ "--perfherder-metrics",
+ "name:foo,unit:ms,alertThreshold:2",
+ "namemalformedbaz,alertThreshold:2,lowerIsBetter:false",
+ ]
+
+ with pytest.raises(SystemExit):
+ parser.parse_args(args)
+
+ # missing the name!
+ args = [
+ "test_one.js",
+ "--perfherder-metrics",
+ "name:foo,unit:ms,alertThreshold:2",
+ "alertThreshold:2,lowerIsBetter:false",
+ ]
+
+ with pytest.raises(SystemExit):
+ parser.parse_args(args)
+
+ # still supporting just plain names
+ args = [
+ "test_one.js",
+ "--perfherder-metrics",
+ "name:foo,unit:euros,alertThreshold:2",
+ "baz",
+ ]
+
+ res = parser.parse_args(args)
+ assert res.perfherder_metrics[1]["name"] == "baz"
+ assert res.perfherder_metrics[0]["name"] == "foo"
+ assert res.perfherder_metrics[0]["unit"] == "euros"
+
+
+def test_tools_argparser_bad_tool():
+ with pytest.raises(SystemExit):
+ PerftestToolsArgumentParser()
+
+
+def test_tools_bad_argparser():
+ PerftestToolsArgumentParser.tool = "side-by-side"
+ parser = PerftestToolsArgumentParser()
+ args = [
+ "-t",
+ "browsertime-first-install-firefox-welcome",
+ "--base-platform",
+ "test-linux1804-64-shippable-qr",
+ ]
+ with pytest.raises(SystemExit):
+ parser.parse_args(args)
+
+
+def test_tools_argparser():
+ PerftestToolsArgumentParser.tool = "side-by-side"
+ parser = PerftestToolsArgumentParser()
+ args = [
+ "-t",
+ "browsertime-first-install-firefox-welcome",
+ "--base-platform",
+ "test-linux1804-64-shippable-qr",
+ "--base-revision",
+ "438092d03ac4b9c36b52ba455da446afc7e14213",
+ "--new-revision",
+ "29943068938aa9e94955dbe13c2e4c254553e4ce",
+ ]
+ res = parser.parse_args(args)
+ assert res.test_name == "browsertime-first-install-firefox-welcome"
+ assert res.platform == "test-linux1804-64-shippable-qr"
+ assert res.base_revision == "438092d03ac4b9c36b52ba455da446afc7e14213"
+ assert res.new_revision == "29943068938aa9e94955dbe13c2e4c254553e4ce"
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_browsertime.py b/python/mozperftest/mozperftest/tests/test_browsertime.py
new file mode 100644
index 0000000000..e0cd298da7
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_browsertime.py
@@ -0,0 +1,364 @@
+#!/usr/bin/env python
+import os
+import pathlib
+import random
+import shutil
+import string
+from unittest import mock
+
+import mozunit
+import pytest
+
+from mozperftest.environment import SYSTEM, TEST
+from mozperftest.test.browsertime import add_options
+from mozperftest.test.browsertime.runner import (
+ NodeException,
+ extract_browser_name,
+ matches,
+)
+from mozperftest.tests.support import EXAMPLE_TEST, get_running_env
+from mozperftest.utils import silence, temporary_env
+
+HERE = os.path.dirname(__file__)
+
+# Combine these dictionaries as required for mocking the
+# Browsertime installation related methods
+BTIME_PKG_DEP = {
+ "devDependencies": {"browsertime": "89771a1d6be54114db190427dbc281582cba3d47"}
+}
+BTIME_PKG_NO_INSTALL = {
+ "packages": {
+ "node_modules/browsertime": {
+ "resolved": (
+ "browsertime@https://github.com/sitespeedio/browsertime"
+ "/tarball/89771a1d6be54114db190427dbc281582cba3d47"
+ )
+ }
+ }
+}
+BTIME_PKG_REINSTALL = {
+ "packages": {
+ "node_modules/browsertime": {
+ "resolved": (
+ "browsertime@https://github.com/sitespeedio/browsertime"
+ "/tarball/98747854be54114db190427dbc281582cba3d47"
+ )
+ }
+ }
+}
+
+
+def fetch(self, url):
+ return os.path.join(HERE, "fetched_artifact.zip")
+
+
+def mocked_jsonload(val):
+ return val.__iter__.return_value
+
+
+def build_mock_open(files_data):
+ mocked_opens = []
+
+ for data in files_data:
+ mocked_file = mock.MagicMock()
+ mocked_file.__enter__.return_value.__iter__.return_value = data
+ mocked_opens.append(mocked_file)
+
+ m = mock.mock_open()
+ m.side_effect = mocked_opens
+ return m
+
+
+@mock.patch("mozperftest.test.browsertime.runner.install_package")
+@mock.patch(
+ "mozperftest.test.noderunner.NodeRunner.verify_node_install", new=lambda x: True
+)
+@mock.patch("mozbuild.artifact_cache.ArtifactCache.fetch", new=fetch)
+@mock.patch(
+ "mozperftest.test.browsertime.runner.BrowsertimeRunner._setup_node_packages",
+ new=lambda x, y: None,
+)
+def test_browser(*mocked):
+ mach_cmd, metadata, env = get_running_env(
+ android=True,
+ android_app_name="something",
+ browsertime_geckodriver="GECKODRIVER",
+ browsertime_iterations=1,
+ browsertime_extra_options="one=1,two=2",
+ tests=[EXAMPLE_TEST],
+ browsertime_no_window_recorder=False,
+ browsertime_viewport_size="1234x567",
+ )
+
+ sys = env.layers[SYSTEM]
+ browser = env.layers[TEST]
+ try:
+ with sys as s, browser as b, silence():
+ b(s(metadata))
+ finally:
+ shutil.rmtree(mach_cmd._mach_context.state_dir)
+ assert mach_cmd.run_process.call_count == 1
+
+ # Make sure all arguments are of type str
+ for option in mach_cmd.run_process.call_args[0][0]:
+ assert isinstance(option, str)
+
+ cmd = " ".join(mach_cmd.run_process.call_args[0][0])
+ assert EXAMPLE_TEST in cmd
+ assert "--firefox.geckodriverPath GECKODRIVER" in cmd
+ assert "--one 1" in cmd
+ assert "--two 2" in cmd
+
+ results = metadata.get_results()
+ assert len(results) == 1
+ assert set(list(results[0].keys())) - set(["name", "results"]) == set()
+ assert results[0]["name"] == "Example"
+
+
+@mock.patch(
+ "mozperftest.test.browsertime.runner.BrowsertimeRunner.browsertime_js",
+ new=pathlib.Path("doesn't-exist"),
+)
+@mock.patch(
+ "mozperftest.test.browsertime.runner.BrowsertimeRunner.visualmetrics_py",
+ new=pathlib.Path("doesn't-exist-either"),
+)
+def test_browsertime_not_existing():
+ _, _, env = get_running_env(
+ android=True,
+ android_app_name="something",
+ browsertime_geckodriver="GECKODRIVER",
+ browsertime_iterations=1,
+ browsertime_extra_options="one=1,two=2",
+ tests=[EXAMPLE_TEST],
+ )
+ browser = env.layers[TEST]
+ btime_layer = browser.layers[0]
+ assert btime_layer._should_install()
+
+
+@mock.patch(
+ "mozperftest.test.browsertime.runner.pathlib.Path.exists", new=lambda x: True
+)
+def test_browsertime_no_reinstall():
+ _, _, env = get_running_env(
+ android=True,
+ android_app_name="something",
+ browsertime_geckodriver="GECKODRIVER",
+ browsertime_iterations=1,
+ browsertime_extra_options="one=1,two=2",
+ tests=[EXAMPLE_TEST],
+ )
+
+ with mock.patch(
+ "mozperftest.test.browsertime.runner.pathlib.Path.open",
+ build_mock_open([BTIME_PKG_DEP, BTIME_PKG_NO_INSTALL]),
+ ), mock.patch("mozperftest.test.browsertime.runner.json.load", new=mocked_jsonload):
+ browser = env.layers[TEST]
+ btime_layer = browser.layers[0]
+ assert not btime_layer._should_install()
+
+
+@mock.patch(
+ "mozperftest.test.browsertime.runner.pathlib.Path.exists", new=lambda x: True
+)
+def test_browsertime_should_reinstall():
+ _, _, env = get_running_env(
+ android=True,
+ android_app_name="something",
+ browsertime_geckodriver="GECKODRIVER",
+ browsertime_iterations=1,
+ browsertime_extra_options="one=1,two=2",
+ tests=[EXAMPLE_TEST],
+ )
+
+ with mock.patch(
+ "mozperftest.test.browsertime.runner.pathlib.Path.open",
+ build_mock_open([BTIME_PKG_DEP, BTIME_PKG_REINSTALL]),
+ ), mock.patch("mozperftest.test.browsertime.runner.json.load", new=mocked_jsonload):
+ browser = env.layers[TEST]
+ btime_layer = browser.layers[0]
+ assert btime_layer._should_install()
+
+
+@mock.patch("mozperftest.test.browsertime.runner.install_package")
+@mock.patch(
+ "mozperftest.test.noderunner.NodeRunner.verify_node_install", new=lambda x: True
+)
+@mock.patch("mozbuild.artifact_cache.ArtifactCache.fetch", new=fetch)
+@mock.patch(
+ "mozperftest.test.browsertime.runner.BrowsertimeRunner._setup_node_packages",
+ new=lambda x, y: None,
+)
+def test_browser_failed(*mocked):
+ mach_cmd, metadata, env = get_running_env(
+ android=True,
+ android_app_name="something",
+ browsertime_geckodriver="GECKODRIVER",
+ browsertime_iterations=1,
+ browsertime_extra_options="one=1,two=2",
+ tests=[EXAMPLE_TEST],
+ browsertime_no_window_recorder=False,
+ browsertime_viewport_size="1234x567",
+ )
+ # set the return value to 1 to simulate a node failure
+ mach_cmd.run_process.return_value = 1
+ browser = env.layers[TEST]
+ sys = env.layers[SYSTEM]
+
+ with sys as s, browser as b, silence(), pytest.raises(NodeException):
+ b(s(metadata))
+
+
+@mock.patch("mozperftest.test.browsertime.runner.install_package")
+@mock.patch(
+ "mozperftest.test.noderunner.NodeRunner.verify_node_install", new=lambda x: True
+)
+@mock.patch("mozbuild.artifact_cache.ArtifactCache.fetch", new=fetch)
+@mock.patch(
+ "mozperftest.test.browsertime.runner.BrowsertimeRunner._setup_node_packages",
+ new=lambda x, y: None,
+)
+def test_browser_desktop(*mocked):
+ mach_cmd, metadata, env = get_running_env(
+ browsertime_iterations=1,
+ browsertime_extra_options="one=1,two=2",
+ tests=[EXAMPLE_TEST],
+ browsertime_no_window_recorder=False,
+ browsertime_viewport_size="1234x567",
+ )
+ browser = env.layers[TEST]
+ sys = env.layers[SYSTEM]
+
+ try:
+ with sys as s, browser as b, silence():
+ # just checking that the setup_helper property gets
+ # correctly initialized
+ browsertime = browser.layers[-1]
+ assert browsertime.setup_helper is not None
+ helper = browsertime.setup_helper
+ assert browsertime.setup_helper is helper
+
+ b(s(metadata))
+ finally:
+ shutil.rmtree(mach_cmd._mach_context.state_dir)
+
+ assert mach_cmd.run_process.call_count == 1
+ cmd = " ".join(mach_cmd.run_process.call_args[0][0])
+ # check that --firefox.binaryPath is set automatically
+ assert "--firefox.binaryPath" in cmd
+
+
+@mock.patch("mozperftest.test.browsertime.runner.install_package")
+@mock.patch(
+ "mozperftest.test.noderunner.NodeRunner.verify_node_install", new=lambda x: True
+)
+@mock.patch("mozbuild.artifact_cache.ArtifactCache.fetch", new=fetch)
+@mock.patch(
+ "mozperftest.test.browsertime.runner.BrowsertimeRunner._setup_node_packages",
+ new=lambda x, y: None,
+)
+def test_existing_results(*mocked):
+ mach_cmd, metadata, env = get_running_env(
+ browsertime_existing_results="/some/path",
+ tests=[EXAMPLE_TEST],
+ )
+ browser = env.layers[TEST]
+ sys = env.layers[SYSTEM]
+
+ try:
+ with sys as s, browser as b, silence():
+ # just checking that the setup_helper property gets
+ # correctly initialized
+ browsertime = browser.layers[-1]
+ assert browsertime.setup_helper is not None
+ helper = browsertime.setup_helper
+ assert browsertime.setup_helper is helper
+
+ m = b(s(metadata))
+ results = m.get_results()
+ assert len(results) == 1
+ assert results[0]["results"] == "/some/path"
+ assert results[0]["name"] == "Example"
+ finally:
+ shutil.rmtree(mach_cmd._mach_context.state_dir)
+
+ assert mach_cmd.run_process.call_count == 0
+
+
+def test_add_options():
+ mach_cmd, metadata, env = get_running_env()
+ options = [("one", 1), ("two", 2)]
+ add_options(env, options)
+ extra = env.get_arg("browsertime-extra-options")
+ assert "one=1" in extra
+ assert "two=2" in extra
+
+
+@mock.patch("mozperftest.test.browsertime.runner.install_package")
+@mock.patch(
+ "mozperftest.test.noderunner.NodeRunner.verify_node_install", new=lambda x: True
+)
+@mock.patch("mozbuild.artifact_cache.ArtifactCache.fetch", new=fetch)
+@mock.patch("mozperftest.test.browsertime.runner.BrowsertimeRunner.setup_helper")
+def test_install_url(*mocked):
+ url = "https://here/tarball/" + "".join(
+ [random.choice(string.hexdigits[:-6]) for c in range(40)]
+ )
+ mach, metadata, env = get_running_env(
+ browsertime_install_url=url,
+ tests=[EXAMPLE_TEST],
+ browsertime_no_window_recorder=False,
+ browsertime_viewport_size="1234x567",
+ )
+ browser = env.layers[TEST]
+ sys = env.layers[SYSTEM]
+
+ try:
+ with sys as s, temporary_env(MOZ_AUTOMATION="1"), browser as b, silence():
+ b(s(metadata))
+ finally:
+ shutil.rmtree(mach._mach_context.state_dir)
+
+ assert mach.run_process.call_count == 1
+
+
+@mock.patch("mozperftest.test.browsertime.runner.install_package")
+@mock.patch(
+ "mozperftest.test.noderunner.NodeRunner.verify_node_install", new=lambda x: True
+)
+@mock.patch("mozbuild.artifact_cache.ArtifactCache.fetch", new=fetch)
+@mock.patch(
+ "mozperftest.test.browsertime.runner.BrowsertimeRunner._setup_node_packages",
+ new=lambda x, y: None,
+)
+def test_install_url_bad(*mocked):
+ mach, metadata, env = get_running_env(
+ browsertime_install_url="meh",
+ tests=[EXAMPLE_TEST],
+ )
+ browser = env.layers[TEST]
+ sys = env.layers[SYSTEM]
+
+ with pytest.raises(ValueError):
+ try:
+ with sys as s, browser as b, silence():
+ b(s(metadata))
+ finally:
+ shutil.rmtree(mach._mach_context.state_dir)
+
+
+def test_matches():
+ args = ["arg1=1", "--arg2=value2"]
+
+ assert matches(args, "arg1")
+ assert not matches(args, "arg3")
+
+
+def test_extract_browser_name():
+ args = ["arg1=1", "--arg2=value2", "--browser=me", "--zome"]
+ assert extract_browser_name(args) == "me"
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_change_detector.py b/python/mozperftest/mozperftest/tests/test_change_detector.py
new file mode 100644
index 0000000000..ee9fa5fa0f
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_change_detector.py
@@ -0,0 +1,113 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import pathlib
+from unittest import mock
+
+import mozunit
+import pytest
+
+from mozperftest.tests.support import temp_file
+from mozperftest.tools import PerformanceChangeDetected, run_change_detector
+
+
+def test_change_detector_basic(kwargs=None, return_value=({}, {})):
+ mocked_detector = mock.MagicMock()
+ mocked_detector_module = mock.MagicMock()
+ mocked_detector_module.ChangeDetector = mocked_detector
+
+ with mock.patch.dict(
+ "sys.modules",
+ {
+ "mozperftest_tools.regression_detector": mocked_detector_module,
+ },
+ ):
+ mocked_detector.return_value.detect_changes.return_value = return_value
+
+ with temp_file() as f:
+ parent_dir = pathlib.Path(f).parent
+
+ if kwargs is None:
+ kwargs = {
+ "test_name": "browsertime-test",
+ "new_test_name": None,
+ "platform": "test-platform/opt",
+ "new_platform": None,
+ "base_branch": "try",
+ "new_branch": "try",
+ "base_revision": "99",
+ "new_revision": "99",
+ }
+
+ run_change_detector(parent_dir, kwargs)
+
+ mocked_detector.return_value.detect_changes.assert_called()
+
+ return mocked_detector_module
+
+
+def test_change_detector_with_task_name():
+ test_change_detector_basic(
+ {
+ "task_names": ["test-platform/opt-browsertime-test"],
+ "new_test_name": None,
+ "platform": None,
+ "new_platform": None,
+ "base_branch": "try",
+ "new_branch": "try",
+ "base_revision": "99",
+ "new_revision": "99",
+ }
+ )
+
+
+def test_change_detector_option_failure():
+ with pytest.raises(Exception):
+ test_change_detector_basic(
+ {
+ "test_name": None,
+ "new_test_name": None,
+ "platform": "test-platform/opt",
+ "new_platform": None,
+ "base_branch": "try",
+ "new_branch": "try",
+ "base_revision": "99",
+ "new_revision": "99",
+ }
+ )
+
+ with pytest.raises(Exception):
+ test_change_detector_basic(
+ {
+ "test_name": "browsertime-test",
+ "new_test_name": None,
+ "platform": None,
+ "new_platform": None,
+ "base_branch": "try",
+ "new_branch": "try",
+ "base_revision": "99",
+ "new_revision": "99",
+ }
+ )
+
+
+def test_change_detector_with_detection():
+ with pytest.raises(PerformanceChangeDetected):
+ test_change_detector_basic(
+ {
+ "task_names": ["test-platform/opt-browsertime-test"],
+ "new_test_name": None,
+ "platform": None,
+ "new_platform": None,
+ "base_branch": "try",
+ "new_branch": "try",
+ "base_revision": "99",
+ "new_revision": "99",
+ },
+ (["detection"], {"warm": {"metric": {"detection": [99]}}, "cold": {}}),
+ )
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_consoleoutput.py b/python/mozperftest/mozperftest/tests/test_consoleoutput.py
new file mode 100644
index 0000000000..e64cb82430
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_consoleoutput.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+from unittest import mock
+
+import mozunit
+
+from mozperftest.environment import METRICS
+from mozperftest.tests.support import BT_DATA, EXAMPLE_TEST, get_running_env
+from mozperftest.utils import silence, temp_dir
+
+
+@mock.patch("mozperftest.metrics.common.validate_intermediate_results")
+def test_console_output(*mocked):
+ with temp_dir() as tempdir:
+ options = {
+ "console-prefix": "",
+ "console": True,
+ "output": tempdir,
+ }
+ mach_cmd, metadata, env = get_running_env(**options)
+ runs = []
+
+ def _run_process(*args, **kw):
+ runs.append((args, kw))
+
+ mach_cmd.run_process = _run_process
+ metrics = env.layers[METRICS]
+ env.set_arg("tests", [EXAMPLE_TEST])
+ res = {"name": "name", "results": [str(BT_DATA)]}
+ metadata.add_result(res)
+
+ with metrics as console, silence():
+ console(metadata)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_constant.py b/python/mozperftest/mozperftest/tests/test_constant.py
new file mode 100644
index 0000000000..99821f9680
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_constant.py
@@ -0,0 +1,13 @@
+import mozunit
+
+from mozperftest.metrics.notebook.constant import Constant
+from mozperftest.metrics.notebook.transforms.single_json import SingleJsonRetriever
+
+
+def test_predefined_transformers():
+ tfms = Constant().predefined_transformers
+ assert SingleJsonRetriever.__name__ in tfms
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_environment.py b/python/mozperftest/mozperftest/tests/test_environment.py
new file mode 100644
index 0000000000..556c7eec85
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_environment.py
@@ -0,0 +1,158 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+from pathlib import Path
+from unittest import mock
+
+import mozunit
+import pytest
+
+from mozperftest.environment import MachEnvironment
+from mozperftest.hooks import Hooks
+from mozperftest.layers import Layer
+from mozperftest.tests.support import get_running_env, requests_content
+
+HERE = Path(__file__).parent.resolve()
+
+
+def _get_env(hooks_path):
+ return MachEnvironment(mock.MagicMock(), hooks=Hooks(mock.MagicMock(), hooks_path))
+
+
+def test_run_hooks():
+ env = _get_env(Path(HERE, "data", "hook.py"))
+ assert env.hooks.run("doit", env) == "OK"
+
+
+def test_bad_hooks():
+ with pytest.raises(IOError):
+ _get_env("Idontexists")
+
+
+doit = [b"def doit(*args, **kw):\n", b" return 'OK'\n"]
+
+
+@mock.patch("mozperftest.utils.requests.get", requests_content(doit))
+def test_run_hooks_url():
+ env = _get_env("http://somewhere/hooks.py")
+ assert env.hooks.run("doit", env) == "OK"
+
+
+def test_layers():
+ env = MachEnvironment(mock.MagicMock())
+ assert env.get_layer("browsertime").name == "browsertime"
+
+
+def test_context():
+ mach, metadata, env = get_running_env()
+ env.layers = [mock.MagicMock(), mock.MagicMock(), mock.MagicMock()]
+ with env:
+ env.run(metadata)
+
+
+class FailureException(Exception):
+ pass
+
+
+class Failure(Layer):
+ user_exception = True
+
+ def run(self, metadata):
+ raise FailureException()
+
+
+def create_mock():
+ m = mock.Mock()
+
+ # need to manually set those
+ def enter(self):
+ self.setup()
+ return self
+
+ def exit(self, type, value, traceback):
+ self.teardown()
+
+ m.__enter__ = enter
+ m.__exit__ = exit
+ m.__call__ = mock.Mock()
+ return m
+
+
+def test_exception_return():
+ # the last layer is not called, the error is swallowed
+ hooks = str(Path(HERE, "data", "hook.py"))
+ mach, metadata, env = get_running_env(hooks=hooks)
+ last_layer = create_mock()
+ env.layers = [create_mock(), Failure(env, mach), last_layer]
+ with env:
+ env.run(metadata)
+ last_layer.assert_not_called()
+
+
+def test_exception_resume():
+ # the last layer is called, the error is swallowed
+ hooks = str(Path(HERE, "data", "hook_resume.py"))
+ mach, metadata, env = get_running_env(hooks=hooks)
+ last_layer = create_mock()
+ env.layers = [create_mock(), Failure(env, mach), last_layer]
+ with env:
+ env.run(metadata)
+ last_layer.assert_called()
+
+
+def test_exception_no_user_exception():
+ # the last layer is called, the error is raised
+ # because user_exception = False
+ hooks = str(Path(HERE, "data", "hook_resume.py"))
+ mach, metadata, env = get_running_env(hooks=hooks)
+ last_layer = create_mock()
+ f = Failure(env, mach)
+ f.user_exception = False
+ env.layers = [create_mock(), f, last_layer]
+ with env, pytest.raises(FailureException):
+ env.run(metadata)
+ last_layer._call__.assert_not_called()
+
+
+def test_exception_raised():
+ # the error is raised
+ hooks = str(Path(HERE, "data", "hook_raises.py"))
+ mach, metadata, env = get_running_env(hooks=hooks)
+ last_layer = create_mock()
+ env.layers = [create_mock(), Failure(env, mach), last_layer]
+ with env, pytest.raises(FailureException):
+ env.run(metadata)
+ last_layer.__call__.assert_not_called()
+
+
+def test_metrics_last():
+ mach, metadata, env = get_running_env()
+
+ system = create_mock()
+ browser = create_mock()
+
+ # Check that the metrics layer is entered after
+ # other have finished and that the other layers
+ # were only called once
+ class M:
+ def __enter__(self):
+ system.setup.assert_called_once()
+ browser.setup.assert_called_once()
+ system.teardown.assert_called_once()
+ browser.teardown.assert_called_once()
+ return self
+
+ def __exit__(self, *args, **kw):
+ return
+
+ def __call__(self, metadata):
+ return
+
+ env.layers = [system, browser, M()]
+ with env:
+ env.run(metadata)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_functionaltestrunner.py b/python/mozperftest/mozperftest/tests/test_functionaltestrunner.py
new file mode 100644
index 0000000000..20f8362d60
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_functionaltestrunner.py
@@ -0,0 +1,57 @@
+import sys
+from unittest import mock
+
+from mozperftest.test.functionaltestrunner import (
+ FunctionalTestProcessor,
+ FunctionalTestRunner,
+)
+
+
+def test_functionaltestrunner_pass():
+ with mock.patch("moztest.resolve.TestResolver") as test_resolver_mock, mock.patch(
+ "mozperftest.test.functionaltestrunner.load_class_from_path"
+ ) as load_class_path_mock, mock.patch(
+ "mozperftest.test.functionaltestrunner.FunctionalTestProcessor"
+ ), mock.patch(
+ "mozperftest.test.functionaltestrunner.mozlog"
+ ):
+ test_mock = mock.MagicMock()
+ test_mock.test.return_value = 0
+ load_class_path_mock.return_value = test_mock
+
+ mach_cmd = mock.MagicMock()
+ test_resolver_mock.resolve_metadata.return_value = (1, 1)
+ mach_cmd._spawn.return_value = test_resolver_mock
+
+ status, _ = FunctionalTestRunner.test(mach_cmd, [], [])
+
+ assert status == 0
+
+
+def test_functionaltestrunner_missing_test_failure():
+ with mock.patch("moztest.resolve.TestResolver") as test_resolver_mock:
+ mach_cmd = mock.MagicMock()
+ test_resolver_mock.resolve_metadata.return_value = (0, 0)
+ mach_cmd._spawn.return_value = test_resolver_mock
+ status, _ = FunctionalTestRunner.test(mach_cmd, [], [])
+ assert status == 1
+
+
+def test_functionaltestrunner_perfmetrics_parsing():
+ formatter_mock = mock.MagicMock()
+ formatter_mock.return_value = "perfMetrics | fake-data"
+
+ log_processor = FunctionalTestProcessor(stream=sys.stdout, formatter=formatter_mock)
+ log_processor("")
+
+ assert len(log_processor.match) == 1
+
+
+def test_functionaltestrunner_perfmetrics_missing():
+ formatter_mock = mock.MagicMock()
+ formatter_mock.return_value = "perfmetrics | fake-data"
+
+ log_processor = FunctionalTestProcessor(stream=sys.stdout, formatter=formatter_mock)
+ log_processor("")
+
+ assert len(log_processor.match) == 0
diff --git a/python/mozperftest/mozperftest/tests/test_fzf.py b/python/mozperftest/mozperftest/tests/test_fzf.py
new file mode 100644
index 0000000000..bcdde68584
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_fzf.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+import json
+from pathlib import Path
+from unittest import mock
+
+import mozunit
+
+from mozperftest.fzf.fzf import select
+from mozperftest.fzf.preview import main
+from mozperftest.tests.support import EXAMPLE_TEST, temp_file
+from mozperftest.utils import silence
+
+
+class Fzf:
+ def __init__(self, cmd, *args, **kw):
+ self.cmd = cmd
+
+ def communicate(self, *args):
+ return "query\n" + args[0], "stderr"
+
+
+def fzf_executable(*args, path: str = None):
+ return None if len(args) == 2 else "fzf"
+
+
+@mock.patch("subprocess.Popen", new=Fzf)
+@mock.patch("mozperftest.fzf.fzf.which", new=fzf_executable)
+def test_select(*mocked):
+ test_objects = [{"path": EXAMPLE_TEST}]
+ selection = select(test_objects)
+ assert len(selection) == 1
+
+
+@mock.patch("subprocess.Popen", new=Fzf)
+@mock.patch("mozperftest.fzf.fzf.which", new=fzf_executable)
+def test_find_fzf_executable(*mocked):
+ test_objects = [{"path": EXAMPLE_TEST}]
+ selection = select(test_objects)
+ assert len(selection) == 1
+
+
+def test_preview():
+ content = Path(EXAMPLE_TEST)
+ line = f"[bt][sometag] {content.name} in {content.parent}"
+ test_objects = [{"path": str(content)}]
+ cache = Path(Path.home(), ".mozbuild", ".perftestfuzzy")
+ with cache.open("w") as f:
+ f.write(json.dumps(test_objects))
+
+ with temp_file(content=str(line)) as tasklist, silence() as out:
+ main(args=["-t", tasklist])
+
+ stdout, __ = out
+ stdout.seek(0)
+ assert ":owner: Performance Testing Team" in stdout.read()
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_influx.py b/python/mozperftest/mozperftest/tests/test_influx.py
new file mode 100644
index 0000000000..5e5db67eb8
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_influx.py
@@ -0,0 +1,121 @@
+#!/usr/bin/env python
+import json
+import re
+import sys
+
+import mozunit
+import pytest
+import responses
+
+from mozperftest.metrics.perfboard.influx import Influx
+from mozperftest.tests.support import (
+ BT_DATA,
+ EXAMPLE_TEST,
+ get_running_env,
+ running_on_try,
+)
+from mozperftest.utils import ON_TRY, temp_dir
+
+
+def mocks():
+ # mocking the Influx service
+ responses.add(
+ responses.GET,
+ "http://influxdb/ping",
+ body=json.dumps({"version": "1"}),
+ headers={"x-influxdb-version": "1"},
+ status=204,
+ )
+
+ responses.add(
+ responses.POST,
+ "http://influxdb/write",
+ body=json.dumps({"version": "1"}),
+ headers={"x-influxdb-version": "1"},
+ status=204,
+ )
+
+ responses.add(
+ responses.GET,
+ "http://grafana/api/search?tag=component",
+ body=json.dumps([]),
+ status=200,
+ )
+
+ responses.add(
+ responses.POST,
+ "http://grafana/api/dashboards/db",
+ body=json.dumps({"uid": "id"}),
+ status=200,
+ )
+
+ responses.add(
+ responses.GET,
+ "http://grafana/api/dashboards/uid/id",
+ body=json.dumps({"dashboard": {"panels": []}}),
+ status=200,
+ )
+
+ responses.add(
+ responses.GET,
+ re.compile(
+ "https://firefox-ci-tc.services.mozilla.com/secrets/*|"
+ "http://taskcluster/secrets/*"
+ ),
+ body=json.dumps(
+ {
+ "secret": {
+ "influx_host": "influxdb",
+ "influx_port": 0,
+ "influx_user": "admin",
+ "influx_password": "pass",
+ "influx_db": "db",
+ "grafana_key": "xxx",
+ "grafana_host": "grafana",
+ "grafana_port": 0,
+ }
+ }
+ ),
+ status=200,
+ )
+
+
+@responses.activate
+@pytest.mark.parametrize("on_try", [True, False])
+def test_influx_service(on_try):
+ if ON_TRY and sys.platform == "darwin":
+ # macos slave in the CI are restricted
+ return
+
+ mocks()
+ with running_on_try(on_try), temp_dir() as output:
+ args = {
+ "verbose": True,
+ "output": output,
+ "perfboard-influx-password": "xxx",
+ "perfboard-grafana-key": "xxx",
+ "perfboard-grafana-host": "grafana",
+ "perfboard-influx-port": 0,
+ "perfboard-influx-host": "influxdb",
+ "tests": [EXAMPLE_TEST],
+ }
+
+ mach_cmd, metadata, env = get_running_env(**args)
+ metadata.add_result({"results": str(BT_DATA), "name": "browsertime"})
+ layer = Influx(env, mach_cmd)
+ layer.setup()
+ try:
+ metadata = layer.run(metadata)
+ finally:
+ layer.teardown()
+
+ index = on_try and 2 or 1
+ sent_data = responses.calls[index].request.body.split(b"\n")
+ fields = [line.split(b",")[0].strip() for line in sent_data]
+ assert b"rumspeedindex" in fields
+
+ responses.reset()
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_ir_schema.py b/python/mozperftest/mozperftest/tests/test_ir_schema.py
new file mode 100644
index 0000000000..41f3ad7804
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_ir_schema.py
@@ -0,0 +1,103 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import mozunit
+import pytest
+from jsonschema.exceptions import ValidationError
+
+from mozperftest.metrics.utils import validate_intermediate_results
+
+
+def test_results_with_directory():
+ test_result = {"results": "path-to-results", "name": "the-name"}
+ validate_intermediate_results(test_result)
+
+
+def test_results_with_measurements():
+ test_result = {
+ "results": [
+ {"name": "metric-1", "values": [0, 1, 1, 0]},
+ {"name": "metric-2", "values": [0, 1, 1, 0]},
+ ],
+ "name": "the-name",
+ }
+ validate_intermediate_results(test_result)
+
+
+def test_results_with_suite_perfherder_options():
+ test_result = {
+ "results": [
+ {"name": "metric-1", "values": [0, 1, 1, 0]},
+ {"name": "metric-2", "values": [0, 1, 1, 0]},
+ ],
+ "name": "the-name",
+ "extraOptions": ["an-extra-option"],
+ "value": 9000,
+ }
+ validate_intermediate_results(test_result)
+
+
+def test_results_with_subtest_perfherder_options():
+ test_result = {
+ "results": [
+ {"name": "metric-1", "shouldAlert": True, "values": [0, 1, 1, 0]},
+ {"name": "metric-2", "alertThreshold": 1.0, "values": [0, 1, 1, 0]},
+ ],
+ "name": "the-name",
+ "extraOptions": ["an-extra-option"],
+ "value": 9000,
+ }
+ validate_intermediate_results(test_result)
+
+
+def test_results_with_bad_suite_property():
+ test_result = {
+ "results": "path-to-results",
+ "name": "the-name",
+ "I'll cause a failure,": "an expected failure",
+ }
+ with pytest.raises(ValidationError):
+ validate_intermediate_results(test_result)
+
+
+def test_results_with_bad_subtest_property():
+ test_result = {
+ "results": [
+ # Error is in "shouldalert", it should be "shouldAlert"
+ {"name": "metric-1", "shouldalert": True, "values": [0, 1, 1, 0]},
+ {"name": "metric-2", "alertThreshold": 1.0, "values": [0, 1, 1, 0]},
+ ],
+ "name": "the-name",
+ "extraOptions": ["an-extra-option"],
+ "value": 9000,
+ }
+ with pytest.raises(ValidationError):
+ validate_intermediate_results(test_result)
+
+
+def test_results_with_missing_suite_property():
+ test_result = {
+ # Missing "results"
+ "name": "the-name"
+ }
+ with pytest.raises(ValidationError):
+ validate_intermediate_results(test_result)
+
+
+def test_results_with_missing_subtest_property():
+ test_result = {
+ "results": [
+ # Missing "values"
+ {"name": "metric-2", "alertThreshold": 1.0}
+ ],
+ "name": "the-name",
+ "extraOptions": ["an-extra-option"],
+ "value": 9000,
+ }
+ with pytest.raises(ValidationError):
+ validate_intermediate_results(test_result)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_layers.py b/python/mozperftest/mozperftest/tests/test_layers.py
new file mode 100644
index 0000000000..c29b9ef2c0
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_layers.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+from unittest.mock import MagicMock
+
+import mozunit
+import pytest
+
+from mozperftest.environment import MachEnvironment
+from mozperftest.layers import Layer, Layers
+
+
+class _TestLayer(Layer):
+ name = "test"
+ activated = True
+ called = 0
+ arguments = {"--arg1": {"type": str, "default": "xxx", "help": "arg1"}}
+
+ def setup(self):
+ self.called += 1
+
+ def teardown(self):
+ self.called += 1
+
+
+class _TestLayer2(_TestLayer):
+ name = "test2"
+ activated = True
+ arguments = {"arg2": {"type": str, "default": "xxx", "help": "arg2"}}
+
+
+class _TestLayer3(_TestLayer):
+ name = "test3"
+ activated = True
+
+
+def test_layer():
+ mach = MagicMock()
+ env = MachEnvironment(mach, test=True, test_arg1="ok")
+
+ with _TestLayer(env, mach) as layer:
+ layer.info("info")
+ layer.warning("warning")
+ layer.debug("debug")
+ assert layer.get_arg("test")
+ assert layer.get_arg("arg1") == "ok"
+ assert layer.get_arg("test-arg1") == "ok"
+ layer.set_arg("arg1", "two")
+ assert layer.get_arg("test-arg1") == "two"
+ layer.set_arg("test-arg1", 1)
+ assert layer.get_arg("test-arg1") == 1
+ with pytest.raises(KeyError):
+ layer.set_arg("another", 1)
+
+ layer(object())
+
+ assert layer.called == 2
+
+
+def test_layers():
+ mach = MagicMock()
+ factories = [_TestLayer, _TestLayer2, _TestLayer3]
+ env = MachEnvironment(
+ mach, no_test3=True, test_arg1="ok", test2=True, test2_arg2="2"
+ )
+
+ with Layers(env, mach, factories) as layers:
+ # layer3 was deactivated with test3=False
+ assert len(layers.layers) == 2
+ layers.info("info")
+ layers.debug("debug")
+ layers.warning("warning")
+ assert layers.get_arg("--test2")
+ assert layers.get_arg("test-arg1") == "ok"
+ layers.set_arg("test-arg1", "two")
+ assert layers.get_arg("test-arg1") == "two"
+ layers.set_arg("--test-arg1", 1)
+ assert layers.get_arg("test-arg1") == 1
+ assert layers.get_layer("test2").name == "test2"
+ assert layers.get_layer("test3") is None
+ assert layers.name == "test + test2"
+ with pytest.raises(KeyError):
+ layers.set_arg("another", 1)
+
+ for layer in layers:
+ assert layer.called == 2
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_logcat_transformer.py b/python/mozperftest/mozperftest/tests/test_logcat_transformer.py
new file mode 100644
index 0000000000..8f94caedfc
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_logcat_transformer.py
@@ -0,0 +1,125 @@
+#!/usr/bin/env python
+import mozunit
+import pytest
+
+from mozperftest.metrics.exceptions import (
+ NotebookTransformError,
+ NotebookTransformOptionsError,
+)
+from mozperftest.metrics.notebook.transforms.logcattime import LogCatTimeTransformer
+from mozperftest.tests.support import HERE
+
+
+@pytest.fixture(scope="session", autouse=True)
+def tfm():
+ yield LogCatTimeTransformer()
+
+
+@pytest.fixture(scope="session", autouse=True)
+def logcat_data(tfm):
+ data = tfm.open_data(str(HERE / "data" / "home_activity.txt"))
+ assert data
+ yield data
+
+
+def test_logcat_transform_two_regex(tfm, logcat_data):
+ restart = r".*Activity.*Manager.*START.*org\.mozilla\.fennec_aurora/org\.mozilla\.fenix\.HomeActivity.*" # noqa
+ reend = r".*Displayed.*org\.mozilla\.fennec_aurora.*"
+ opts = {
+ "first-timestamp": restart,
+ "second-timestamp": reend,
+ "transform-subtest-name": "HANOOBish",
+ }
+
+ actual_result = tfm.transform(logcat_data, **opts)
+ expected_result = [
+ {
+ "data": [
+ {"value": 1782.0, "xaxis": 0},
+ {"value": 1375.0, "xaxis": 1},
+ {"value": 1497.0, "xaxis": 2},
+ ],
+ "subtest": "HANOOBish",
+ }
+ ]
+ assert actual_result == expected_result
+
+ # We should get the same results back from merge
+ # since we are working with only one file
+ merged = tfm.merge(actual_result)
+ assert merged == expected_result
+
+
+def test_logcat_transform_one_regex(tfm, logcat_data):
+ def processor(groups):
+ """Parses the time from a displayed time string into milliseconds."""
+ return (float(groups[0]) * 1000) + float(groups[1])
+
+ re_w_group = r".*Displayed.*org\.mozilla\.fennec_aurora.*\+([\d]+)s([\d]+)ms.*"
+ opts = {
+ "first-timestamp": re_w_group,
+ "processor": processor,
+ "transform-subtest-name": "TimeToDisplayed",
+ }
+
+ actual_result = tfm.transform(logcat_data, **opts)
+ expected_result = [
+ {
+ "data": [
+ {"value": 1743.0, "xaxis": 0},
+ {"value": 1325.0, "xaxis": 1},
+ {"value": 1462.0, "xaxis": 2},
+ ],
+ "subtest": "TimeToDisplayed",
+ }
+ ]
+ assert actual_result == expected_result
+
+
+def test_logcat_transform_no_processor(tfm, logcat_data):
+ re_w_group = r".*Displayed.*org\.mozilla\.fennec_aurora.*\+([\d]+)s([\d]+)ms.*"
+ opts = {
+ "first-timestamp": re_w_group,
+ "transform-subtest-name": "TimeToDisplayed",
+ }
+
+ actual_result = tfm.transform(logcat_data, **opts)
+ expected_result = [
+ {
+ "data": [
+ {"value": 1.0, "xaxis": 0},
+ {"value": 1.0, "xaxis": 1},
+ {"value": 1.0, "xaxis": 2},
+ ],
+ "subtest": "TimeToDisplayed",
+ }
+ ]
+ assert actual_result == expected_result
+
+
+def test_logcat_transform_no_groups(tfm, logcat_data):
+ re_w_group = r".*Displayed.*org\.mozilla\.fennec_aurora.*"
+ opts = {
+ "first-timestamp": re_w_group,
+ "transform-subtest-name": "TimeToDisplayed",
+ }
+
+ with pytest.raises(NotebookTransformOptionsError):
+ tfm.transform(logcat_data, **opts)
+
+
+def test_logcat_transform_too_many_groups(tfm, logcat_data):
+ restart = r".*Activity.*Manager.*START.*org\.mozilla\.fennec_aurora/org\.mozilla\.fenix\.HomeActivity.*" # noqa
+ reend = r".*Displayed.*org\.mozilla\.fennec_aurora.*\+([\d]+)s([\d]+)ms.*"
+ opts = {
+ "first-timestamp": restart,
+ "second-timestamp": reend,
+ "transform-subtest-name": "HANOOBish",
+ }
+
+ with pytest.raises(NotebookTransformError):
+ tfm.transform(logcat_data, **opts)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_mach_commands.py b/python/mozperftest/mozperftest/tests/test_mach_commands.py
new file mode 100644
index 0000000000..b9068b5292
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_mach_commands.py
@@ -0,0 +1,331 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import os
+import shutil
+import sys
+import tempfile
+from contextlib import contextmanager
+from pathlib import Path
+from unittest import mock
+
+import mozunit
+import pytest
+from mach.registrar import Registrar
+
+Registrar.categories = {"testing": []}
+Registrar.commands_by_category = {"testing": set()}
+
+from mozbuild.base import MachCommandBase # noqa
+
+import mozperftest.mach_commands # noqa
+from mozperftest.environment import MachEnvironment # noqa
+from mozperftest.tests.support import EXAMPLE_TEST, ROOT, running_on_try # noqa
+from mozperftest.utils import silence, temporary_env # noqa
+
+ITERATION_HOOKS = Path(__file__).parent / "data" / "hooks_iteration.py"
+STATE_HOOKS = Path(__file__).parent / "data" / "hooks_state.py"
+
+
+class _TestMachEnvironment(MachEnvironment):
+ def __init__(self, mach_cmd, flavor="desktop-browser", hooks=None, **kwargs):
+ MachEnvironment.__init__(self, mach_cmd, flavor, hooks, **kwargs)
+ self.runs = 0
+
+ def run(self, metadata):
+ self.runs += 1
+ return metadata
+
+ def __enter__(self):
+ pass
+
+ def __exit__(self, type, value, traceback):
+ pass
+
+
+@contextmanager
+def _get_command(command=mozperftest.mach_commands.run_perftest):
+ from mozbuild.base import MozbuildObject
+
+ from mozperftest.argparser import PerftestArgumentParser
+
+ config = MozbuildObject.from_environment()
+
+ class context:
+ topdir = config.topobjdir
+ cwd = os.getcwd()
+ settings = {}
+ log_manager = mock.Mock()
+ state_dir = tempfile.mkdtemp()
+
+ # used to make arguments passed by the test as
+ # being set by the user.
+ def _run_perftest(func):
+ def _run(command_context, **kwargs):
+ parser.set_by_user = list(kwargs.keys())
+ return func(command_context, **kwargs)
+
+ return _run
+
+ try:
+ command_context = MachCommandBase(context())
+
+ if command == mozperftest.mach_commands.run_perftest:
+ parser = PerftestArgumentParser()
+ command = _run_perftest(command)
+
+ with mock.patch("mozperftest.mach_commands.get_parser", new=lambda: parser):
+ yield command, command_context
+ finally:
+ shutil.rmtree(context.state_dir)
+
+
+@contextmanager
+def _get_tools_command(tool="side-by-side"):
+ from mozbuild.base import MozbuildObject
+
+ config = MozbuildObject.from_environment()
+
+ class context:
+ topdir = config.topobjdir
+ cwd = os.getcwd()
+ settings = {}
+ log_manager = mock.Mock()
+ state_dir = tempfile.mkdtemp()
+
+ # used to make arguments passed by the test as
+ # being set by the user.
+ def _run_tool(func):
+ def _run(command_context, **kwargs):
+ parser.set_by_user = list(kwargs.keys())
+ return func(command_context, **kwargs)
+
+ return _run
+
+ try:
+ command_context = MachCommandBase(context())
+
+ command = _run_tool(mozperftest.mach_commands.run_side_by_side)
+ parser = mozperftest.mach_commands.get_perftest_tools_parser(tool)
+
+ with mock.patch(
+ "mozperftest.mach_commands.get_perftest_tools_parser", new=lambda: parser
+ ):
+ yield command, command_context
+ finally:
+ shutil.rmtree(context.state_dir)
+
+
+@mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment)
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+def test_command(mocked_func):
+ with _get_command() as (cmd, command_context), silence(command_context):
+ cmd(command_context, tests=[EXAMPLE_TEST], flavor="desktop-browser")
+
+
+@mock.patch("mozperftest.MachEnvironment")
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+def test_command_iterations(venv, env):
+ kwargs = {
+ "tests": [EXAMPLE_TEST],
+ "hooks": ITERATION_HOOKS,
+ "flavor": "desktop-browser",
+ }
+ with _get_command() as (cmd, command_context), silence(command_context):
+ cmd(command_context, **kwargs)
+ # the hook changes the iteration value to 5.
+ # each iteration generates 5 calls, so we want to see 25
+ assert len(env.mock_calls) == 25
+
+
+@mock.patch("mozperftest.MachEnvironment")
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+def test_hooks_state(venv, env):
+ kwargs = {
+ "tests": [EXAMPLE_TEST],
+ "hooks": STATE_HOOKS,
+ "flavor": "desktop-browser",
+ }
+ with _get_command() as (cmd, command_context), silence(command_context):
+ cmd(command_context, **kwargs)
+
+
+@mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment)
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+@mock.patch("tryselect.push.push_to_try")
+def test_push_command(push_to_try, venv):
+ with _get_command() as (cmd, command_context), silence(command_context):
+ cmd(
+ command_context,
+ tests=[EXAMPLE_TEST],
+ flavor="desktop-browser",
+ push_to_try=True,
+ try_platform="linux",
+ )
+ push_to_try.assert_called()
+ # XXX add assertions
+
+
+@mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment)
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+@mock.patch("tryselect.push.push_to_try")
+def test_push_command_unknown_platforms(push_to_try, venv):
+ # full stop when a platform is unknown
+ with _get_command() as (cmd, command_context), pytest.raises(NotImplementedError):
+ cmd(
+ command_context,
+ tests=[EXAMPLE_TEST],
+ flavor="desktop-browser",
+ push_to_try=True,
+ try_platform=["solaris", "linux", "mac"],
+ )
+
+
+@mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment)
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+@mock.patch("tryselect.push.push_to_try")
+def test_push_command_several_platforms(push_to_try, venv):
+ with running_on_try(False), _get_command() as (
+ cmd,
+ command_context,
+ ): # , silence(command_context):
+ cmd(
+ command_context,
+ tests=[EXAMPLE_TEST],
+ flavor="desktop-browser",
+ push_to_try=True,
+ try_platform=["linux", "mac"],
+ )
+ push_to_try.assert_called()
+ name, args, kwargs = push_to_try.mock_calls[0]
+ params = kwargs["try_task_config"]["parameters"]["try_task_config"]
+ assert "perftest-linux-try-browsertime" in params["tasks"]
+ assert "perftest-macosx-try-browsertime" in params["tasks"]
+
+
+@mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment)
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+def test_doc_flavor(mocked_func):
+ with _get_command() as (cmd, command_context), silence(command_context):
+ cmd(command_context, tests=[EXAMPLE_TEST], flavor="doc")
+
+
+@mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment)
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+@mock.patch("mozperftest.utils.run_script")
+def test_test_runner(*mocked):
+ from mozperftest.mach_commands import run_tests
+
+ with running_on_try(False), _get_command(run_tests) as (cmd, command_context):
+ cmd(command_context, tests=[EXAMPLE_TEST], verbose=True)
+
+
+@mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment)
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+@mock.patch("mozperftest.utils.run_python_script")
+def test_test_runner_on_try(*mocked):
+ from mozperftest.mach_commands import run_tests
+
+ # simulating on try to run the paths parser
+ with running_on_try(), _get_command(run_tests) as (cmd, command_context):
+ cmd(command_context, tests=[EXAMPLE_TEST])
+
+
+@mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment)
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+@mock.patch("mozperftest.utils.run_script")
+def test_test_runner_coverage(*mocked):
+ from mozperftest.mach_commands import run_tests
+
+ # simulating with coverage not installed
+ with running_on_try(False), _get_command(run_tests) as (cmd, command_context):
+ old = list(sys.meta_path)
+ sys.meta_path = []
+ try:
+ cmd(command_context, tests=[EXAMPLE_TEST])
+ finally:
+ sys.meta_path = old
+
+
+def fzf_selection(*args):
+ try:
+ full_path = args[-1][-1]["path"]
+ except IndexError:
+ return []
+
+ path = Path(full_path.replace(str(ROOT), ""))
+ return [f"[bt][sometag] {path.name} in {path.parent}"]
+
+
+def resolve_tests(tests=None):
+ if tests is None:
+ tests = [{"path": str(EXAMPLE_TEST)}]
+
+ def _resolve(*args, **kw):
+ return tests
+
+ return _resolve
+
+
+@mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment)
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+@mock.patch("mozperftest.fzf.fzf.select", new=fzf_selection)
+@mock.patch("moztest.resolve.TestResolver.resolve_tests", new=resolve_tests())
+def test_fzf_flavor(*mocked):
+ with running_on_try(False), _get_command() as (
+ cmd,
+ command_context,
+ ): # , silence():
+ cmd(command_context, flavor="desktop-browser")
+
+
+@mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment)
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+@mock.patch("mozperftest.fzf.fzf.select", new=fzf_selection)
+@mock.patch("moztest.resolve.TestResolver.resolve_tests", new=resolve_tests([]))
+def test_fzf_nothing_selected(*mocked):
+ with running_on_try(False), _get_command() as (cmd, command_context), silence():
+ cmd(command_context, flavor="desktop-browser")
+
+
+@mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment)
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+@mock.patch("mozperftest.utils.run_python_script")
+@mock.patch("mozperftest.utils.install_package")
+def test_side_by_side(mock1, mock2, mock3, patched_mozperftest_tools):
+ with mock.patch(
+ "mozperftest.utils.create_path", return_value="fake_path"
+ ) as _, mock.patch(
+ "mozperftest.runner._create_artifacts_dir", return_value="fake_path"
+ ) as _, mock.patch(
+ "mozperftest.runner._save_params", return_value="fake_path"
+ ) as _:
+ with _get_tools_command() as (cmd, command_context), silence(command_context):
+ cmd(command_context)
+ patched_mozperftest_tools.run.assert_called()
+
+
+@mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment)
+@mock.patch("mozbuild.base.MachCommandBase.activate_virtualenv")
+@mock.patch("mozperftest.utils.run_python_script")
+@mock.patch("mozperftest.utils.install_package")
+def test_change_detector(mock1, mock2, mock3, patched_mozperftest_tools):
+ with mock.patch(
+ "mozperftest.utils.create_path", return_value="fake_path"
+ ) as _, mock.patch(
+ "mozperftest.runner._create_artifacts_dir", return_value="fake_path"
+ ) as _, mock.patch(
+ "mozperftest.runner._save_params", return_value="fake_path"
+ ) as _:
+ with _get_tools_command(tool="change-detector") as (
+ cmd,
+ command_context,
+ ), silence(command_context):
+ cmd(command_context)
+ patched_mozperftest_tools.run.assert_called()
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_macos.py b/python/mozperftest/mozperftest/tests/test_macos.py
new file mode 100644
index 0000000000..6999f4792d
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_macos.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+import os
+import platform
+import subprocess
+from pathlib import Path
+from unittest import mock
+
+import mozunit
+import pytest
+
+from mozperftest.system.macos import MacosDevice
+from mozperftest.tests.support import DMG, get_running_env
+
+
+def run_proc(*args, **kw):
+ if args[0][1] == "attach":
+ where = args[0][4]
+ bindir = Path(where, "firefox.app", "Contents", "MacOS")
+ os.makedirs(str(bindir))
+ firefox_bin = bindir / "firefox"
+ with firefox_bin.open("w") as f:
+ f.write("OK")
+
+
+def mock_calls(test):
+ # on macOS we don't mock the system calls
+ # so we're mounting for real using hdiutil
+ if platform.system() == "Darwin":
+ return test
+
+ # on other platforms, we're unsing run_proc
+ @mock.patch("mozperftest.system.macos.MacosDevice._run_process", new=run_proc)
+ def wrapped(*args, **kw):
+ return test(*args, **kw)
+
+
+@mock_calls
+def test_mount_dmg():
+ mach_cmd, metadata, env = get_running_env(browsertime_binary=str(DMG))
+ device = MacosDevice(env, mach_cmd)
+ try:
+ device.run(metadata)
+ finally:
+ device.teardown()
+
+ target = Path(DMG.parent, "firefox", "Contents", "MacOS", "firefox")
+ assert env.get_arg("browsertime-binary") == str(target)
+
+
+def run_fail(cmd):
+ def _run_fail(self, args):
+ run_cmd = " ".join(args)
+ if cmd not in run_cmd:
+ run_proc(args)
+ return
+ raise subprocess.CalledProcessError(returncode=2, cmd=" ".join(args))
+
+ return _run_fail
+
+
+@mock.patch("mozperftest.system.macos.MacosDevice._run_process", new=run_fail("attach"))
+def test_attach_fails():
+ mach_cmd, metadata, env = get_running_env(browsertime_binary=str(DMG))
+ device = MacosDevice(env, mach_cmd)
+
+ with pytest.raises(subprocess.CalledProcessError):
+ try:
+ device.run(metadata)
+ finally:
+ device.teardown()
+
+
+@mock.patch("mozperftest.system.macos.MacosDevice._run_process", new=run_fail("detach"))
+def test_detach_fails():
+ mach_cmd, metadata, env = get_running_env(browsertime_binary=str(DMG))
+ device = MacosDevice(env, mach_cmd)
+ # detaching will be swallowed
+ try:
+ device.run(metadata)
+ finally:
+ device.teardown()
+
+ target = Path(DMG.parent, "firefox", "Contents", "MacOS", "firefox")
+ assert env.get_arg("browsertime-binary") == str(target)
+
+
+def test_no_op():
+ mach_cmd, metadata, env = get_running_env(browsertime_binary="notadmg")
+ device = MacosDevice(env, mach_cmd)
+ device.run(metadata)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_metrics_utils.py b/python/mozperftest/mozperftest/tests/test_metrics_utils.py
new file mode 100644
index 0000000000..0e6bdd71ac
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_metrics_utils.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import json
+
+import mozunit
+import pytest
+
+from mozperftest.metrics.utils import metric_fields, open_file
+from mozperftest.tests.support import temp_file
+
+
+def test_open_file():
+ data = json.dumps({"1": 2})
+
+ with temp_file(name="data.json", content=data) as f:
+ res = open_file(f)
+ assert res == {"1": 2}
+
+ with temp_file(name="data.txt", content="yeah") as f:
+ assert open_file(f) == "yeah"
+
+
+def test_metric_fields_old_format():
+ assert metric_fields("firstPaint") == {"name": "firstPaint"}
+
+
+@pytest.mark.parametrize(
+ "metrics, expected",
+ [
+ [
+ "name:foo,extraOptions:bar",
+ {"name": "foo", "extraOptions": "bar"},
+ ],
+ ["name:foo", {"name": "foo"}],
+ ],
+)
+def test_metric_fields_simple(metrics, expected):
+ assert metric_fields(metrics) == expected
+
+
+@pytest.mark.parametrize(
+ "metrics, expected",
+ [
+ [
+ "name:foo,extraOptions:['1', '2', '3', 2]",
+ {"name": "foo", "extraOptions": ["1", "2", "3", 2]},
+ ],
+ [
+ """name:foo,extraOptions:['1', '2', '3', 2, "3", "hello,world"] """,
+ {"name": "foo", "extraOptions": ["1", "2", "3", 2, "3", "hello,world"]},
+ ],
+ [
+ """name:foo,extraOptions:['1', '2', '3', 2, "3", "hello,world"],"""
+ """alertThreshold:['1',2,"hello"] """,
+ {
+ "name": "foo",
+ "extraOptions": ["1", "2", "3", 2, "3", "hello,world"],
+ "alertThreshold": ["1", 2, "hello"],
+ },
+ ],
+ [
+ """name:foo,extraOptions:['1', '2', '3', 2, "3", "hello,world"],"""
+ """value:foo,alertThreshold:['1',2,"hello"],framework:99 """,
+ {
+ "name": "foo",
+ "extraOptions": ["1", "2", "3", 2, "3", "hello,world"],
+ "alertThreshold": ["1", 2, "hello"],
+ "value": "foo",
+ "framework": 99,
+ },
+ ],
+ ],
+)
+def test_metric_fields_complex(metrics, expected):
+ assert metric_fields(metrics) == expected
+
+
+@pytest.mark.parametrize(
+ "metrics",
+ [
+ """name:foo,extraOptions:['1', '2', '3', 2, "3", "hello,world"],"""
+ """value:foo,alertThreshold:['1',2,"hello"],framework:99,"""
+ """shouldAlert:[99,100,["hello", "world"],0] """,
+ """name:foo,extraOptions:['1', '2', '3', 2, "3", "hello,world"],"""
+ """value:foo,alertThreshold:['1',2,"hello"],framework:99,"""
+ """shouldAlert:[99,100,["hello:", "world:"],0] """,
+ ],
+)
+def test_metric_fields_complex_failures(metrics):
+ with pytest.raises(Exception):
+ metric_fields(metrics)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_mochitest.py b/python/mozperftest/mozperftest/tests/test_mochitest.py
new file mode 100644
index 0000000000..93869c5f25
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_mochitest.py
@@ -0,0 +1,221 @@
+import os
+import shutil
+from unittest import mock
+
+import pytest
+
+from mozperftest.environment import SYSTEM, TEST
+from mozperftest.test.mochitest import MissingMochitestInformation
+from mozperftest.tests.support import (
+ EXAMPLE_MOCHITEST_TEST,
+ get_running_env,
+)
+
+
+def running_env(**kw):
+ return get_running_env(flavor="mochitest", **kw)
+
+
+@mock.patch("mozperftest.test.mochitest.ON_TRY", new=False)
+@mock.patch("mozperftest.utils.ON_TRY", new=False)
+def test_mochitest_metrics(*mocked):
+ mach_cmd, metadata, env = running_env(
+ tests=[str(EXAMPLE_MOCHITEST_TEST)],
+ mochitest_extra_args=[],
+ )
+
+ sys = env.layers[SYSTEM]
+ mochitest = env.layers[TEST]
+
+ with mock.patch("moztest.resolve.TestResolver") as test_resolver_mock, mock.patch(
+ "mozperftest.test.functionaltestrunner.load_class_from_path"
+ ) as load_class_path_mock, mock.patch(
+ "mozperftest.test.functionaltestrunner.mozlog.formatters.MachFormatter.__new__"
+ ) as formatter_mock, mock.patch(
+ "mozperftest.test.mochitest.install_requirements_file"
+ ):
+ formatter_mock.return_value = lambda x: x
+
+ def test_print(*args, **kwargs):
+ log_processor = kwargs.get("custom_handler")
+ log_processor.__call__('perfMetrics | { "fake": 0 }')
+ return 0
+
+ test_mock = mock.MagicMock()
+ test_mock.test = test_print
+ load_class_path_mock.return_value = test_mock
+
+ test_resolver_mock.resolve_metadata.return_value = (1, 1)
+ mach_cmd._spawn.return_value = test_resolver_mock
+ try:
+ with sys as s, mochitest as m:
+ m(s(metadata))
+ finally:
+ shutil.rmtree(mach_cmd._mach_context.state_dir)
+
+ res = metadata.get_results()
+ assert len(res) == 1
+ assert res[0]["name"] == "test_mochitest.html"
+ results = res[0]["results"]
+
+ assert results[0]["name"] == "fake"
+ assert results[0]["values"] == [0]
+
+
+@mock.patch(
+ # This mock.patch actually patches the mochitest run_test_harness function
+ "runtests.run_test_harness"
+)
+@mock.patch(
+ # This mock.patch causes mochitest's runtests to be imported instead of
+ # others in the remote_run
+ "mochitest.runtests.run_test_harness",
+ new=mock.MagicMock(),
+)
+@mock.patch(
+ "mozperftest.test.functionaltestrunner.mozlog.formatters.MachFormatter.__new__"
+)
+@mock.patch(
+ "mozperftest.test.mochitest.install_requirements_file", new=mock.MagicMock()
+)
+@mock.patch(
+ "mozperftest.test.functionaltestrunner.load_class_from_path", new=mock.MagicMock()
+)
+@mock.patch("moztest.resolve.TestResolver", new=mock.MagicMock())
+@mock.patch("mozperftest.test.mochitest.ON_TRY", new=True)
+@mock.patch("mozperftest.utils.ON_TRY", new=True)
+@mock.patch("mochitest.mochitest_options.MochitestArgumentParser", new=mock.MagicMock())
+@mock.patch("manifestparser.TestManifest", new=mock.MagicMock())
+def test_mochitest_ci_metrics(formatter_mock, run_test_harness_mock):
+ if not os.getenv("MOZ_FETCHES_DIR"):
+ os.environ["MOZ_FETCHES_DIR"] = "fake-path"
+ mach_cmd, metadata, env = running_env(
+ tests=[str(EXAMPLE_MOCHITEST_TEST)],
+ mochitest_extra_args=[],
+ mochitest_manifest="fake.ini",
+ mochitest_manifest_flavor="mocha",
+ )
+
+ system = env.layers[SYSTEM]
+ mochitest = env.layers[TEST]
+
+ formatter_mock.return_value = lambda x: x
+
+ def test_print(*args, **kwargs):
+ print('perfMetrics | { "fake": 0 }')
+ return 0
+
+ run_test_harness_mock.side_effect = test_print
+ try:
+ with system as s, mochitest as m:
+ m(s(metadata))
+ finally:
+ shutil.rmtree(mach_cmd._mach_context.state_dir)
+
+ res = metadata.get_results()
+ assert len(res) == 1
+ assert res[0]["name"] == "test_mochitest.html"
+ results = res[0]["results"]
+
+ assert results[0]["name"] == "fake"
+ assert results[0]["values"] == [0]
+
+
+@mock.patch(
+ # This mock.patch actually patches the mochitest run_test_harness function
+ "runtests.run_test_harness",
+ new=mock.MagicMock(),
+)
+@mock.patch(
+ # This mock.patch causes mochitest's runtests to be imported instead of
+ # others in the remote_run
+ "mochitest.runtests.run_test_harness",
+ new=mock.MagicMock(),
+)
+@mock.patch(
+ "mozperftest.test.functionaltestrunner.mozlog.formatters.MachFormatter.__new__",
+ new=mock.MagicMock(),
+)
+@mock.patch(
+ "mozperftest.test.mochitest.install_requirements_file", new=mock.MagicMock()
+)
+@mock.patch(
+ "mozperftest.test.functionaltestrunner.load_class_from_path", new=mock.MagicMock()
+)
+@mock.patch("moztest.resolve.TestResolver", new=mock.MagicMock())
+@mock.patch("mozperftest.test.mochitest.ON_TRY", new=True)
+@mock.patch("mozperftest.utils.ON_TRY", new=True)
+@mock.patch("mochitest.mochitest_options.MochitestArgumentParser", new=mock.MagicMock())
+@mock.patch("manifestparser.TestManifest", new=mock.MagicMock())
+def test_mochitest_ci_metrics_missing_manifest():
+ if not os.getenv("MOZ_FETCHES_DIR"):
+ os.environ["MOZ_FETCHES_DIR"] = "fake-path"
+ mach_cmd, metadata, env = running_env(
+ tests=[str(EXAMPLE_MOCHITEST_TEST)],
+ mochitest_extra_args=[],
+ mochitest_manifest_flavor="mocha",
+ )
+
+ system = env.layers[SYSTEM]
+ mochitest = env.layers[TEST]
+
+ try:
+ with pytest.raises(MissingMochitestInformation) as exc:
+ with system as s, mochitest as m:
+ m(s(metadata))
+ assert "manifest" in exc.value.args[0]
+ finally:
+ shutil.rmtree(mach_cmd._mach_context.state_dir)
+
+ res = metadata.get_results()
+ assert len(res) == 0
+
+
+@mock.patch(
+ # This mock.patch actually patches the mochitest run_test_harness function
+ "runtests.run_test_harness",
+ new=mock.MagicMock(),
+)
+@mock.patch(
+ # This mock.patch causes mochitest's runtests to be imported instead of
+ # others in the remote_run
+ "mochitest.runtests.run_test_harness",
+ new=mock.MagicMock(),
+)
+@mock.patch(
+ "mozperftest.test.functionaltestrunner.mozlog.formatters.MachFormatter.__new__",
+ new=mock.MagicMock(),
+)
+@mock.patch(
+ "mozperftest.test.mochitest.install_requirements_file", new=mock.MagicMock()
+)
+@mock.patch(
+ "mozperftest.test.functionaltestrunner.load_class_from_path", new=mock.MagicMock()
+)
+@mock.patch("moztest.resolve.TestResolver", new=mock.MagicMock())
+@mock.patch("mozperftest.test.mochitest.ON_TRY", new=True)
+@mock.patch("mozperftest.utils.ON_TRY", new=True)
+@mock.patch("mochitest.mochitest_options.MochitestArgumentParser", new=mock.MagicMock())
+@mock.patch("manifestparser.TestManifest", new=mock.MagicMock())
+def test_mochitest_ci_metrics_missing_flavor():
+ if not os.getenv("MOZ_FETCHES_DIR"):
+ os.environ["MOZ_FETCHES_DIR"] = "fake-path"
+ mach_cmd, metadata, env = running_env(
+ tests=[str(EXAMPLE_MOCHITEST_TEST)],
+ mochitest_extra_args=[],
+ mochitest_manifest="fake.ini",
+ )
+
+ system = env.layers[SYSTEM]
+ mochitest = env.layers[TEST]
+
+ try:
+ with pytest.raises(MissingMochitestInformation) as exc:
+ with system as s, mochitest as m:
+ m(s(metadata))
+ assert "flavor" in exc.value.args[0]
+ finally:
+ shutil.rmtree(mach_cmd._mach_context.state_dir)
+
+ res = metadata.get_results()
+ assert len(res) == 0
diff --git a/python/mozperftest/mozperftest/tests/test_notebookupload.py b/python/mozperftest/mozperftest/tests/test_notebookupload.py
new file mode 100644
index 0000000000..c05942c1eb
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_notebookupload.py
@@ -0,0 +1,123 @@
+#!/usr/bin/env python
+from unittest import mock
+
+import mozunit
+import pytest
+
+from mozperftest.environment import METRICS
+from mozperftest.metrics.utils import metric_fields
+from mozperftest.tests.support import BT_DATA, EXAMPLE_TEST, get_running_env, temp_file
+from mozperftest.utils import silence
+
+
+def setup_env(options):
+ mach_cmd, metadata, env = get_running_env(**options)
+ runs = []
+
+ def _run_process(*args, **kw):
+ runs.append((args, kw))
+
+ mach_cmd.run_process = _run_process
+ metrics = env.layers[METRICS]
+ env.set_arg("tests", [EXAMPLE_TEST])
+ metadata.add_result({"results": str(BT_DATA), "name": "browsertime"})
+ return metrics, metadata, env
+
+
+@pytest.mark.parametrize("no_filter", [True, False])
+@mock.patch("mozperftest.metrics.notebookupload.PerftestNotebook")
+@mock.patch("mozperftest.test.BrowsertimeRunner", new=mock.MagicMock())
+def test_notebookupload_with_filter(notebook, no_filter):
+ options = {
+ "notebook-metrics": [],
+ "notebook-prefix": "",
+ "notebook": True,
+ "notebook-analysis": ["scatterplot"],
+ "notebook-analyze-strings": no_filter,
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+
+ if no_filter:
+ args, kwargs = notebook.call_args_list[0]
+ assert type(kwargs["data"][0]["data"][0]["value"]) == str
+ else:
+ for call in notebook.call_args_list:
+ args, kwargs = call
+ for a in args:
+ for data_dict in a:
+ for data in data_dict["data"]:
+ assert type(data["value"]) in (int, float)
+
+ notebook.assert_has_calls(
+ [mock.call().post_to_iodide(["scatterplot"], start_local_server=True)]
+ )
+
+
+@pytest.mark.parametrize("stats", [False, True])
+@mock.patch("mozperftest.metrics.notebookupload.PerftestNotebook")
+@mock.patch("mozperftest.test.BrowsertimeRunner", new=mock.MagicMock())
+def test_compare_to_success(notebook, stats):
+ options = {
+ "notebook-metrics": [metric_fields("firstPaint")],
+ "notebook-prefix": "",
+ "notebook-analysis": [],
+ "notebook": True,
+ "notebook-compare-to": [str(BT_DATA.parent)],
+ "notebook-stats": stats,
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+
+ args, kwargs = notebook.call_args_list[0]
+
+ if not stats:
+ assert len(kwargs["data"]) == 2
+ assert kwargs["data"][0]["name"] == "browsertime- newest run"
+ assert kwargs["data"][1]["name"] == "browsertime-results"
+ else:
+ assert any("statistics" in element["subtest"] for element in kwargs["data"])
+
+ notebook.assert_has_calls(
+ [mock.call().post_to_iodide(["compare"], start_local_server=True)]
+ )
+
+
+@pytest.mark.parametrize("filepath", ["invalidPath", str(BT_DATA)])
+@mock.patch("mozperftest.metrics.notebookupload.PerftestNotebook")
+@mock.patch("mozperftest.test.BrowsertimeRunner", new=mock.MagicMock())
+def test_compare_to_invalid_parameter(notebook, filepath):
+ options = {
+ "notebook-metrics": [metric_fields("firstPaint")],
+ "notebook-prefix": "",
+ "notebook-analysis": [],
+ "notebook": True,
+ "notebook-compare-to": [filepath],
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with pytest.raises(Exception) as einfo:
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+
+ if filepath == "invalidPath":
+ assert "does not exist" in str(einfo.value)
+ else:
+ assert "not a directory" in str(einfo.value)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_perfherder.py b/python/mozperftest/mozperftest/tests/test_perfherder.py
new file mode 100644
index 0000000000..7093d6d701
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_perfherder.py
@@ -0,0 +1,620 @@
+#!/usr/bin/env python
+import json
+import pathlib
+
+import jsonschema
+import mozunit
+import pytest
+
+from mozperftest.environment import METRICS
+from mozperftest.metrics.exceptions import PerfherderValidDataError
+from mozperftest.metrics.notebook.transforms.single_json import SingleJsonRetriever
+from mozperftest.metrics.utils import metric_fields
+from mozperftest.tests.support import (
+ BT_DATA,
+ EXAMPLE_TEST,
+ HERE,
+ get_running_env,
+ temp_file,
+)
+from mozperftest.utils import silence, temp_dir
+
+
+class PerfherderTransformer(SingleJsonRetriever):
+ """Used for testing the summarization transforms."""
+
+ def summary(self, suite):
+ return 0
+
+ def subtest_summary(self, subtest):
+ return -1
+
+
+def setup_env(options):
+ mach_cmd, metadata, env = get_running_env(**options)
+ runs = []
+
+ def _run_process(*args, **kw):
+ runs.append((args, kw))
+
+ mach_cmd.run_process = _run_process
+ metrics = env.layers[METRICS]
+ env.set_arg("tests", [EXAMPLE_TEST])
+ metadata.add_result({"results": str(BT_DATA), "name": "browsertime"})
+ return metrics, metadata, env
+
+
+def test_perfherder():
+ options = {
+ "perfherder": True,
+ "perfherder-stats": True,
+ "perfherder-prefix": "",
+ "perfherder-metrics": [metric_fields("firstPaint")],
+ "perfherder-timestamp": 1.0,
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ # Check some metadata
+ assert output["application"]["name"] == "firefox"
+ assert output["framework"]["name"] == "mozperftest"
+ assert output["pushTimestamp"] == 1.0
+
+ # Check some numbers in our data
+ assert len(output["suites"]) == 1
+ assert len(output["suites"][0]["subtests"]) == 10
+ assert not any("value" in suite for suite in output["suites"])
+
+ # Check if only firstPaint metrics were obtained
+ for subtest in output["suites"][0]["subtests"]:
+ assert "firstPaint" in subtest["name"]
+
+
+def test_perfherder_simple_names():
+ options = {
+ "perfherder": True,
+ "perfherder-stats": True,
+ "perfherder-prefix": "",
+ "perfherder-metrics": [metric_fields("firstPaint"), metric_fields("resource")],
+ "perfherder-simplify-names": True,
+ "perfherder-simplify-exclude": ["statistics"],
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ # Check some metadata
+ assert output["application"]["name"] == "firefox"
+ assert output["framework"]["name"] == "mozperftest"
+
+ # Check some numbers in our data
+ assert len(output["suites"]) == 1
+ assert "value" not in output["suites"][0]
+ assert any(r > 0 for r in output["suites"][0]["subtests"][0]["replicates"])
+
+ # Check if only firstPaint/resource metrics were obtained and
+ # that simplifications occurred
+ assert all(
+ [
+ "firstPaint" in subtest["name"]
+ or "duration" in subtest["name"]
+ or "count" in subtest["name"]
+ for subtest in output["suites"][0]["subtests"]
+ ]
+ )
+
+ found_all = {"firstPaint": False, "count": False, "duration": False}
+ for subtest in output["suites"][0]["subtests"]:
+ if subtest["name"] in found_all:
+ found_all[subtest["name"]] = True
+ continue
+ assert any([name in subtest["name"] for name in found_all.keys()])
+ # Statistics are not simplified so any metric that isn't
+ # in the list of known metrics must be a statistic
+ assert "statistics" in subtest["name"]
+
+ for entry, value in found_all.items():
+ assert found_all[entry], f"Failed finding metric simplification for {entry}"
+
+ # Statistics are not simplified by default
+ assert (
+ len(
+ [
+ subtest
+ for subtest in output["suites"][0]["subtests"]
+ if "statistics" in subtest["name"]
+ ]
+ )
+ == 27
+ )
+ assert (
+ len(
+ [
+ subtest
+ for subtest in output["suites"][0]["subtests"]
+ if "statistics" not in subtest["name"]
+ ]
+ )
+ == 3
+ )
+
+
+def test_perfherder_names_simplified_with_no_exclusions():
+ options = {
+ "perfherder": True,
+ "perfherder-stats": True,
+ "perfherder-prefix": "",
+ "perfherder-metrics": [metric_fields("firstPaint"), metric_fields("resource")],
+ "perfherder-simplify-names": True,
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ # Check some metadata
+ assert output["application"]["name"] == "firefox"
+ assert output["framework"]["name"] == "mozperftest"
+
+ # Check some numbers in our data
+ assert len(output["suites"]) == 1
+ assert "value" not in output["suites"][0]
+ assert any(r > 0 for r in output["suites"][0]["subtests"][0]["replicates"])
+
+ # In this case, some metrics will be called "median", "mean", etc.
+ # since those are the simplifications of the first statistics entries
+ # that were found.
+ assert not all(
+ [
+ "firstPaint" in subtest["name"]
+ or "duration" in subtest["name"]
+ or "count" in subtest["name"]
+ for subtest in output["suites"][0]["subtests"]
+ ]
+ )
+
+ found_all = {"firstPaint": False, "count": False, "duration": False}
+ for subtest in output["suites"][0]["subtests"]:
+ if subtest["name"] in found_all:
+ found_all[subtest["name"]] = True
+ continue
+
+ for entry, value in found_all.items():
+ assert found_all[entry], f"Failed finding metric simplification for {entry}"
+
+ # Only a portion of the metrics should still have statistics in
+ # their name due to a naming conflict that only emits a warning
+ assert (
+ len(
+ [
+ subtest
+ for subtest in output["suites"][0]["subtests"]
+ if "statistics" in subtest["name"]
+ ]
+ )
+ == 18
+ )
+ assert (
+ len(
+ [
+ subtest
+ for subtest in output["suites"][0]["subtests"]
+ if "statistics" not in subtest["name"]
+ ]
+ )
+ == 12
+ )
+
+
+def test_perfherder_with_extra_options():
+ options = {
+ "perfherder": True,
+ "perfherder-stats": True,
+ "perfherder-prefix": "",
+ "perfherder-metrics": [
+ metric_fields("name:firstPaint,extraOptions:['option']"),
+ metric_fields("name:resource,extraOptions:['second-option']"),
+ ],
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ assert len(output["suites"]) == 1
+ assert sorted(output["suites"][0]["extraOptions"]) == sorted(
+ ["option", "second-option"]
+ )
+
+
+def test_perfherder_with_alerting():
+ options = {
+ "perfherder": True,
+ "perfherder-stats": True,
+ "perfherder-prefix": "",
+ "perfherder-metrics": [
+ metric_fields("name:firstPaint,extraOptions:['option']"),
+ metric_fields("name:resource,shouldAlert:True"),
+ ],
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ assert len(output["suites"]) == 1
+ assert sorted(output["suites"][0]["extraOptions"]) == sorted(["option"])
+ assert all(
+ [
+ subtest["shouldAlert"]
+ for subtest in output["suites"][0]["subtests"]
+ if "resource" in subtest["name"]
+ ]
+ )
+ assert not all(
+ [
+ subtest["shouldAlert"]
+ for subtest in output["suites"][0]["subtests"]
+ if "firstPaint" in subtest["name"]
+ ]
+ )
+
+
+def test_perfherder_with_subunits():
+ options = {
+ "perfherder": True,
+ "perfherder-stats": True,
+ "perfherder-prefix": "",
+ "perfherder-metrics": [
+ metric_fields("name:firstPaint,extraOptions:['option']"),
+ metric_fields("name:resource,shouldAlert:True,unit:a-unit"),
+ ],
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ assert len(output["suites"]) == 1
+ assert all(
+ [
+ subtest["unit"] == "a-unit"
+ for subtest in output["suites"][0]["subtests"]
+ if "resource" in subtest["name"]
+ ]
+ )
+ assert all(
+ [
+ subtest["unit"] == "ms"
+ for subtest in output["suites"][0]["subtests"]
+ if "firstPaint" in subtest["name"]
+ ]
+ )
+
+
+def test_perfherder_with_supraunits():
+ options = {
+ "perfherder": True,
+ "perfherder-stats": True,
+ "perfherder-prefix": "",
+ "perfherder-metrics": [
+ metric_fields("name:browsertime,unit:new-unit"),
+ metric_fields("name:firstPaint,extraOptions:['option']"),
+ metric_fields("name:resource,shouldAlert:True,unit:a-unit"),
+ ],
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ assert len(output["suites"]) == 1
+ assert output["suites"][0]["unit"] == "new-unit"
+ assert all(
+ [
+ subtest["unit"] == "a-unit"
+ for subtest in output["suites"][0]["subtests"]
+ if "resource" in subtest["name"]
+ ]
+ )
+ assert all(
+ [
+ subtest["unit"] == "new-unit"
+ for subtest in output["suites"][0]["subtests"]
+ if "firstPaint" in subtest["name"]
+ ]
+ )
+
+
+def test_perfherder_transforms():
+ options = {
+ "perfherder": True,
+ "perfherder-stats": True,
+ "perfherder-prefix": "",
+ "perfherder-metrics": [metric_fields("name:firstPaint")],
+ "perfherder-transformer": "mozperftest.tests.test_perfherder:PerfherderTransformer",
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ assert len(output["suites"]) == 1
+ assert output["suites"][0]["unit"] == "ms"
+ assert all([subtest["value"] == -1 for subtest in output["suites"][0]["subtests"]])
+ assert "value" in output["suites"][0]
+ assert output["suites"][0]["value"] == 0
+
+
+def test_perfherder_logcat():
+ options = {
+ "perfherder": True,
+ "perfherder-prefix": "",
+ "perfherder-metrics": [metric_fields("TimeToDisplayed")],
+ }
+
+ metrics, metadata, env = setup_env(options)
+ metadata.clear_results()
+
+ def processor(groups):
+ """Parses the time from a displayed time string into milliseconds."""
+ return (float(groups[0]) * 1000) + float(groups[1])
+
+ re_w_group = r".*Displayed.*org\.mozilla\.fennec_aurora.*\+([\d]+)s([\d]+)ms.*"
+ metadata.add_result(
+ {
+ "results": str(HERE / "data" / "home_activity.txt"),
+ "transformer": "LogCatTimeTransformer",
+ "transformer-options": {
+ "first-timestamp": re_w_group,
+ "processor": processor,
+ "transform-subtest-name": "TimeToDisplayed",
+ },
+ "name": "LogCat",
+ }
+ )
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m: # , silence():
+ m(metadata)
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ # Check some metadata
+ assert output["application"]["name"] == "firefox"
+ assert output["framework"]["name"] == "mozperftest"
+
+ # Check some numbers in our data
+ assert len(output["suites"]) == 1
+ assert len(output["suites"][0]["subtests"]) == 1
+ assert "value" not in output["suites"][0]
+ assert any(r > 0 for r in output["suites"][0]["subtests"][0]["replicates"])
+
+ # Check if only the TimeToDisplayd metric was obtained
+ for subtest in output["suites"][0]["subtests"]:
+ assert "TimeToDisplayed" in subtest["name"]
+
+
+def test_perfherder_validation_failure():
+ options = {"perfherder": True, "perfherder-prefix": ""}
+
+ metrics, metadata, env = setup_env(options)
+
+ # Perfherder schema has limits on min/max data values. Having
+ # no metrics in the options will cause a failure because of the
+ # timestamps that are picked up from browsertime.
+ with pytest.raises(jsonschema.ValidationError):
+ with temp_dir() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+
+
+def test_perfherder_missing_data_failure():
+ options = {"perfherder": True, "perfherder-prefix": ""}
+
+ metrics, metadata, env = setup_env(options)
+ metadata.clear_results()
+
+ with temp_dir() as tmpdir:
+ nodatajson = pathlib.Path(tmpdir, "baddata.json")
+ with nodatajson.open("w") as f:
+ json.dump({"bad data": "here"}, f)
+
+ metadata.add_result({"results": str(nodatajson), "name": "browsertime"})
+
+ with pytest.raises(PerfherderValidDataError):
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+
+
+def test_perfherder_metrics_filtering():
+ options = {
+ "perfherder": True,
+ "perfherder-prefix": "",
+ "perfherder-metrics": [metric_fields("I shouldn't match a metric")],
+ }
+
+ metrics, metadata, env = setup_env(options)
+ metadata.clear_results()
+
+ with temp_dir() as tmpdir:
+ nodatajson = pathlib.Path(tmpdir, "nodata.json")
+ with nodatajson.open("w") as f:
+ json.dump({}, f)
+
+ metadata.add_result({"results": str(nodatajson), "name": "browsertime"})
+
+ with temp_dir() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+
+ assert not pathlib.Path(output, "perfherder-data.json").exists()
+
+
+def test_perfherder_exlude_stats():
+ options = {
+ "perfherder": True,
+ "perfherder-prefix": "",
+ "perfherder-metrics": [metric_fields("firstPaint")],
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ # Check some numbers in our data
+ assert len(output["suites"]) == 1
+ assert len(output["suites"][0]["subtests"]) == 1
+ assert "value" not in output["suites"][0]
+ assert any(r > 0 for r in output["suites"][0]["subtests"][0]["replicates"])
+
+ # Check if only firstPaint metric was obtained with 2 replicates
+ assert len(output["suites"][0]["subtests"][0]["replicates"]) == 2
+ assert (
+ "browserScripts.timings.firstPaint"
+ == output["suites"][0]["subtests"][0]["name"]
+ )
+
+
+def test_perfherder_app_name():
+ options = {
+ "perfherder": True,
+ "perfherder-prefix": "",
+ "perfherder-app": "fenix",
+ "perfherder-metrics": [metric_fields("firstPaint")],
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ # Make sure that application setting is correct
+ assert output["application"]["name"] == "fenix"
+ assert "version" not in output["application"]
+
+
+def test_perfherder_split_by():
+ options = {
+ "perfherder": True,
+ "perfherder-prefix": "",
+ "perfherder-app": "fenix",
+ "perfherder-metrics": [metric_fields("firstPaint")],
+ "perfherder-split-by": "browserScripts.pageinfo.url",
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ # Sanity check
+ assert len(output["suites"]) == 1
+
+ # We should have 2 subtests (1 per URL)
+ assert len(output["suites"][0]["subtests"]) == 2
+
+ # Check to make sure that they were properly split
+ names = [subtest["name"] for subtest in output["suites"][0]["subtests"]]
+ assert sorted(names) == [
+ "browserScripts.timings.firstPaint https://www.mozilla.org/en-US/",
+ "browserScripts.timings.firstPaint https://www.sitespeed.io/",
+ ]
+ for i in range(2):
+ assert len(output["suites"][0]["subtests"][i]["replicates"]) == 1
+
+
+def test_perfherder_bad_app_name():
+ options = {
+ "perfherder": True,
+ "perfherder-prefix": "",
+ "perfherder-app": "this is not an app",
+ "perfherder-metrics": [metric_fields("firstPaint")],
+ }
+
+ metrics, metadata, env = setup_env(options)
+
+ # This will raise an error because the options method
+ # we use in tests skips the `choices` checks.
+ with pytest.raises(jsonschema.ValidationError):
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m, silence():
+ m(metadata)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_perftestetl.py b/python/mozperftest/mozperftest/tests/test_perftestetl.py
new file mode 100644
index 0000000000..2c08179293
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_perftestetl.py
@@ -0,0 +1,106 @@
+import json
+import pathlib
+
+import mozunit
+import pytest
+
+from mozperftest.metrics.notebook.constant import Constant
+from mozperftest.metrics.notebook.transformer import Transformer
+from mozperftest.metrics.notebook.transforms.single_json import SingleJsonRetriever
+
+
+def test_init(ptetls):
+ for ptetl in ptetls.values():
+ assert isinstance(ptetl.fmt_data, dict)
+ assert isinstance(ptetl.file_groups, dict)
+ assert isinstance(ptetl.config, dict)
+ assert isinstance(ptetl.sort_files, bool)
+ assert isinstance(ptetl.const, Constant)
+ assert isinstance(ptetl.transformer, Transformer)
+
+
+def test_parse_file_grouping(ptetls):
+ def _check_files_created(ptetl, expected_files):
+ actual_files = set(ptetl.parse_file_grouping(expected_files))
+ expected_files = set(expected_files)
+
+ # Check all parsed files are regular files.
+ assert all([pathlib.Path(file).is_file for file in actual_files])
+ # Check parse_file_grouping function returns correct result.
+ assert actual_files - expected_files == set()
+
+ # If file_grouping is a list of files.
+ ptetl = ptetls["ptetl_list"]
+ expected_files = ptetl.file_groups["group_1"]
+ _check_files_created(ptetl, expected_files)
+
+ # If file_grouping is a directory string.
+ ptetl = ptetls["ptetl_str"]
+ expected_path = ptetl.file_groups["group_1"]
+ expected_files = [
+ f.resolve().as_posix() for f in pathlib.Path(expected_path).iterdir()
+ ]
+ _check_files_created(ptetl, expected_files)
+
+
+def test_process(ptetls, files):
+ # Temporary resource files.
+ files, output = files["resources"], files["output"]
+ file_1 = files["file_1"]
+ file_2 = files["file_2"]
+
+ # Create expected output.
+ expected_output = [
+ {
+ "data": [
+ {"value": 101, "xaxis": 1, "file": file_1},
+ {"value": 102, "xaxis": 1, "file": file_1},
+ {"value": 103, "xaxis": 1, "file": file_1},
+ {"value": 201, "xaxis": 2, "file": file_2},
+ {"value": 202, "xaxis": 2, "file": file_2},
+ {"value": 203, "xaxis": 2, "file": file_2},
+ ],
+ "name": "group_1",
+ "subtest": "browserScripts.timings.firstPaint",
+ }
+ ]
+
+ ptetl = ptetls["ptetl_str"]
+
+ # Set a custom transformer.
+ ptetl.transformer = Transformer([], SingleJsonRetriever())
+
+ # Create expected result.
+ expected_result = {
+ "data": expected_output,
+ "file-output": output,
+ }
+
+ # Check return value.
+ actual_result = ptetl.process()
+ assert actual_result == expected_result
+
+ # Check output file.
+ with pathlib.Path(output).open() as f:
+ actual_output = json.load(f)
+
+ assert expected_output == actual_output
+
+
+def test_process_fail_artifact_downloading(ptetls, files):
+ ptetl = ptetls["ptetl_list"]
+ ptetl.file_groups = {"group-name": {"artifact_downloader_setting": False}}
+
+ # Set a custom transformer.
+ ptetl.transformer = Transformer([], SingleJsonRetriever())
+ with pytest.raises(Exception) as exc_info:
+ ptetl.process()
+
+ assert (
+ str(exc_info.value)
+ == "Artifact downloader tooling is disabled for the time being."
+ )
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_perftestnotebook.py b/python/mozperftest/mozperftest/tests/test_perftestnotebook.py
new file mode 100644
index 0000000000..58debe9343
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_perftestnotebook.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+from pathlib import Path
+from unittest import mock
+
+import mozunit
+import pytest
+
+from mozperftest.metrics.notebook.constant import Constant
+
+
+def test_init(ptnb, standarized_data):
+ assert isinstance(ptnb.data, dict)
+ assert isinstance(ptnb.const, Constant)
+
+
+def test_get_notebook_section(ptnb):
+ func = "scatterplot"
+ with (ptnb.const.here / "notebook-sections" / func).open() as f:
+ assert ptnb.get_notebook_section(func) == f.read()
+
+
+def test_get_notebook_section_unknown_analysis(ptnb):
+ func = "unknown"
+ assert ptnb.get_notebook_section(func) == ""
+
+
+@pytest.mark.parametrize("analysis", [["scatterplot"], None])
+def test_post_to_iodide(ptnb, standarized_data, analysis):
+ opener = mock.mock_open()
+
+ def mocked_open(self, *args, **kwargs):
+ return opener(self, *args, **kwargs)
+
+ with mock.patch.object(Path, "open", mocked_open), mock.patch(
+ "mozperftest.metrics.notebook.perftestnotebook.webbrowser.open_new_tab"
+ ) as browser, mock.patch(
+ "mozperftest.metrics.notebook.perftestnotebook.HTTPServer"
+ ) as server:
+ ptnb.post_to_iodide(analysis=analysis)
+
+ list_of_calls = opener.mock_calls
+
+ header_path = ptnb.const.here / "notebook-sections" / "header"
+ assert mock.call(header_path) in list_of_calls
+ index1 = list_of_calls.index(mock.call(header_path))
+ assert list_of_calls[index1 + 2] == mock.call().read()
+
+ template_upload_file_path = ptnb.const.here / "template_upload_file.html"
+ assert mock.call(template_upload_file_path) in list_of_calls
+ index2 = list_of_calls.index(mock.call(template_upload_file_path))
+ assert list_of_calls[index2 + 2] == mock.call().read()
+
+ upload_file_path = ptnb.const.here / "upload_file.html"
+ assert mock.call(upload_file_path, "w") in list_of_calls
+ index3 = list_of_calls.index(mock.call(upload_file_path, "w"))
+ assert list_of_calls[index3 + 2] == mock.call().write("")
+
+ assert index1 < index2 < index3
+
+ if analysis:
+ section_path = ptnb.const.here / "notebook-sections" / analysis[0]
+ assert mock.call(section_path) in list_of_calls
+ index4 = list_of_calls.index(mock.call(section_path))
+ assert index1 < index4 < index2
+ else:
+ assert list_of_calls.count(mock.call().__enter__()) == 3
+
+ browser.assert_called_with(str(upload_file_path))
+ server.assert_has_calls(
+ [mock.call().serve_forever(), mock.call().server_close()]
+ )
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_pingserver.py b/python/mozperftest/mozperftest/tests/test_pingserver.py
new file mode 100644
index 0000000000..aa485f3a19
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_pingserver.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+import json
+import sys
+from pathlib import Path
+
+import mozunit
+import requests
+
+from mozperftest.system.pingserver import PingServer
+from mozperftest.tests.support import get_running_env
+from mozperftest.utils import ON_TRY, temp_dir
+
+
+def test_ping_server():
+ if ON_TRY and sys.platform == "darwin":
+ # macos slave in the CI are restricted
+ return
+ ping_data = {"some": "data"}
+ with temp_dir() as output:
+ args = {"verbose": True, "output": output}
+ mach_cmd, metadata, env = get_running_env(**args)
+ layer = PingServer(env, mach_cmd)
+ layer.setup()
+ try:
+ metadata = layer.run(metadata)
+ # simulates a ping
+ requests.post(
+ layer.endpoint + "/submit/something", data=json.dumps(ping_data)
+ )
+ finally:
+ layer.teardown()
+
+ with Path(output, "telemetry.json").open() as f:
+ assert json.loads(f.read()) == [ping_data]
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_profile.py b/python/mozperftest/mozperftest/tests/test_profile.py
new file mode 100644
index 0000000000..fc0bf76eb8
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_profile.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import os
+import tempfile
+from unittest import mock
+
+import mozunit
+
+from mozperftest.system.profile import Profile, ProfileNotFoundError
+from mozperftest.tests.support import get_running_env
+
+
+def test_profile():
+ mach_cmd, metadata, env = get_running_env()
+
+ with Profile(env, mach_cmd) as profile:
+ profile(metadata)
+ profile_dir = env.get_arg("profile-directory")
+ assert os.path.exists(profile_dir)
+
+ assert not os.path.exists(profile_dir)
+
+
+CALLS = [0]
+
+
+def _return_profile(*args, **kw):
+ if CALLS[0] == 0:
+ CALLS[0] = 1
+ raise ProfileNotFoundError()
+
+ tempdir = tempfile.mkdtemp()
+
+ return tempdir
+
+
+@mock.patch("mozperftest.system.profile.get_profile", new=_return_profile)
+def test_conditionedprofile():
+ mach_cmd, metadata, env = get_running_env(profile_conditioned=True)
+
+ with Profile(env, mach_cmd) as profile:
+ profile(metadata)
+ profile_dir = env.get_arg("profile-directory")
+ assert os.path.exists(profile_dir)
+
+ assert not os.path.exists(profile_dir)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_proxy.py b/python/mozperftest/mozperftest/tests/test_proxy.py
new file mode 100644
index 0000000000..c971c88b38
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_proxy.py
@@ -0,0 +1,232 @@
+#!/usr/bin/env python
+import json
+import os
+import shutil
+import tempfile
+from unittest import mock
+
+import mozunit
+import pytest
+
+from mozperftest.environment import SYSTEM
+from mozperftest.system.proxy import OutputHandler
+from mozperftest.tests.support import get_running_env
+from mozperftest.utils import silence
+
+here = os.path.abspath(os.path.dirname(__file__))
+example_dump = os.path.join(here, "..", "system", "example.zip")
+
+
+class FakeOutputHandler:
+ def finished(self):
+ pass
+
+ def wait_for_port(self):
+ return 1234
+
+
+class FakeOutputHandlerFail:
+ def finished(self):
+ pass
+
+ def wait_for_port(self):
+ return None
+
+
+class ProcHandler:
+ def __init__(self, *args, **kw):
+ self.args = args
+ self.kw = kw
+ self.pid = 1234
+
+ def wait(self, *args):
+ return
+
+ run = wait
+
+ @property
+ def proc(self):
+ return self
+
+
+class ProcHandlerError:
+ def __init__(self, *args, **kw):
+ self.args = args
+ self.kw = kw
+ self.pid = 1234
+
+ def wait(self, *args):
+ return 1
+
+ run = wait
+
+ @property
+ def proc(self):
+ return self
+
+
+class FakeDevice:
+ def create_socket_connection(self, direction, local, remote):
+ return "A Fake socket"
+
+
+def running_env():
+ return get_running_env(proxy=True)
+
+
+def mock_download_file(url, dest):
+ shutil.copyfile(example_dump, dest)
+
+
+@mock.patch("mozperftest.system.proxy.download_file", mock_download_file)
+@mock.patch("mozperftest.system.proxy.ProcessHandler", new=ProcHandler)
+@mock.patch("mozperftest.system.proxy.OutputHandler", new=FakeOutputHandlerFail)
+@mock.patch("os.kill")
+def test_port_error(killer):
+ mach_cmd, metadata, env = running_env()
+ system = env.layers[SYSTEM]
+ with tempfile.TemporaryDirectory() as tmpdir:
+ recording = os.path.join(tmpdir, "recording.zip")
+ env.set_arg("proxy-mode", "record")
+ env.set_arg("proxy-file", recording)
+
+ with system as proxy, pytest.raises(ValueError) as excinfo, silence():
+ proxy(metadata)
+ assert "Unable to retrieve the port number from mozproxy" in str(excinfo.value)
+
+
+@mock.patch("mozperftest.system.proxy.download_file", mock_download_file)
+@mock.patch("mozperftest.system.proxy.ProcessHandler", new=ProcHandlerError)
+@mock.patch("mozperftest.system.proxy.OutputHandler", new=FakeOutputHandler)
+@mock.patch("os.kill")
+def test_proxy_error(killer):
+ mach_cmd, metadata, env = running_env()
+ system = env.layers[SYSTEM]
+ with tempfile.TemporaryDirectory() as tmpdir:
+ recording = os.path.join(tmpdir, "recording.zip")
+ env.set_arg("proxy-mode", "record")
+ env.set_arg("proxy-file", recording)
+
+ with pytest.raises(ValueError) as excinfo:
+ with system as proxy, silence():
+ proxy(metadata)
+ assert "mozproxy terminated early with return code 1" in str(excinfo.value)
+
+
+@mock.patch("mozperftest.system.proxy.download_file", mock_download_file)
+@mock.patch("mozperftest.system.proxy.ProcessHandler", new=ProcHandler)
+@mock.patch("mozperftest.system.proxy.OutputHandler", new=FakeOutputHandler)
+@mock.patch("os.kill")
+def test_playback_no_file(killer):
+ mach_cmd, metadata, env = running_env()
+ system = env.layers[SYSTEM]
+ env.set_arg("proxy-mode", "playback")
+
+ with system as proxy, pytest.raises(ValueError) as excinfo, silence():
+ proxy(metadata)
+ assert "Proxy file not provided!!" in str(excinfo.value)
+
+
+@mock.patch("mozperftest.system.proxy.download_file", mock_download_file)
+@mock.patch("mozperftest.system.proxy.ProcessHandler", new=ProcHandler)
+@mock.patch("mozperftest.system.proxy.OutputHandler", new=FakeOutputHandler)
+@mock.patch("os.kill")
+def test_playback_no_mode(killer):
+ mach_cmd, metadata, env = running_env()
+ system = env.layers[SYSTEM]
+ env.set_arg("proxy-file", example_dump)
+
+ with system as proxy, pytest.raises(ValueError) as excinfo, silence():
+ proxy(metadata)
+ assert "Proxy mode not provided please provide proxy mode" in str(excinfo.value)
+
+
+@mock.patch("mozperftest.system.proxy.OutputHandler", new=FakeOutputHandler)
+@mock.patch("mozperftest.system.proxy.ProcessHandler", new=ProcHandler)
+@mock.patch("mozperftest.system.proxy.ADBDevice", new=FakeDevice)
+@mock.patch("os.kill")
+def test_android_proxy(killer):
+ mach_cmd, metadata, env = running_env()
+ metadata.flavor = "mobile-browser"
+ system = env.layers[SYSTEM]
+ env.set_arg("android-app-name", "org.mozilla.geckoview_example")
+ env.set_arg("proxy-mode", "playback")
+ env.set_arg("proxy-file", example_dump)
+
+ with system as proxy, silence():
+ proxy(metadata)
+
+ browser_prefs = metadata.get_options("browser_prefs")
+ assert browser_prefs["network.proxy.http_port"] == 1234
+
+
+@mock.patch("mozperftest.system.proxy.OutputHandler", new=FakeOutputHandler)
+@mock.patch("mozperftest.system.proxy.ProcessHandler", new=ProcHandler)
+@mock.patch("os.kill")
+def test_replay(killer):
+ mach_cmd, metadata, env = running_env()
+ system = env.layers[SYSTEM]
+ env.set_arg("proxy-mode", "playback")
+ env.set_arg("proxy-file", example_dump)
+
+ with system as proxy, silence():
+ proxy(metadata)
+
+ browser_prefs = metadata.get_options("browser_prefs")
+ assert browser_prefs["network.proxy.http_port"] == 1234
+
+
+@mock.patch("mozperftest.system.proxy.download_file", mock_download_file)
+@mock.patch("mozperftest.system.proxy.ProcessHandler", new=ProcHandler)
+@mock.patch("mozperftest.system.proxy.OutputHandler", new=FakeOutputHandler)
+@mock.patch("os.kill")
+def test_replay_url(killer):
+ mach_cmd, metadata, env = running_env()
+ system = env.layers[SYSTEM]
+ env.set_arg("proxy-mode", "playback")
+ env.set_arg("proxy-file", "http://example.dump")
+
+ with system as proxy, silence():
+ proxy(metadata)
+
+ browser_prefs = metadata.get_options("browser_prefs")
+ assert browser_prefs["network.proxy.http_port"] == 1234
+
+
+@mock.patch("mozperftest.system.proxy.download_file", mock_download_file)
+@mock.patch("mozperftest.system.proxy.ProcessHandler", new=ProcHandler)
+@mock.patch("mozperftest.system.proxy.OutputHandler", new=FakeOutputHandler)
+@mock.patch("os.kill")
+def test_record(killer):
+ mach_cmd, metadata, env = running_env()
+ system = env.layers[SYSTEM]
+ with tempfile.TemporaryDirectory() as tmpdir:
+ recording = os.path.join(tmpdir, "recording.zip")
+ env.set_arg("proxy-mode", "record")
+ env.set_arg("proxy-file", recording)
+
+ with system as proxy, silence():
+ proxy(metadata)
+
+ browser_prefs = metadata.get_options("browser_prefs")
+ assert browser_prefs["network.proxy.http_port"] == 1234
+
+
+@mock.patch("mozperftest.system.proxy.LOG")
+def test_output_handler(logged):
+ hdlr = OutputHandler()
+
+ hdlr(b"")
+ hdlr(b"simple line")
+ hdlr(json.dumps({"not": "expected data"}).encode())
+
+ hdlr.finished()
+ assert hdlr.wait_for_port() is None
+
+ # this catches the port
+ hdlr(json.dumps({"action": "", "message": "Proxy running on port 1234"}).encode())
+ assert hdlr.wait_for_port() == 1234
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_runner.py b/python/mozperftest/mozperftest/tests/test_runner.py
new file mode 100644
index 0000000000..5efcab59f6
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_runner.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+from unittest import mock
+
+import mozunit
+import pytest
+from mozbuild.base import MachCommandBase # noqa
+
+from mozperftest.runner import main
+from mozperftest.utils import silence
+
+
+def test_main():
+ with pytest.raises(SystemExit), silence():
+ main(["--help"])
+
+
+def test_tools():
+ with mock.patch(
+ "mozperftest.runner._activate_virtualenvs", return_value="fake_path"
+ ) as _:
+ with pytest.raises(SystemExit), silence():
+ main(["tools"])
+
+
+@mock.patch("mozperftest.utils.install_package")
+@mock.patch("mozperftest.PerftestToolsArgumentParser")
+def test_side_by_side(arg, patched_mozperftest_tools):
+ with mock.patch(
+ "mozperftest.runner._activate_virtualenvs", return_value="fake_path"
+ ) as _, mock.patch(
+ "mozperftest.runner._create_artifacts_dir", return_value="fake_path"
+ ) as _, mock.patch(
+ "mozperftest.runner._save_params", return_value="fake_path"
+ ) as _, mock.patch(
+ "sys.modules", return_value=mock.MagicMock()
+ ) as _:
+ main(
+ [
+ "tools",
+ "side-by-side",
+ "-t",
+ "fake-test-name",
+ ]
+ )
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_script.py b/python/mozperftest/mozperftest/tests/test_script.py
new file mode 100644
index 0000000000..8a8e93406a
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_script.py
@@ -0,0 +1,127 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import mozunit
+import pytest
+
+from mozperftest.script import (
+ BadOptionTypeError,
+ MissingFieldError,
+ ParseError,
+ ScriptInfo,
+ ScriptType,
+)
+from mozperftest.tests.support import (
+ EXAMPLE_MOCHITEST_TEST,
+ EXAMPLE_MOCHITEST_TEST2,
+ EXAMPLE_TEST,
+ EXAMPLE_XPCSHELL_TEST,
+ EXAMPLE_XPCSHELL_TEST2,
+ HERE,
+ temp_file,
+)
+
+
+def check_options(info):
+ assert info["options"]["default"]["perfherder"]
+ assert info["options"]["linux"]["perfherder_metrics"] == [
+ {"name": "speed", "unit": "bps_lin"}
+ ]
+ assert info["options"]["win"]["perfherder_metrics"] == [
+ {"name": "speed", "unit": "bps_win"}
+ ]
+ assert info["options"]["mac"]["perfherder_metrics"] == [
+ {"name": "speed", "unit": "bps_mac"}
+ ]
+
+
+def test_scriptinfo_bt():
+ info = ScriptInfo(EXAMPLE_TEST)
+ assert info["author"] == "N/A"
+ display = str(info)
+ assert "The description of the example test." in display
+ assert info.script_type == ScriptType.browsertime
+ check_options(info)
+
+
+@pytest.mark.parametrize("script", [EXAMPLE_MOCHITEST_TEST, EXAMPLE_MOCHITEST_TEST2])
+def test_scriptinfo_mochitest(script):
+ info = ScriptInfo(script)
+ assert info["author"] == "N/A"
+
+ display = str(info)
+ assert "N/A" in display
+ assert "Performance Team" in display
+ assert "Test test" in display
+ assert info.script_type == ScriptType.mochitest
+
+ assert info["options"]["default"]["manifest"] == "mochitest-common.ini"
+ assert info["options"]["default"]["manifest_flavor"] == "plain"
+ assert info["options"]["default"]["perfherder_metrics"] == [
+ {"name": "Registration", "unit": "ms"}
+ ]
+
+
+def test_scriptinfo_mochitest_missing_perfmetadata():
+ with temp_file(name="sample.html", content="<html></html>") as temp:
+ with pytest.raises(ParseError) as exc_info:
+ ScriptInfo(temp)
+ assert "MissingPerfMetadata" in str(exc_info.value)
+
+
+@pytest.mark.parametrize("script", [EXAMPLE_XPCSHELL_TEST, EXAMPLE_XPCSHELL_TEST2])
+def test_scriptinfo_xpcshell(script):
+ info = ScriptInfo(script)
+ assert info["author"] == "N/A"
+
+ display = str(info)
+ assert "The description of the example test." in display
+ assert info.script_type == ScriptType.xpcshell
+ check_options(info)
+
+
+def test_scriptinfo_failure():
+ bad_example = HERE / "data" / "failing-samples" / "perftest_doc_failure_example.js"
+ with pytest.raises(MissingFieldError):
+ ScriptInfo(bad_example)
+
+
+def test_parserror():
+ exc = Exception("original")
+ error = ParseError("script", exc)
+ assert error.exception is exc
+ assert "original" in str(error)
+
+
+def test_update_args():
+ args = {"perfherder_metrics": [{"name": "yey"}]}
+ info = ScriptInfo(EXAMPLE_TEST)
+ new_args = info.update_args(**args)
+
+ # arguments should not be overriden
+ assert new_args["perfherder_metrics"] == [{"name": "yey"}]
+
+ # arguments in platform-specific options should
+ # override default options
+ assert new_args["verbose"]
+
+
+def test_update_args_metrics_list_failure():
+ args = {"perfherder_metrics": "yey"}
+ info = ScriptInfo(EXAMPLE_TEST)
+
+ with pytest.raises(BadOptionTypeError):
+ info.update_args(**args)
+
+
+def test_update_args_metrics_json_failure():
+ args = {"perfherder_metrics": ["yey"]}
+ info = ScriptInfo(EXAMPLE_TEST)
+
+ with pytest.raises(BadOptionTypeError):
+ info.update_args(**args)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_single_json_transformer.py b/python/mozperftest/mozperftest/tests/test_single_json_transformer.py
new file mode 100644
index 0000000000..9509948760
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_single_json_transformer.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+import mozunit
+
+from mozperftest.metrics.notebook.transformer import Transformer
+from mozperftest.metrics.notebook.transforms.single_json import SingleJsonRetriever
+
+
+def test_transform(data):
+ tfm = SingleJsonRetriever()
+
+ expected_result = [
+ {
+ "data": [
+ {"value": 101, "xaxis": 1},
+ {"value": 102, "xaxis": 1},
+ {"value": 103, "xaxis": 1},
+ ],
+ "subtest": "browserScripts.timings.firstPaint",
+ }
+ ]
+
+ actual_result = tfm.transform(data["data_1"])
+
+ assert actual_result == expected_result
+
+
+def test_merge(data):
+ tfm = SingleJsonRetriever()
+ sde = tfm.transform(data["data_1"])
+ sde.extend(tfm.transform(data["data_2"]))
+
+ expected_result = [
+ {
+ "data": [
+ {"value": 101, "xaxis": 1},
+ {"value": 102, "xaxis": 1},
+ {"value": 103, "xaxis": 1},
+ {"value": 201, "xaxis": 2},
+ {"value": 202, "xaxis": 2},
+ {"value": 203, "xaxis": 2},
+ ],
+ "subtest": "browserScripts.timings.firstPaint",
+ }
+ ]
+
+ actual_result = tfm.merge(sde)
+
+ assert actual_result == expected_result
+
+
+def test_process(files):
+ files = files["resources"]
+ file_1 = files["file_1"]
+ file_2 = files["file_2"]
+
+ tfm = Transformer([], SingleJsonRetriever())
+ tfm.files = [file_1, file_2]
+
+ expected_result = [
+ {
+ "data": [
+ {"value": 101, "xaxis": 1, "file": file_1},
+ {"value": 102, "xaxis": 1, "file": file_1},
+ {"value": 103, "xaxis": 1, "file": file_1},
+ {"value": 201, "xaxis": 2, "file": file_2},
+ {"value": 202, "xaxis": 2, "file": file_2},
+ {"value": 203, "xaxis": 2, "file": file_2},
+ ],
+ "subtest": "browserScripts.timings.firstPaint",
+ "name": "group_1",
+ }
+ ]
+
+ actual_result = tfm.process("group_1")
+
+ assert actual_result == expected_result
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_transformer.py b/python/mozperftest/mozperftest/tests/test_transformer.py
new file mode 100644
index 0000000000..b5323eabe6
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_transformer.py
@@ -0,0 +1,161 @@
+import mozunit
+import pytest
+from jsonschema import ValidationError
+
+from mozperftest.metrics.exceptions import (
+ NotebookDuplicateTransformsError,
+ NotebookInvalidPathError,
+ NotebookInvalidTransformError,
+)
+from mozperftest.metrics.notebook.transformer import (
+ Transformer,
+ get_transformer,
+ get_transformers,
+)
+from mozperftest.tests.data.perftestetl_plugin import (
+ test_transformer_perftestetl_plugin_1,
+ test_transformer_perftestetl_plugin_2,
+)
+from mozperftest.tests.support import HERE, get_running_env
+
+_, metadata, _ = get_running_env()
+prefix = "PerftestNotebook"
+
+
+def test_init_failure():
+ class TempClass(object):
+ def temp_fun():
+ return 1
+
+ with pytest.raises(NotebookInvalidTransformError):
+ Transformer(custom_transformer=TempClass())
+
+
+def test_files_getter(files):
+ files = files["resources"]
+ assert files == Transformer(files, logger=metadata, prefix=prefix).files
+
+
+def test_files_setter(files):
+ files = files["resources"]
+ files = list(files.values())
+ tfm = Transformer(logger=metadata, prefix=prefix)
+ tfm.files = files
+ assert files == tfm.files
+
+
+def test_files_setter_failure():
+ tfm = Transformer(logger=metadata, prefix=prefix)
+ tfm.files = "fail"
+ assert not tfm.files
+
+
+def test_open_data(data, files):
+ tfm = Transformer(logger=metadata, prefix=prefix)
+
+ files = files["resources"]
+ json_1 = files["file_1"]
+ json_2 = files["file_2"]
+ txt_3 = files["file_3"]
+
+ # If a json file is open.
+ assert data["data_1"] == tfm.open_data(json_1)
+ assert data["data_2"] == tfm.open_data(json_2)
+ # If an other type file is open.
+ assert [str(data["data_3"])] == tfm.open_data(txt_3)
+
+ # Test failure
+ with pytest.raises(Exception):
+ tfm.open_data("fail")
+
+
+def test_jsonschema_valitate_failure(files):
+ class BadTransformer:
+ def transform(self, data):
+ return {"bad data": "bad data"}
+
+ def merge(self, sde):
+ return {"bad data": "bad data"}
+
+ files = files["resources"]
+ file_1 = files["file_1"]
+ file_2 = files["file_2"]
+
+ tfm = Transformer([], BadTransformer(), logger=metadata, prefix=prefix)
+ tfm.files = [file_1, file_2]
+ with pytest.raises(ValidationError):
+ tfm.process("name")
+
+
+def test_get_transformer():
+ path_1 = (
+ HERE
+ / "data"
+ / "perftestetl_plugin"
+ / "test_transformer_perftestetl_plugin_1.py"
+ )
+ assert (
+ get_transformer(path_1.as_posix()).__name__
+ == test_transformer_perftestetl_plugin_1.TestTransformer1.__name__
+ )
+
+ path_2 = (
+ "mozperftest.tests.data.perftestetl_plugin."
+ + "test_transformer_perftestetl_plugin_2:TestTransformer2"
+ )
+ assert (
+ get_transformer(path_2).__name__
+ == test_transformer_perftestetl_plugin_2.TestTransformer2.__name__
+ )
+
+
+def test_get_transformer_failure():
+ path_1 = HERE / "data" / "does-not-exist.py"
+ with pytest.raises(NotebookInvalidPathError):
+ get_transformer(path_1.as_posix())
+
+ path_2 = HERE / "data" / "does-not-exist"
+ with pytest.raises(ImportError):
+ get_transformer(path_2.as_posix())
+
+ path_3 = (
+ "mozperftest.tests.data.perftestetl_plugin."
+ + "test_transformer_perftestetl_plugin_2:TestTransformer3"
+ )
+ with pytest.raises(ImportError):
+ get_transformer(path_3)
+
+ path_4 = (
+ "mozperftest.tests.data.perftestetl_plugin."
+ + "test_transformer_perftestetl_plugin_3:TestTransformer3"
+ )
+ with pytest.raises(ImportError):
+ get_transformer(path_4)
+
+ with pytest.raises(NotebookInvalidTransformError):
+ get_transformer(__file__)
+
+
+def test_get_transformers():
+ dirpath = HERE / "data" / "perftestetl_plugin"
+ tfms = get_transformers(dirpath)
+ assert test_transformer_perftestetl_plugin_1.TestTransformer1.__name__ in tfms
+ assert test_transformer_perftestetl_plugin_2.TestTransformer2.__name__ in tfms
+
+
+def test_get_transformers_failure():
+ dirpath = HERE / "data" / "does-not-exist"
+ with pytest.raises(NotebookInvalidPathError):
+ get_transformers(dirpath)
+
+ dirpath = HERE / "data" / "perftestetl_plugin" / "test_transformer_1.py"
+ with pytest.raises(NotebookInvalidPathError):
+ get_transformers(dirpath)
+
+ dirpath = HERE / "data" / "multiple_transforms_error"
+ with pytest.raises(NotebookDuplicateTransformsError):
+ get_transformers(dirpath)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_utils.py b/python/mozperftest/mozperftest/tests/test_utils.py
new file mode 100644
index 0000000000..ae6de4dc3d
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_utils.py
@@ -0,0 +1,270 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import shutil
+import sys
+from datetime import date, timedelta
+from pathlib import Path
+from subprocess import CalledProcessError
+from unittest import mock
+
+import mozunit
+import pytest
+
+from mozperftest.tests.support import EXAMPLE_TESTS_DIR, requests_content, temp_file
+from mozperftest.utils import (
+ build_test_list,
+ checkout_python_script,
+ convert_day,
+ create_path,
+ download_file,
+ get_multi_tasks_url,
+ get_output_dir,
+ get_revision_namespace_url,
+ host_platform,
+ install_package,
+ install_requirements_file,
+ load_class,
+ load_class_from_path,
+ silence,
+)
+
+
+def test_silence():
+ with silence():
+ print("HIDDEN")
+
+
+def test_host_platform():
+ plat = host_platform()
+
+ # a bit useless... :)
+ if sys.platform.startswith("darwin"):
+ assert plat == "darwin"
+ else:
+ if sys.maxsize > 2**32:
+ assert "64" in plat
+ else:
+ assert "64" not in plat
+
+
+def get_raise(*args, **kw):
+ raise Exception()
+
+
+@mock.patch("mozperftest.utils.requests.get", new=get_raise)
+def test_download_file_fails():
+ with temp_file() as target, silence(), pytest.raises(Exception):
+ download_file("http://I don't exist", Path(target), retry_sleep=0.1)
+
+
+@mock.patch("mozperftest.utils.requests.get", new=requests_content())
+def test_download_file_success():
+ with temp_file() as target:
+ download_file("http://content", Path(target), retry_sleep=0.1)
+ with open(target) as f:
+ assert f.read() == "some content"
+
+
+def _req(package):
+ class Req:
+ location = "nowhere"
+
+ @property
+ def satisfied_by(self):
+ return self
+
+ def check_if_exists(self, **kw):
+ pass
+
+ return Req()
+
+
+@mock.patch("pip._internal.req.constructors.install_req_from_line", new=_req)
+def test_install_package():
+ vem = mock.Mock()
+ vem.bin_path = "someplace"
+ with mock.patch("subprocess.check_call") as mock_check_call:
+ assert install_package(vem, "foo")
+ mock_check_call.assert_called_once_with(
+ [
+ vem.python_path,
+ "-m",
+ "pip",
+ "install",
+ "foo",
+ ]
+ )
+
+
+def test_install_requirements_file():
+ vem = mock.Mock()
+ vem.bin_path = "someplace"
+ with mock.patch("subprocess.check_call") as mock_check_call, mock.patch(
+ "mozperftest.utils.os"
+ ):
+ assert install_requirements_file(vem, "foo")
+ mock_check_call.assert_called_once_with(
+ [
+ vem.python_path,
+ "-m",
+ "pip",
+ "install",
+ "--no-deps",
+ "-r",
+ "foo",
+ "--no-index",
+ "--find-links",
+ "https://pypi.pub.build.mozilla.org/pub/",
+ ]
+ )
+
+
+@mock.patch("pip._internal.req.constructors.install_req_from_line", new=_req)
+def test_install_package_failures():
+ vem = mock.Mock()
+ vem.bin_path = "someplace"
+
+ def check_call(*args):
+ raise CalledProcessError(1, "")
+
+ with pytest.raises(CalledProcessError):
+ with mock.patch("subprocess.check_call", new=check_call):
+ install_package(vem, "foo")
+
+ # we can also absorb the error, and just return False
+ assert not install_package(vem, "foo", ignore_failure=True)
+
+
+@mock.patch("mozperftest.utils.requests.get", requests_content())
+def test_build_test_list():
+ tests = [EXAMPLE_TESTS_DIR, "https://some/location/perftest_one.js"]
+ try:
+ files, tmp_dir = build_test_list(tests)
+ assert len(files) == 2
+ finally:
+ shutil.rmtree(tmp_dir)
+
+
+def test_convert_day():
+ day = "2020.06.08"
+ assert convert_day(day) == day
+ with pytest.raises(ValueError):
+ convert_day("2020-06-08")
+ today = date.today()
+ assert convert_day("today"), today.strftime("%Y.%m.%d")
+ yesterday = today - timedelta(days=1)
+ assert convert_day("yesterday") == yesterday.strftime("%Y.%m.%d")
+
+
+def test_revision_namespace_url():
+ route = "FakeBuildRoute"
+ day = "2020.06.08"
+ buildurl = get_revision_namespace_url(route, day=day)
+ assert day in buildurl and route in buildurl
+ assert buildurl.endswith(".revision")
+
+
+def test_multibuild_url():
+ route = "FakeBuildRoute"
+ day = "2020.06.08"
+ revision = "deadbeef"
+ buildurl = get_multi_tasks_url(route, revision, day=day)
+ assert all(item in buildurl for item in (route, day, revision))
+
+ with mock.patch("mozperftest.utils.date") as mockeddate:
+ mockeddate.today.return_value = mockeddate
+ mockeddate.strftime.return_value = "2020.07.09"
+ buildurl = get_multi_tasks_url(route, revision, day="today")
+ assert "2020.07.09" in buildurl and route in buildurl
+
+ with mock.patch("mozperftest.utils.timedelta"):
+ mockeddate.__sub__.return_value = mockeddate
+ mockeddate.strftime.return_value = "2020.08.09"
+ buildurl = get_multi_tasks_url(route, revision)
+ assert "2020.08.09" in buildurl and route in buildurl
+
+
+class ImportMe:
+ pass
+
+
+def test_load_class():
+ with pytest.raises(ImportError):
+ load_class("notimportable")
+
+ with pytest.raises(ImportError):
+ load_class("notim:por:table")
+
+ with pytest.raises(ImportError):
+ load_class("notim:portable")
+
+ with pytest.raises(ImportError):
+ load_class("mozperftest.tests.test_utils:NOEXIST")
+
+ klass = load_class("mozperftest.tests.test_utils:ImportMe")
+ assert klass is ImportMe
+
+
+def test_load_class_from_path():
+ with pytest.raises(ImportError) as exc:
+ load_class_from_path("nonexistent", __file__)
+ assert "found but it was not a valid class" in exc.value.args[0]
+
+ with pytest.raises(ImportError) as exc:
+ load_class_from_path("nonexistent", "nonexistent-file")
+ assert "does not exist." in exc.value.args[0]
+
+ klass = load_class_from_path("ImportMe", __file__)
+ assert klass.__name__ is ImportMe.__name__
+
+
+class _Venv:
+ python_path = sys.executable
+
+
+def test_checkout_python_script():
+ with silence() as captured:
+ assert checkout_python_script(_Venv(), "lib2to3", ["--help"])
+
+ stdout, stderr = captured
+ stdout.seek(0)
+ assert stdout.read() == "=> lib2to3 [OK]\n"
+
+
+def test_run_python_script_failed():
+ with silence() as captured:
+ assert not checkout_python_script(_Venv(), "nothing")
+
+ stdout, stderr = captured
+ stdout.seek(0)
+ assert stdout.read().endswith("[FAILED]\n")
+
+
+def test_get_output_dir():
+ with temp_file() as temp_dir:
+ output_dir = get_output_dir(temp_dir)
+ assert output_dir.exists()
+ assert output_dir.is_dir()
+
+ output_dir = get_output_dir(output=temp_dir, folder="artifacts")
+ assert output_dir.exists()
+ assert output_dir.is_dir()
+ assert "artifacts" == output_dir.parts[-1]
+
+
+def test_create_path():
+ path = Path("path/doesnt/exist").resolve()
+ if path.exists():
+ shutil.rmtree(path.parent.parent)
+ try:
+ path = create_path(path)
+
+ assert path.exists()
+ finally:
+ shutil.rmtree(path.parent.parent)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_visualmetrics.py b/python/mozperftest/mozperftest/tests/test_visualmetrics.py
new file mode 100644
index 0000000000..6a017c00e3
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_visualmetrics.py
@@ -0,0 +1,103 @@
+#!/usr/bin/env python
+import json
+import os
+from unittest import mock
+
+import mozunit
+import pytest
+
+from mozperftest.environment import METRICS
+from mozperftest.tests.support import (
+ BT_DATA_VIDEO,
+ EXAMPLE_TEST,
+ get_running_env,
+ temp_file,
+)
+
+VM_RES = {
+ "SpeedIndex": 1031,
+ "FirstVisualChange": 533,
+ "LastVisualChange": 3166,
+ "VisualProgress": (
+ "0=0, 533=63, 700=63, 733=63, 900=63, 933=63, 1233=54,"
+ "1333=54, 1366=56, 1500=56, 1633=96, 1800=96, 1933=96,"
+ "2133=96, 2200=96, 2366=96, 2533=96, 2566=96, 2600=96,"
+ "2733=96, 2833=96, 2933=96, 3000=96, 3133=96,3166=100"
+ ),
+ "videoRecordingStart": 0,
+}
+
+
+def get_res(*args, **kw):
+ return json.dumps(VM_RES)
+
+
+def mocked_executable():
+ return ("ok", "ok")
+
+
+@mock.patch("mozperftest.test.browsertime.runner.install_package")
+@mock.patch(
+ "mozperftest.test.noderunner.NodeRunner.verify_node_install", new=lambda x: True
+)
+@mock.patch(
+ "mozperftest.test.browsertime.runner.BrowsertimeRunner._setup_node_packages",
+ new=lambda x, y: None,
+)
+@mock.patch("mozperftest.metrics.visualmetrics.which", new=lambda path: "ok")
+@mock.patch("mozbuild.nodeutil.find_node_executable", new=mocked_executable)
+@mock.patch("subprocess.check_output", new=get_res)
+def test_visual_metrics(device):
+ os.environ["VISUALMETRICS_PY"] = ""
+ mach_cmd, metadata, env = get_running_env(
+ visualmetrics=True,
+ perfherder=True,
+ verbose=True,
+ tests=[EXAMPLE_TEST],
+ )
+ metrics = env.layers[METRICS]
+
+ metadata.add_result({"results": str(BT_DATA_VIDEO.parent), "name": "browsertime"})
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ with metrics as m:
+ metadata = m(metadata)
+
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ # Check some metadata
+ assert output["application"]["name"] == "firefox"
+ visual_metrics = [i["name"] for i in output["suites"][1]["subtests"]]
+ assert "VisualProgress96" in visual_metrics
+
+
+@mock.patch("mozperftest.test.browsertime.runner.install_package")
+@mock.patch(
+ "mozperftest.test.noderunner.NodeRunner.verify_node_install", new=lambda x: True
+)
+@mock.patch(
+ "mozperftest.test.browsertime.runner.BrowsertimeRunner._setup_node_packages",
+ new=lambda x, y: None,
+)
+@mock.patch("mozperftest.metrics.visualmetrics.which", new=lambda path: None)
+def test_visual_metrics_no_ffmpeg(device):
+ os.environ["VISUALMETRICS_PY"] = ""
+ mach_cmd, metadata, env = get_running_env(
+ visualmetrics=True,
+ perfherder=True,
+ verbose=True,
+ tests=[EXAMPLE_TEST],
+ )
+ metrics = env.layers[METRICS]
+ metadata.add_result({"results": str(BT_DATA_VIDEO.parent), "name": "browsertime"})
+
+ with pytest.raises(FileNotFoundError):
+ with metrics as m:
+ metadata = m(metadata)
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_visualtools.py b/python/mozperftest/mozperftest/tests/test_visualtools.py
new file mode 100644
index 0000000000..9e5af583d4
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_visualtools.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+import os
+from unittest import mock
+
+import mozunit
+import pytest
+
+from mozperftest.test.browsertime.visualtools import get_dependencies, xvfb
+from mozperftest.utils import temporary_env
+
+
+@mock.patch(
+ "mozperftest.test.browsertime.visualtools.find_executable", new=lambda name: "Xvfb"
+)
+def test_xvfb(*mocked):
+ with temporary_env(DISPLAY="ME"):
+ with mock.patch("subprocess.Popen") as mocked, xvfb():
+ mocked.assert_called()
+ assert os.environ["DISPLAY"] == "ME"
+
+
+@mock.patch(
+ "mozperftest.test.browsertime.visualtools.find_executable", new=lambda name: "Xvfb"
+)
+def test_xvfb_env(*mocked):
+ with temporary_env(DISPLAY=None):
+ with mock.patch("subprocess.Popen") as mocked, xvfb():
+ mocked.assert_called()
+ assert "DISPLAY" not in os.environ
+
+
+@mock.patch(
+ "mozperftest.test.browsertime.visualtools.find_executable", new=lambda name: None
+)
+def test_xvfb_none(*mocked):
+ with pytest.raises(FileNotFoundError), xvfb():
+ pass
+
+
+def test_get_dependencies():
+ # Making sure we get a list on all supported platforms.
+ # If we miss one, this raises a KeyError.
+ get_dependencies()
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/python/mozperftest/mozperftest/tests/test_webpagetest.py b/python/mozperftest/mozperftest/tests/test_webpagetest.py
new file mode 100644
index 0000000000..1c2c51ca0b
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_webpagetest.py
@@ -0,0 +1,271 @@
+import json
+import random
+from unittest import mock
+
+import pytest
+import requests
+
+import mozperftest.test.webpagetest as webpagetest
+from mozperftest.test.webpagetest import (
+ ACCEPTED_STATISTICS,
+ WPT_API_EXPIRED_MESSAGE,
+ WPTBrowserSelectionError,
+ WPTDataProcessingError,
+ WPTExpiredAPIKeyError,
+ WPTInvalidConnectionSelection,
+ WPTInvalidStatisticsError,
+ WPTInvalidURLError,
+ WPTLocationSelectionError,
+ WPTTimeOutError,
+)
+from mozperftest.tests.support import EXAMPLE_WPT_TEST, get_running_env
+
+WPT_METRICS = [
+ "firstContentfulPaint",
+ "timeToContentfulPaint",
+ "visualComplete90",
+ "firstPaint",
+ "visualComplete99",
+ "visualComplete",
+ "SpeedIndex",
+ "bytesIn",
+ "bytesOut",
+ "TTFB",
+ "fullyLoadedCPUms",
+ "fullyLoadedCPUpct",
+ "domElements",
+ "domContentLoadedEventStart",
+ "domContentLoadedEventEnd",
+ "loadEventStart",
+ "loadEventEnd",
+]
+
+
+class WPTTests:
+ def __init__(self, log):
+ self.log = log
+
+ def runTests(self, args):
+ return True
+
+
+def running_env(**kw):
+ return get_running_env(flavor="webpagetest", **kw)
+
+
+def init_placeholder_wpt_data(fvonly=False, invalid_results=False):
+ views = {"firstView": {}}
+ if not fvonly:
+ views["repeatView"] = {}
+ placeholder_data = {
+ "data": {
+ "summary": "websitelink.com",
+ "location": "ec2-us-east-1:Firefox",
+ "testRuns": 3,
+ "successfulFVRuns": 3,
+ "successfulRVRuns": 3,
+ "fvonly": fvonly,
+ "average": views,
+ "standardDeviation": views,
+ "median": views,
+ "runs": {"1": {"firstView": {"browserVersion": 101.1}}},
+ "url": "testurl.ca",
+ },
+ "webPagetestVersion": 21.0,
+ }
+ exclude_metrics = 0 if not invalid_results else 2
+ for metric in WPT_METRICS[exclude_metrics:]:
+ for view in views:
+ for stat in ACCEPTED_STATISTICS:
+ placeholder_data["data"][stat][view][metric] = random.randint(0, 10000)
+ placeholder_data["data"][stat][view][metric] = random.randint(0, 10000)
+ placeholder_data["data"][stat][view][metric] = random.randint(0, 10000)
+ return placeholder_data
+
+
+def init_mocked_request(
+ status_code, WPT_test_status_code=200, WPT_test_status_text="Ok", **kwargs
+):
+ mock_data = {
+ "data": {
+ "ec2-us-east-1": {"PendingTests": {"Queued": 3}, "Label": "California"},
+ "jsonUrl": "mock_test.com",
+ "summary": "Just a pageload test",
+ "url": "testurl.ca",
+ "remaining": 2000,
+ },
+ "statusCode": WPT_test_status_code,
+ "statusText": WPT_test_status_text,
+ }
+ for key, value in kwargs.items():
+ mock_data["data"][key] = value
+ mock_request = requests.Response()
+ mock_request.status_code = status_code
+ mock_request._content = json.dumps(mock_data).encode("utf-8")
+ return mock_request
+
+
+@mock.patch(
+ "mozperftest.test.webpagetest.WebPageTest.get_WPT_results",
+ return_value=init_placeholder_wpt_data(),
+)
+@mock.patch("mozperftest.utils.get_tc_secret", return_value={"wpt_key": "fake_key"})
+@mock.patch(
+ "mozperftest.test.webpagetest.WebPageTest.location_queue", return_value=None
+)
+@mock.patch("requests.get", return_value=init_mocked_request(200))
+@mock.patch("mozperftest.test.webpagetest.WPT_KEY_FILE", "tests/data/WPT_fakekey.txt")
+def test_webpagetest_no_issues_mocked_results(*mocked):
+ mach_cmd, metadata, env = running_env(tests=[str(EXAMPLE_WPT_TEST)])
+ test = webpagetest.WebPageTest(env, mach_cmd)
+ metadata.script["options"]["test_parameters"]["wait_between_requests"] = 1
+ metadata.script["options"]["test_parameters"]["first_view_only"] = 0
+ metadata.script["options"]["test_parameters"]["test_list"] = ["google.ca"]
+ test.run(metadata)
+
+
+@mock.patch("mozperftest.utils.get_tc_secret", return_value={"wpt_key": "fake_key"})
+@mock.patch(
+ "mozperftest.test.webpagetest.WebPageTest.location_queue", return_value=None
+)
+@mock.patch("requests.get", return_value=init_mocked_request(200))
+@mock.patch("mozperftest.test.webpagetest.WPT_KEY_FILE", "tests/data/WPT_fakekey.txt")
+def test_webpagetest_test_invalid_browser(*mocked):
+ mach_cmd, metadata, env = running_env(tests=[str(EXAMPLE_WPT_TEST)])
+ metadata.script["options"]["test_parameters"]["browser"] = "Invalid Browser"
+ test = webpagetest.WebPageTest(env, mach_cmd)
+ with pytest.raises(WPTBrowserSelectionError):
+ test.run(metadata)
+
+
+@mock.patch("mozperftest.utils.get_tc_secret", return_value={"wpt_key": "fake_key"})
+@mock.patch(
+ "mozperftest.test.webpagetest.WebPageTest.location_queue", return_value=None
+)
+@mock.patch("requests.get", return_value=init_mocked_request(200))
+@mock.patch("mozperftest.test.webpagetest.WPT_KEY_FILE", "tests/data/WPT_fakekey.txt")
+def test_webpagetest_test_invalid_connection(*mocked):
+ mach_cmd, metadata, env = running_env(tests=[str(EXAMPLE_WPT_TEST)])
+ test = webpagetest.WebPageTest(env, mach_cmd)
+ metadata.script["options"]["test_parameters"]["connection"] = "Invalid Connection"
+ with pytest.raises(WPTInvalidConnectionSelection):
+ test.run(metadata)
+
+
+@mock.patch("mozperftest.utils.get_tc_secret", return_value={"wpt_key": "fake_key"})
+@mock.patch(
+ "mozperftest.test.webpagetest.WebPageTest.location_queue", return_value=None
+)
+@mock.patch("requests.get", return_value=init_mocked_request(200))
+@mock.patch("mozperftest.test.webpagetest.WPT_KEY_FILE", "tests/data/WPT_fakekey.txt")
+def test_webpagetest_test_invalid_url(*mocked):
+ mach_cmd, metadata, env = running_env(tests=[str(EXAMPLE_WPT_TEST)])
+ test = webpagetest.WebPageTest(env, mach_cmd)
+ metadata.script["options"]["test_list"] = ["InvalidUrl"]
+ with pytest.raises(WPTInvalidURLError):
+ test.run(metadata)
+
+
+@mock.patch("mozperftest.utils.get_tc_secret", return_value={"wpt_key": "fake_key"})
+@mock.patch(
+ "mozperftest.test.webpagetest.WebPageTest.location_queue", return_value=None
+)
+@mock.patch("requests.get", return_value=init_mocked_request(200))
+@mock.patch("mozperftest.test.webpagetest.WPT_KEY_FILE", "tests/data/WPT_fakekey.txt")
+def test_webpagetest_test_invalid_statistic(*mocked):
+ mach_cmd, metadata, env = running_env(tests=[str(EXAMPLE_WPT_TEST)])
+ test = webpagetest.WebPageTest(env, mach_cmd)
+ metadata.script["options"]["test_parameters"]["statistics"] = ["Invalid Statistic"]
+ with pytest.raises(WPTInvalidStatisticsError):
+ test.run(metadata)
+ assert True
+
+
+@mock.patch("requests.get", return_value=init_mocked_request(200))
+@mock.patch("mozperftest.utils.get_tc_secret", return_value={"wpt_key": "fake_key"})
+@mock.patch(
+ "mozperftest.test.webpagetest.WebPageTest.request_with_timeout",
+ return_value={"data": {}},
+)
+@mock.patch("mozperftest.test.webpagetest.WPT_KEY_FILE", "tests/data/WPT_fakekey.txt")
+def test_webpagetest_test_invalid_location(*mocked):
+ mach_cmd, metadata, env = running_env(tests=[str(EXAMPLE_WPT_TEST)])
+ test = webpagetest.WebPageTest(env, mach_cmd)
+ metadata.script["options"]["test_parameters"]["location"] = "Invalid Location"
+ with pytest.raises(WPTLocationSelectionError):
+ test.run(metadata)
+
+
+@mock.patch("requests.get", return_value=init_mocked_request(200, 101))
+@mock.patch("mozperftest.utils.get_tc_secret", return_value={"wpt_key": "fake_key"})
+@mock.patch(
+ "mozperftest.test.webpagetest.WebPageTest.location_queue", return_value=None
+)
+@mock.patch("mozperftest.test.webpagetest.WPT_KEY_FILE", "tests/data/WPT_fakekey.txt")
+def test_webpagetest_test_timeout(*mocked):
+ mach_cmd, metadata, env = running_env(tests=[str(EXAMPLE_WPT_TEST)])
+ test = webpagetest.WebPageTest(env, mach_cmd)
+ metadata.script["options"]["test_parameters"]["timeout_limit"] = 2
+ metadata.script["options"]["test_parameters"]["wait_between_requests"] = 1
+ with pytest.raises(WPTTimeOutError):
+ test.run(metadata)
+ assert True
+
+
+@mock.patch(
+ "requests.get",
+ return_value=init_mocked_request(
+ 200, testRuns=3, successfulFVRuns=3, fvonly=True, location="BadLocation"
+ ),
+)
+@mock.patch("mozperftest.utils.get_tc_secret", return_value={"wpt_key": "fake_key"})
+@mock.patch(
+ "mozperftest.test.webpagetest.WebPageTest.location_queue", return_value=None
+)
+@mock.patch("mozperftest.test.webpagetest.WPT_KEY_FILE", "tests/data/WPT_fakekey.txt")
+def test_webpagetest_test_wrong_browserlocation(*mocked):
+ mach_cmd, metadata, env = running_env(tests=[str(EXAMPLE_WPT_TEST)])
+ metadata.script["options"]["test_list"] = ["google.ca"]
+ metadata.script["options"]["test_parameters"]["wait_between_requests"] = 1
+ test = webpagetest.WebPageTest(env, mach_cmd)
+ with pytest.raises(WPTBrowserSelectionError):
+ test.run(metadata)
+
+
+@mock.patch(
+ "mozperftest.test.webpagetest.WebPageTest.get_WPT_results",
+ return_value=init_placeholder_wpt_data(invalid_results=True),
+)
+@mock.patch("mozperftest.utils.get_tc_secret", return_value={"wpt_key": "fake_key"})
+@mock.patch(
+ "mozperftest.test.webpagetest.WebPageTest.location_queue", return_value=None
+)
+@mock.patch("requests.get", return_value=init_mocked_request(200))
+@mock.patch("mozperftest.test.webpagetest.WPT_KEY_FILE", "tests/data/WPT_fakekey.txt")
+def test_webpagetest_test_metric_not_found(*mocked):
+ mach_cmd, metadata, env = running_env(tests=[str(EXAMPLE_WPT_TEST)])
+ metadata.script["options"]["test_list"] = ["google.ca"]
+ metadata.script["options"]["test_parameters"]["wait_between_requests"] = 1
+ test = webpagetest.WebPageTest(env, mach_cmd)
+ with pytest.raises(WPTDataProcessingError):
+ test.run(metadata)
+
+
+@mock.patch("mozperftest.utils.get_tc_secret", return_value={"wpt_key": "fake_key"})
+@mock.patch(
+ "mozperftest.test.webpagetest.WebPageTest.location_queue", return_value=None
+)
+@mock.patch(
+ "requests.get",
+ return_value=init_mocked_request(
+ 200, WPT_test_status_code=400, WPT_test_status_text=WPT_API_EXPIRED_MESSAGE
+ ),
+)
+@mock.patch("mozperftest.test.webpagetest.WPT_KEY_FILE", "tests/data/WPT_fakekey.txt")
+def test_webpagetest_test_expired_api_key(*mocked):
+ mach_cmd, metadata, env = running_env(tests=[str(EXAMPLE_WPT_TEST)])
+ metadata.script["options"]["test_list"] = ["google.ca"]
+ metadata.script["options"]["test_parameters"]["wait_between_requests"] = 1
+ test = webpagetest.WebPageTest(env, mach_cmd)
+ with pytest.raises(WPTExpiredAPIKeyError):
+ test.run(metadata)
diff --git a/python/mozperftest/mozperftest/tests/test_xpcshell.py b/python/mozperftest/mozperftest/tests/test_xpcshell.py
new file mode 100644
index 0000000000..efdb4a5387
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_xpcshell.py
@@ -0,0 +1,165 @@
+import json
+import shutil
+from unittest import mock
+
+import pytest
+
+from mozperftest import utils
+from mozperftest.environment import METRICS, SYSTEM, TEST
+from mozperftest.test import xpcshell
+from mozperftest.test.xpcshell import XPCShellTestError
+from mozperftest.tests.support import (
+ EXAMPLE_XPCSHELL_TEST,
+ MOZINFO,
+ get_running_env,
+ temp_file,
+)
+
+
+class XPCShellTests:
+ def __init__(self, log):
+ self.log = log
+
+ def runTests(self, args):
+ self.log.suite_start("suite start")
+ self.log.test_start("test start")
+ self.log.process_output("1234", "line", "command")
+ self.log.log_raw({"action": "something"})
+ self.log.log_raw({"action": "log", "message": "message"})
+
+ # these are the metrics sent by the scripts
+ self.log.log_raw(
+ {
+ "action": "log",
+ "message": '"perfMetrics"',
+ "extra": {"metrics1": 1, "metrics2": 2},
+ }
+ )
+
+ self.log.log_raw(
+ {"action": "log", "message": '"perfMetrics"', "extra": {"metrics3": 3}}
+ )
+
+ self.log.test_end("test end")
+ self.log.suite_end("suite end")
+ return True
+
+
+class XPCShellTestsFail(XPCShellTests):
+ def runTests(self, args):
+ return False
+
+
+class XPCShellTestsNoPerfMetrics:
+ def __init__(self, log):
+ self.log = log
+
+ def runTests(self, args):
+ self.log.suite_start("suite start")
+ self.log.test_start("test start")
+ self.log.process_output("1234", "line", "command")
+ self.log.log_raw({"action": "something"})
+ self.log.log_raw({"action": "log", "message": "message"})
+
+ self.log.test_end("test end")
+ self.log.suite_end("suite end")
+ return True
+
+
+def running_env(**kw):
+ return get_running_env(flavor="xpcshell", xpcshell_mozinfo=MOZINFO, **kw)
+
+
+@mock.patch("runxpcshelltests.XPCShellTests", new=XPCShellTests)
+def test_xpcshell_metrics(*mocked):
+ mach_cmd, metadata, env = running_env(tests=[str(EXAMPLE_XPCSHELL_TEST)])
+
+ sys = env.layers[SYSTEM]
+ xpcshell = env.layers[TEST]
+
+ try:
+ with sys as s, xpcshell as x:
+ x(s(metadata))
+ finally:
+ shutil.rmtree(mach_cmd._mach_context.state_dir)
+
+ res = metadata.get_results()
+ assert len(res) == 1
+ assert res[0]["name"] == "test_xpcshell.js"
+ results = res[0]["results"]
+
+ assert results[0]["name"] == "metrics1"
+ assert results[0]["values"] == [1]
+
+
+def _test_xpcshell_fail(err, *mocked):
+ mach_cmd, metadata, env = running_env(tests=[str(EXAMPLE_XPCSHELL_TEST)])
+ sys = env.layers[SYSTEM]
+ xpcshell = env.layers[TEST]
+ try:
+ with sys as s, xpcshell as x, pytest.raises(err):
+ x(s(metadata))
+ finally:
+ shutil.rmtree(mach_cmd._mach_context.state_dir)
+
+
+@mock.patch("runxpcshelltests.XPCShellTests", new=XPCShellTestsFail)
+def test_xpcshell_metrics_fail(*mocked):
+ return _test_xpcshell_fail(XPCShellTestError, mocked)
+
+
+@mock.patch("runxpcshelltests.XPCShellTests", new=XPCShellTestsNoPerfMetrics)
+def test_xpcshell_no_perfmetrics(*mocked):
+ return _test_xpcshell_fail(utils.NoPerfMetricsError, *mocked)
+
+
+@mock.patch("runxpcshelltests.XPCShellTests", new=XPCShellTests)
+def test_xpcshell_perfherder(*mocked):
+ return _test_xpcshell_perfherder(*mocked)
+
+
+@mock.patch("runxpcshelltests.XPCShellTests", new=XPCShellTests)
+def test_xpcshell_perfherder_on_try(*mocked):
+ old = utils.ON_TRY
+ utils.ON_TRY = xpcshell.ON_TRY = not utils.ON_TRY
+
+ try:
+ return _test_xpcshell_perfherder(*mocked)
+ finally:
+ utils.ON_TRY = old
+ xpcshell.ON_TRY = old
+
+
+def _test_xpcshell_perfherder(*mocked):
+ mach_cmd, metadata, env = running_env(
+ perfherder=True, xpcshell_cycles=10, tests=[str(EXAMPLE_XPCSHELL_TEST)]
+ )
+
+ sys = env.layers[SYSTEM]
+ xpcshell = env.layers[TEST]
+ metrics = env.layers[METRICS]
+
+ with temp_file() as output:
+ env.set_arg("output", output)
+ try:
+ with sys as s, xpcshell as x, metrics as m:
+ m(x(s(metadata)))
+ finally:
+ shutil.rmtree(mach_cmd._mach_context.state_dir)
+
+ output_file = metadata.get_output()
+ with open(output_file) as f:
+ output = json.loads(f.read())
+
+ # Check some metadata
+ assert output["application"]["name"] == "firefox"
+ assert output["framework"]["name"] == "mozperftest"
+
+ # Check some numbers in our data
+ assert len(output["suites"]) == 1
+ assert len(output["suites"][0]["subtests"]) == 3
+ assert "value" not in output["suites"][0]
+ assert any(r > 0 for r in output["suites"][0]["subtests"][0]["replicates"])
+
+ for subtest in output["suites"][0]["subtests"]:
+ assert subtest["name"].startswith("metrics")
diff --git a/python/mozperftest/mozperftest/tools.py b/python/mozperftest/mozperftest/tools.py
new file mode 100644
index 0000000000..ab8af66ea7
--- /dev/null
+++ b/python/mozperftest/mozperftest/tools.py
@@ -0,0 +1,148 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import json
+import os
+import shutil
+import tempfile
+from pathlib import Path
+
+
+class PerformanceChangeDetected(Exception):
+ """Raised when a performance change is detected.
+
+ This failure happens with regressions, and improvements. There
+ is no unique failure for each of them.
+
+ TODO: We eventually need to be able to distinguish between these.
+ To do so, we would need to incorporate the "lower_is_better" settings
+ into the detection tooling.
+ """
+
+ pass
+
+
+def run_side_by_side(artifacts, kwargs):
+ from mozperftest_tools.side_by_side import SideBySide
+
+ output_specified = None
+ if "output" in kwargs:
+ output_specified = kwargs.pop("output")
+
+ if output_specified:
+ s = SideBySide(str(output_specified))
+ s.run(**kwargs)
+ print(f"Results can be found in {output_specified}")
+ else:
+ tempdir = tempfile.mkdtemp()
+ s = SideBySide(str(tempdir))
+ s.run(**kwargs)
+ try:
+ for file in os.listdir(tempdir):
+ if (
+ file.endswith(".mp4")
+ or file.endswith(".gif")
+ or file.endswith(".json")
+ ):
+ print(f"Copying from {tempdir}/{file} to {artifacts}")
+ shutil.copy(Path(tempdir, file), artifacts)
+ finally:
+ shutil.rmtree(tempdir)
+
+
+def _gather_task_names(kwargs):
+ task_names = kwargs.get("task_names", [])
+ if len(task_names) == 0:
+ if kwargs.get("test_name", None) is None:
+ raise Exception("No test, or task names given!")
+ if kwargs.get("platform", None) is None:
+ raise Exception("No platform, or task names given!")
+ task_names.append(kwargs["platform"] + "-" + kwargs["test_name"])
+ return task_names
+
+
+def _get_task_splitter(task):
+ splitter = "/opt-"
+ if splitter not in task:
+ splitter = "/" + task.split("/")[-1].split("-")[0] + "-"
+ return splitter
+
+
+def _format_changes_to_str(all_results):
+ changes_detected = None
+ for task, results in all_results.items():
+ for pltype, metrics in results["metrics-with-changes"].items():
+ for metric, changes in metrics.items():
+ for revision, diffs in changes.items():
+ if changes_detected is None:
+ changes_detected = "REVISION PL_TYPE METRIC %-DIFFERENCE\n"
+ changes_detected += f"{revision} {pltype} {metric} {str(diffs)}\n"
+ return changes_detected
+
+
+def run_change_detector(artifacts, kwargs):
+ from mozperftest_tools.regression_detector import ChangeDetector
+
+ tempdir = tempfile.mkdtemp()
+ detector = ChangeDetector(tempdir)
+
+ all_results = {}
+ results_path = Path(artifacts, "results.json")
+ try:
+ for task in _gather_task_names(kwargs):
+ splitter = _get_task_splitter(task)
+
+ platform, test_name = task.split(splitter)
+ platform += splitter[:-1]
+
+ new_test_name = test_name
+ new_platform_name = platform
+ if kwargs["new_test_name"] is not None:
+ new_test_name = kwargs["new_test_name"]
+ if kwargs["new_platform"] is not None:
+ new_platform_name = kwargs["new_platform_name"]
+
+ all_changed_revisions, changed_metric_revisions = detector.detect_changes(
+ test_name=test_name,
+ new_test_name=new_test_name,
+ platform=platform,
+ new_platform=new_platform_name,
+ base_revision=kwargs["base_revision"],
+ new_revision=kwargs["new_revision"],
+ base_branch=kwargs["base_branch"],
+ new_branch=kwargs["new_branch"],
+ # Depth of -1 means auto-computed (everything in between the two given revisions),
+ # None is direct comparisons, anything else uses the new_revision as a start
+ # and goes backwards from there.
+ depth=kwargs.get("depth", None),
+ skip_download=False,
+ overwrite=False,
+ )
+
+ # The task names are unique, so we don't need to worry about
+ # them overwriting each other
+ all_results[task] = {}
+ all_results[task]["revisions-with-changes"] = list(all_changed_revisions)
+ all_results[task]["metrics-with-changes"] = changed_metric_revisions
+
+ changes_detected = _format_changes_to_str(all_results)
+ if changes_detected is not None:
+ print(changes_detected)
+ raise PerformanceChangeDetected(
+ "[ERROR] A significant performance change was detected in your patch! "
+ "See the logs above, or the results.json artifact that was produced for "
+ "more information."
+ )
+
+ finally:
+ shutil.rmtree(tempdir)
+
+ print(f"Saving change detection results to {str(results_path)}")
+ with results_path.open("w") as f:
+ json.dump(all_results, f, indent=4)
+
+
+TOOL_RUNNERS = {
+ "side-by-side": run_side_by_side,
+ "change-detector": run_change_detector,
+}
diff --git a/python/mozperftest/mozperftest/utils.py b/python/mozperftest/mozperftest/utils.py
new file mode 100644
index 0000000000..d1ecc7646d
--- /dev/null
+++ b/python/mozperftest/mozperftest/utils.py
@@ -0,0 +1,634 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import contextlib
+import functools
+import importlib
+import inspect
+import logging
+import os
+import pathlib
+import re
+import shlex
+import shutil
+import subprocess
+import sys
+import tempfile
+from collections import defaultdict
+from datetime import date, datetime, timedelta
+from io import StringIO
+from pathlib import Path
+
+import requests
+from redo import retry
+from requests.packages.urllib3.util.retry import Retry
+
+RETRY_SLEEP = 10
+API_ROOT = "https://firefox-ci-tc.services.mozilla.com/api/index/v1"
+MULTI_REVISION_ROOT = f"{API_ROOT}/namespaces"
+MULTI_TASK_ROOT = f"{API_ROOT}/tasks"
+ON_TRY = "MOZ_AUTOMATION" in os.environ
+DOWNLOAD_TIMEOUT = 30
+METRICS_MATCHER = re.compile(r"(perfMetrics\s.*)")
+PRETTY_APP_NAMES = {
+ "org.mozilla.fenix": "fenix",
+ "org.mozilla.firefox": "fenix",
+ "org.mozilla.geckoview_example": "geckoview",
+}
+
+
+class NoPerfMetricsError(Exception):
+ """Raised when perfMetrics were not found, or were not output
+ during a test run."""
+
+ def __init__(self, flavor):
+ super().__init__(
+ f"No perftest results were found in the {flavor} test. Results must be "
+ 'reported using:\n info("perfMetrics", { metricName: metricValue });'
+ )
+
+
+class LogProcessor:
+ def __init__(self, matcher):
+ self.buf = ""
+ self.stdout = sys.__stdout__
+ self.matcher = matcher
+ self._match = []
+
+ @property
+ def match(self):
+ return self._match
+
+ def write(self, buf):
+ while buf:
+ try:
+ newline_index = buf.index("\n")
+ except ValueError:
+ # No newline, wait for next call
+ self.buf += buf
+ break
+
+ # Get data up to next newline and combine with previously buffered data
+ data = self.buf + buf[: newline_index + 1]
+ buf = buf[newline_index + 1 :]
+
+ # Reset buffer then output line
+ self.buf = ""
+ if data.strip() == "":
+ continue
+ self.stdout.write(data.strip("\n") + "\n")
+
+ # Check if a temporary commit wa created
+ match = self.matcher.match(data)
+ if match:
+ # Last line found is the revision we want
+ self._match.append(match.group(1))
+
+ def flush(self):
+ pass
+
+
+@contextlib.contextmanager
+def silence(layer=None):
+ if layer is None:
+ to_patch = (MachLogger,)
+ else:
+ to_patch = (MachLogger, layer)
+
+ meths = ("info", "debug", "warning", "error", "log")
+ patched = defaultdict(dict)
+
+ oldout, olderr = sys.stdout, sys.stderr
+ sys.stdout, sys.stderr = StringIO(), StringIO()
+
+ def _vacuum(*args, **kw):
+ sys.stdout.write(str(args))
+
+ for obj in to_patch:
+ for meth in meths:
+ if not hasattr(obj, meth):
+ continue
+ patched[obj][meth] = getattr(obj, meth)
+ setattr(obj, meth, _vacuum)
+
+ stdout = stderr = None
+ try:
+ sys.stdout.buffer = sys.stdout
+ sys.stderr.buffer = sys.stderr
+ sys.stdout.fileno = sys.stderr.fileno = lambda: -1
+ try:
+ yield sys.stdout, sys.stderr
+ except Exception:
+ sys.stdout.seek(0)
+ stdout = sys.stdout.read()
+ sys.stderr.seek(0)
+ stderr = sys.stderr.read()
+ raise
+ finally:
+ sys.stdout, sys.stderr = oldout, olderr
+ for obj, meths in patched.items():
+ for name, old_func in meths.items():
+ try:
+ setattr(obj, name, old_func)
+ except Exception:
+ pass
+ if stdout is not None:
+ print(stdout)
+ if stderr is not None:
+ print(stderr)
+
+
+def simple_platform():
+ plat = host_platform()
+
+ if plat.startswith("win"):
+ return "win"
+ elif plat.startswith("linux"):
+ return "linux"
+ else:
+ return "mac"
+
+
+def host_platform():
+ is_64bits = sys.maxsize > 2**32
+
+ if sys.platform.startswith("win"):
+ if is_64bits:
+ return "win64"
+ elif sys.platform.startswith("linux"):
+ if is_64bits:
+ return "linux64"
+ elif sys.platform.startswith("darwin"):
+ return "darwin"
+
+ raise ValueError(f"platform not yet supported: {sys.platform}")
+
+
+class MachLogger:
+ """Wrapper around the mach logger to make logging simpler."""
+
+ def __init__(self, mach_cmd):
+ self._logger = mach_cmd.log
+
+ @property
+ def log(self):
+ return self._logger
+
+ def info(self, msg, name="mozperftest", **kwargs):
+ self._logger(logging.INFO, name, kwargs, msg)
+
+ def debug(self, msg, name="mozperftest", **kwargs):
+ self._logger(logging.DEBUG, name, kwargs, msg)
+
+ def warning(self, msg, name="mozperftest", **kwargs):
+ self._logger(logging.WARNING, name, kwargs, msg)
+
+ def error(self, msg, name="mozperftest", **kwargs):
+ self._logger(logging.ERROR, name, kwargs, msg)
+
+
+def install_package(virtualenv_manager, package, ignore_failure=False):
+ """Installs a package using the virtualenv manager.
+
+ Makes sure the package is really installed when the user already has it
+ in their local installation.
+
+ Returns True on success, or re-raise the error. If ignore_failure
+ is set to True, ignore the error and return False
+ """
+ from pip._internal.req.constructors import install_req_from_line
+
+ # Ensure that we are looking in the right places for packages. This
+ # is required in CI because pip installs in an area that is not in
+ # the search path.
+ venv_site_lib = str(Path(virtualenv_manager.bin_path, "..", "lib").resolve())
+ venv_site_packages = str(
+ Path(
+ venv_site_lib,
+ f"python{sys.version_info.major}.{sys.version_info.minor}",
+ "site-packages",
+ )
+ )
+ if venv_site_packages not in sys.path and ON_TRY:
+ sys.path.insert(0, venv_site_packages)
+
+ req = install_req_from_line(package)
+ req.check_if_exists(use_user_site=False)
+ # already installed, check if it's in our venv
+ if req.satisfied_by is not None:
+ site_packages = os.path.abspath(req.satisfied_by.location)
+ if site_packages.startswith(venv_site_lib):
+ # already installed in this venv, we can skip
+ return True
+ with silence():
+ try:
+ subprocess.check_call(
+ [virtualenv_manager.python_path, "-m", "pip", "install", package]
+ )
+ return True
+ except Exception:
+ if not ignore_failure:
+ raise
+ return False
+
+
+def install_requirements_file(
+ virtualenv_manager, requirements_file, ignore_failure=False
+):
+ """Installs a package using the virtualenv manager.
+
+ Makes sure the package is really installed when the user already has it
+ in their local installation.
+
+ Returns True on success, or re-raise the error. If ignore_failure
+ is set to True, ignore the error and return False
+ """
+
+ # Ensure that we are looking in the right places for packages. This
+ # is required in CI because pip installs in an area that is not in
+ # the search path.
+ venv_site_lib = str(Path(virtualenv_manager.bin_path, "..", "lib").resolve())
+ venv_site_packages = Path(
+ venv_site_lib,
+ f"python{sys.version_info.major}.{sys.version_info.minor}",
+ "site-packages",
+ )
+ if not venv_site_packages.exists():
+ venv_site_packages = Path(
+ venv_site_lib,
+ "site-packages",
+ )
+
+ venv_site_packages = str(venv_site_packages)
+ if venv_site_packages not in sys.path and ON_TRY:
+ sys.path.insert(0, venv_site_packages)
+
+ with silence():
+ cwd = os.getcwd()
+ try:
+ os.chdir(Path(requirements_file).parent)
+ subprocess.check_call(
+ [
+ virtualenv_manager.python_path,
+ "-m",
+ "pip",
+ "install",
+ "--no-deps",
+ "-r",
+ requirements_file,
+ "--no-index",
+ "--find-links",
+ "https://pypi.pub.build.mozilla.org/pub/",
+ ]
+ )
+ return True
+ except Exception:
+ if not ignore_failure:
+ raise
+ finally:
+ os.chdir(cwd)
+ return False
+
+
+# on try, we create tests packages where tests, like
+# xpcshell tests, don't have the same path.
+# see - python/mozbuild/mozbuild/action/test_archive.py
+# this mapping will map paths when running there.
+# The key is the source path, and the value the ci path
+_TRY_MAPPING = {
+ Path("netwerk"): Path("xpcshell", "tests", "netwerk"),
+ Path("dom"): Path("mochitest", "tests", "dom"),
+}
+
+
+def build_test_list(tests):
+ """Collects tests given a list of directories, files and URLs.
+
+ Returns a tuple containing the list of tests found and a temp dir for tests
+ that were downloaded from an URL.
+ """
+ temp_dir = None
+
+ if isinstance(tests, str):
+ tests = [tests]
+ res = []
+ for test in tests:
+ if test.startswith("http"):
+ if temp_dir is None:
+ temp_dir = tempfile.mkdtemp()
+ target = Path(temp_dir, test.split("/")[-1])
+ download_file(test, target)
+ res.append(str(target))
+ continue
+
+ p_test = Path(test)
+ if ON_TRY and not p_test.resolve().exists():
+ # until we have pathlib.Path.is_relative_to() (3.9)
+ for src_path, ci_path in _TRY_MAPPING.items():
+ src_path, ci_path = str(src_path), str(ci_path) # noqa
+ if test.startswith(src_path):
+ p_test = Path(test.replace(src_path, ci_path))
+ break
+
+ resolved_test = p_test.resolve()
+
+ if resolved_test.is_file():
+ res.append(str(resolved_test))
+ elif resolved_test.is_dir():
+ for file in resolved_test.rglob("perftest_*.js"):
+ res.append(str(file))
+ else:
+ raise FileNotFoundError(str(resolved_test))
+ res.sort()
+ return res, temp_dir
+
+
+def download_file(url, target, retry_sleep=RETRY_SLEEP, attempts=3):
+ """Downloads a file, given an URL in the target path.
+
+ The function will attempt several times on failures.
+ """
+
+ def _download_file(url, target):
+ req = requests.get(url, stream=True, timeout=30)
+ target_dir = target.parent.resolve()
+ if str(target_dir) != "":
+ target_dir.mkdir(exist_ok=True)
+
+ with target.open("wb") as f:
+ for chunk in req.iter_content(chunk_size=1024):
+ if not chunk:
+ continue
+ f.write(chunk)
+ f.flush()
+ return target
+
+ return retry(
+ _download_file,
+ args=(url, target),
+ attempts=attempts,
+ sleeptime=retry_sleep,
+ jitter=0,
+ )
+
+
+@contextlib.contextmanager
+def temporary_env(**env):
+ old = {}
+ for key, value in env.items():
+ old[key] = os.environ.get(key)
+ if value is None and key in os.environ:
+ del os.environ[key]
+ elif value is not None:
+ os.environ[key] = value
+ try:
+ yield
+ finally:
+ for key, value in old.items():
+ if value is None and key in os.environ:
+ del os.environ[key]
+ elif value is not None:
+ os.environ[key] = value
+
+
+def convert_day(day):
+ if day in ("yesterday", "today"):
+ curr = date.today()
+ if day == "yesterday":
+ curr = curr - timedelta(1)
+ day = curr.strftime("%Y.%m.%d")
+ else:
+ # verify that the user provided string is in the expected format
+ # if it can't parse it, it'll raise a value error
+ datetime.strptime(day, "%Y.%m.%d")
+
+ return day
+
+
+def get_revision_namespace_url(route, day="yesterday"):
+ """Builds a URL to obtain all the namespaces of a given build route for a single day."""
+ day = convert_day(day)
+ return f"""{MULTI_REVISION_ROOT}/{route}.{day}.revision"""
+
+
+def get_multi_tasks_url(route, revision, day="yesterday"):
+ """Builds a URL to obtain all the tasks of a given build route for a single day.
+
+ If previous is true, then we get builds from the previous day,
+ otherwise, we look at the current day.
+ """
+ day = convert_day(day)
+ return f"""{MULTI_TASK_ROOT}/{route}.{day}.revision.{revision}"""
+
+
+def strtobool(val):
+ if isinstance(val, (bool, int)):
+ return bool(val)
+ if not isinstance(bool, str):
+ raise ValueError(val)
+ val = val.lower()
+ if val in ("y", "yes", "t", "true", "on", "1"):
+ return 1
+ elif val in ("n", "no", "f", "false", "off", "0"):
+ return 0
+ else:
+ raise ValueError("invalid truth value %r" % (val,))
+
+
+@contextlib.contextmanager
+def temp_dir():
+ tempdir = tempfile.mkdtemp()
+ try:
+ yield tempdir
+ finally:
+ shutil.rmtree(tempdir)
+
+
+def load_class(path):
+ """Loads a class given its path and returns it.
+
+ The path is a string of the form `package.module:class` that points
+ to the class to be imported.
+
+ If if can't find it, or if the path is malformed,
+ an ImportError is raised.
+ """
+ if ":" not in path:
+ raise ImportError(f"Malformed path '{path}'")
+ elmts = path.split(":")
+ if len(elmts) != 2:
+ raise ImportError(f"Malformed path '{path}'")
+ mod_name, klass_name = elmts
+ try:
+ mod = importlib.import_module(mod_name)
+ except ModuleNotFoundError:
+ raise ImportError(f"Can't find '{mod_name}'")
+ try:
+ klass = getattr(mod, klass_name)
+ except AttributeError:
+ raise ImportError(f"Can't find '{klass_name}' in '{mod_name}'")
+ return klass
+
+
+def load_class_from_path(klass_name, path):
+ """This function returns a Transformer class with the given path.
+
+ :param str path: The path points to the custom transformer.
+ :param bool ret_members: If true then return inspect.getmembers().
+ :return Transformer if not ret_members else inspect.getmembers().
+ """
+ file = pathlib.Path(path)
+
+ if not file.exists():
+ raise ImportError(f"The class path {path} does not exist.")
+
+ # Importing a source file directly
+ spec = importlib.util.spec_from_file_location(name=file.name, location=path)
+ module = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(module)
+
+ members = inspect.getmembers(
+ module,
+ lambda c: inspect.isclass(c) and c.__name__ == klass_name,
+ )
+
+ if not members:
+ raise ImportError(f"The path {path} was found but it was not a valid class.")
+
+ return members[0][-1]
+
+
+def run_script(cmd, cmd_args=None, verbose=False, display=False, label=None):
+ """Used to run a command in a subprocess."""
+ if isinstance(cmd, str):
+ cmd = shlex.split(cmd)
+ try:
+ joiner = shlex.join
+ except AttributeError:
+ # Python < 3.8
+ joiner = subprocess.list2cmdline
+
+ if label is None:
+ label = joiner(cmd)
+ sys.stdout.write(f"=> {label} ")
+ if cmd_args is None:
+ args = cmd
+ else:
+ args = cmd + list(cmd_args)
+ sys.stdout.flush()
+ try:
+ if verbose:
+ sys.stdout.write(f"\nRunning {' '.join(args)}\n")
+ sys.stdout.flush()
+ output = subprocess.check_output(args)
+ if display:
+ sys.stdout.write("\n")
+ for line in output.split(b"\n"):
+ sys.stdout.write(line.decode("utf8") + "\n")
+ sys.stdout.write("[OK]\n")
+ sys.stdout.flush()
+ return True, output
+ except subprocess.CalledProcessError as e:
+ for line in e.output.split(b"\n"):
+ sys.stdout.write(line.decode("utf8") + "\n")
+ sys.stdout.write("[FAILED]\n")
+ sys.stdout.flush()
+ return False, e
+
+
+def run_python_script(
+ virtualenv_manager,
+ module,
+ module_args=None,
+ verbose=False,
+ display=False,
+ label=None,
+):
+ """Used to run a Python script in isolation."""
+ if label is None:
+ label = module
+ cmd = [virtualenv_manager.python_path, "-m", module]
+ return run_script(cmd, module_args, verbose=verbose, display=display, label=label)
+
+
+def checkout_script(cmd, cmd_args=None, verbose=False, display=False, label=None):
+ return run_script(cmd, cmd_args, verbose, display, label)[0]
+
+
+def checkout_python_script(
+ virtualenv_manager,
+ module,
+ module_args=None,
+ verbose=False,
+ display=False,
+ label=None,
+):
+ return run_python_script(
+ virtualenv_manager, module, module_args, verbose, display, label
+ )[0]
+
+
+_URL = (
+ "{0}/secrets/v1/secret/project"
+ "{1}releng{1}gecko{1}build{1}level-{2}{1}conditioned-profiles"
+)
+_WPT_URL = "{0}/secrets/v1/secret/project/perftest/gecko/level-{1}/perftest-login"
+_DEFAULT_SERVER = "https://firefox-ci-tc.services.mozilla.com"
+
+
+@functools.lru_cache()
+def get_tc_secret(wpt=False):
+ """Returns the Taskcluster secret.
+
+ Raises an OSError when not running on try
+ """
+ if not ON_TRY:
+ raise OSError("Not running in Taskcluster")
+ session = requests.Session()
+ retry = Retry(total=5, backoff_factor=0.1, status_forcelist=[500, 502, 503, 504])
+ http_adapter = requests.adapters.HTTPAdapter(max_retries=retry)
+ session.mount("https://", http_adapter)
+ session.mount("http://", http_adapter)
+ secrets_url = _URL.format(
+ os.environ.get("TASKCLUSTER_PROXY_URL", _DEFAULT_SERVER),
+ "%2F",
+ os.environ.get("MOZ_SCM_LEVEL", "1"),
+ )
+ if wpt:
+ secrets_url = _WPT_URL.format(
+ os.environ.get("TASKCLUSTER_PROXY_URL", _DEFAULT_SERVER),
+ os.environ.get("MOZ_SCM_LEVEL", "1"),
+ )
+ res = session.get(secrets_url, timeout=DOWNLOAD_TIMEOUT)
+ res.raise_for_status()
+ return res.json()["secret"]
+
+
+def get_output_dir(output, folder=None):
+ if output is None:
+ raise Exception("Output path was not provided.")
+
+ result_dir = Path(output)
+ if folder is not None:
+ result_dir = Path(result_dir, folder)
+
+ result_dir.mkdir(parents=True, exist_ok=True)
+ result_dir = result_dir.resolve()
+
+ return result_dir
+
+
+def create_path(path):
+ if path.exists():
+ return path
+ else:
+ create_path(path.parent)
+ path.mkdir(exist_ok=True)
+ return path
+
+
+def get_pretty_app_name(app):
+ # XXX See bug 1712337, we need a singluar point of entry
+ # for the binary to allow us to get the version/app info
+ # so that we can get a pretty name on desktop.
+ return PRETTY_APP_NAMES[app]
diff --git a/python/mozperftest/perfdocs/config.yml b/python/mozperftest/perfdocs/config.yml
new file mode 100644
index 0000000000..049d004682
--- /dev/null
+++ b/python/mozperftest/perfdocs/config.yml
@@ -0,0 +1,49 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+---
+name: mozperftest
+manifest: None
+static-only: False
+suites:
+ netwerk/test/perf:
+ description: "Performance tests from the 'network/test/perf' folder."
+ tests:
+ youtube-scroll: ""
+ facebook-scroll: ""
+ cloudflare: ""
+ controlled: ""
+ g-search: ""
+ g-image: ""
+ lq-fetch: ""
+ youtube-noscroll: ""
+ netwerk/test/unit:
+ description: "Performance tests from the 'netwerk/test/unit' folder."
+ tests:
+ http3 raw: ""
+ testing/performance:
+ description: "Performance tests from the 'testing/performance' folder."
+ tests:
+ Politico Link: ""
+ BBC Link: ""
+ JSConf (cold): ""
+ Facebook: ""
+ YouTube Link: ""
+ pageload: ""
+ JSConf (warm): ""
+ perfstats: ""
+ webpagetest-firefox: ""
+ webpagetest-chrome: ""
+ android-startup: ""
+
+ browser/base/content/test:
+ description: "Performance tests from the 'browser/base/content/test' folder."
+ tests:
+ Dom-size: ""
+
+ dom/serviceworkers/test/performance:
+ description: "Performance tests running through Mochitest for Service Workers"
+ tests:
+ "Service Worker Caching": ""
+ "Service Worker Fetch": ""
+ "Service Worker Registration": ""
diff --git a/python/mozperftest/perfdocs/developing.rst b/python/mozperftest/perfdocs/developing.rst
new file mode 100644
index 0000000000..97125d8729
--- /dev/null
+++ b/python/mozperftest/perfdocs/developing.rst
@@ -0,0 +1,154 @@
+Developing in mozperftest
+=========================
+
+Architecture overview
+---------------------
+
+`mozperftest` implements a mach command that is a thin wrapper on the
+top of `runner.py`, which allows us to run the tool without having to go through
+a mach call. Command arguments are prepared in `argparser.py` and then made
+available for the runner.
+
+The runner creates a `MachEnvironment` instance (see `environment.py`) and a
+`Metadata` instance (see `metadata.py`). These two objects are shared during the
+whole test and used to share data across all parts.
+
+The runner then calls `MachEnvironment.run`, which is in charge of running the test.
+The `MachEnvironment` instance runs a sequence of **layers**.
+
+Layers are classes responsible of one single aspect of a performance test. They
+are organized in three categories:
+
+- **system**: anything that sets up and tears down some resources or services
+ on the system. Existing system layers: **android**, **proxy**
+- **test**: layers that are in charge of running a test to collect metrics.
+ Existing test layers: **browsertime** and **androidlog**
+- **metrics**: all layers that process the metrics to turn them into usable
+ metrics. Existing system layers: **perfherder** and **console**
+
+The MachEnvironment instance collects a series of layers for each category and
+runs them sequentially.
+
+The goal of this organization is to allow adding new performance tests runners
+that will be based on a specific combination of layers. To avoid messy code,
+we need to make sure that each layer represents a single aspect of the process
+and that is completely independent from other layers (besides sharing the data
+through the common environment.)
+
+For instance, we could use `perftest` to run a C++ benchmark by implementing a
+new **test** layer.
+
+
+Layer
+-----
+
+A layer is a class that inherits from `mozperftest.layers.Layer` and implements
+a few methods and class variables.
+
+List of methods and variables:
+
+- `name`: name of the layer (class variable, mandatory)
+- `activated`: boolean to activate by default the layer (class variable, False)
+- `user_exception`: will trigger the `on_exception` hook when an exception occurs
+- `arguments`: dict containing arguments. Each argument is following
+ the `argparser` standard
+- `run(self, medatata)`: called to execute the layer
+- `setup(self)`: called when the layer is about to be executed
+- `teardown(self)`: called when the layer is exiting
+
+Example::
+
+ class EmailSender(Layer):
+ """Sends an email with the results
+ """
+ name = "email"
+ activated = False
+
+ arguments = {
+ "recipient": {
+ "type": str,
+ "default": "tarek@mozilla.com",
+ "help": "Recipient",
+ },
+ }
+
+ def setup(self):
+ self.server = smtplib.SMTP(smtp_server,port)
+
+ def teardown(self):
+ self.server.quit()
+
+ def __call__(self, metadata):
+ self.server.send_email(self.get_arg("recipient"), metadata.results())
+
+
+It can then be added to one of the top functions that are used to create a list
+of layers for each category:
+
+- **mozperftest.metrics.pick_metrics** for the metrics category
+- **mozperftest.system.pick_system** for the system category
+- **mozperftest.test.pick_browser** for the test category
+
+And also added in each `get_layers` function in each of those category.
+The `get_layers` functions are invoked when building the argument parser.
+
+In our example, adding the `EmailSender` layer will add two new options:
+
+- **--email** a flag to activate the layer
+- **--email-recipient**
+
+
+Important layers
+----------------
+
+**mozperftest** can be used to run performance tests against browsers using the
+**browsertime** test layer. It leverages the `browsertime.js
+<https://www.sitespeed.io/documentation/browsertime/>`_ framework and provides
+a full integration into Mozilla's build and CI systems.
+
+Browsertime uses the selenium webdriver client to drive the browser, and
+provides some metrics to measure performance during a user journey.
+
+
+Coding style
+------------
+
+For the coding style, we want to:
+
+- Follow `PEP 257 <https://www.python.org/dev/peps/pep-0257/>`_ for docstrings
+- Avoid complexity as much as possible
+- Use modern Python 3 code (for instance `pathlib` instead of `os.path`)
+- Avoid dependencies on Mozilla build projects and frameworks as much as possible
+ (mozharness, mozbuild, etc), or make sure they are isolated and documented
+
+
+Landing patches
+---------------
+
+.. warning::
+
+ It is mandatory for each patch to have a test. Any change without a test
+ will be rejected.
+
+Before landing a patch for mozperftest, make sure you run `perftest-test`::
+
+ % ./mach perftest-test
+ => black [OK]
+ => flake8 [OK]
+ => remove old coverage data [OK]
+ => running tests [OK]
+ => coverage
+ Name Stmts Miss Cover Missing
+ ------------------------------------------------------------------------------------------
+ mozperftest/metrics/notebook/analyzer.py 29 20 31% 26-36, 39-42, 45-51
+ ...
+ mozperftest/system/proxy.py 37 0 100%
+ ------------------------------------------------------------------------------------------
+ TOTAL 1614 240 85%
+
+ [OK]
+
+The command will run `black`, `flake8` and also make sure that the test coverage has not regressed.
+
+You can use the `-s` option to bypass flake8/black to speed up your workflow, but make
+sure you do a full tests run. You can also pass the name of one single test module.
diff --git a/python/mozperftest/perfdocs/index.rst b/python/mozperftest/perfdocs/index.rst
new file mode 100644
index 0000000000..8c313197b3
--- /dev/null
+++ b/python/mozperftest/perfdocs/index.rst
@@ -0,0 +1,20 @@
+===========
+Mozperftest
+===========
+
+**Mozperftest** can be used to run performance tests.
+
+
+.. toctree::
+
+ running
+ tools
+ writing
+ developing
+ vision
+
+The following documents all testing we have for mozperftest.
+If the owner does not specify the Usage and Description, it's marked N/A.
+
+{documentation}
+If you have any questions, please see this `wiki page <https://wiki.mozilla.org/TestEngineering/Performance#Where_to_find_us>`_.
diff --git a/python/mozperftest/perfdocs/running.rst b/python/mozperftest/perfdocs/running.rst
new file mode 100644
index 0000000000..ed8d9947a9
--- /dev/null
+++ b/python/mozperftest/perfdocs/running.rst
@@ -0,0 +1,51 @@
+Running a performance test
+==========================
+
+You can run `perftest` locally or in Mozilla's CI
+
+Running locally
+---------------
+
+Running a test is as simple as calling it using `mach perftest` in a mozilla-central source
+checkout::
+
+ $ ./mach perftest
+
+The `mach` command will bootstrap the installation of all required tools for the
+framework to run, and display a selection screen to pick a test. Once the
+selection is done, the performance test will run locally.
+
+If you know what test you want to run, you can use its path explicitly::
+
+ $ ./mach perftest perftest_script.js
+
+`mach perftest` comes with numerous options, and the test script should provide
+decent defaults so you don't have to bother with them. If you need to tweak some
+options, you can use `./mach perftest --help` to learn about them.
+
+
+Running in the CI
+-----------------
+
+.. warning::
+
+ If you are looking for how to run performance tests in CI and ended up here, you might want to checkout :ref:`Mach Try Perf`.
+
+.. warning::
+
+ If you plan to run tests often in the CI for android, you should contact the android
+ infra team to make sure there's availability in our pool of devices.
+
+You can run in the CI directly from the `mach perftest` command by adding the `--push-to-try` option
+to your locally working perftest call.
+
+This call will run the fuzzy selector and then send the job into our CI::
+
+ $ ./mach perftest --push-to-try
+
+We have phones on bitbar that can run your android tests. Tests are fairly fast
+to run in the CI because they use sparse profiles. Depending on the
+availability of workers, once the task starts, it takes around 15mn to start
+the test.
+
+
diff --git a/python/mozperftest/perfdocs/tools.rst b/python/mozperftest/perfdocs/tools.rst
new file mode 100644
index 0000000000..4bb975e9f9
--- /dev/null
+++ b/python/mozperftest/perfdocs/tools.rst
@@ -0,0 +1,21 @@
+Running a performance tool
+==========================
+
+You can run `perftest-tools` locally.
+
+Running locally
+---------------
+
+You can run `mach perftest-tools` in a mozilla-central source
+checkout::
+
+ $ ./mach perftest-tools side-by-side --help
+
+The `mach` command will bootstrap the installation of all required dependencies for the
+side-by-side tool to run.
+
+The following arguments are required: `-t/--test-name`, `--base-revision`, `--new-revision`,
+`--base-platform`
+
+The `--help` argument will explain more about what arguments you need to
+run in order to use the tool.
diff --git a/python/mozperftest/perfdocs/vision.rst b/python/mozperftest/perfdocs/vision.rst
new file mode 100644
index 0000000000..64a1f4f92b
--- /dev/null
+++ b/python/mozperftest/perfdocs/vision.rst
@@ -0,0 +1,66 @@
+Vision
+======
+
+The `mozperftest` project was created with the intention to replace all
+existing performance testing frameworks that exist in the mozilla central
+source tree with a single one, and make performance tests a standardized, first-class
+citizen, alongside mochitests and xpcshell tests.
+
+We want to give the ability to any developer to write performance tests in
+their component, both locally and in the CI, exactly like how they would do with
+`xpcshell` tests and `mochitests`.
+
+Historically, we have `Talos`, that provided a lot of different tests, from
+micro-benchmarks to page load tests. From there we had `Raptor`, that was a
+fork of Talos, focusing on page loads only. Then `mach browsertime` was added,
+which was a wrapper around the `browsertime` tool.
+
+All those frameworks besides `mach browsertime` were mainly focusing on working
+well in the CI, and were hard to use locally. `mach browsertime` worked locally but
+not on all platforms and was specific to the browsertime framework.
+
+`mozperftest` currently provides the `mach perftest` command, that will scan
+for all tests that are declared in ini files such as
+https://searchfox.org/mozilla-central/source/netwerk/test/perf/perftest.toml and
+registered under **PERFTESTS_MANIFESTS** in `moz.build` files such as
+https://searchfox.org/mozilla-central/source/netwerk/test/moz.build#17
+
+If you launch `./mach perftest` without any parameters, you will get a full list
+of available tests, and you can pick and run one. Adding `--push-to-try` will
+run it on try.
+
+The framework loads perf tests and read its metadata, that can be declared
+within the test. We have a parser that is currently able to recognize and load
+**xpcshell** tests and **browsertime** tests, and a runner for each one of those.
+
+But the framework can be extended to support more formats. We would like to add
+support for **jsshell** and any other format we have in m-c.
+
+A performance test is a script that perftest runs, and that returns metrics we
+can use. Right now we consume those metrics directly in the console, and
+also in perfherder, but other formats could be added. For instance, there's
+a new **influxdb** output that has been added, to push the data in an **influxdb**
+time series database.
+
+What is important is to make sure performance tests belong to the component it's
+testing in the source tree. We've learned with Talos that grouping all performance
+tests in a single place is problematic because there's no sense of ownership from
+developers once it's added there. It becomes the perf team problem. If the tests
+stay in each component alongside mochitests and xpcshell tests, the component
+maintainers will own and maintain it.
+
+
+Next steps
+----------
+
+We want to rewrite all Talos and Raptor tests into perftest. For Raptor, we need
+to have the ability to use proxy records, which is a work in progress. From there,
+running a **raptor** test will be a simple, one liner browsertime script.
+
+For Talos, we'll need to refactor the existing micro-benchmarks into xpchsell tests,
+and if that does not suffice, create a new runner.
+
+For JS benchmarks, once the **jsshell** runner is added into perftest, it will be
+straightforward.
+
+
diff --git a/python/mozperftest/perfdocs/writing.rst b/python/mozperftest/perfdocs/writing.rst
new file mode 100644
index 0000000000..232c17eedd
--- /dev/null
+++ b/python/mozperftest/perfdocs/writing.rst
@@ -0,0 +1,228 @@
+Performance scripts
+===================
+
+Performance scripts are programs that drive the browser to run a specific
+benchmark (like a page load or a lower level call) and produce metrics.
+
+We support two flavors right now in `perftest` (but it's easy to add
+new ones):
+
+- **xpcshell** a classical xpcshell test, turned into a performance test
+- **browsertime** a browsertime script, which runs a full browser and controls
+ it via a Selenium client.
+- **mochitest** a classical mochitest test, turned into a performance test
+
+In order to qualify as performance tests, both flavors require metadata.
+
+For our supported flavors that are both Javascript modules, those are
+provided in a `perfMetadata` mapping variable in the module, or in
+the `module.exports` variable when using Node.
+
+This is the list of fields:
+
+- **owner**: name of the owner (person or team) [mandatory]
+- **author**: author of the test
+- **name**: name of the test [mandatory]
+- **description**: short description [mandatory]
+- **longDescription**: longer description
+- **options**: options used to run the test
+- **supportedBrowsers**: list of supported browsers (or "Any")
+- **supportedPlatforms**: list of supported platforms (or "Any")
+- **tags** a list of tags that describe the test
+
+Tests are registered using tests manifests and the **PERFTESTS_MANIFESTS**
+variable in `moz.build` files - it's good practice to name this file
+`perftest.toml`.
+
+Example of such a file: https://searchfox.org/mozilla-central/source/testing/performance/perftest.toml
+
+
+xpcshell
+--------
+
+`xpcshell` tests are plain xpcshell tests, with two more things:
+
+- the `perfMetadata` variable, as described in the previous section
+- calls to `info("perfMetrics", ...)` to send metrics to the `perftest` framework.
+
+Here's an example of such a metrics call::
+
+ # compute some speed metrics
+ let speed = 12345;
+ info("perfMetrics", JSON.stringify({ speed }));
+
+
+Mochitest
+---------
+
+Similar to ``xpcshell`` tests, these are standard ``mochitest`` tests with some extra things:
+
+- the ``perfMetadata`` variable, as described in the previous section
+- calls to ``info("perfMetrics", ...)`` to send metrics to the ``perftest`` framework
+
+Note that the ``perfMetadata`` variable can exist in any ``<script>...</script>`` element in the Mochitest HTML test file. The ``perfMetadata`` variable also needs a couple additional settings in Mochitest tests. These are the ``manifest``, and ``manifest_flavor`` options::
+
+ var perfMetadata = {
+ owner: "Performance Team",
+ name: "Test test",
+ description: "N/A",
+ options: {
+ default: {
+ perfherder: true,
+ perfherder_metrics: [
+ { name: "Registration", unit: "ms" },
+ ],
+ manifest: "perftest.toml",
+ manifest_flavor: "plain",
+ extra_args: [
+ "headless",
+ ]
+ },
+ },
+ };
+
+The ``extra_args`` setting provides an area to provide custom Mochitest command-line arguments for this test.
+
+Here's an example of a call that will produce metrics::
+
+ # compute some speed metrics
+ let speed = 12345;
+ info("perfMetrics", JSON.stringify({ speed }));
+
+Existing Mochitest unit tests can be modified with these to be compatible with mozperftest, but note that some issues exist when doing this:
+
+- unittest issues with mochitest tests running on hardware
+- multiple configurations of a test running in a single manifest
+
+At the top of this document, you can find some information about the recommended approach for adding a new manifest dedicated to running performance tests.
+
+Locally, mozperftest uses ``./mach test`` to run your test. Always ensure that your test works in ``./mach test`` before attempting to run it through ``./mach perftest``. In CI, we use a custom "remote" run that runs Mochitest directly, skipping ``./mach test``.
+
+If everything is setup correctly, running a performance test locally will be as simple as this::
+
+ ./mach perftest <path/to/my/mochitest-test.html>
+
+
+Browsertime
+-----------
+
+With the browsertime layer, performance scenarios are Node modules that
+implement at least one async function that will be called by the framework once
+the browser has started. The function gets a webdriver session and can interact
+with the browser.
+
+You can write complex, interactive scenarios to simulate a user journey,
+and collect various metrics.
+
+Full documentation is available `here <https://www.sitespeed.io/documentation/sitespeed.io/scripting/>`_
+
+The mozilla-central repository has a few performance tests script in
+`testing/performance` and more should be added in components in the future.
+
+By convention, a performance test is prefixed with **perftest_** to be
+recognized by the `perftest` command.
+
+A performance test implements at least one async function published in node's
+`module.exports` as `test`. The function receives two objects:
+
+- **context**, which contains:
+
+ - **options** - All the options sent from the CLI to Browsertime
+ - **log** - an instance to the log system so you can log from your navigation script
+ - **index** - the index of the runs, so you can keep track of which run you are currently on
+ - **storageManager** - The Browsertime storage manager that can help you read/store files to disk
+ - **selenium.webdriver** - The Selenium WebDriver public API object
+ - **selenium.driver** - The instantiated version of the WebDriver driving the current version of the browser
+
+- **command** provides API to interact with the browser. It's a wrapper
+ around the selenium client `Full documentation here <https://www.sitespeed.io/documentation/sitespeed.io/scripting/#commands>`_
+
+
+Below is an example of a test that visits the BBC homepage and clicks on a link.
+
+.. sourcecode:: javascript
+
+ "use strict";
+
+ async function setUp(context) {
+ context.log.info("setUp example!");
+ }
+
+ async function test(context, commands) {
+ await commands.navigate("https://www.bbc.com/");
+
+ // Wait for browser to settle
+ await commands.wait.byTime(10000);
+
+ // Start the measurement
+ await commands.measure.start("pageload");
+
+ // Click on the link and wait for page complete check to finish.
+ await commands.click.byClassNameAndWait("block-link__overlay-link");
+
+ // Stop and collect the measurement
+ await commands.measure.stop();
+ }
+
+ async function tearDown(context) {
+ context.log.info("tearDown example!");
+ }
+
+ module.exports = {
+ setUp,
+ test,
+ tearDown,
+ owner: "Performance Team",
+ test_name: "BBC",
+ description: "Measures pageload performance when clicking on a link from the bbc.com",
+ supportedBrowsers: "Any",
+ supportePlatforms: "Any",
+ };
+
+
+Besides the `test` function, scripts can implement a `setUp` and a `tearDown` function to run
+some code before and after the test. Those functions will be called just once, whereas
+the `test` function might be called several times (through the `iterations` option)
+
+
+Hooks
+-----
+
+A Python module can be used to run functions during a run lifecycle. Available hooks are:
+
+- **before_iterations(args)** runs before everything is started. Gets the args, which
+ can be changed. The **args** argument also contains a **virtualenv** variable that
+ can be used for installing Python packages (e.g. through `install_package <https://searchfox.org/mozilla-central/source/python/mozperftest/mozperftest/utils.py#115-144>`_).
+- **before_runs(env)** runs before the test is launched. Can be used to
+ change the running environment.
+- **after_runs(env)** runs after the test is done.
+- **on_exception(env, layer, exception)** called on any exception. Provides the
+ layer in which the exception occurred, and the exception. If the hook returns `True`
+ the exception is ignored and the test resumes. If the hook returns `False`, the
+ exception is ignored and the test ends immediately. The hook can also re-raise the
+ exception or raise its own exception.
+
+In the example below, the `before_runs` hook is setting the options on the fly,
+so users don't have to provide them in the command line::
+
+ from mozperftest.browser.browsertime import add_options
+
+ url = "'https://www.example.com'"
+
+ common_options = [("processStartTime", "true"),
+ ("firefox.disableBrowsertimeExtension", "true"),
+ ("firefox.android.intentArgument", "'-a'"),
+ ("firefox.android.intentArgument", "'android.intent.action.VIEW'"),
+ ("firefox.android.intentArgument", "'-d'"),
+ ("firefox.android.intentArgument", url)]
+
+
+ def before_runs(env, **kw):
+ add_options(env, common_options)
+
+
+To use this hook module, it can be passed to the `--hooks` option::
+
+ $ ./mach perftest --hooks hooks.py perftest_example.js
+
+
diff --git a/python/mozperftest/setup.cfg b/python/mozperftest/setup.cfg
new file mode 100644
index 0000000000..2a9acf13da
--- /dev/null
+++ b/python/mozperftest/setup.cfg
@@ -0,0 +1,2 @@
+[bdist_wheel]
+universal = 1
diff --git a/python/mozperftest/setup.py b/python/mozperftest/setup.py
new file mode 100644
index 0000000000..75ebab9305
--- /dev/null
+++ b/python/mozperftest/setup.py
@@ -0,0 +1,37 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+
+from setuptools import setup
+
+PACKAGE_NAME = "mozperftest"
+PACKAGE_VERSION = "0.2"
+
+deps = [
+ "regex",
+ "jsonschema",
+ "attr",
+ "mozlog >= 6.0",
+ "mozdevice >= 4.0.0",
+ "mozproxy",
+ "mozinfo",
+ "mozfile",
+ "mozperftest-tools",
+]
+
+setup(
+ name=PACKAGE_NAME,
+ version=PACKAGE_VERSION,
+ description="Mozilla's mach perftest command",
+ classifiers=["Programming Language :: Python :: 3.6"],
+ # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
+ keywords="",
+ author="Mozilla Performance Test Engineering Team",
+ author_email="tools@lists.mozilla.org",
+ url="https://hg.mozilla.org/mozilla-central/file/tip/python/mozperftest",
+ license="MPL",
+ packages=["mozperftest"],
+ include_package_data=True,
+ zip_safe=False,
+ install_requires=deps,
+)