| // Copyright 2013 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. |
| |
| #ifndef CC_RESOURCES_SCOPED_UI_RESOURCE_H_ |
| #define CC_RESOURCES_SCOPED_UI_RESOURCE_H_ |
| |
| #include <memory> |
| |
| #include "base/memory/raw_ptr.h" |
| #include "base/memory/ref_counted.h" |
| #include "cc/cc_export.h" |
| #include "cc/resources/ui_resource_bitmap.h" |
| #include "cc/resources/ui_resource_client.h" |
| |
| namespace cc { |
| |
| class UIResourceManager; |
| |
| // ScopedUIResource creates an UIResource from a bitmap and a LayerTreeHost. |
| // This class holds a pointer to the host so that when the instance goes out of |
| // scope, the created resource is deleted. On a GetBitmap call from the |
| // UIResource manager, ScopeUIResource always returns the reference to the |
| // initially given bitmap regardless of whether the request was due to lost |
| // resource or not. |
| class CC_EXPORT ScopedUIResource : public UIResourceClient { |
| public: |
| static std::unique_ptr<ScopedUIResource> Create( |
| UIResourceManager* ui_resource_manager, |
| const UIResourceBitmap& bitmap); |
| ScopedUIResource(const ScopedUIResource&) = delete; |
| ~ScopedUIResource() override; |
| |
| ScopedUIResource& operator=(const ScopedUIResource&) = delete; |
| |
| // UIResourceClient implementation. |
| UIResourceBitmap GetBitmap(UIResourceId uid, bool resource_lost) override; |
| UIResourceId id() const { return id_; } |
| |
| // Returns the memory usage of the bitmap. |
| size_t EstimateMemoryUsage() const { return bitmap_.SizeInBytes(); } |
| |
| protected: |
| ScopedUIResource(UIResourceManager* ui_resource_manager, |
| const UIResourceBitmap& bitmap); |
| |
| UIResourceBitmap bitmap_; |
| raw_ptr<UIResourceManager> ui_resource_manager_; |
| UIResourceId id_; |
| }; |
| |
| } // namespace cc |
| |
| #endif // CC_RESOURCES_SCOPED_UI_RESOURCE_H_ |