aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/utils
diff options
context:
space:
mode:
authorGravatar scroggo@google.com <scroggo@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-26 20:03:32 +0000
committerGravatar scroggo@google.com <scroggo@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-26 20:03:32 +0000
commit15011ee5e4068ab6523e432e435473a822ee7d80 (patch)
treed11ca1c26161dc2af036d95c0eeab50eeacae1ac /src/utils
parent1c31f633232df572f89a3bc1b0fee3e46d22cb5b (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.cpp46
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);
}
}