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

Side by Side Diff: gpu/command_buffer/service/memory_tracking.h

Issue 11516014: Track managed memory usage in the command buffer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix unit test compile error Created 8 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef GPU_COMMAND_BUFFER_SERVICE_MEMORY_TRACKING_H_ 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_MEMORY_TRACKING_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_MEMORY_TRACKING_H_ 6 #define GPU_COMMAND_BUFFER_SERVICE_MEMORY_TRACKING_H_
7 7
8 #include <string> 8 #include <string>
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
11 11
12 namespace gpu { 12 namespace gpu {
13 namespace gles2 { 13 namespace gles2 {
14 14
15 // A MemoryTracker is used to propagate per-ContextGroup memory usage 15 // A MemoryTracker is used to propagate per-ContextGroup memory usage
16 // statistics to the global GpuMemoryManager. 16 // statistics to the global GpuMemoryManager.
17 class MemoryTracker : public base::RefCounted<MemoryTracker> { 17 class MemoryTracker : public base::RefCounted<MemoryTracker> {
18 public: 18 public:
19 virtual void TrackMemoryAllocatedChange(size_t old_size, size_t new_size) = 0; 19 enum Pool {
20 kUnmanaged,
21 kManaged
22 };
23
24 virtual void TrackMemoryAllocatedChange(size_t old_size,
25 size_t new_size,
26 Pool pool) = 0;
20 27
21 protected: 28 protected:
22 friend class base::RefCounted<MemoryTracker>; 29 friend class base::RefCounted<MemoryTracker>;
23 MemoryTracker() {} 30 MemoryTracker() {}
24 virtual ~MemoryTracker() {}; 31 virtual ~MemoryTracker() {};
25 32
26 private: 33 private:
27 DISALLOW_COPY_AND_ASSIGN(MemoryTracker); 34 DISALLOW_COPY_AND_ASSIGN(MemoryTracker);
28 }; 35 };
29 36
30 // A MemoryTypeTracker tracks the use of a particular type of memory (buffer, 37 // A MemoryTypeTracker tracks the use of a particular type of memory (buffer,
31 // texture, or renderbuffer) and forward the result to a specified 38 // texture, or renderbuffer) and forward the result to a specified
32 // MemoryTracker. 39 // MemoryTracker.
33 class MemoryTypeTracker { 40 class MemoryTypeTracker {
34 public: 41 public:
35 MemoryTypeTracker(MemoryTracker* memory_tracker) 42 MemoryTypeTracker(MemoryTracker* memory_tracker, MemoryTracker::Pool pool)
36 : memory_tracker_(memory_tracker), 43 : memory_tracker_(memory_tracker),
37 has_updated_mem_represented_(false), 44 pool_(pool),
38 last_updated_mem_represented_(0) { 45 has_done_update_(false),
46 mem_represented_(0),
47 mem_represented_at_last_update_(0) {
39 } 48 }
40 49
41 void UpdateMemRepresented(size_t mem_represented) { 50 void TrackMemAlloc(size_t bytes) {
42 if (!has_updated_mem_represented_ && 51 mem_represented_ += bytes;
43 mem_represented == last_updated_mem_represented_) { 52 }
53
54 void TrackMemFree(size_t bytes) {
55 DCHECK(bytes <= mem_represented_);
56 mem_represented_ -= bytes;
57 }
58
59 void UpdateMemRepresented() {
60 // Skip redundant updates only if we have already done an update.
61 if (!has_done_update_ &&
62 mem_represented_ == mem_represented_at_last_update_) {
44 return; 63 return;
45 } 64 }
46 if (memory_tracker_) { 65 if (memory_tracker_) {
47 memory_tracker_->TrackMemoryAllocatedChange( 66 memory_tracker_->TrackMemoryAllocatedChange(
48 last_updated_mem_represented_, 67 mem_represented_at_last_update_,
49 mem_represented); 68 mem_represented_,
69 pool_);
50 } 70 }
51 has_updated_mem_represented_ = true; 71 has_done_update_ = true;
52 last_updated_mem_represented_ = mem_represented; 72 mem_represented_at_last_update_ = mem_represented_;
53 } 73 }
54 74
55 size_t GetMemRepresented() const { 75 size_t GetMemRepresented() const {
56 return last_updated_mem_represented_; 76 return mem_represented_at_last_update_;
57 } 77 }
58 78
59 private: 79 private:
60 MemoryTracker* memory_tracker_; 80 MemoryTracker* memory_tracker_;
61 bool has_updated_mem_represented_; 81 MemoryTracker::Pool pool_;
62 size_t last_updated_mem_represented_; 82 bool has_done_update_;
83 size_t mem_represented_;
84 size_t mem_represented_at_last_update_;
63 85
64 DISALLOW_COPY_AND_ASSIGN(MemoryTypeTracker); 86 DISALLOW_COPY_AND_ASSIGN(MemoryTypeTracker);
65 }; 87 };
66 88
67 } // namespace gles2 89 } // namespace gles2
68 } // namespace gpu 90 } // namespace gpu
69 91
70 #endif // GPU_COMMAND_BUFFER_SERVICE_MEMORY_TRACKING_H_ 92 #endif // GPU_COMMAND_BUFFER_SERVICE_MEMORY_TRACKING_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.cc ('k') | gpu/command_buffer/service/renderbuffer_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698