Changeset 213972 in webkit
- Timestamp:
- Mar 14, 2017 10:21:06 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r213971 r213972 1 2017-03-14 Youenn Fablet <youenn@apple.com> 2 3 CanvasCapture should not generate a frame per each canvas draw command 4 https://bugs.webkit.org/show_bug.cgi?id=169498 5 6 Reviewed by Simon Fraser & Eric Carlson. 7 8 * fast/mediastream/captureStream/canvas2d-heavy-drawing-expected.txt: Added. 9 * fast/mediastream/captureStream/canvas2d-heavy-drawing.html: Added. 10 1 11 2017-03-14 Wenson Hsieh <wenson_hsieh@apple.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r213967 r213972 1 2017-03-14 Youenn Fablet <youenn@apple.com> 2 3 CanvasCapture should not generate a frame per each canvas draw command 4 https://bugs.webkit.org/show_bug.cgi?id=169498 5 6 Reviewed by Simon Fraser & Eric Carlson. 7 8 Test: fast/mediastream/captureStream/canvas2d-heavy-drawing.html 9 10 Making Canvas capture be asynchronous. 11 This ensures that one frame will be created for a set of synchronous draw commands. 12 In the future, we should find a better approach, like aligning with requestAnimationFrame. 13 Adding internals observer API for media stream tracks. 14 15 * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: 16 (WebCore::CanvasCaptureMediaStreamTrack::Source::Source): 17 (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasChanged): 18 * Modules/mediastream/CanvasCaptureMediaStreamTrack.h: 19 * Modules/mediastream/MediaStreamTrack.idl: 20 * platform/mediastream/RealtimeMediaSource.h: 21 * testing/Internals.cpp: 22 (WebCore::Internals::~Internals): 23 (WebCore::Internals::observeMediaStreamTrack): 24 * testing/Internals.h: 25 * testing/Internals.idl: 26 1 27 2017-03-14 Wenson Hsieh <wenson_hsieh@apple.com> 2 28 -
trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp
r213884 r213972 63 63 , m_frameRequestRate(WTFMove(frameRequestRate)) 64 64 , m_requestFrameTimer(*this, &Source::requestFrameTimerFired) 65 , m_canvasChangedTimer(*this, &Source::captureCanvas) 65 66 , m_canvas(&canvas) 66 67 { … … 124 125 ASSERT_UNUSED(canvas, m_canvas == &canvas); 125 126 126 captureCanvas(); 127 // FIXME: We should try to generate the frame at the time the screen is being updated. 128 if (m_canvasChangedTimer.isActive()) 129 return; 130 m_canvasChangedTimer.startOneShot(0); 127 131 } 128 132 -
trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h
r213880 r213972 29 29 #include "HTMLCanvasElement.h" 30 30 #include "MediaStreamTrack.h" 31 #include "Timer.h" 31 32 #include <wtf/TypeCasts.h> 32 33 … … 74 75 std::optional<double> m_frameRequestRate; 75 76 Timer m_requestFrameTimer; 77 Timer m_canvasChangedTimer; 76 78 RealtimeMediaSourceSettings m_settings; 77 79 HTMLCanvasElement* m_canvas; -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl
r213598 r213972 30 30 Conditional=MEDIA_STREAM, 31 31 CustomToJSObject, 32 ExportToWrappedFunction, 32 33 PrivateIdentifier, 33 34 PublicIdentifier, -
trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h
r213941 r213972 138 138 virtual void setRemote(bool remote) { m_remote = remote; } 139 139 140 void addObserver(Observer&);141 void removeObserver(Observer&);140 WEBCORE_EXPORT void addObserver(Observer&); 141 WEBCORE_EXPORT void removeObserver(Observer&); 142 142 143 143 virtual void startProducingData() { } -
trunk/Source/WebCore/testing/Internals.cpp
r213719 r213972 91 91 #include "MediaPlayer.h" 92 92 #include "MediaProducer.h" 93 #include "MediaStreamTrack.h" 93 94 #include "MemoryCache.h" 94 95 #include "MemoryInfo.h" … … 377 378 Internals::~Internals() 378 379 { 380 if (m_track) 381 m_track->source().removeObserver(*this); 379 382 } 380 383 … … 3826 3829 3827 3830 3831 void Internals::observeMediaStreamTrack(MediaStreamTrack& track) 3832 { 3833 m_track = &track; 3834 m_track->source().addObserver(*this); 3835 } 3836 3828 3837 } // namespace WebCore -
trunk/Source/WebCore/testing/Internals.h
r213719 r213972 31 31 #include "ExceptionOr.h" 32 32 #include "PageConsoleClient.h" 33 #include "RealtimeMediaSource.h" 33 34 #include <runtime/Float32Array.h> 34 35 … … 58 59 class MallocStatistics; 59 60 class MediaSession; 61 class MediaStreamTrack; 60 62 class MemoryInfo; 61 63 class MockCDMFactory; … … 76 78 class XMLHttpRequest; 77 79 78 class Internals final : public RefCounted<Internals>, private ContextDestructionObserver {80 class Internals final : public RefCounted<Internals>, private ContextDestructionObserver, private RealtimeMediaSource::Observer { 79 81 public: 80 82 static Ref<Internals> create(Document&); … … 545 547 #endif 546 548 549 unsigned long trackAudioSampleCount() const { return m_trackAudioSampleCount; } 550 unsigned long trackVideoSampleCount() const { return m_trackVideoSampleCount; } 551 void observeMediaStreamTrack(MediaStreamTrack&); 552 547 553 private: 548 554 explicit Internals(Document&); … … 552 558 ExceptionOr<RenderedDocumentMarker*> markerAt(Node&, const String& markerType, unsigned index); 553 559 560 // RealtimeMediaSource::Observer API 561 void videoSampleAvailable(MediaSample&) final { m_trackVideoSampleCount++; } 562 void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t) final { m_trackAudioSampleCount++; } 563 554 564 std::unique_ptr<InspectorStubFrontend> m_inspectorFrontend; 565 566 unsigned long m_trackVideoSampleCount { 0 }; 567 unsigned long m_trackAudioSampleCount { 0 }; 568 RefPtr<MediaStreamTrack> m_track; 555 569 }; 556 570 -
trunk/Source/WebCore/testing/Internals.idl
r213719 r213972 517 517 518 518 [Conditional=WEBGL] void simulateWebGLContextChanged(WebGLRenderingContextBase context); 519 }; 519 520 void observeMediaStreamTrack(MediaStreamTrack track); 521 readonly attribute unsigned long trackAudioSampleCount; 522 readonly attribute unsigned long trackVideoSampleCount; 523 };
Note: See TracChangeset
for help on using the changeset viewer.