diff options
author | scroggo@google.com <scroggo@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-07-26 20:03:32 +0000 |
---|---|---|
committer | scroggo@google.com <scroggo@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-07-26 20:03:32 +0000 |
commit | 15011ee5e4068ab6523e432e435473a822ee7d80 (patch) | |
tree | d11ca1c26161dc2af036d95c0eeab50eeacae1ac /src/utils | |
parent | 1c31f633232df572f89a3bc1b0fee3e46d22cb5b (diff) |
Make SkDeferredCanvas query SkGPipeWriter for space allocated for bitmaps.
SkGPipe now has a method to report how much memory is used for its shared heap.
BUG=http://code.google.com/p/skia/issues/detail?id=738
TEST=DeferredCanvasTest
Review URL: https://codereview.appspot.com/6445046
git-svn-id: http://skia.googlecode.com/svn/trunk@4791 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/utils')
-rw-r--r-- | src/utils/SkDeferredCanvas.cpp | 46 |
1 files changed, 3 insertions, 43 deletions
diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp index a36a604f4b..c5a21831d4 100644 --- a/src/utils/SkDeferredCanvas.cpp +++ b/src/utils/SkDeferredCanvas.cpp @@ -35,13 +35,6 @@ public: } else { fCanvas = NULL; } - // FIXME: Temporary solution for tracking memory usage, pending - // resolution of http://code.google.com/p/skia/issues/detail?id=738 -#if SK_DEFERRED_CANVAS_USES_GPIPE - if (canvas.isDeferredDrawing()) { - canvas.accountForTempBitmapStorage(bitmap); - } -#endif } ~AutoImmediateDrawIfNeeded() { @@ -143,16 +136,6 @@ void SkDeferredCanvas::setMaxRecordingStorage(size_t maxStorage) { this->getDeferredDevice()->setMaxRecordingStorage(maxStorage); } -// FIXME: Temporary solution for tracking memory usage, pending -// resolution of http://code.google.com/p/skia/issues/detail?id=738 -#if SK_DEFERRED_CANVAS_USES_GPIPE -void SkDeferredCanvas::accountForTempBitmapStorage(const SkBitmap& bitmap) const { - if (fDeferredDrawing) { - this->getDeferredDevice()->accountForTempBitmapStorage(bitmap); - } -} -#endif - void SkDeferredCanvas::validate() const { SkASSERT(getDevice()); } @@ -563,7 +546,6 @@ SkDeferredCanvas::DeferredDevice::DeferredDevice( fImmediateCanvas = SkNEW_ARGS(SkCanvas, (fImmediateDevice)); #if SK_DEFERRED_CANVAS_USES_GPIPE fPipeController.setPlaybackCanvas(fImmediateCanvas); - fTempBitmapStorage = 0; #endif beginRecording(); } @@ -579,26 +561,10 @@ void SkDeferredCanvas::DeferredDevice::setMaxRecordingStorage(size_t maxStorage) recordingCanvas(); // Accessing the recording canvas applies the new limit. } -#if SK_DEFERRED_CANVAS_USES_GPIPE -void SkDeferredCanvas::DeferredDevice::accountForTempBitmapStorage(const SkBitmap& bitmap) { - // SkGPipe will store copies of mutable bitmaps. The memory allocations - // and deallocations for these bitmaps are not tracked by the writer or - // the controller, so we do as best we can to track consumption here - if (!bitmap.isImmutable()) { - // FIXME: Temporary solution for tracking memory usage, pending - // resolution of http://code.google.com/p/skia/issues/detail?id=738 - // This does not take into account duplicates of previously - // copied bitmaps that will not get copied again. - fTempBitmapStorage += bitmap.getSize(); - } -} -#endif - void SkDeferredCanvas::DeferredDevice::endRecording() { #if SK_DEFERRED_CANVAS_USES_GPIPE fPipeWriter.endRecording(); fPipeController.reset(); - fTempBitmapStorage = 0; #else fPicture.endRecording(); #endif @@ -607,7 +573,6 @@ void SkDeferredCanvas::DeferredDevice::endRecording() { void SkDeferredCanvas::DeferredDevice::beginRecording() { #if SK_DEFERRED_CANVAS_USES_GPIPE - SkASSERT(0 == fTempBitmapStorage); fRecordingCanvas = fPipeWriter.startRecording(&fPipeController, 0); #else fRecordingCanvas = fPicture.beginRecording(fImmediateDevice->width(), @@ -679,7 +644,6 @@ void SkDeferredCanvas::DeferredDevice::flushPending() { #if SK_DEFERRED_CANVAS_USES_GPIPE fPipeWriter.flushRecording(true); fPipeController.playback(); - fTempBitmapStorage = 0; #else fPicture.draw(fImmediateCanvas); this->beginRecording(); @@ -693,8 +657,9 @@ void SkDeferredCanvas::DeferredDevice::flush() { SkCanvas* SkDeferredCanvas::DeferredDevice::recordingCanvas() { #if SK_DEFERRED_CANVAS_USES_GPIPE - if (fPipeController.storageAllocatedForRecording() + fTempBitmapStorage > - fMaxRecordingStorageBytes) { + if (fPipeController.storageAllocatedForRecording() + + fPipeWriter.storageAllocatedForRecording() + > fMaxRecordingStorageBytes) { this->flushPending(); } #endif @@ -741,11 +706,6 @@ void SkDeferredCanvas::DeferredDevice::writePixels(const SkBitmap& bitmap, this->flushPending(); fImmediateCanvas->drawSprite(bitmap, x, y, &paint); } else { -#if SK_DEFERRED_CANVAS_USES_GPIPE - // FIXME: Temporary solution for tracking memory usage, pending - // resolution of http://code.google.com/p/skia/issues/detail?id=738 - this->accountForTempBitmapStorage(bitmap); -#endif recordingCanvas()->drawSprite(bitmap, x, y, &paint); } } |