Changeset 213983 in webkit


Ignore:
Timestamp:
Mar 15, 2017 9:38:10 AM (7 years ago)
Author:
commit-queue@webkit.org
Message:

run-webkit-tests is always creating mock libwebrtc tracks
https://bugs.webkit.org/show_bug.cgi?id=169658

Patch by Youenn Fablet <youenn@apple.com> on 2017-03-15
Reviewed by Alex Christensen.

Source/WebCore:

Tests: webrtc/peer-connection-audio-mute.html

webrtc/video-mute.html

Creating real libwebrtc av tracks in case of RealTwoPeerConnections mock factory.

  • testing/MockLibWebRTCPeerConnection.cpp:

(WebCore::MockLibWebRTCPeerConnectionFactory::CreateVideoTrack):
(WebCore::MockLibWebRTCPeerConnectionFactory::CreateAudioTrack):

  • testing/MockLibWebRTCPeerConnection.h:

LayoutTests:

  • TestExpectations:
  • webrtc/audio-peer-connection-webaudio.html:
  • webrtc/peer-connection-audio-mute-expected.txt: Added.
  • webrtc/peer-connection-audio-mute.html: Added.
  • webrtc/routines.js:

(analyseAudio):

  • webrtc/video-expected.txt:
  • webrtc/video-mute-expected.txt: Added.
  • webrtc/video-mute.html: Added.
  • webrtc/video.html:
