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

Unified Diff: third_party/WebKit/LayoutTests/webaudio/audiocontextoptions.html

Issue 2750543003: Support AudioContextOptions latencyHint as double. (Closed)
Patch Set: Refactor audiocontextoptions LayoutTest. Created 3 years, 8 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
« no previous file with comments | « media/base/audio_latency.cc ('k') | third_party/WebKit/Source/modules/webaudio/AudioContext.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/LayoutTests/webaudio/audiocontextoptions.html
diff --git a/third_party/WebKit/LayoutTests/webaudio/audiocontextoptions.html b/third_party/WebKit/LayoutTests/webaudio/audiocontextoptions.html
index fe5e714bec6aa3949121c1b519bbaaa3264209ae..b7ce1ce98bf90b6fec1c459094ed7eda6d95b557 100644
--- a/third_party/WebKit/LayoutTests/webaudio/audiocontextoptions.html
+++ b/third_party/WebKit/LayoutTests/webaudio/audiocontextoptions.html
@@ -4,67 +4,136 @@
<title>Test AudioContextOptions</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
- <script src="resources/audio-testing.js"></script>
+ <script src="resources/audit.js"></script>
</head>
<body>
<script>
- var context;
- var audit = Audit.createTaskRunner();
+ let context;
+ let defaultLatency;
+ let interactiveLatency;
+ let balancedLatency;
+ let playbackLatency;
- // Task: test AudioContextOptions (1).
- audit.defineTask('test-audiocontextoptions-1', function (done) {
+ let audit = Audit.createTaskRunner();
- // Verify that an AudioContext can be created with default options.
- Should("context = new AudioContext()", function () {
- context = new AudioContext();
- }).notThrow();
+ audit.define(
+ {
+ label : "test-audiocontextoptions-latencyHint-basic",
+ description : "Test creating contexts with basic latencyHint types."
+ },
+ function(task, should) {
+ let closingPromises = [];
- var defaultLatency = context.baseLatency;
- Should("default baseLatency", defaultLatency).beGreaterThan(0);
+ // Verify that an AudioContext can be created with default options.
+ should(function(){context = new AudioContext()},
+ "context = new AudioContext()")
+ .notThrow();
- // Verify that any double can be passed and that it results in interactive latency
- Should("context = new AudioContext({'latencyHint': 0.05})", function () {
- context = new AudioContext({'latencyHint': 0.05});
- }).notThrow();
- Should("double-constructor baseLatency", context.baseLatency).beEqualTo(defaultLatency);
+ defaultLatency = context.baseLatency;
+ should(defaultLatency, "default baseLatency").beGreaterThan(0);
- // Verify that an AudioContext can be created with the expected latency types.
- Should("context = new AudioContext({'latencyHint': 'interactive'})", function () {
- context = new AudioContext({'latencyHint': 'interactive'});
- }).notThrow();
+ // Verify that an AudioContext can be created with the expected
+ // latency types.
+ should(function(){context = new AudioContext(
+ {'latencyHint' : 'interactive'})},
+ "context = new AudioContext({'latencyHint': 'interactive'})")
+ .notThrow();
- var interactiveLatency = context.baseLatency;
- Should("interactive baseLatency", interactiveLatency).beEqualTo(defaultLatency);
+ interactiveLatency = context.baseLatency;
+ should(interactiveLatency, "interactive baseLatency")
+ .beEqualTo(defaultLatency);
+ closingPromises.push(context.close());
- Should("context = new AudioContext({'latencyHint': 'balanced'})", function () {
- context = new AudioContext({'latencyHint': 'balanced'});
- }).notThrow();
+ should(function(){context =
+ new AudioContext({'latencyHint' : 'balanced'})},
+ "context = new AudioContext({'latencyHint': 'balanced'})")
+ .notThrow();
- var balancedLatency = context.baseLatency;
- Should("balanced baseLatency", balancedLatency).beGreaterThanOrEqualTo(interactiveLatency);
+ balancedLatency = context.baseLatency;
+ should(balancedLatency, "balanced baseLatency")
+ .beGreaterThanOrEqualTo(interactiveLatency);
+ closingPromises.push(context.close());
- Should("context = new AudioContext({'latencyHint': 'playback'})", function () {
- context = new AudioContext({'latencyHint': 'playback'});
- }).notThrow();
+ should(function(){context =
+ new AudioContext({'latencyHint' : 'playback'})},
+ "context = new AudioContext({'latencyHint': 'playback'})")
+ .notThrow();
- var playbackLatency = context.baseLatency;
- Should("playback baseLatency", playbackLatency).beGreaterThanOrEqualTo(balancedLatency);
+ playbackLatency = context.baseLatency;
+ should(playbackLatency, "playback baseLatency")
+ .beGreaterThanOrEqualTo(balancedLatency);
+ closingPromises.push(context.close());
- // Verify that invalid latencyHint values are rejected.
- Should("context = new AudioContext({'latencyHint': 'foo'})", function () {
- context = new AudioContext({'latencyHint': 'foo'});
- }).throw("TypeError");
+ Promise.all(closingPromises).then(function() { task.done(); });
+ });
- // Verify that no extra options can be passed into the AudioContextOptions.
- Should("context = new AudioContext('latencyHint')", function () {
- context = new AudioContext('latencyHint');
- }).throw("TypeError");
+ audit.define(
+ {
+ label : "test-audiocontextoptions-latencyHint-double",
+ description :
+ "Test creating contexts with explicit latencyHint values."
+ },
+ function(task, should) {
+ var closingPromises = [];
- done();
- });
+ // Verify too small exact latency clamped to 'interactive'
+ should(function(){context = new AudioContext(
+ {'latencyHint' : interactiveLatency / 2})},
+ "context = new AudioContext({'latencyHint': " +
+ "interactiveLatency/2})")
+ .notThrow();
+ should(context.baseLatency, "double-constructor baseLatency small")
+ .beEqualTo(interactiveLatency);
+ closingPromises.push(context.close());
- audit.runTasks();
+ // Verify that exact latency in range works as expected
+ var validLatency = (interactiveLatency + playbackLatency) / 2;
+ should(function(){context = new AudioContext(
+ {'latencyHint' : validLatency})},
+ "context = new AudioContext({'latencyHint': validLatency})")
+ .notThrow();
+ should(context.baseLatency,
+ "double-constructor baseLatency inrange 1")
+ .beGreaterThanOrEqualTo(interactiveLatency);
+ should(context.baseLatency,
+ "double-constructor baseLatency inrange 2")
+ .beLessThanOrEqualTo(playbackLatency);
+ closingPromises.push(context.close());
+
+ // Verify too big exact latency clamped to some value
+ var context1;
+ var context2;
+ should(
+ function() {
+ context1 =
+ new AudioContext({'latencyHint' : playbackLatency * 10});
+ context2 =
+ new AudioContext({'latencyHint' : playbackLatency * 20});
+ },
+ "creating two high latency contexts")
+ .notThrow();
+ should(context1.baseLatency, "high latency context baseLatency")
+ .beEqualTo(context2.baseLatency);
+ closingPromises.push(context1.close());
+ closingPromises.push(context2.close());
+
+ // Verify that invalid latencyHint values are rejected.
+ should(
+ function(){context = new AudioContext({'latencyHint' : 'foo'})},
+ "context = new AudioContext({'latencyHint': 'foo'})")
+ .throw("TypeError");
+
+ // Verify that no extra options can be passed into the
+ // AudioContextOptions.
+ should(function(){context = new AudioContext('latencyHint')},
+ "context = new AudioContext('latencyHint')")
+ .throw("TypeError");
+
+ Promise.all(closingPromises).then(function() { task.done(); });
+ });
+
+ audit.run();
</script>
</body>
</html>
« no previous file with comments | « media/base/audio_latency.cc ('k') | third_party/WebKit/Source/modules/webaudio/AudioContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698