bool ContentClientRemoteBuffer::CreateAndAllocateDeprecatedTextureClient(RefPtr<DeprecatedTextureClient>& aClient) { aClient = CreateDeprecatedTextureClient(TEXTURE_CONTENT); MOZ_ASSERT(aClient, "Failed to create texture client"); if (!aClient->EnsureAllocated(mSize, mContentType)) { aClient = CreateDeprecatedTextureClient(TEXTURE_FALLBACK); MOZ_ASSERT(aClient, "Failed to create texture client"); if (!aClient->EnsureAllocated(mSize, mContentType)) { NS_WARNING("Could not allocate texture client"); return false; } } MOZ_ASSERT(IsSurfaceDescriptorValid(*aClient->GetDescriptor())); return true; }
void DeprecatedCanvasClientSurfaceStream::Update(gfx::IntSize aSize, ClientCanvasLayer* aLayer) { if (!mDeprecatedTextureClient) { mDeprecatedTextureClient = CreateDeprecatedTextureClient(TEXTURE_STREAM_GL, aLayer->GetSurfaceMode() == Layer::SURFACE_OPAQUE ? GFX_CONTENT_COLOR : GFX_CONTENT_COLOR_ALPHA); MOZ_ASSERT(mDeprecatedTextureClient, "Failed to create texture client"); } NS_ASSERTION(aLayer->mGLContext, "CanvasClientSurfaceStream should only be used with GL canvases"); // the content type won't be used mDeprecatedTextureClient->EnsureAllocated(aSize, GFX_CONTENT_COLOR); GLScreenBuffer* screen = aLayer->mGLContext->Screen(); SurfaceStream* stream = screen->Stream(); bool isCrossProcess = !(XRE_GetProcessType() == GeckoProcessType_Default); if (isCrossProcess) { // swap staging -> consumer so we can send it to the compositor SharedSurface* surf = stream->SwapConsumer(); if (!surf) { printf_stderr("surf is null post-SwapConsumer!\n"); return; } #ifdef MOZ_WIDGET_GONK if (surf->Type() != SharedSurfaceType::Gralloc) { printf_stderr("Unexpected non-Gralloc SharedSurface in IPC path!"); return; } SharedSurface_Gralloc* grallocSurf = SharedSurface_Gralloc::Cast(surf); //XXX todo //mDeprecatedTextureClient->SetDescriptor(grallocSurf->GetDescriptor()); #else printf_stderr("isCrossProcess, but not MOZ_WIDGET_GONK! Someone needs to write some code!"); MOZ_ASSERT(false); #endif } else { SurfaceStreamHandle handle = stream->GetShareHandle(); mDeprecatedTextureClient->SetDescriptor(SurfaceStreamDescriptor(handle, false)); // Bug 894405 // // Ref this so the SurfaceStream doesn't disappear unexpectedly. The // Compositor will need to unref it when finished. aLayer->mGLContext->AddRef(); } aLayer->Painted(); }
bool DeprecatedImageClientSingle::EnsureDeprecatedTextureClient(DeprecatedTextureClientType aType) { // We should not call this method if using ImageBridge or tiled texture // clients since SupportsType always fails if (mDeprecatedTextureClient && mDeprecatedTextureClient->SupportsType(aType)) { return true; } mDeprecatedTextureClient = CreateDeprecatedTextureClient(aType); return !!mDeprecatedTextureClient; }
void DeprecatedCanvasClient2D::Update(gfx::IntSize aSize, ClientCanvasLayer* aLayer) { bool isOpaque = (aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE); gfxContentType contentType = isOpaque ? gfxContentType::COLOR : gfxContentType::COLOR_ALPHA; if (!mDeprecatedTextureClient) { mDeprecatedTextureClient = CreateDeprecatedTextureClient(TEXTURE_CONTENT, contentType); if (!mDeprecatedTextureClient) { mDeprecatedTextureClient = CreateDeprecatedTextureClient(TEXTURE_FALLBACK, contentType); if (!mDeprecatedTextureClient) { NS_WARNING("Could not create texture client"); return; } } } if (!mDeprecatedTextureClient->EnsureAllocated(aSize, contentType)) { // We might already be on the fallback texture client if we couldn't create a // better one above. In which case this call to create is wasted. But I don't // think this will happen often enough to be worth complicating the code with // further checks. mDeprecatedTextureClient = CreateDeprecatedTextureClient(TEXTURE_FALLBACK, contentType); MOZ_ASSERT(mDeprecatedTextureClient, "Failed to create texture client"); if (!mDeprecatedTextureClient->EnsureAllocated(aSize, contentType)) { NS_WARNING("Could not allocate texture client"); return; } } gfxASurface* surface = mDeprecatedTextureClient->LockSurface(); aLayer->DeprecatedUpdateSurface(surface); mDeprecatedTextureClient->Unlock(); }