Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3058)

Unified Diff: cc/playback/display_item_list.cc

Issue 1226503006: cc: More consistent reasoning about display list memory usage. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: capacity unit test Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/playback/display_item_list.cc
diff --git a/cc/playback/display_item_list.cc b/cc/playback/display_item_list.cc
index 943f48d51ea29821d9ca2b391a83601dd757a099..6641c3191ad258dd07fe32c891491c875394301e 100644
--- a/cc/playback/display_item_list.cc
+++ b/cc/playback/display_item_list.cc
@@ -48,7 +48,8 @@ DisplayItemList::DisplayItemList(gfx::Rect layer_rect,
layer_rect_(layer_rect),
is_suitable_for_gpu_rasterization_(true),
approximate_op_count_(0),
- picture_memory_usage_(0) {
+ picture_memory_usage_(0),
+ external_memory_usage_(0) {
#if DCHECK_IS_ON()
needs_process_ = false;
#endif
@@ -153,7 +154,7 @@ void DisplayItemList::ProcessAppendedItems() {
if (retain_individual_display_items_) {
// Warning: this double-counts SkPicture data if use_cached_picture_ is
// also true.
- picture_memory_usage_ += item->picture_memory_usage();
+ external_memory_usage_ += item->external_memory_usage();
}
}
@@ -193,7 +194,7 @@ void DisplayItemList::Finalize() {
DCHECK(!picture_);
picture_ = skia::AdoptRef(recorder_->endRecordingAsPicture());
DCHECK(picture_);
- picture_memory_usage_ +=
+ picture_memory_usage_ =
SkPictureUtils::ApproximateBytesUsed(picture_.get());
recorder_.reset();
canvas_.clear();
@@ -213,14 +214,26 @@ int DisplayItemList::ApproximateOpCount() const {
return approximate_op_count_;
}
-size_t DisplayItemList::PictureMemoryUsage() const {
+size_t DisplayItemList::ApproximateMemoryUsage() const {
DCHECK(ProcessAppendedItemsCalled());
// We double-count in this case. Produce zero to avoid being misleading.
if (use_cached_picture_ && retain_individual_display_items_)
return 0;
DCHECK_IMPLIES(use_cached_picture_, picture_);
- return picture_memory_usage_;
+
+ size_t memory_usage = sizeof(*this);
+
+ // Memory outside this class due to |items_|.
+ memory_usage += items_.GetCapacityInBytes() + external_memory_usage_;
+
+ // Memory outside this class due to |picture|.
+ memory_usage += picture_memory_usage_;
+
+ // TODO(jbroman): Does anything else owned by this class substantially
+ // contribute to memory usage?
+
+ return memory_usage;
}
scoped_refptr<base::trace_event::ConvertableToTraceFormat>

Powered by Google App Engine
This is Rietveld 408576698