Flutter Impeller
allocator.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter 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 FLUTTER_IMPELLER_CORE_ALLOCATOR_H_
6 #define FLUTTER_IMPELLER_CORE_ALLOCATOR_H_
7 
8 #include "flutter/fml/mapping.h"
12 #include "impeller/core/texture.h"
14 #include "impeller/geometry/size.h"
15 
16 namespace impeller {
17 
18 class Context;
19 class DeviceBuffer;
20 
21 //------------------------------------------------------------------------------
22 /// @brief An object that allocates device memory.
23 ///
24 class Allocator {
25  public:
26  virtual ~Allocator();
27 
28  bool IsValid() const;
29 
30  std::shared_ptr<DeviceBuffer> CreateBuffer(
31  const DeviceBufferDescriptor& desc);
32 
33  //------------------------------------------------------------------------------
34  /// @brief Creates a new texture.
35  ///
36  /// @param[in] desc The descriptor of the texture to create.
37  /// @param[in] threadsafe Whether mutations to this texture should be
38  /// protected with a threadsafe barrier.
39  ///
40  /// This parameter only affects the OpenGLES rendering
41  /// backend.
42  ///
43  /// If any interaction with this texture (including
44  /// creation) will be done on a thread other than
45  /// where the OpenGLES context resides, then
46  /// `threadsafe`, must be set to `true`.
47  ///
48  std::shared_ptr<Texture> CreateTexture(const TextureDescriptor& desc,
49  bool threadsafe = false);
50 
51  //------------------------------------------------------------------------------
52  /// @brief Minimum value for `row_bytes` on a Texture. The row
53  /// bytes parameter of that method must be aligned to this value.
54  ///
55  virtual uint16_t MinimumBytesPerRow(PixelFormat format) const;
56 
57  std::shared_ptr<DeviceBuffer> CreateBufferWithCopy(const uint8_t* buffer,
58  size_t length);
59 
60  std::shared_ptr<DeviceBuffer> CreateBufferWithCopy(
61  const fml::Mapping& mapping);
62 
63  virtual ISize GetMaxTextureSizeSupported() const = 0;
64 
65  /// @brief Write debug memory usage information to the dart timeline in debug
66  /// and profile modes.
67  ///
68  /// This is supported on both the Metal and Vulkan backends.
69  virtual void DebugTraceMemoryStatistics() const {};
70 
71  // Visible for testing.
72  virtual Bytes DebugGetHeapUsage() const { return Bytes{0}; }
73 
74  protected:
76 
77  virtual std::shared_ptr<DeviceBuffer> OnCreateBuffer(
78  const DeviceBufferDescriptor& desc) = 0;
79 
80  virtual std::shared_ptr<Texture> OnCreateTexture(
81  const TextureDescriptor& desc,
82  bool threadsafe = false) = 0;
83 
84  private:
85  Allocator(const Allocator&) = delete;
86 
87  Allocator& operator=(const Allocator&) = delete;
88 };
89 
90 } // namespace impeller
91 
92 #endif // FLUTTER_IMPELLER_CORE_ALLOCATOR_H_
An object that allocates device memory.
Definition: allocator.h:24
virtual uint16_t MinimumBytesPerRow(PixelFormat format) const
Minimum value for row_bytes on a Texture. The row bytes parameter of that method must be aligned to t...
Definition: allocator.cc:69
virtual ISize GetMaxTextureSizeSupported() const =0
std::shared_ptr< DeviceBuffer > CreateBufferWithCopy(const uint8_t *buffer, size_t length)
Definition: allocator.cc:18
std::shared_ptr< DeviceBuffer > CreateBuffer(const DeviceBufferDescriptor &desc)
Definition: allocator.cc:44
virtual std::shared_ptr< Texture > OnCreateTexture(const TextureDescriptor &desc, bool threadsafe=false)=0
virtual std::shared_ptr< DeviceBuffer > OnCreateBuffer(const DeviceBufferDescriptor &desc)=0
virtual void DebugTraceMemoryStatistics() const
Write debug memory usage information to the dart timeline in debug and profile modes.
Definition: allocator.h:69
virtual Bytes DebugGetHeapUsage() const
Definition: allocator.h:72
bool IsValid() const
std::shared_ptr< Texture > CreateTexture(const TextureDescriptor &desc, bool threadsafe=false)
Creates a new texture.
Definition: allocator.cc:49
PixelFormat
The Pixel formats supported by Impeller. The naming convention denotes the usage of the component,...
Definition: formats.h:99
A lightweight object that describes the attributes of a texture that can then used an allocator to cr...