diff options
Diffstat (limited to 'dom/media/test/external/external_media_tests/utils.py')
-rw-r--r-- | dom/media/test/external/external_media_tests/utils.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/dom/media/test/external/external_media_tests/utils.py b/dom/media/test/external/external_media_tests/utils.py new file mode 100644 index 000000000..4ac0d5f62 --- /dev/null +++ b/dom/media/test/external/external_media_tests/utils.py @@ -0,0 +1,68 @@ +# 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 time +import types + +from marionette_driver.errors import TimeoutException + + +def timestamp_now(): + return int(time.mktime(datetime.datetime.now().timetuple())) + + +def verbose_until(wait, target, condition, message=""): + """ + Performs a `wait`.until(condition)` and adds information about the state of + `target` to any resulting `TimeoutException`. + + :param wait: a `marionette.Wait` instance + :param target: the object you want verbose output about if a + `TimeoutException` is raised + This is usually the input value provided to the `condition` used by + `wait`. Ideally, `target` should implement `__str__` + :param condition: callable function used by `wait.until()` + :param message: optional message to log when exception occurs + + :return: the result of `wait.until(condition)` + """ + if isinstance(condition, types.FunctionType): + name = condition.__name__ + else: + name = str(condition) + err_message = '\n'.join([message, + 'condition: ' + name, + str(target)]) + + return wait.until(condition, message=err_message) + + + +def save_memory_report(marionette): + """ + Saves memory report (like about:memory) to current working directory. + + :param marionette: Marionette instance to use for executing. + """ + with marionette.using_context('chrome'): + marionette.execute_async_script(""" + Components.utils.import("resource://gre/modules/Services.jsm"); + let Cc = Components.classes; + let Ci = Components.interfaces; + let dumper = Cc["@mozilla.org/memory-info-dumper;1"]. + getService(Ci.nsIMemoryInfoDumper); + // Examples of dirs: "CurProcD" usually 'browser' dir in + // current FF dir; "DfltDwnld" default download dir + let file = Services.dirsvc.get("CurProcD", Ci.nsIFile); + file.append("media-memory-report"); + file.createUnique(Ci.nsIFile.DIRECTORY_TYPE, 0777); + file.append("media-memory-report.json.gz"); + dumper.dumpMemoryReportsToNamedFile(file.path, null, null, false); + log('Saved memory report to ' + file.path); + // for dmd-enabled build + dumper.dumpMemoryInfoToTempDir("media", false, false); + marionetteScriptFinished(true); + return; + """, script_timeout=30000) |