Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Public Member Functions | List of all members
flutter::MultiFrameCodec Class Reference

#include <multi_frame_codec.h>

Inheritance diagram for flutter::MultiFrameCodec:
flutter::Codec flutter::RefCountedDartWrappable< Codec > fml::RefCountedThreadSafe< T > tonic::DartWrappable fml::internal::RefCountedThreadSafeBase

Public Member Functions

 MultiFrameCodec (std::shared_ptr< ImageGenerator > generator)
 
 ~MultiFrameCodec () override
 
int frameCount () const override
 
int repetitionCount () const override
 
Dart_Handle getNextFrame (Dart_Handle args) override
 
- Public Member Functions inherited from flutter::Codec
void dispose ()
 
- Public Member Functions inherited from flutter::RefCountedDartWrappable< Codec >
virtual void RetainDartWrappableReference () const override
 
virtual void ReleaseDartWrappableReference () const override
 
- Public Member Functions inherited from fml::RefCountedThreadSafe< T >
void Release () const
 
- Public Member Functions inherited from fml::internal::RefCountedThreadSafeBase
void AddRef () const
 
bool HasOneRef () const
 
void AssertHasOneRef () const
 
- Public Member Functions inherited from tonic::DartWrappable
 DartWrappable ()
 
virtual const DartWrapperInfoGetDartWrapperInfo () const =0
 
Dart_Handle CreateDartWrapper (DartState *dart_state)
 
void AssociateWithDartWrapper (Dart_Handle wrappable)
 
void ClearDartWrapper ()
 
Dart_WeakPersistentHandle dart_wrapper () const
 

Additional Inherited Members

- Public Types inherited from tonic::DartWrappable
enum  DartNativeFields { kPeerIndex , kNumberOfNativeFields }
 
- Protected Member Functions inherited from fml::RefCountedThreadSafe< T >
 RefCountedThreadSafe ()
 
 ~RefCountedThreadSafe ()
 
- Protected Member Functions inherited from fml::internal::RefCountedThreadSafeBase
 RefCountedThreadSafeBase ()
 
 ~RefCountedThreadSafeBase ()
 
bool Release () const
 
void Adopt ()
 
- Protected Member Functions inherited from tonic::DartWrappable
virtual ~DartWrappable ()
 
- Static Protected Member Functions inherited from tonic::DartWrappable
static Dart_PersistentHandle GetTypeForWrapper (tonic::DartState *dart_state, const tonic::DartWrapperInfo &wrapper_info)
 

Detailed Description

Definition at line 16 of file multi_frame_codec.h.

Constructor & Destructor Documentation

◆ MultiFrameCodec()

flutter::MultiFrameCodec::MultiFrameCodec ( std::shared_ptr< ImageGenerator generator)
explicit

Definition at line 24 of file multi_frame_codec.cc.

25 : state_(new State(std::move(generator))) {}

◆ ~MultiFrameCodec()

flutter::MultiFrameCodec::~MultiFrameCodec ( )
overridedefault

Member Function Documentation

◆ frameCount()

int flutter::MultiFrameCodec::frameCount ( ) const
overridevirtual

Implements flutter::Codec.

Definition at line 268 of file multi_frame_codec.cc.

268 {
269 return state_->frameCount_;
270}

◆ getNextFrame()

Dart_Handle flutter::MultiFrameCodec::getNextFrame ( Dart_Handle  args)
overridevirtual

Implements flutter::Codec.

Definition at line 218 of file multi_frame_codec.cc.

218 {
219 static size_t trace_counter = 1;
220 const size_t trace_id = trace_counter++;
221
222 if (!Dart_IsClosure(callback_handle)) {
223 return tonic::ToDart("Callback must be a function");
224 }
225
226 auto* dart_state = UIDartState::Current();
227
228 const auto& task_runners = dart_state->GetTaskRunners();
229
230 if (state_->frameCount_ == 0) {
231 std::string decode_error("Could not provide any frame.");
232 FML_LOG(ERROR) << decode_error;
233 task_runners.GetUITaskRunner()->PostTask(fml::MakeCopyable(
234 [trace_id, decode_error = std::move(decode_error),
235 callback = std::make_unique<tonic::DartPersistentValue>(
236 tonic::DartState::Current(), callback_handle)]() mutable {
237 InvokeNextFrameCallback(nullptr, 0, decode_error, std::move(callback),
238 trace_id);
239 }));
240 return Dart_Null();
241 }
242
243 task_runners.GetIOTaskRunner()->PostTask(fml::MakeCopyable(
244 [callback = std::make_unique<tonic::DartPersistentValue>(
245 tonic::DartState::Current(), callback_handle),
246 weak_state = std::weak_ptr<MultiFrameCodec::State>(state_), trace_id,
247 ui_task_runner = task_runners.GetUITaskRunner(),
248 io_manager = dart_state->GetIOManager()]() mutable {
249 auto state = weak_state.lock();
250 if (!state) {
251 ui_task_runner->PostTask(fml::MakeCopyable(
252 [callback = std::move(callback)]() { callback->Clear(); }));
253 return;
254 }
255 state->GetNextFrameAndInvokeCallback(
256 std::move(callback), ui_task_runner,
257 io_manager->GetResourceContext(), io_manager->GetSkiaUnrefQueue(),
258 io_manager->GetIsGpuDisabledSyncSwitch(), trace_id,
259 io_manager->GetImpellerContext());
260 }));
261
262 return Dart_Null();
263 // The static leak checker gets confused by the control flow, unique
264 // pointers and closures in this function.
265 // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
266}
static UIDartState * Current()
static DartState * Current()
Definition dart_state.cc:56
DART_EXPORT Dart_Handle Dart_Null(void)
DART_EXPORT bool Dart_IsClosure(Dart_Handle object)
AtkStateType state
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback
#define FML_LOG(severity)
Definition logging.h:82
static void InvokeNextFrameCallback(const fml::RefPtr< CanvasImage > &image, int duration, const std::string &decode_error, std::unique_ptr< tonic::DartPersistentValue > callback, size_t trace_id)
internal::CopyableLambda< T > MakeCopyable(T lambda)
Dart_Handle ToDart(const T &object)
#define ERROR(message)

◆ repetitionCount()

int flutter::MultiFrameCodec::repetitionCount ( ) const
overridevirtual

Implements flutter::Codec.

Definition at line 272 of file multi_frame_codec.cc.

272 {
273 return state_->repetitionCount_;
274}

The documentation for this class was generated from the following files: