Respond with QuotaExceededError when IndexedDB has no disk space on open.
[chromium-blink-merge.git] / content / common / gpu / gpu_memory_manager_client.h
blobca7c002f2914b3f5315a4fc2d07bd40fcefe6996
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CONTENT_COMMON_GPU_GPU_MEMORY_MANAGER_CLIENT_H_
6 #define CONTENT_COMMON_GPU_GPU_MEMORY_MANAGER_CLIENT_H_
8 #if defined(ENABLE_GPU)
10 #include <list>
12 #include "base/basictypes.h"
13 #include "content/common/content_export.h"
14 #include "content/common/gpu/gpu_memory_allocation.h"
15 #include "gpu/command_buffer/service/memory_tracking.h"
16 #include "ui/gfx/size.h"
18 namespace content {
20 class GpuMemoryManager;
21 class GpuMemoryTrackingGroup;
23 // The interface that the GPU memory manager uses to manipulate a client (to
24 // send it allocation information and query its properties).
25 class CONTENT_EXPORT GpuMemoryManagerClient {
26 public:
27 virtual ~GpuMemoryManagerClient() {}
29 // Returns surface size.
30 virtual gfx::Size GetSurfaceSize() const = 0;
32 // Returns the memory tracker for this stub.
33 virtual gpu::gles2::MemoryTracker* GetMemoryTracker() const = 0;
35 // Sets buffer usage depending on Memory Allocation
36 virtual void SetMemoryAllocation(
37 const GpuMemoryAllocation& allocation) = 0;
39 // Returns in bytes the total amount of GPU memory for the GPU which this
40 // context is currently rendering on. Returns false if no extension exists
41 // to get the exact amount of GPU memory.
42 virtual bool GetTotalGpuMemory(uint64* bytes) = 0;
45 // The state associated with a GPU memory manager client. This acts as the
46 // handle through which the client interacts with the GPU memory manager.
47 class CONTENT_EXPORT GpuMemoryManagerClientState {
48 public:
49 ~GpuMemoryManagerClientState();
50 void SetVisible(bool visible);
51 void SetManagedMemoryStats(const GpuManagedMemoryStats& stats);
53 private:
54 friend class GpuMemoryManager;
56 GpuMemoryManagerClientState(GpuMemoryManager* memory_manager,
57 GpuMemoryManagerClient* client,
58 GpuMemoryTrackingGroup* tracking_group,
59 bool has_surface,
60 bool visible);
62 // The memory manager this client is hanging off of.
63 GpuMemoryManager* memory_manager_;
65 // The client to send allocations to.
66 GpuMemoryManagerClient* client_;
68 // The tracking group for this client.
69 GpuMemoryTrackingGroup* tracking_group_;
71 // Offscreen commandbuffers will not have a surface.
72 const bool has_surface_;
74 // Whether or not this client is visible.
75 bool visible_;
77 // If the client has a surface, then this is an iterator in the
78 // clients_visible_mru_ if this client is visible and
79 // clients_nonvisible_mru_ if this is non-visible. Otherwise this is an
80 // iterator in clients_nonsurface_.
81 std::list<GpuMemoryManagerClientState*>::iterator list_iterator_;
82 bool list_iterator_valid_;
84 // Statistics about memory usage.
85 GpuManagedMemoryStats managed_memory_stats_;
86 bool managed_memory_stats_received_;
88 // When managed_memory_stats_.bytes_nicetohave leaves the range
89 // [low_, high_], then re-adjust memory limits.
90 uint64 bytes_nicetohave_limit_low_;
91 uint64 bytes_nicetohave_limit_high_;
93 // The allocation for this client, used transiently during memory policy
94 // calculation.
95 uint64 bytes_allocation_when_visible_;
96 uint64 bytes_allocation_when_nonvisible_;
98 // The ideal allocation for this client for three performance levels, used
99 // transiently during memory policy calculation.
100 uint64 bytes_allocation_ideal_nicetohave_;
101 uint64 bytes_allocation_ideal_required_;
102 uint64 bytes_allocation_ideal_minimum_;
104 // Set to disable allocating a frontbuffer or to disable allocations
105 // for clients that don't have surfaces.
106 bool hibernated_;
109 } // namespace content
111 #endif
113 #endif // CONTENT_COMMON_GPU_GPU_MEMORY_MANAGER_CLIENT_H_