15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_COMMON_GPU_GPU_MEMORY_TRACKING_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_COMMON_GPU_GPU_MEMORY_TRACKING_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "base/process/process.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/content_export.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/memory_tracking.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class GpuMemoryManager;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// All decoders in a context group point to a single GpuMemoryTrackingGroup,
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// which tracks GPU resource consumption for the entire context group.
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CONTENT_EXPORT GpuMemoryTrackingGroup {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~GpuMemoryTrackingGroup();
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void TrackMemoryAllocatedChange(
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      uint64 old_size,
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      uint64 new_size,
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      gpu::gles2::MemoryTracker::Pool tracking_pool);
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool EnsureGPUMemoryAvailable(uint64 size_needed);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::ProcessId GetPid() const {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return pid_;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  uint64 GetSize() const {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return size_;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gpu::gles2::MemoryTracker* GetMemoryTracker() const {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return memory_tracker_;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class GpuMemoryManager;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GpuMemoryTrackingGroup(base::ProcessId pid,
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         gpu::gles2::MemoryTracker* memory_tracker,
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         GpuMemoryManager* memory_manager);
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::ProcessId pid_;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  uint64 size_;
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set and used only during the Manage function, to determine which
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // non-surface clients should be hibernated.
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool hibernated_;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gpu::gles2::MemoryTracker* memory_tracker_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GpuMemoryManager* memory_manager_;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_COMMON_GPU_GPU_MEMORY_TRACKING_H_
58