From e6f2d0ba851d57a2d7290f043fbd972257505a0d Mon Sep 17 00:00:00 2001 From: Ahmed Elzeiny Date: Tue, 2 Apr 2024 11:19:47 -0700 Subject: [PATCH] JavaScript Profiler Black box tests (#2569) b/326457979 This set of BlackBox tests causes Cobalt to SEGFAULT by forcing Garbage Collection to execute while the JS Profiler is running. It adds a new API to CrashLog called h5vcc.crashLog.forceGarbageCollection() for the purposes of testing. Reverts [an existing revert in PR 2567](https://github.com/youtube/cobalt/pull/2567). Tests are rewritten to be less CPU-intensive; expecting fewer stack frames over a longer period of time. Test-On-Device: true --------- Co-authored-by: Ahmed Elzeiny (cherry picked from commit 30dacbc883edb55e40ebfae156f4eace6806b009) --- cobalt/black_box_tests/black_box_tests.py | 1 + .../testdata/javascript_profiler.html | 88 +++++++++++++++++++ .../tests/javascript_profiler.py | 40 +++++++++ 3 files changed, 129 insertions(+) create mode 100644 cobalt/black_box_tests/testdata/javascript_profiler.html create mode 100644 cobalt/black_box_tests/tests/javascript_profiler.py diff --git a/cobalt/black_box_tests/black_box_tests.py b/cobalt/black_box_tests/black_box_tests.py index 7dc6fd7ab359..98430bda0f22 100755 --- a/cobalt/black_box_tests/black_box_tests.py +++ b/cobalt/black_box_tests/black_box_tests.py @@ -78,6 +78,7 @@ 'disable_eval_with_csp', 'h5vcc_storage_write_verify_test', 'http_cache', + 'javascript_profiler', 'persistent_cookie', 'scroll', 'service_worker_add_to_cache_test', diff --git a/cobalt/black_box_tests/testdata/javascript_profiler.html b/cobalt/black_box_tests/testdata/javascript_profiler.html new file mode 100644 index 000000000000..f268510db49a --- /dev/null +++ b/cobalt/black_box_tests/testdata/javascript_profiler.html @@ -0,0 +1,88 @@ + + + + JavaScript Profiler Test + + + + + + diff --git a/cobalt/black_box_tests/tests/javascript_profiler.py b/cobalt/black_box_tests/tests/javascript_profiler.py new file mode 100644 index 000000000000..33dabc7a0821 --- /dev/null +++ b/cobalt/black_box_tests/tests/javascript_profiler.py @@ -0,0 +1,40 @@ +# Copyright 2024 The Cobalt Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Tests if Cobalt client page can use window.Profiler.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from cobalt.black_box_tests import black_box_tests +from cobalt.black_box_tests.threaded_web_server import ThreadedWebServer + + +class JavaScriptProfilerTest(black_box_tests.BlackBoxTestCase): + """Ensure that the client can declare a `window.Profiler` object.""" + + def test_javascript_profiler_prime_profiler(self): + with ThreadedWebServer(binding_address=self.GetBindingAddress()) as server: + modes = [ + 'testPrimeProfiler', + 'testSampleBufferFullProfiler', + 'testAbruptGarbageCollection', + ] + for mode in modes: + url = server.GetURL( + file_name=f'testdata/javascript_profiler.html?mode={mode}') + with self.CreateCobaltRunner(url=url) as runner: + runner.WaitForJSTestsSetup() + self.assertTrue(runner.JSTestsSucceeded(), + f'JavaScript profiler failed at case mode="{mode}".')