Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(220)

Unified Diff: third_party/WebKit/ManualTests/webaudio/scriptprocessornode-premature-gc.html

Issue 1762103002: Keep ScriptProcessorNode from premature GC with ScriptWrappable::hasPendingActivity() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/ManualTests/webaudio/scriptprocessornode-premature-gc.html
diff --git a/third_party/WebKit/ManualTests/webaudio/scriptprocessornode-premature-gc.html b/third_party/WebKit/ManualTests/webaudio/scriptprocessornode-premature-gc.html
new file mode 100644
index 0000000000000000000000000000000000000000..dcb4f15fb73a4909e852833b97904a47a7401064
--- /dev/null
+++ b/third_party/WebKit/ManualTests/webaudio/scriptprocessornode-premature-gc.html
@@ -0,0 +1,80 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Test premature GC on ScriptProcessorNode</title>
+ <style type="text/css">
+ body {
+ margin: 2em;
+ }
+ .manual-test-ui {
+ font-family: Arial;
+ padding: 1em;
+ border: 1px solid #999;
+ }
+ .manual-test-ui button {
+ padding: 1em;
+ font-size: 1em;
+ }
+ #eError {
+ font-family: Arial;
+ margin: 0.75em;
+ color: red;
+ }
+ </style>
+ </head>
+
+ <body>
+ <h1>Test Premature GC on ScriptProcessorNode</h1>
+
+ <p><strong>NOTE: This test requires HTTP server and getUserMedia (i.e. live
+ audio input).</strong></p>
+
+ <p>ScriptProcessorNode's the node reference should not get garbage collected
+ even when it is out of scope as long as <code>onaudioprocess</code>
+ handler is active.</p>
+
+ <p>This test must be performed manually, because 1) ScriptProcessorNode is
+ not compatible with OfflineAudioContext, thus 2)
+ <code>onaudioprocess</code> is being fired asynchronously.</p>
+
+ <p>As soon as this page loads, you should see the counter number increases
+ without stopping. Without the fix, the counter does not increase at all.
+ This test can be flaky, so it should be attempted repeatedly to see fail.
+ </p>
+
+ <p>CRBUG issue: <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=360378" target="_blank">
+ 360378</a></p>
+
+ <div class="manual-test-ui">
+ <p><code>onaudioprocess</code> called: <span id="eHandlerCounter">0</span></p>
+ </div>
+
+ <script type="text/javascript">
+ var eHandlerCounter = document.querySelector('#eHandlerCounter');
+ var counter = 0;
+
+ function handleGUMStream (stream) {
+ var context = new AudioContext();
+ var streamSource = context.createMediaStreamSource(stream);
+ var scriptNode = context.createScriptProcessor(4096, 1, 1);
+
+ scriptNode.onaudioprocess = function (event) {
+ var input = event.inputBuffer.getChannelData(0);
+ var output = event.outputBuffer.getChannelData(0);
+ output.set(input);
+ eHandlerCounter.textContent = counter++;
+ };
+
+ streamSource.connect(scriptNode).connect(context.destination);
+ }
+
+ function streamFailed (error) {
+ eHandlerCounter.textContent = 'Input Stream Error. (' + error + ')';
+ }
+
+ navigator.webkitGetUserMedia({
+ audio: true
+ }, handleGUMStream, streamFailed);
+ </script>
+ </body>
+</html>

Powered by Google App Engine
This is Rietveld 408576698