Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 9db9d76

Browse files
committed
Moved FlutterDesktopMessenger to its own file.
1 parent fd9649c commit 9db9d76

File tree

5 files changed

+103
-66
lines changed

5 files changed

+103
-66
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
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_SHELL_PLATFORM_WINDOWS_FLUTTER_DESKTOP_MESSENGER_H_
6+
#define FLUTTER_SHELL_PLATFORM_WINDOWS_FLUTTER_DESKTOP_MESSENGER_H_
7+
8+
#include <atomic>
9+
#include <mutex>
10+
11+
#include "flutter/shell/platform/common/public/flutter_messenger.h"
12+
13+
namespace flutter {
14+
15+
class FlutterWindowsEngine;
16+
17+
class FlutterDesktopMessenger {
18+
public:
19+
FlutterDesktopMessenger() = default;
20+
21+
/// Convert to FlutterDesktopMessengerRef.
22+
FlutterDesktopMessengerRef ToRef() {
23+
return reinterpret_cast<FlutterDesktopMessengerRef>(this);
24+
}
25+
26+
/// Convert from FlutterDesktopMessengerRef.
27+
static FlutterDesktopMessenger* FromRef(FlutterDesktopMessengerRef ref) {
28+
return reinterpret_cast<FlutterDesktopMessenger*>(ref);
29+
}
30+
31+
/// Getter for the engine field.
32+
flutter::FlutterWindowsEngine* GetEngine() const { return engine; }
33+
34+
/// Setter for the engine field.
35+
/// Thread-safe.
36+
void SetEngine(flutter::FlutterWindowsEngine* arg_engine) {
37+
std::scoped_lock lock(mutex_);
38+
engine = arg_engine;
39+
}
40+
41+
/// Increments the reference count.
42+
///
43+
/// Thread-safe.
44+
FlutterDesktopMessenger* AddRef() {
45+
ref_count_.fetch_add(1);
46+
return this;
47+
}
48+
49+
/// Decrements the reference count and deletes the object if the count has
50+
/// gone to zero.
51+
///
52+
/// Thread-safe.
53+
void Release() {
54+
int32_t old_count = ref_count_.fetch_sub(1);
55+
if (old_count <= 1) {
56+
delete this;
57+
}
58+
}
59+
60+
/// Returns the mutex associated with the |FlutterDesktopMessenger|.
61+
///
62+
/// This mutex is used to synchronize reading or writing state inside the
63+
/// |FlutterDesktopMessenger| (ie |engine|).
64+
std::mutex& GetMutex() { return mutex_; }
65+
66+
FlutterDesktopMessenger(const FlutterDesktopMessenger& value) = delete;
67+
FlutterDesktopMessenger& operator=(const FlutterDesktopMessenger& value) =
68+
delete;
69+
70+
private:
71+
// The engine that owns this state object.
72+
flutter::FlutterWindowsEngine* engine = nullptr;
73+
std::mutex mutex_;
74+
std::atomic<int32_t> ref_count_ = 0;
75+
};
76+
} // namespace flutter
77+
78+
#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_FLUTTER_WINDOW_STATE_H_

shell/platform/windows/flutter_windows.cc

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,9 @@ bool FlutterDesktopMessengerSendWithReply(FlutterDesktopMessengerRef messenger,
262262
const size_t message_size,
263263
const FlutterDesktopBinaryReply reply,
264264
void* user_data) {
265-
return messenger->GetEngine()->SendPlatformMessage(
266-
channel, message, message_size, reply, user_data);
265+
return flutter::FlutterDesktopMessenger::FromRef(messenger)
266+
->GetEngine()
267+
->SendPlatformMessage(channel, message, message_size, reply, user_data);
267268
}
268269