Location:
trunk
Files:
4 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r213982 r213983  
     12017-03-15  Youenn Fablet  <youenn@apple.com>
     2
     3        run-webkit-tests is always creating mock libwebrtc tracks
     4        https://bugs.webkit.org/show_bug.cgi?id=169658
     5
     6        Reviewed by Alex Christensen.
     7
     8        * TestExpectations:
     9        * webrtc/audio-peer-connection-webaudio.html:
     10        * webrtc/peer-connection-audio-mute-expected.txt: Added.
     11        * webrtc/peer-connection-audio-mute.html: Added.
     12        * webrtc/routines.js:
     13        (analyseAudio):
     14        * webrtc/video-expected.txt:
     15        * webrtc/video-mute-expected.txt: Added.
     16        * webrtc/video-mute.html: Added.
     17        * webrtc/video.html:
     18
    1192017-03-15  Youenn Fablet  <youenn@apple.com>
    220
  • trunk/LayoutTests/TestExpectations

    r213968 r213983  
    709709
    710710# WebRTC backend not enabled by default on Mac/iOS release bots.
    711 # GTK enables some of this tests on their TestExpectations file.
     711# GTK enables some of these tests on their TestExpectations file.
    712712[ Release ] webrtc [ Skip ]
    713713
  • trunk/LayoutTests/TestExpectations.orig

    r213968 r213983  
    734734imported/w3c/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.html [ Skip ]
    735735imported/w3c/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/NavigatorID.worker.html [ Skip ]
     736imported/w3c/web-platform-tests/XMLHttpRequest/anonymous-mode-unsupported.htm [ Failure ]
     737imported/w3c/web-platform-tests/XMLHttpRequest/open-after-setrequestheader.htm [ Failure ]
     738imported/w3c/web-platform-tests/XMLHttpRequest/open-referer.htm [ Failure ]
     739imported/w3c/web-platform-tests/XMLHttpRequest/send-accept-language.htm [ Failure ]
     740imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-empty-value.htm [ Failure ]
     741imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-whitespace-in-value.htm [ Failure ]
     742imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-case-insensitive.htm [ Failure ]
     743imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-allowed.htm [ Failure ]
     744imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-forbidden.htm [ Failure ]
     745imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-open-setrequestheader.htm [ Failure ]
     746imported/w3c/web-platform-tests/html/dom/interfaces.worker.html [ Failure ]
     747imported/w3c/web-platform-tests/html/webappapis/scripting/events/event-handler-attributes-body-window.html [ Failure ]
    736748
    737749# Only iOS WK1 has testRunner.setPagePaused.
  • trunk/LayoutTests/webrtc/audio-peer-connection-webaudio.html

    r213334 r213983  
    88    <script src ="routines.js"></script>
    99    <script>
    10     var test = async_test(() => {
     10    promise_test((test) => {
    1111        if (window.testRunner)
    1212            testRunner.setUserMediaPermission(true);
    1313
    14         var heardHum = false;
    15         var heardBop = false;
    16         var heardBip = false;
    17 
    18         navigator.mediaDevices.getUserMedia({audio: true}).then((stream) => {
     14       return navigator.mediaDevices.getUserMedia({audio: true}).then((stream) => {
    1915            if (window.internals)
    2016                internals.useMockRTCPeerConnectionFactory("TwoRealPeerConnections");
    21 
    22             createConnections((firstConnection) => {
    23                 firstConnection.addStream(stream);
    24             }, (secondConnection) => {
    25                 secondConnection.onaddstream = (streamEvent) => {
    26                     var context = new webkitAudioContext();
    27                     var sourceNode = context.createMediaStreamSource(streamEvent.stream);
    28                     var analyser = context.createAnalyser();
    29                     var gain = context.createGain();
    30 
    31                     analyser.fftSize = 2048;
    32                     analyser.smoothingTimeConstant = 0;
    33                     analyser.minDecibels = -100;
    34                     analyser.maxDecibels = 0;
    35                     gain.gain.value = 0;
    36 
    37                     sourceNode.connect(analyser);
    38                     analyser.connect(gain);
    39                     gain.connect(context.destination);
    40 
    41                     function analyse() {
    42                         var freqDomain = new Uint8Array(analyser.frequencyBinCount);
    43                         analyser.getByteFrequencyData(freqDomain);
    44 
    45                         var hasFrequency = expectedFrequency => {
    46                             var bin = Math.floor(expectedFrequency * analyser.fftSize / context.sampleRate);
    47                             return bin < freqDomain.length && freqDomain[bin] >= 150;
    48                         };
    49 
    50                         if (!heardHum)
    51                             heardHum = hasFrequency(150);
    52 
    53                         if (!heardBip)
    54                             heardBip = hasFrequency(1500);
    55 
    56                         if (!heardBop)
    57                             heardBop = hasFrequency(500);
    58 
    59                         if (heardHum && heardBip && heardBop)
    60                             done();
    61                     };
    62 
    63                     var done = test.step_func_done(() => {
    64                         clearTimeout(timeout);
    65                         clearInterval(interval);
    66 
    67                         assert_true(heardHum, "heard hum");
    68                         assert_true(heardBip, "heard bip");
    69                         assert_true(heardBop, "heard bop");
    70                         test.done();
    71                     });
    72 
    73                     var timeout = setTimeout(done, 3000);
    74                     var interval = setInterval(analyse, 1000 / 30);
    75                     analyse();
    76                 }
     17            return new Promise((resolve, reject) => {
     18                createConnections((firstConnection) => {
     19                    firstConnection.addStream(stream);
     20                }, (secondConnection) => {
     21                    secondConnection.onaddstream = (streamEvent) => { resolve(streamEvent.stream); };
     22                });
     23                setTimeout(() => reject("Test timed out"), 5000);
     24            }).then((stream) => {
     25                return analyseAudio(stream, 1000);
     26            }).then((results) => {
     27                assert_true(results.heardHum, "heard hum");
     28                assert_true(results.heardBip, "heard bip");
     29                assert_true(results.heardBop, "heard bop");
    7730            });
    78         });
     31         });
    7932    }, "Basic audio playback through a peer connection");
    8033    </script>
  • trunk/LayoutTests/webrtc/routines.js

    r213104 r213983  
    7272    assert_unreached();
    7373}
     74
     75function analyseAudio(stream, duration)
     76{
     77    return new Promise((resolve, reject) => {
     78        var context = new webkitAudioContext();
     79        var sourceNode = context.createMediaStreamSource(stream);
     80        var analyser = context.createAnalyser();
     81        var gain = context.createGain();
     82
     83        var results = { heardHum: false, heardBip: false, heardBop: false };
     84
     85        analyser.fftSize = 2048;
     86        analyser.smoothingTimeConstant = 0;
     87        analyser.minDecibels = -100;
     88        analyser.maxDecibels = 0;
     89        gain.gain.value = 0;
     90
     91        sourceNode.connect(analyser);
     92        analyser.connect(gain);
     93        gain.connect(context.destination);
     94
     95       function analyse() {
     96           var freqDomain = new Uint8Array(analyser.frequencyBinCount);
     97           analyser.getByteFrequencyData(freqDomain);
     98
     99           var hasFrequency = expectedFrequency => {
     100                var bin = Math.floor(expectedFrequency * analyser.fftSize / context.sampleRate);
     101                return bin < freqDomain.length && freqDomain[bin] >= 150;
     102           };
     103
     104           if (!results.heardHum)
     105                results.heardHum = hasFrequency(150);
     106
     107           if (!results.heardBip)
     108               results.heardBip = hasFrequency(1500);
     109
     110           if (!results.heardBop)
     111                results.heardBop = hasFrequency(500);
     112
     113            if (results.heardHum && results.heardBip && results.heardBop)
     114                done();
     115        };
     116
     117       function done() {
     118            clearTimeout(timeout);
     119            clearInterval(interval);
     120            resolve(results);
     121       }
     122
     123        var timeout = setTimeout(done, 3 * duration);
     124        var interval = setInterval(analyse, duration / 30);
     125        analyse();
     126    });
     127}
     128
     129function waitFor(duration)
     130{
     131    return new Promise((resolve) => setTimeout(resolve, duration));
     132}
  • trunk/LayoutTests/webrtc/video-expected.txt

    r213282 r213983  
    11
    22
    3 FAIL Basic video exchange assert_true: expected true got false
     3PASS Basic video exchange
    44
  • trunk/LayoutTests/webrtc/video.html

    r211830 r213983  
    1212        <script src ="routines.js"></script>
    1313        <script>
    14 if (window.internals)
    15     internals.useMockRTCPeerConnectionFactory("TwoRealPeerConnections");
    16 
    17 if (window.testRunner)
    18     testRunner.setUserMediaPermission(true);
    19 
    2014video = document.getElementById("video");
    2115canvas = document.getElementById("canvas");
     
    2418function testImage()
    2519{
    26     try {
    27         canvas.width = video.videoWidth;
    28         canvas.height = video.videoHeight;
    29         canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
     20    canvas.width = video.videoWidth;
     21    canvas.height = video.videoHeight;
     22    canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
    3023
    31         imageData = canvas.getContext('2d').getImageData(10, 325, 250, 1);
    32         data = imageData.data;
     24    imageData = canvas.getContext('2d').getImageData(10, 325, 250, 1);
     25    data = imageData.data;
    3326
    34         var index = 20;
    35         assert_true(data[index] < 100);
    36         assert_true(data[index + 1] < 100);
    37         assert_true(data[index + 2] < 100);
     27    var index = 20;
     28    assert_true(data[index] < 100);
     29    assert_true(data[index + 1] < 100);
     30    assert_true(data[index + 2] < 100);
    3831
    39         index = 80;
    40         assert_true(data[index] > 200);
    41         assert_true(data[index + 1] > 200);
    42         assert_true(data[index + 2] > 200);
     32    index = 80;
     33    assert_true(data[index] > 200);
     34    assert_true(data[index + 1] > 200);
     35    assert_true(data[index + 2] > 200);
    4336
    44         index += 80;
    45         assert_true(data[index] > 200);
    46         assert_true(data[index + 1] > 200);
    47         assert_true(data[index + 2] < 100);
    48 
    49         finishTest();
    50     } catch(e) {
    51         errorTest(e);
    52     }
     37    index += 80;
     38    assert_true(data[index] > 200);
     39    assert_true(data[index + 1] > 200);
     40    assert_true(data[index + 2] < 100);
    5341}
    5442
    55 function testStream(stream)
    56 {
    57     video.srcObject = stream;
    58     // Video may play with black frames
    59     video.onplay = setTimeout(() => {
    60         testImage();
    61     }, 1000);
    62 }
     43promise_test((test) => {
     44    if (window.testRunner)
     45        testRunner.setUserMediaPermission(true);
    6346
    64 var finishTest, errorTest;
    65 promise_test((test) => {
    6647    return navigator.mediaDevices.getUserMedia({ video: true}).then((stream) => {
    6748        return new Promise((resolve, reject) => {
    68             finishTest = resolve;
    69             errorTest = reject;
     49            if (window.internals)
     50                internals.useMockRTCPeerConnectionFactory("TwoRealPeerConnections");
     51
    7052            createConnections((firstConnection) => {
    7153                firstConnection.addStream(stream);
    7254            }, (secondConnection) => {
    73                 secondConnection.onaddstream = (streamEvent) => { testStream(streamEvent.stream); };
     55                secondConnection.onaddstream = (streamEvent) => { resolve(streamEvent.stream); };
    7456            });
     57            setTimeout(() => reject("Test timed out"), 5000);
    7558        });
     59    }).then((stream) => {
     60        video.srcObject = stream;
     61        return video.play();
     62    }).then(() => {
     63        testImage();
    7664    });
    7765}, "Basic video exchange");
  • trunk/Source/WebCore/ChangeLog

    r213982 r213983  
     12017-03-15  Youenn Fablet  <youenn@apple.com>
     2
     3        run-webkit-tests is always creating mock libwebrtc tracks
     4        https://bugs.webkit.org/show_bug.cgi?id=169658
     5
     6        Reviewed by Alex Christensen.
     7
     8        Tests: webrtc/peer-connection-audio-mute.html
     9               webrtc/video-mute.html
     10
     11        Creating real libwebrtc av tracks in case of RealTwoPeerConnections mock factory.
     12
     13        * testing/MockLibWebRTCPeerConnection.cpp:
     14        (WebCore::MockLibWebRTCPeerConnectionFactory::CreateVideoTrack):
     15        (WebCore::MockLibWebRTCPeerConnectionFactory::CreateAudioTrack):
     16        * testing/MockLibWebRTCPeerConnection.h:
     17
    1182017-03-15  Youenn Fablet  <youenn@apple.com>
    219
  • trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp

    r213736 r213983  
    190190}
    191191
     192rtc::scoped_refptr<webrtc::VideoTrackInterface> MockLibWebRTCPeerConnectionFactory::CreateVideoTrack(const std::string& id, webrtc::VideoTrackSourceInterface* source)
     193{
     194    if (m_testCase == "TwoRealPeerConnections")
     195        return realPeerConnectionFactory()->CreateVideoTrack(id, source);
     196    return new rtc::RefCountedObject<MockLibWebRTCVideoTrack>(id, source);
     197}
     198
     199rtc::scoped_refptr<webrtc::AudioTrackInterface> MockLibWebRTCPeerConnectionFactory::CreateAudioTrack(const std::string& id, webrtc::AudioSourceInterface* source)
     200{
     201    if (m_testCase == "TwoRealPeerConnections")
     202        return realPeerConnectionFactory()->CreateAudioTrack(id, source);
     203    return new rtc::RefCountedObject<MockLibWebRTCAudioTrack>(id, source);
     204}
     205
    192206rtc::scoped_refptr<webrtc::MediaStreamInterface> MockLibWebRTCPeerConnectionFactory::CreateLocalMediaStream(const std::string& label)
    193207{
  • trunk/Source/WebCore/testing/MockLibWebRTCPeerConnection.h

    r213736 r213983  
    245245    rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> CreateVideoSource(cricket::VideoCapturer*, const webrtc::MediaConstraintsInterface*) final { return nullptr; }
    246246
    247     rtc::scoped_refptr<webrtc::VideoTrackInterface> CreateVideoTrack(const std::string& id, webrtc::VideoTrackSourceInterface* source) final { return new rtc::RefCountedObject<MockLibWebRTCVideoTrack>(id, source); }
    248     rtc::scoped_refptr<webrtc::AudioTrackInterface> CreateAudioTrack(const std::string& id, webrtc::AudioSourceInterface* source) final { return new rtc::RefCountedObject<MockLibWebRTCAudioTrack>(id, source); }
     247    rtc::scoped_refptr<webrtc::VideoTrackInterface> CreateVideoTrack(const std::string&, webrtc::VideoTrackSourceInterface*) final;
     248    rtc::scoped_refptr<webrtc::AudioTrackInterface> CreateAudioTrack(const std::string&, webrtc::AudioSourceInterface*) final;
     249
    249250    bool StartAecDump(rtc::PlatformFile, int64_t) final { return false; }
    250251    void StopAecDump() final { }
Note: See TracChangeset for help on using the changeset viewer.