aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkPictureRecorder.cpp
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@chromium.org>2015-04-21 15:23:59 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-04-21 15:24:00 -0700
commit98b8485a4cc911420e20af2670d21a5478a06264 (patch)
tree4a2fa7f3eba5368bd32656d4e1cffdfa8287f870 /src/core/SkPictureRecorder.cpp
parent5ae0e2b56373b67a0fe6a0f9d7a0373712d1fa63 (diff)
O(1) SkPictureUtils::ApproxBytesUsed()
Chrome wants to call this more often, and it's quite slow today. Seems like this could be clearer if SkPictureUtils::ApproxBytesUsed() were SkPicture::approxBytesUsed(). BUG=chromium:471873 Review URL: https://codereview.chromium.org/1090943004
Diffstat (limited to 'src/core/SkPictureRecorder.cpp')
-rw-r--r--src/core/SkPictureRecorder.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/core/SkPictureRecorder.cpp b/src/core/SkPictureRecorder.cpp
index f622e66c84..22b1ee3eac 100644
--- a/src/core/SkPictureRecorder.cpp
+++ b/src/core/SkPictureRecorder.cpp
@@ -9,10 +9,11 @@
#include "SkDrawable.h"
#include "SkLayerInfo.h"
#include "SkPictureRecorder.h"
+#include "SkPictureUtils.h"
#include "SkRecord.h"
#include "SkRecordDraw.h"
-#include "SkRecorder.h"
#include "SkRecordOpts.h"
+#include "SkRecorder.h"
#include "SkTypes.h"
SkPictureRecorder::SkPictureRecorder() {
@@ -72,7 +73,12 @@ SkPicture* SkPictureRecorder::endRecordingAsPicture() {
fCullRect = bbhBound;
}
- SkPicture* pict = SkNEW_ARGS(SkPicture, (fCullRect, fRecord, pictList, fBBH));
+ size_t subPictureBytes = fRecorder->approxBytesUsedBySubPictures();
+ for (int i = 0; pictList && i < pictList->count(); i++) {
+ subPictureBytes += SkPictureUtils::ApproximateBytesUsed(pictList->begin()[i]);
+ }
+ SkPicture* pict =
+ SkNEW_ARGS(SkPicture, (fCullRect, fRecord, pictList, fBBH, subPictureBytes));
if (saveLayerData) {
pict->EXPERIMENTAL_addAccelData(saveLayerData);
@@ -153,7 +159,12 @@ protected:
SkRecordComputeLayers(fBounds, *fRecord, pictList, bbh, saveLayerData);
}
- SkPicture* pict = SkNEW_ARGS(SkPicture, (fBounds, fRecord, pictList, fBBH));
+ size_t subPictureBytes = 0;
+ for (int i = 0; pictList && i < pictList->count(); i++) {
+ subPictureBytes += SkPictureUtils::ApproximateBytesUsed(pictList->begin()[i]);
+ }
+ SkPicture* pict =
+ SkNEW_ARGS(SkPicture, (fBounds, fRecord, pictList, fBBH, subPictureBytes));
if (saveLayerData) {
pict->EXPERIMENTAL_addAccelData(saveLayerData);