269270
bool FlutterDesktopMessengerSend(FlutterDesktopMessengerRef messenger,
@@ -279,39 +280,45 @@ void FlutterDesktopMessengerSendResponse(
279280
const FlutterDesktopMessageResponseHandle* handle,
280281
const uint8_t* data,
281282
size_t data_length) {
282-
messenger->GetEngine()->SendPlatformMessageResponse(handle, data,
283-
data_length);
283+
flutter::FlutterDesktopMessenger::FromRef(messenger)
284+
->GetEngine()
285+
->SendPlatformMessageResponse(handle, data, data_length);
284286
}
285287

286288
void FlutterDesktopMessengerSetCallback(FlutterDesktopMessengerRef messenger,
287289
const char* channel,
288290
FlutterDesktopMessageCallback callback,
289291
void* user_data) {
290-
messenger->GetEngine()->message_dispatcher()->SetMessageCallback(
291-
channel, callback, user_data);
292+
flutter::FlutterDesktopMessenger::FromRef(messenger)
293+
->GetEngine()
294+
->message_dispatcher()
295+
->SetMessageCallback(channel, callback, user_data);
292296
}
293297

294298
FlutterDesktopMessengerRef FlutterDesktopMessengerAddRef(
295299
FlutterDesktopMessengerRef messenger) {
296-
return messenger->AddRef();
300+
return flutter::FlutterDesktopMessenger::FromRef(messenger)
301+
->AddRef()
302+
->ToRef();
297303
}
298304

299305
void FlutterDesktopMessengerRelease(FlutterDesktopMessengerRef messenger) {
300-
messenger->Release();
306+
flutter::FlutterDesktopMessenger::FromRef(messenger)->Release();
301307
}
302308

303309
bool FlutterDesktopMessengerIsAvailable(FlutterDesktopMessengerRef messenger) {
304-
return messenger->GetEngine() != nullptr;
310+
return flutter::FlutterDesktopMessenger::FromRef(messenger)->GetEngine() !=
311+
nullptr;
305312
}
306313

307314
FlutterDesktopMessengerRef FlutterDesktopMessengerLock(
308315
FlutterDesktopMessengerRef messenger) {
309-
messenger->GetMutex().lock();
316+
flutter::FlutterDesktopMessenger::FromRef(messenger)->GetMutex().lock();
310317
return messenger;
311318
}
312319

313320
void FlutterDesktopMessengerUnlock(FlutterDesktopMessengerRef messenger) {
314-
messenger->GetMutex().unlock();
321+
flutter::FlutterDesktopMessenger::FromRef(messenger)->GetMutex().unlock();
315322
}
316323

317324
FlutterDesktopTextureRegistrarRef FlutterDesktopRegistrarGetTextureRegistrar(

shell/platform/windows/flutter_windows_engine.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,10 @@ FlutterWindowsEngine::FlutterWindowsEngine(
185185
plugin_registrar_ = std::make_unique<FlutterDesktopPluginRegistrar>();
186186
plugin_registrar_->engine = this;
187187

188-
messenger_wrapper_ = std::make_unique<BinaryMessengerImpl>(messenger_.get());
188+
messenger_wrapper_ =
189+
std::make_unique<BinaryMessengerImpl>(messenger_->ToRef());
189190
message_dispatcher_ =
190-
std::make_unique<IncomingMessageDispatcher>(messenger_.get());
191+
std::make_unique<IncomingMessageDispatcher>(messenger_->ToRef());
191192
message_dispatcher_->SetMessageCallback(
192193
kAccessibilityChannelName,
193194
[](FlutterDesktopMessengerRef messenger,

shell/platform/windows/flutter_windows_engine.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "flutter/shell/platform/common/incoming_message_dispatcher.h"
2121
#include "flutter/shell/platform/embedder/embedder.h"
2222
#include "flutter/shell/platform/windows/angle_surface_manager.h"
23+
#include "flutter/shell/platform/windows/flutter_desktop_messenger.h"
2324
#include "flutter/shell/platform/windows/flutter_project_bundle.h"
2425
#include "flutter/shell/platform/windows/flutter_windows_texture_registrar.h"
2526
#include "flutter/shell/platform/windows/public/flutter_windows.h"
@@ -124,7 +125,7 @@ class FlutterWindowsEngine {
124125
// Sets switches member to the given switches.
125126
void SetSwitches(const std::vector<std::string>& switches);
126127

127-
FlutterDesktopMessengerRef messenger() { return messenger_.get(); }
128+
FlutterDesktopMessengerRef messenger() { return messenger_->ToRef(); }
128129

129130
IncomingMessageDispatcher* message_dispatcher() {
130131
return message_dispatcher_.get();
@@ -283,7 +284,7 @@ class FlutterWindowsEngine {
283284
std::unique_ptr<TaskRunner> task_runner_;
284285

285286
// The plugin messenger handle given to API clients.
286-
fml::RefPtr<FlutterDesktopMessenger> messenger_;
287+
fml::RefPtr<flutter::FlutterDesktopMessenger> messenger_;
287288

288289
// A wrapper around messenger_ for interacting with client_wrapper-level APIs.
289290
std::unique_ptr<BinaryMessengerImpl> messenger_wrapper_;

shell/platform/windows/window_state.h

Lines changed: 1 addition & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
#ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_FLUTTER_WINDOW_STATE_H_
66
#define FLUTTER_SHELL_PLATFORM_WINDOWS_FLUTTER_WINDOW_STATE_H_
77

8-
#include <mutex>
9-
108
#include "flutter/shell/platform/common/client_wrapper/include/flutter/plugin_registrar.h"
119
#include "flutter/shell/platform/common/incoming_message_dispatcher.h"
1210
#include "flutter/shell/platform/embedder/embedder.h"
@@ -37,54 +35,6 @@ struct FlutterDesktopPluginRegistrar {
3735

3836
// Wrapper to distinguish the messenger ref from the engine ref given out
3937
// in the C API.
40-
struct FlutterDesktopMessenger {
41-
public:
42-
FlutterDesktopMessenger() = default;
43-
44-
/// Getter for the engine field.
45-
flutter::FlutterWindowsEngine* GetEngine() const { return engine; }
46-
47-
/// Setter for the engine field.
48-
/// Thread-safe.
49-
void SetEngine(flutter::FlutterWindowsEngine* arg_engine) {
50-
std::scoped_lock lock(mutex_);
51-
engine = arg_engine;
52-
}
53-
54-
/// Increments the reference count.
55-
///
56-
/// Thread-safe.
57-
FlutterDesktopMessenger* AddRef() {
58-
ref_count_.fetch_add(1);
59-
return this;
60-
}
61-
62-
/// Decrements the reference count and deletes the object if the count has
63-
/// gone to zero.
64-
///
65-
/// Thread-safe.
66-
void Release() {
67-
int32_t old_count = ref_count_.fetch_sub(1);
68-
if (old_count <= 1) {
69-
delete this;
70-
}
71-
}
72-
73-
/// Returns the mutex associated with the |FlutterDesktopMessenger|.
74-
///
75-
/// This mutex is used to synchronize reading or writing state inside the
76-
/// |FlutterDesktopMessenger| (ie |engine|).
77-
std::mutex& GetMutex() { return mutex_; }
78-
79-
FlutterDesktopMessenger(const FlutterDesktopMessenger& value) = delete;
80-
FlutterDesktopMessenger& operator=(const FlutterDesktopMessenger& value) =
81-
delete;
82-
83-
private:
84-
// The engine that owns this state object.
85-
flutter::FlutterWindowsEngine* engine = nullptr;
86-
std::mutex mutex_;
87-
std::atomic<int32_t> ref_count_ = 0;
88-
};
38+
struct FlutterDesktopMessenger {};
8939

9040
#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_FLUTTER_WINDOW_STATE_H_

0 commit comments

Comments
 (0)