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