Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
impeller
renderer
pool.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_RENDERER_POOL_H_
6
#define FLUTTER_IMPELLER_RENDERER_POOL_H_
7
8
#include <cstdint>
9
#include <memory>
10
#include <mutex>
11
12
namespace
impeller
{
13
14
/// @brief A thread-safe pool with a limited byte size.
15
/// @tparam T The type that the pool will contain.
16
template
<
typename
T>
17
class
Pool
{
18
public
:
19
explicit
Pool
(uint32_t limit_bytes) : limit_bytes_(limit_bytes) {}
20
21
std::shared_ptr<T>
Grab
() {
22
std::scoped_lock lock(mutex_);
23
if
(pool_.empty()) {
24
return
T::Create();
25
}
26
std::shared_ptr<T>
result
= std::move(pool_.back());
27
pool_.pop_back();
28
size_ -=
result
->GetSize();
29
return
result
;
30
}
31
32
void
Recycle
(std::shared_ptr<T>
object
) {
33
std::scoped_lock lock(mutex_);
34
size_t
object_size =
object
->GetSize();
35
if
(size_ + object_size <= limit_bytes_ &&
36
object_size < (limit_bytes_ / 2)) {
37
object
->Reset();
38
size_ += object_size;
39
pool_.emplace_back(std::move(
object
));
40
}
41
}
42
43
uint32_t
GetSize
()
const
{
44
std::scoped_lock lock(mutex_);
45
return
size_;
46
}
47
48
private
:
49
std::vector<std::shared_ptr<T>> pool_;
50
const
uint32_t limit_bytes_;
51
uint32_t size_ = 0;
52
// Note: This would perform better as a lockless ring buffer.
53
mutable
std::mutex mutex_;
54
};
55
56
}
// namespace impeller
57
58
#endif
// FLUTTER_IMPELLER_RENDERER_POOL_H_
impeller::Pool
A thread-safe pool with a limited byte size.
Definition
pool.h:17
impeller::Pool::GetSize
uint32_t GetSize() const
Definition
pool.h:43
impeller::Pool::Pool
Pool(uint32_t limit_bytes)
Definition
pool.h:19
impeller::Pool::Recycle
void Recycle(std::shared_ptr< T > object)
Definition
pool.h:32
impeller::Pool::Grab
std::shared_ptr< T > Grab()
Definition
pool.h:21
result
GAsyncResult * result
Definition
fl_text_input_plugin.cc:106
impeller
Definition
texture.h:18
Generated on Fri Apr 26 2024 06:14:13 for Flutter Engine by
1.9.8