Flutter Engine
immutable_buffer.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_LIB_UI_PAINTNIG_IMMUTABLE_BUFER_H_
6 #define FLUTTER_LIB_UI_PAINTNIG_IMMUTABLE_BUFER_H_
7 
8 #include <cstdint>
9 
10 #include "flutter/fml/macros.h"
11 #include "flutter/lib/ui/dart_wrapper.h"
12 #include "third_party/skia/include/core/SkData.h"
16 
17 namespace flutter {
18 
19 //------------------------------------------------------------------------------
20 /// A simple opaque handle to an immutable byte buffer suitable for use
21 /// internally by the engine.
22 ///
23 /// This data is not known by the Dart VM.
24 ///
25 /// It is expected that C++ users of this object will not modify the data
26 /// argument. No Dart side calls are provided to do so.
27 class ImmutableBuffer : public RefCountedDartWrappable<ImmutableBuffer> {
28  public:
29  ~ImmutableBuffer() override;
30 
31  /// Initializes a new ImmutableData from a Dart Uint8List.
32  ///
33  /// The zero indexed argument is the the caller that will be registered as the
34  /// Dart peer of the native ImmutableBuffer object.
35  ///
36  /// The first indexed argumented is a tonic::Uint8List of bytes to copy.
37  ///
38  /// The second indexed argument is expected to be a void callback to signal
39  /// when the copy has completed.
40  static void init(Dart_NativeArguments args);
41 
42  /// The length of the data in bytes.
43  size_t length() const {
44  FML_DCHECK(data_);
45  return data_->size();
46  }
47 
48  /// Callers should not modify the returned data. This is not exposed to Dart.
49  sk_sp<SkData> data() const { return data_; }
50 
51  /// Clears the Dart native fields and removes the reference to the underlying
52  /// byte buffer.
53  ///
54  /// The byte buffer will continue to live if other objects hold a reference to
55  /// it.
56  void dispose() {
58  data_.reset();
59  }
60 
61  size_t GetAllocationSize() const override;
62 
63  static void RegisterNatives(tonic::DartLibraryNatives* natives);
64 
65  private:
66  explicit ImmutableBuffer(sk_sp<SkData> data) : data_(std::move(data)) {}
67 
68  sk_sp<SkData> data_;
69 
70  static sk_sp<SkData> MakeSkDataWithCopy(const void* data, size_t length);
71 
72  DEFINE_WRAPPERTYPEINFO();
73  FML_FRIEND_MAKE_REF_COUNTED(ImmutableBuffer);
74  FML_DISALLOW_COPY_AND_ASSIGN(ImmutableBuffer);
75 };
76 
77 } // namespace flutter
78 
79 #endif // FLUTTER_LIB_UI_PAINTNIG_IMMUTABLE_BUFER_H_
G_BEGIN_DECLS FlValue * args
sk_sp< SkData > data() const
Callers should not modify the returned data. This is not exposed to Dart.
#define FML_DCHECK(condition)
Definition: logging.h:86
static void RegisterNatives(tonic::DartLibraryNatives *natives)
static void init(Dart_NativeArguments args)
size_t length() const
The length of the data in bytes.
size_t GetAllocationSize() const override