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

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

Issue 12017032: Add calls to EnsureGPUMemoryAvailable into GLES2DecoderImpl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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 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 enum Pool { 19 enum Pool {
20 kUnmanaged, 20 kUnmanaged,
21 kManaged 21 kManaged
22 }; 22 };
23 23
24 virtual void TrackMemoryAllocatedChange(size_t old_size, 24 virtual void TrackMemoryAllocatedChange(size_t old_size,
25 size_t new_size, 25 size_t new_size,
26 Pool pool) = 0; 26 Pool pool) = 0;
27 27
28 // Ensure a certain amount of GPU memory is free. Returns true on success.
29 virtual bool EnsureGPUMemoryAvailable(size_t size_needed) = 0;
30
28 protected: 31 protected:
29 friend class base::RefCounted<MemoryTracker>; 32 friend class base::RefCounted<MemoryTracker>;
30 MemoryTracker() {} 33 MemoryTracker() {}
31 virtual ~MemoryTracker() {}; 34 virtual ~MemoryTracker() {};
32 35
33 private: 36 private:
34 DISALLOW_COPY_AND_ASSIGN(MemoryTracker); 37 DISALLOW_COPY_AND_ASSIGN(MemoryTracker);
35 }; 38 };
36 39
37 // A MemoryTypeTracker tracks the use of a particular type of memory (buffer, 40 // A MemoryTypeTracker tracks the use of a particular type of memory (buffer,
(...skipping 22 matching lines...) Expand all
60 void TrackMemFree(size_t bytes) { 63 void TrackMemFree(size_t bytes) {
61 DCHECK(bytes <= mem_represented_); 64 DCHECK(bytes <= mem_represented_);
62 mem_represented_ -= bytes; 65 mem_represented_ -= bytes;
63 UpdateMemRepresented(); 66 UpdateMemRepresented();
64 } 67 }
65 68
66 size_t GetMemRepresented() const { 69 size_t GetMemRepresented() const {
67 return mem_represented_at_last_update_; 70 return mem_represented_at_last_update_;
68 } 71 }
69 72
73 // Ensure a certain amount of GPU memory is free. Returns true on success.
74 bool EnsureGPUMemoryAvailable(size_t size_needed) {
75 if (memory_tracker_) {
76 return memory_tracker_->EnsureGPUMemoryAvailable(size_needed);
77 }
78 return true;
79 }
80
70 private: 81 private:
71 void UpdateMemRepresented() { 82 void UpdateMemRepresented() {
72 // Skip redundant updates only if we have already done an update. 83 // Skip redundant updates only if we have already done an update.
73 if (!has_done_update_ && 84 if (!has_done_update_ &&
74 mem_represented_ == mem_represented_at_last_update_) { 85 mem_represented_ == mem_represented_at_last_update_) {
75 return; 86 return;
76 } 87 }
77 if (memory_tracker_) { 88 if (memory_tracker_) {
78 memory_tracker_->TrackMemoryAllocatedChange( 89 memory_tracker_->TrackMemoryAllocatedChange(
79 mem_represented_at_last_update_, 90 mem_represented_at_last_update_,
(...skipping 10 matching lines...) Expand all
90 size_t mem_represented_; 101 size_t mem_represented_;
91 size_t mem_represented_at_last_update_; 102 size_t mem_represented_at_last_update_;
92 103
93 DISALLOW_COPY_AND_ASSIGN(MemoryTypeTracker); 104 DISALLOW_COPY_AND_ASSIGN(MemoryTypeTracker);
94 }; 105 };
95 106
96 } // namespace gles2 107 } // namespace gles2
97 } // namespace gpu 108 } // namespace gpu
98 109
99 #endif // GPU_COMMAND_BUFFER_SERVICE_MEMORY_TRACKING_H_ 110 #endif // GPU_COMMAND_BUFFER_SERVICE_MEMORY_TRACKING_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc ('k') | gpu/command_buffer/service/mocks.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698