blob: 28892832f96732bd90eaf40f22361f205295a2db [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 <stdint.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_t old_size, uint64_t new_size);
bool EnsureGPUMemoryAvailable(uint64_t size_needed);
base::ProcessId GetPid() const {
return pid_;
}
uint64_t 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_t 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_