Bug 1958711 - Remove unused BufferMode on FallbackRenderer. r=win-reviewers,handyman

Differential Revision: https://phabricator.services.mozilla.com/D244528
This commit is contained in:
Emilio Cobos Álvarez
2025-04-07 20:36:21 +00:00
parent 495d6990d4
commit 4c42399f22
21 changed files with 54 additions and 94 deletions

View File

@@ -174,8 +174,6 @@ enum class TextureType : int8_t {
Last
};
enum class BufferMode : int8_t { BUFFER_NONE, BUFFERED };
enum class DrawRegionClip : int8_t { DRAW, NONE };
enum class SurfaceMode : int8_t {

View File

@@ -76,8 +76,7 @@ bool RenderCompositorSWGL::AllocateMappedBuffer(
const wr::DeviceIntRect* aOpaqueRects, size_t aNumOpaqueRects) {
// Request a new draw target to use from the widget...
MOZ_ASSERT(!mDT);
layers::BufferMode bufferMode = layers::BufferMode::BUFFERED;
mDT = mWidget->StartRemoteDrawingInRegion(mDirtyRegion, &bufferMode);
mDT = mWidget->StartRemoteDrawingInRegion(mDirtyRegion);
if (!mDT) {
gfxCriticalNoteOnce
<< "RenderCompositorSWGL failed mapping default framebuffer, no dt";
@@ -90,8 +89,7 @@ bool RenderCompositorSWGL::AllocateMappedBuffer(
gfx::IntSize size;
int32_t stride = 0;
gfx::SurfaceFormat format = gfx::SurfaceFormat::UNKNOWN;
if (bufferMode != layers::BufferMode::BUFFERED && !mSurface &&
mDT->LockBits(&data, &size, &stride, &format) &&
if (!mSurface && mDT->LockBits(&data, &size, &stride, &format) &&
(format != gfx::SurfaceFormat::B8G8R8A8 &&
format != gfx::SurfaceFormat::B8G8R8X8)) {
// We tried to lock the DT and it succeeded, but the size or format

View File

@@ -178,10 +178,8 @@ void WindowRenderer::UpdatePartialPrerenderedAnimations(
}
}
void FallbackRenderer::SetTarget(gfxContext* aTarget,
layers::BufferMode aDoubleBuffering) {
void FallbackRenderer::SetTarget(gfxContext* aTarget) {
mTarget = aTarget;
mBufferMode = aDoubleBuffering;
}
bool FallbackRenderer::BeginTransaction(const nsCString& aURL) {

View File

@@ -243,7 +243,7 @@ class FallbackRenderer : public WindowRenderer {
public:
FallbackRenderer* AsFallback() override { return this; }
void SetTarget(gfxContext* aContext, layers::BufferMode aDoubleBuffering);
void SetTarget(gfxContext* aContext);
bool BeginTransaction(const nsCString& aURL = nsCString()) override;
@@ -255,7 +255,7 @@ class FallbackRenderer : public WindowRenderer {
return layers::LayersBackend::LAYERS_NONE;
}
virtual void GetBackendName(nsAString& name) override {
void GetBackendName(nsAString& name) override {
name.AssignLiteral("Fallback");
}
@@ -266,8 +266,7 @@ class FallbackRenderer : public WindowRenderer {
int32_t aAppUnitsPerDevPixel,
EndTransactionFlags aFlags);
gfxContext* mTarget;
layers::BufferMode mBufferMode;
gfxContext* mTarget = nullptr;
};
} // namespace mozilla

View File

@@ -137,8 +137,7 @@ class CompositorWidget {
*/
virtual already_AddRefed<gfx::DrawTarget> StartRemoteDrawing();
virtual already_AddRefed<gfx::DrawTarget> StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion,
layers::BufferMode* aBufferMode) {
const LayoutDeviceIntRegion& aInvalidRegion) {
return StartRemoteDrawing();
}

View File

@@ -66,10 +66,9 @@ InProcessCompositorWidget::StartRemoteDrawing() {
already_AddRefed<gfx::DrawTarget>
InProcessCompositorWidget::StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion,
layers::BufferMode* aBufferMode) {
const LayoutDeviceIntRegion& aInvalidRegion) {
CheckWidgetSanity();
return mWidget->StartRemoteDrawingInRegion(aInvalidRegion, aBufferMode);
return mWidget->StartRemoteDrawingInRegion(aInvalidRegion);
}
void InProcessCompositorWidget::EndRemoteDrawing() {

View File

@@ -14,27 +14,26 @@ namespace widget {
// nsBaseWidget.
class InProcessCompositorWidget : public CompositorWidget {
public:
explicit InProcessCompositorWidget(const layers::CompositorOptions& aOptions,
nsBaseWidget* aWidget);
InProcessCompositorWidget(const layers::CompositorOptions& aOptions,
nsBaseWidget* aWidget);
virtual bool PreRender(WidgetRenderingContext* aManager) override;
virtual void PostRender(WidgetRenderingContext* aManager) override;
virtual RefPtr<layers::NativeLayerRoot> GetNativeLayerRoot() override;
virtual already_AddRefed<gfx::DrawTarget> StartRemoteDrawing() override;
virtual already_AddRefed<gfx::DrawTarget> StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion,
layers::BufferMode* aBufferMode) override;
virtual void EndRemoteDrawing() override;
virtual void EndRemoteDrawingInRegion(
bool PreRender(WidgetRenderingContext* aManager) override;
void PostRender(WidgetRenderingContext* aManager) override;
RefPtr<layers::NativeLayerRoot> GetNativeLayerRoot() override;
already_AddRefed<gfx::DrawTarget> StartRemoteDrawing() override;
already_AddRefed<gfx::DrawTarget> StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion) override;
void EndRemoteDrawing() override;
void EndRemoteDrawingInRegion(
gfx::DrawTarget* aDrawTarget,
const LayoutDeviceIntRegion& aInvalidRegion) override;
virtual void CleanupRemoteDrawing() override;
virtual void CleanupWindowEffects() override;
virtual bool InitCompositor(layers::Compositor* aCompositor) override;
virtual LayoutDeviceIntSize GetClientSize() override;
virtual uint32_t GetGLFrameBufferFormat() override;
virtual void ObserveVsync(VsyncObserver* aObserver) override;
virtual uintptr_t GetWidgetKey() override;
void CleanupRemoteDrawing() override;
void CleanupWindowEffects() override;
bool InitCompositor(layers::Compositor* aCompositor) override;
LayoutDeviceIntSize GetClientSize() override;
uint32_t GetGLFrameBufferFormat() override;
void ObserveVsync(VsyncObserver* aObserver) override;
uintptr_t GetWidgetKey() override;
// If you can override this method, inherit from CompositorWidget instead.
nsIWidget* RealWidget() override;

View File

@@ -30,8 +30,7 @@ AndroidCompositorWidget::~AndroidCompositorWidget() {
already_AddRefed<gfx::DrawTarget>
AndroidCompositorWidget::StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion,
layers::BufferMode* aBufferMode) {
const LayoutDeviceIntRegion& aInvalidRegion) {
if (!mNativeWindow) {
EGLNativeWindowType window = GetEGLNativeWindow();
JNIEnv* const env = jni::GetEnvForThread();

View File

@@ -37,8 +37,7 @@ class AndroidCompositorWidget : public CompositorWidget {
// CompositorWidget overrides
already_AddRefed<gfx::DrawTarget> StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion,
layers::BufferMode* aBufferMode) override;
const LayoutDeviceIntRegion& aInvalidRegion) override;
void EndRemoteDrawingInRegion(
gfx::DrawTarget* aDrawTarget,
const LayoutDeviceIntRegion& aInvalidRegion) override;

View File

@@ -1310,7 +1310,7 @@ bool nsChildView::PaintWindowInDrawTarget(gfx::DrawTarget* aDT,
nsAutoRetainCocoaObject kungFuDeathGrip(mView);
if (GetWindowRenderer()->GetBackendType() == LayersBackend::LAYERS_NONE) {
nsBaseWidget::AutoLayerManagerSetup setupLayerManager(
this, &targetContext, BufferMode::BUFFER_NONE);
this, &targetContext);
return PaintWindow(aRegion);
}
return false;

View File

@@ -71,9 +71,8 @@ void GtkCompositorWidget::EndRemoteDrawing() {}
already_AddRefed<gfx::DrawTarget>
GtkCompositorWidget::StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion,
layers::BufferMode* aBufferMode) {
return mProvider.StartRemoteDrawingInRegion(aInvalidRegion, aBufferMode);
const LayoutDeviceIntRegion& aInvalidRegion) {
return mProvider.StartRemoteDrawingInRegion(aInvalidRegion);
}
void GtkCompositorWidget::EndRemoteDrawingInRegion(

View File

@@ -56,8 +56,7 @@ class GtkCompositorWidget : public CompositorWidget,
void EndRemoteDrawing() override;
already_AddRefed<gfx::DrawTarget> StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion,
layers::BufferMode* aBufferMode) override;
const LayoutDeviceIntRegion& aInvalidRegion) override;
void EndRemoteDrawingInRegion(
gfx::DrawTarget* aDrawTarget,
const LayoutDeviceIntRegion& aInvalidRegion) override;

View File

@@ -153,8 +153,7 @@ MOZ_PUSH_IGNORE_THREAD_SAFETY
already_AddRefed<gfx::DrawTarget>
WindowSurfaceProvider::StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion,
layers::BufferMode* aBufferMode) {
const LayoutDeviceIntRegion& aInvalidRegion) {
if (aInvalidRegion.IsEmpty()) {
return nullptr;
}
@@ -179,7 +178,6 @@ WindowSurfaceProvider::StartRemoteDrawingInRegion(
}
}
*aBufferMode = BufferMode::BUFFER_NONE;
RefPtr<gfx::DrawTarget> dt = mWindowSurface->Lock(aInvalidRegion);
#ifdef MOZ_X11
if (!dt && GdkIsX11Display() && !mWindowSurface->IsFallback()) {

View File

@@ -61,8 +61,7 @@ class WindowSurfaceProvider final {
void CleanupResources();
already_AddRefed<gfx::DrawTarget> StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion,
layers::BufferMode* aBufferMode);
const LayoutDeviceIntRegion& aInvalidRegion);
void EndRemoteDrawingInRegion(gfx::DrawTarget* aDrawTarget,
const LayoutDeviceIntRegion& aInvalidRegion);

View File

@@ -3989,8 +3989,7 @@ gboolean nsWindow::OnExposeEvent(cairo_t* cr) {
return TRUE;
}
BufferMode layerBuffering = BufferMode::BUFFERED;
RefPtr<DrawTarget> dt = StartRemoteDrawingInRegion(region, &layerBuffering);
RefPtr<DrawTarget> dt = StartRemoteDrawingInRegion(region);
if (!dt || !dt->IsValid()) {
return FALSE;
}
@@ -4022,14 +4021,13 @@ gboolean nsWindow::OnExposeEvent(cairo_t* cr) {
{
if (renderer->GetBackendType() == LayersBackend::LAYERS_NONE) {
if (GetTransparencyMode() == TransparencyMode::Transparent &&
layerBuffering == BufferMode::BUFFER_NONE && mHasAlphaVisual) {
mHasAlphaVisual) {
// If our draw target is unbuffered and we use an alpha channel,
// clear the image beforehand to ensure we don't get artifacts from a
// reused SHM image. See bug 1258086.
dt->ClearRect(Rect(boundsRect));
}
AutoLayerManagerSetup setupLayerManager(
this, ctx.isNothing() ? nullptr : &ctx.ref(), layerBuffering);
AutoLayerManagerSetup setupLayerManager(this, ctx.ptrOr(nullptr));
listener->PaintWindow(this, region);
// Re-get the listener since the will paint notification might have
@@ -8679,9 +8677,8 @@ bool nsWindow::GetEditCommands(NativeKeyBindingsType aType,
}
already_AddRefed<DrawTarget> nsWindow::StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion, BufferMode* aBufferMode) {
return mSurfaceProvider.StartRemoteDrawingInRegion(aInvalidRegion,
aBufferMode);
const LayoutDeviceIntRegion& aInvalidRegion) {
return mSurfaceProvider.StartRemoteDrawingInRegion(aInvalidRegion);
}
void nsWindow::EndRemoteDrawingInRegion(

View File

@@ -303,8 +303,7 @@ class nsWindow final : public nsBaseWidget {
LayoutDeviceIntRegion GetOpaqueRegion() const;
already_AddRefed<mozilla::gfx::DrawTarget> StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion,
mozilla::layers::BufferMode* aBufferMode) override;
const LayoutDeviceIntRegion& aInvalidRegion) override;
void EndRemoteDrawingInRegion(
mozilla::gfx::DrawTarget* aDrawTarget,
const LayoutDeviceIntRegion& aInvalidRegion) override;

View File

@@ -938,18 +938,18 @@ nsresult nsBaseWidget::MakeFullScreen(bool aFullScreen) {
}
nsBaseWidget::AutoLayerManagerSetup::AutoLayerManagerSetup(
nsBaseWidget* aWidget, gfxContext* aTarget, BufferMode aDoubleBuffering)
nsBaseWidget* aWidget, gfxContext* aTarget)
: mWidget(aWidget) {
WindowRenderer* renderer = mWidget->GetWindowRenderer();
if (renderer->AsFallback()) {
mRenderer = renderer->AsFallback();
mRenderer->SetTarget(aTarget, aDoubleBuffering);
if (auto* fallback = renderer->AsFallback()) {
mRenderer = fallback;
mRenderer->SetTarget(aTarget);
}
}
nsBaseWidget::AutoLayerManagerSetup::~AutoLayerManagerSetup() {
if (mRenderer) {
mRenderer->SetTarget(nullptr, mozilla::layers::BufferMode::BUFFER_NONE);
mRenderer->SetTarget(nullptr);
}
}

View File

@@ -140,7 +140,6 @@ class nsBaseWidget : public nsIWidget, public nsSupportsWeakReference {
typedef base::Thread Thread;
typedef mozilla::gfx::DrawTarget DrawTarget;
typedef mozilla::gfx::SourceSurface SourceSurface;
typedef mozilla::layers::BufferMode BufferMode;
typedef mozilla::layers::CompositorBridgeChild CompositorBridgeChild;
typedef mozilla::layers::CompositorBridgeParent CompositorBridgeParent;
typedef mozilla::layers::IAPZCTreeManager IAPZCTreeManager;
@@ -385,8 +384,7 @@ class nsBaseWidget : public nsIWidget, public nsSupportsWeakReference {
*/
class AutoLayerManagerSetup {
public:
AutoLayerManagerSetup(nsBaseWidget* aWidget, gfxContext* aTarget,
BufferMode aDoubleBuffering);
AutoLayerManagerSetup(nsBaseWidget* aWidget, gfxContext* aTarget);
~AutoLayerManagerSetup();
private:
@@ -435,7 +433,7 @@ class nsBaseWidget : public nsIWidget, public nsSupportsWeakReference {
}
virtual already_AddRefed<DrawTarget> StartRemoteDrawing();
virtual already_AddRefed<DrawTarget> StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion, BufferMode* aBufferMode) {
const LayoutDeviceIntRegion& aInvalidRegion) {
return StartRemoteDrawing();
}
virtual void EndRemoteDrawing() {}

View File

@@ -70,15 +70,8 @@ LayoutDeviceIntSize CompositorWidgetParent::GetClientSize() {
already_AddRefed<gfx::DrawTarget>
CompositorWidgetParent::StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion,
layers::BufferMode* aBufferMode) {
const LayoutDeviceIntRegion& aInvalidRegion) {
MOZ_ASSERT(mRemoteBackbufferClient);
MOZ_ASSERT(aBufferMode);
// Because we use remote backbuffering, there is no need to use a local
// backbuffer too.
(*aBufferMode) = layers::BufferMode::BUFFER_NONE;
return mRemoteBackbufferClient->BorrowDrawTarget();
}

View File

@@ -31,8 +31,7 @@ class CompositorWidgetParent final : public PCompositorWidgetParent,
bool PreRender(WidgetRenderingContext*) override;
void PostRender(WidgetRenderingContext*) override;
already_AddRefed<gfx::DrawTarget> StartRemoteDrawingInRegion(
const LayoutDeviceIntRegion& aInvalidRegion,
layers::BufferMode* aBufferMode) override;
const LayoutDeviceIntRegion& aInvalidRegion) override;
void EndRemoteDrawingInRegion(
gfx::DrawTarget* aDrawTarget,
const LayoutDeviceIntRegion& aInvalidRegion) override;

View File

@@ -258,25 +258,16 @@ bool nsWindow::OnPaint(uint32_t aNestingLevel) {
return false;
}
// don't need to double buffer with anything but GDI
BufferMode doubleBuffering = mozilla::layers::BufferMode::BUFFER_NONE;
switch (mTransparencyMode) {
case TransparencyMode::Transparent:
// If we're rendering with translucency, we're going to be
// rendering the whole window; make sure we clear it first
dt->ClearRect(Rect(dt->GetRect()));
break;
default:
// If we're not doing translucency, then double buffer
doubleBuffering = mozilla::layers::BufferMode::BUFFERED;
break;
if (mTransparencyMode == TransparencyMode::Transparent) {
// If we're rendering with translucency, we're going to be
// rendering the whole window; make sure we clear it first
dt->ClearRect(Rect(dt->GetRect()));
}
gfxContext thebesContext(dt);
{
AutoLayerManagerSetup setupLayerManager(this, &thebesContext,
doubleBuffering);
AutoLayerManagerSetup setupLayerManager(this, &thebesContext);
if (nsIWidgetListener* listener = GetPaintListener()) {
result = listener->PaintWindow(this, region);
}