Index: gpu/command_buffer/service/memory_tracking.h |
diff --git a/gpu/command_buffer/service/memory_tracking.h b/gpu/command_buffer/service/memory_tracking.h |
index 35ba950a6793ceb92642c4981742c89afae35b4d..de82cebfb9d9b3ac419c168e2f4c9143cabecb35 100644 |
--- a/gpu/command_buffer/service/memory_tracking.h |
+++ b/gpu/command_buffer/service/memory_tracking.h |
@@ -16,7 +16,14 @@ namespace gles2 { |
// statistics to the global GpuMemoryManager. |
class MemoryTracker : public base::RefCounted<MemoryTracker> { |
public: |
- virtual void TrackMemoryAllocatedChange(size_t old_size, size_t new_size) = 0; |
+ enum Pool { |
+ kUnmanaged, |
+ kManaged |
+ }; |
+ |
+ virtual void TrackMemoryAllocatedChange(size_t old_size, |
+ size_t new_size, |
+ Pool pool) = 0; |
protected: |
friend class base::RefCounted<MemoryTracker>; |
@@ -32,34 +39,49 @@ class MemoryTracker : public base::RefCounted<MemoryTracker> { |
// MemoryTracker. |
class MemoryTypeTracker { |
public: |
- MemoryTypeTracker(MemoryTracker* memory_tracker) |
+ MemoryTypeTracker(MemoryTracker* memory_tracker, MemoryTracker::Pool pool) |
: memory_tracker_(memory_tracker), |
- has_updated_mem_represented_(false), |
- last_updated_mem_represented_(0) { |
+ pool_(pool), |
+ has_done_update_(false), |
+ mem_represented_(0), |
+ mem_represented_at_last_update_(0) { |
+ } |
+ |
+ void TrackMemAlloc(size_t bytes) { |
+ mem_represented_ += bytes; |
+ } |
+ |
+ void TrackMemFree(size_t bytes) { |
+ DCHECK(bytes <= mem_represented_); |
+ mem_represented_ -= bytes; |
} |
- void UpdateMemRepresented(size_t mem_represented) { |
- if (!has_updated_mem_represented_ && |
- mem_represented == last_updated_mem_represented_) { |
+ void UpdateMemRepresented() { |
+ // Skip redundant updates only if we have already done an update. |
+ if (!has_done_update_ && |
+ mem_represented_ == mem_represented_at_last_update_) { |
return; |
} |
if (memory_tracker_) { |
memory_tracker_->TrackMemoryAllocatedChange( |
- last_updated_mem_represented_, |
- mem_represented); |
+ mem_represented_at_last_update_, |
+ mem_represented_, |
+ pool_); |
} |
- has_updated_mem_represented_ = true; |
- last_updated_mem_represented_ = mem_represented; |
+ has_done_update_ = true; |
+ mem_represented_at_last_update_ = mem_represented_; |
} |
size_t GetMemRepresented() const { |
- return last_updated_mem_represented_; |
+ return mem_represented_at_last_update_; |
} |
private: |
MemoryTracker* memory_tracker_; |
- bool has_updated_mem_represented_; |
- size_t last_updated_mem_represented_; |
+ MemoryTracker::Pool pool_; |
+ bool has_done_update_; |
+ size_t mem_represented_; |
+ size_t mem_represented_at_last_update_; |
DISALLOW_COPY_AND_ASSIGN(MemoryTypeTracker); |
}; |