summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2019-11-05 12:51:31 +0100
committerLuboš Luňák <l.lunak@collabora.com>2019-11-27 09:55:15 +0100
commit402c8d916cf4687345a41be5fbb01c564768186a (patch)
tree5bdf4b9cff027e043f967ab64d62187c348c2f62
parentf109a1ac6fdf0c878d53dfea6fceffd93248608f (diff)
pre-fill Skia bitmaps/surfaces with garbage in dbgutil mode
In order to be able to detect incorrect/missing drawing. Change-Id: I18b3f05c1fdff69b461f22e984e0aef3c4ce3364
-rw-r--r--vcl/inc/skia/gdiimpl.hxx4
-rw-r--r--vcl/skia/gdiimpl.cxx20
-rw-r--r--vcl/skia/salbmp.cxx12
-rw-r--r--vcl/skia/win/gdiimpl.cxx3
-rw-r--r--vcl/skia/x11/gdiimpl.cxx3
5 files changed, 41 insertions, 1 deletions
diff --git a/vcl/inc/skia/gdiimpl.hxx b/vcl/inc/skia/gdiimpl.hxx
index 432f8f2512e5..0c70ce0705ee 100644
--- a/vcl/inc/skia/gdiimpl.hxx
+++ b/vcl/inc/skia/gdiimpl.hxx
@@ -237,6 +237,10 @@ protected:
};
static RenderMethod renderMethodToUse();
+#ifdef DBG_UTIL
+ void prefillSurface();
+#endif
+
SalGraphics& mParent;
/// Pointer to the SalFrame or SalVirtualDevice
SalGeometryProvider* mProvider;
diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx
index c36184714adb..18bd87efdc88 100644
--- a/vcl/skia/gdiimpl.cxx
+++ b/vcl/skia/gdiimpl.cxx
@@ -209,6 +209,9 @@ void SkiaSalGraphicsImpl::createSurface()
// Create surface for offscreen graphics. Subclasses will create GPU-backed
// surfaces as appropriate.
mSurface = SkSurface::MakeRasterN32Premul(GetWidth(), GetHeight());
+#ifdef DBG_UTIL
+ prefillSurface();
+#endif
}
void SkiaSalGraphicsImpl::destroySurface()
@@ -1031,6 +1034,23 @@ void SkiaSalGraphicsImpl::dump(const SkBitmap& bitmap, const char* file)
std::ofstream ostream(file, std::ios::binary);
ostream.write(static_cast<const char*>(data->data()), data->size());
}
+
+void SkiaSalGraphicsImpl::prefillSurface()
+{
+ // Pre-fill the surface with deterministic garbage.
+ SkBitmap bitmap;
+ bitmap.allocN32Pixels(2, 2);
+ SkPMColor* scanline;
+ scanline = bitmap.getAddr32(0, 0);
+ *scanline++ = SkPreMultiplyARGB(0xFF, 0xBF, 0x80, 0x40);
+ *scanline++ = SkPreMultiplyARGB(0xFF, 0x40, 0x80, 0xBF);
+ scanline = bitmap.getAddr32(0, 1);
+ *scanline++ = SkPreMultiplyARGB(0xFF, 0xE3, 0x5C, 0x13);
+ *scanline++ = SkPreMultiplyARGB(0xFF, 0x13, 0x5C, 0xE3);
+ SkPaint paint;
+ paint.setShader(bitmap.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat));
+ mSurface->getCanvas()->drawPaint(paint);
+}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/skia/salbmp.cxx b/vcl/skia/salbmp.cxx
index b1b01f683fe4..9322e7ee8e55 100644
--- a/vcl/skia/salbmp.cxx
+++ b/vcl/skia/salbmp.cxx
@@ -82,6 +82,13 @@ bool SkiaSalBitmap::Create(const Size& rSize, sal_uInt16 nBitCount, const Bitmap
{
return false;
}
+#ifdef DBG_UTIL
+ // fill with random garbage
+ sal_uInt8* buffer = static_cast<sal_uInt8*>(mBitmap.getPixels());
+ size_t size = mBitmap.rowBytes() & mBitmap.height();
+ for (size_t i = 0; i < size; i++)
+ buffer[i] = (i & 0xFF);
+#endif
}
else
{
@@ -101,7 +108,10 @@ bool SkiaSalBitmap::Create(const Size& rSize, sal_uInt16 nBitCount, const Bitmap
allocate += sizeof(CANARY);
#endif
buffer = new sal_uInt8[allocate];
-#if OSL_DEBUG_LEVEL > 0
+#ifdef DBG_UTIL
+ // fill with random garbage
+ for (size_t i = 0; i < allocate; i++)
+ buffer[i] = (i & 0xFF);
memcpy(buffer + allocate - sizeof(CANARY), CANARY, sizeof(CANARY));
#endif
}
diff --git a/vcl/skia/win/gdiimpl.cxx b/vcl/skia/win/gdiimpl.cxx
index 4640e3b57897..d54120d5ffce 100644
--- a/vcl/skia/win/gdiimpl.cxx
+++ b/vcl/skia/win/gdiimpl.cxx
@@ -66,6 +66,9 @@ void WinSkiaSalGraphicsImpl::createSurface()
assert(SkToBool(mWindowContext)); // TODO
mSurface = mWindowContext->getBackbufferSurface();
assert(mSurface.get());
+#ifdef DBG_UTIL
+ prefillSurface();
+#endif
}
void WinSkiaSalGraphicsImpl::DeInit()
diff --git a/vcl/skia/x11/gdiimpl.cxx b/vcl/skia/x11/gdiimpl.cxx
index f4575d8af867..fff94936a33d 100644
--- a/vcl/skia/x11/gdiimpl.cxx
+++ b/vcl/skia/x11/gdiimpl.cxx
@@ -74,6 +74,9 @@ void X11SkiaSalGraphicsImpl::createSurface()
assert(SkToBool(mWindowContext)); // TODO
mSurface = mWindowContext->getBackbufferSurface();
assert(mSurface.get());
+#ifdef DBG_UTIL
+ prefillSurface();
+#endif
}
void X11SkiaSalGraphicsImpl::DeInit()