// 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.

#include "content/common/gpu/gpu_memory_tracking.h"

#include "content/common/gpu/gpu_memory_manager.h"

namespace content {

GpuMemoryTrackingGroup::GpuMemoryTrackingGroup(
    base::ProcessId pid,
    gpu::gles2::MemoryTracker* memory_tracker,
    GpuMemoryManager* memory_manager)
    : pid_(pid),
      size_(0),
      hibernated_(false),
      memory_tracker_(memory_tracker),
      memory_manager_(memory_manager) {
}

GpuMemoryTrackingGroup::~GpuMemoryTrackingGroup() {
  memory_manager_->OnDestroyTrackingGroup(this);
}

void GpuMemoryTrackingGroup::TrackMemoryAllocatedChange(
    uint64 old_size,
    uint64 new_size,
    gpu::gles2::MemoryTracker::Pool tracking_pool) {
  memory_manager_->TrackMemoryAllocatedChange(
      this, old_size, new_size, tracking_pool);
}

bool GpuMemoryTrackingGroup::EnsureGPUMemoryAvailable(uint64 size_needed) {
  return memory_manager_->EnsureGPUMemoryAvailable(size_needed);
}


}  // namespace content
