diff options
author | mtklein <mtklein@chromium.org> | 2015-04-21 15:23:59 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-21 15:24:00 -0700 |
commit | 98b8485a4cc911420e20af2670d21a5478a06264 (patch) | |
tree | 4a2fa7f3eba5368bd32656d4e1cffdfa8287f870 /src/core/SkPictureRecorder.cpp | |
parent | 5ae0e2b56373b67a0fe6a0f9d7a0373712d1fa63 (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.cpp | 17 |
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); |