Bug 1206708 - Make all WebRTC ImageContainers async. r?nical,jesup
This avoids expensive copying when compositing these frames on e10s.
MozReview-Commit-ID: LIeUhh6rjCf
--- a/dom/media/VideoSegment.cpp
+++ b/dom/media/VideoSegment.cpp
@@ -41,17 +41,18 @@ VideoFrame::TakeFrom(VideoFrame* aFrame)
mIntrinsicSize = aFrame->mIntrinsicSize;
mForceBlack = aFrame->GetForceBlack();
mPrincipalHandle = aFrame->mPrincipalHandle;
}
/* static */ already_AddRefed<Image>
VideoFrame::CreateBlackImage(const gfx::IntSize& aSize)
{
- RefPtr<ImageContainer> container = LayerManager::CreateImageContainer();
+ RefPtr<ImageContainer> container =
+ LayerManager::CreateImageContainer(ImageContainer::ASYNCHRONOUS);
RefPtr<PlanarYCbCrImage> image = container->CreatePlanarYCbCrImage();
if (!image) {
MOZ_ASSERT(false);
return nullptr;
}
int len = ((aSize.width * aSize.height) * 3 / 2);
--- a/dom/media/webrtc/MediaEngineDefault.cpp
+++ b/dom/media/webrtc/MediaEngineDefault.cpp
@@ -44,17 +44,18 @@ NS_IMPL_ISUPPORTS(MediaEngineDefaultVide
*/
MediaEngineDefaultVideoSource::MediaEngineDefaultVideoSource()
: MediaEngineVideoSource(kReleased)
, mTimer(nullptr)
, mMonitor("Fake video")
, mCb(16), mCr(16)
{
- mImageContainer = layers::LayerManager::CreateImageContainer();
+ mImageContainer =
+ layers::LayerManager::CreateImageContainer(layers::ImageContainer::ASYNCHRONOUS);
}
MediaEngineDefaultVideoSource::~MediaEngineDefaultVideoSource()
{}
void
MediaEngineDefaultVideoSource::GetName(nsAString& aName)
{
--- a/dom/media/webrtc/MediaEngineRemoteVideoSource.cpp
+++ b/dom/media/webrtc/MediaEngineRemoteVideoSource.cpp
@@ -185,17 +185,18 @@ MediaEngineRemoteVideoSource::Start(Sour
MOZ_ASSERT(mSources.Length() == mPrincipalHandles.Length());
}
aStream->AddTrack(aID, 0, new VideoSegment(), SourceMediaStream::ADDTRACK_QUEUED);
if (mState == kStarted) {
return NS_OK;
}
- mImageContainer = layers::LayerManager::CreateImageContainer();
+ mImageContainer =
+ layers::LayerManager::CreateImageContainer(layers::ImageContainer::ASYNCHRONOUS);
mState = kStarted;
mTrackID = aID;
if (mozilla::camera::GetChildAndCall(
&mozilla::camera::CamerasChild::StartCapture,
mCapEngine, mCaptureIndex, mCapability, this)) {
LOG(("StartCapture failed"));
--- a/dom/media/webrtc/MediaEngineTabVideoSource.cpp
+++ b/dom/media/webrtc/MediaEngineTabVideoSource.cpp
@@ -283,17 +283,18 @@ MediaEngineTabVideoSource::Draw() {
docshell->GetPresContext(getter_AddRefs(presContext));
}
if (!presContext) {
return;
}
presShell = presContext->PresShell();
}
- RefPtr<layers::ImageContainer> container = layers::LayerManager::CreateImageContainer();
+ RefPtr<layers::ImageContainer> container =
+ layers::LayerManager::CreateImageContainer(layers::ImageContainer::ASYNCHRONOUS);
RefPtr<DrawTarget> dt =
Factory::CreateDrawTargetForData(BackendType::CAIRO,
mData.get(),
size,
stride,
SurfaceFormat::B8G8R8X8);
if (!dt || !dt->IsValid()) {
return;
--- a/media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp
+++ b/media/webrtc/signaling/src/mediapipeline/MediaPipeline.cpp
@@ -2131,17 +2131,18 @@ public:
height_(0),
#if defined(MOZILLA_INTERNAL_API)
image_container_(),
image_(),
#endif
monitor_("Video PipelineListener")
{
#if !defined(MOZILLA_EXTERNAL_LINKAGE)
- image_container_ = LayerManager::CreateImageContainer();
+ image_container_ =
+ LayerManager::CreateImageContainer(ImageContainer::ASYNCHRONOUS);
#endif
}
// Implement MediaStreamListener
void NotifyQueuedTrackChanges(MediaStreamGraph* graph, TrackID tid,
StreamTime offset,
uint32_t events,