blob: bd0b400a44c22898b75df50b5da917eb0e486195 [file] [log] [blame]
// 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_