void SkDeferredCanvas::init() {
fBitmapSizeThreshold = kDeferredCanvasBitmapSizeThreshold;
fDeferredDrawing = true; // On by default
- fCachedCanvasSize.setEmpty();
- fCachedCanvasSizeDirty = true;
}
void SkDeferredCanvas::setMaxRecordingStorage(size_t maxStorage) {
return this->getDeferredDevice()->isFreshFrame();
}
-SkISize SkDeferredCanvas::getCanvasSize() const {
- if (fCachedCanvasSizeDirty) {
- fCachedCanvasSize = this->getBaseLayerSize();
- fCachedCanvasSizeDirty = false;
- }
- return fCachedCanvasSize;
-}
-
bool SkDeferredCanvas::hasPendingCommands() const {
return this->getDeferredDevice()->hasPendingCommands();
}
// all pending commands, which can help to seamlessly recover from
// a lost accelerated graphics context.
deferredDevice->setSurface(surface);
- fCachedCanvasSizeDirty = true;
return surface;
}
bool SkDeferredCanvas::isFullFrame(const SkRect* rect,
const SkPaint* paint) const {
SkCanvas* canvas = this->drawingCanvas();
- SkISize canvasSize = this->getCanvasSize();
+ SkISize canvasSize = this->getDeviceSize();
if (rect) {
if (!canvas->getTotalMatrix().rectStaysRect()) {
return false; // conservative
REPORTER_ASSERT(reporter, notificationCounter.fStorageAllocatedChangedCount == 1);
}
-static void TestDeferredCanvasGetCanvasSize(skiatest::Reporter* reporter) {
- SkRect rect;
- rect.setXYWH(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(gWidth), SkIntToScalar(gHeight));
- SkRect clip;
- clip.setXYWH(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(1), SkIntToScalar(1));
-
- SkPaint paint;
- SkISize size = SkISize::Make(gWidth, gHeight);
-
- SkAutoTUnref<SkSurface> surface(createSurface(0xFFFFFFFF));
- SkAutoTUnref<SkDeferredCanvas> canvas(SkDeferredCanvas::Create(surface.get()));
-
- for (int i = 0; i < 2; ++i) {
- if (i == 1) {
- SkSurface* newSurface = SkSurface::NewRasterPMColor(4, 4);
- canvas->setSurface(newSurface);
- size = SkISize::Make(4, 4);
- }
-
- // verify that canvas size is correctly initialized or set
- REPORTER_ASSERT(reporter, size == canvas->getCanvasSize());
-
- // Verify that clear, clip and draw the canvas will not change its size
- canvas->clear(0x00000000);
- canvas->clipRect(clip, SkRegion::kIntersect_Op, false);
- canvas->drawRect(rect, paint);
- REPORTER_ASSERT(reporter, size == canvas->getCanvasSize());
-
- // Verify that flush the canvas will not change its size
- canvas->flush();
- REPORTER_ASSERT(reporter, size == canvas->getCanvasSize());
-
- // Verify that clear canvas with saved state will not change its size
- canvas->save();
- canvas->clear(0xFFFFFFFF);
- REPORTER_ASSERT(reporter, size == canvas->getCanvasSize());
-
- // Verify that restore canvas state will not change its size
- canvas->restore();
- REPORTER_ASSERT(reporter, size == canvas->getCanvasSize());
-
- // Verify that clear within a layer will not change canvas size
- canvas->saveLayer(&clip, &paint);
- canvas->clear(0x00000000);
- REPORTER_ASSERT(reporter, size == canvas->getCanvasSize());
-
- // Verify that restore from a layer will not change canvas size
- canvas->restore();
- REPORTER_ASSERT(reporter, size == canvas->getCanvasSize());
- }
-}
-
DEF_TEST(DeferredCanvas_CPU, reporter) {
TestDeferredCanvasFlush(reporter);
TestDeferredCanvasSilentFlush(reporter);
TestDeferredCanvasBitmapSizeThreshold(reporter);
TestDeferredCanvasCreateCompatibleDevice(reporter);
TestDeferredCanvasWritePixelsToSurface(reporter);
- TestDeferredCanvasGetCanvasSize(reporter);
TestDeferredCanvasSurface(reporter, NULL);
TestDeferredCanvasSetSurface(reporter, NULL);
}