// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_COMMON_GPU_GPU_MEMORY_TRACKING_H_ #define CONTENT_COMMON_GPU_GPU_MEMORY_TRACKING_H_ #include "base/basictypes.h" #include "base/process/process.h" #include "content/common/content_export.h" #include "gpu/command_buffer/service/memory_tracking.h" namespace content { class GpuMemoryManager; // All decoders in a context group point to a single GpuMemoryTrackingGroup, // which tracks GPU resource consumption for the entire context group. class CONTENT_EXPORT GpuMemoryTrackingGroup { public: ~GpuMemoryTrackingGroup(); void TrackMemoryAllocatedChange( uint64 old_size, uint64 new_size, gpu::gles2::MemoryTracker::Pool tracking_pool); bool EnsureGPUMemoryAvailable(uint64 size_needed); base::ProcessId GetPid() const { return pid_; } uint64 GetSize() const { return size_; } gpu::gles2::MemoryTracker* GetMemoryTracker() const { return memory_tracker_; } private: friend class GpuMemoryManager; GpuMemoryTrackingGroup(base::ProcessId pid, gpu::gles2::MemoryTracker* memory_tracker, GpuMemoryManager* memory_manager); base::ProcessId pid_; uint64 size_; // Set and used only during the Manage function, to determine which // non-surface clients should be hibernated. bool hibernated_; gpu::gles2::MemoryTracker* memory_tracker_; GpuMemoryManager* memory_manager_; }; } // namespace content #endif // CONTENT_COMMON_GPU_GPU_MEMORY_TRACKING_H_