Bug 1765816 - Expose front buffer canvas contents when painting for Firefox Screenshots for WebGPU. r=gfx-reviewers,lsalzman

Differential Revision: https://phabricator.services.mozilla.com/D144868
This commit is contained in:
Andrew Osmond 2022-04-27 18:27:37 +00:00
Родитель 23e4d9ffd9
Коммит 6921ea66d8
2 изменённых файлов: 21 добавлений и 0 удалений

Просмотреть файл

@ -10,6 +10,7 @@
#include "nsDisplayList.h"
#include "mozilla/dom/HTMLCanvasElement.h"
#include "mozilla/gfx/CanvasManagerChild.h"
#include "mozilla/layers/CanvasRenderer.h"
#include "mozilla/layers/CompositableInProcessManager.h"
#include "mozilla/layers/ImageDataSerializer.h"
#include "mozilla/layers/LayersSurfaces.h"
@ -126,6 +127,24 @@ void CanvasContext::SwapChainPresent() {
}
}
bool CanvasContext::InitializeCanvasRenderer(
nsDisplayListBuilder* aBuilder, layers::CanvasRenderer* aRenderer) {
// This path is only used for rendering when we use the fallback Paint path,
// used by reftest-snapshot, printing and Firefox Screenshot.
if (!mHandle) {
return false;
}
layers::CanvasRendererData data;
data.mContext = this;
data.mSize = mGfxSize;
data.mIsOpaque = false;
aRenderer->Initialize(data);
aRenderer->SetDirty();
return true;
}
mozilla::UniquePtr<uint8_t[]> CanvasContext::GetImageBuffer(int32_t* aFormat) {
gfxAlphaType any;
RefPtr<gfx::SourceSurface> snapshot = GetSurfaceSnapshot(&any);

Просмотреть файл

@ -54,6 +54,8 @@ class CanvasContext final : public nsICanvasRenderingContextInternal,
return NS_OK;
}
bool InitializeCanvasRenderer(nsDisplayListBuilder* aBuilder,
layers::CanvasRenderer* aRenderer) override;
mozilla::UniquePtr<uint8_t[]> GetImageBuffer(int32_t* aFormat) override;
NS_IMETHOD GetInputStream(const char* aMimeType,
const nsAString& aEncoderOptions,