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 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_COMMON_GPU_GPU_MEMORY_TRACKING_H_ 6 #define CONTENT_COMMON_GPU_GPU_MEMORY_TRACKING_H_ 7 8 #include "base/basictypes.h" 9 #include "base/process/process.h" 10 #include "content/common/content_export.h" 11 #include "gpu/command_buffer/service/memory_tracking.h" 12 13 namespace content { 14 15 class GpuMemoryManager; 16 17 // All decoders in a context group point to a single GpuMemoryTrackingGroup, 18 // which tracks GPU resource consumption for the entire context group. 19 class CONTENT_EXPORT GpuMemoryTrackingGroup { 20 public: 21 ~GpuMemoryTrackingGroup(); 22 void TrackMemoryAllocatedChange( 23 uint64 old_size, 24 uint64 new_size, 25 gpu::gles2::MemoryTracker::Pool tracking_pool); 26 bool EnsureGPUMemoryAvailable(uint64 size_needed); 27 base::ProcessId GetPid() const { 28 return pid_; 29 } 30 uint64 GetSize() const { 31 return size_; 32 } 33 gpu::gles2::MemoryTracker* GetMemoryTracker() const { 34 return memory_tracker_; 35 } 36 37 private: 38 friend class GpuMemoryManager; 39 40 GpuMemoryTrackingGroup(base::ProcessId pid, 41 gpu::gles2::MemoryTracker* memory_tracker, 42 GpuMemoryManager* memory_manager); 43 44 base::ProcessId pid_; 45 uint64 size_; 46 47 // Set and used only during the Manage function, to determine which 48 // non-surface clients should be hibernated. 49 bool hibernated_; 50 51 gpu::gles2::MemoryTracker* memory_tracker_; 52 GpuMemoryManager* memory_manager_; 53 }; 54 55 } // namespace content 56 57 #endif // CONTENT_COMMON_GPU_GPU_MEMORY_TRACKING_H_ 58