Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / cc / resources / resource_pool.h
1 // Copyright 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.
4
5 #ifndef CC_RESOURCES_RESOURCE_POOL_H_
6 #define CC_RESOURCES_RESOURCE_POOL_H_
7
8 #include <list>
9
10 #include "base/memory/scoped_ptr.h"
11 #include "cc/base/cc_export.h"
12 #include "cc/output/renderer.h"
13 #include "cc/resources/resource.h"
14 #include "cc/resources/resource_format.h"
15
16 namespace cc {
17 class ScopedResource;
18
19 class CC_EXPORT ResourcePool {
20  public:
21   static scoped_ptr<ResourcePool> Create(ResourceProvider* resource_provider,
22                                          GLenum target,
23                                          ResourceFormat format) {
24     return make_scoped_ptr(new ResourcePool(resource_provider, target, format));
25   }
26
27   virtual ~ResourcePool();
28
29   scoped_ptr<ScopedResource> AcquireResource(const gfx::Size& size);
30   void ReleaseResource(scoped_ptr<ScopedResource>);
31
32   void SetResourceUsageLimits(size_t max_memory_usage_bytes,
33                               size_t max_unused_memory_usage_bytes,
34                               size_t max_resource_count);
35
36   void ReduceResourceUsage();
37   void CheckBusyResources();
38
39   size_t total_memory_usage_bytes() const { return memory_usage_bytes_; }
40   size_t acquired_memory_usage_bytes() const {
41     return memory_usage_bytes_ - unused_memory_usage_bytes_;
42   }
43   size_t acquired_resource_count() const {
44     return resource_count_ - unused_resources_.size();
45   }
46
47  protected:
48   ResourcePool(ResourceProvider* resource_provider,
49                GLenum target,
50                ResourceFormat format);
51
52   bool ResourceUsageTooHigh();
53
54  private:
55   void DidFinishUsingResource(ScopedResource* resource);
56
57   ResourceProvider* resource_provider_;
58   const GLenum target_;
59   const ResourceFormat format_;
60   size_t max_memory_usage_bytes_;
61   size_t max_unused_memory_usage_bytes_;
62   size_t max_resource_count_;
63   size_t memory_usage_bytes_;
64   size_t unused_memory_usage_bytes_;
65   size_t resource_count_;
66
67   typedef std::list<ScopedResource*> ResourceList;
68   ResourceList unused_resources_;
69   ResourceList busy_resources_;
70
71   DISALLOW_COPY_AND_ASSIGN(ResourcePool);
72 };
73
74 }  // namespace cc
75
76 #endif  // CC_RESOURCES_RESOURCE_POOL_H_