diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2019-11-05 12:51:31 +0100 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2019-11-27 09:55:15 +0100 |
commit | 402c8d916cf4687345a41be5fbb01c564768186a (patch) | |
tree | 5bdf4b9cff027e043f967ab64d62187c348c2f62 | |
parent | f109a1ac6fdf0c878d53dfea6fceffd93248608f (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.hxx | 4 | ||||
-rw-r--r-- | vcl/skia/gdiimpl.cxx | 20 | ||||
-rw-r--r-- | vcl/skia/salbmp.cxx | 12 | ||||
-rw-r--r-- | vcl/skia/win/gdiimpl.cxx | 3 | ||||
-rw-r--r-- | vcl/skia/x11/gdiimpl.cxx | 3 |
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() |