forked from firka/flutter
[ios] refactor platform_message_handler_ios (flutter/engine#40182)
[ios] refactor platform_message_handler_ios
This commit is contained in:
@@ -13,7 +13,9 @@
|
||||
#include "flutter/shell/common/platform_message_handler.h"
|
||||
#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterBinaryMessenger.h"
|
||||
|
||||
@protocol FlutterTaskQueue;
|
||||
@protocol FlutterTaskQueue
|
||||
- (void)dispatch:(dispatch_block_t)block;
|
||||
@end
|
||||
|
||||
namespace flutter {
|
||||
|
||||
@@ -21,11 +23,11 @@ class PlatformMessageHandlerIos : public PlatformMessageHandler {
|
||||
public:
|
||||
static NSObject<FlutterTaskQueue>* MakeBackgroundTaskQueue();
|
||||
|
||||
PlatformMessageHandlerIos(const TaskRunners& task_runners);
|
||||
PlatformMessageHandlerIos(fml::RefPtr<fml::TaskRunner> platform_task_runner);
|
||||
|
||||
void HandlePlatformMessage(std::unique_ptr<PlatformMessage> message) override;
|
||||
|
||||
bool DoesHandlePlatformMessageOnPlatformThread() const override { return false; }
|
||||
bool DoesHandlePlatformMessageOnPlatformThread() const override;
|
||||
|
||||
void InvokePlatformMessageResponseCallback(int response_id,
|
||||
std::unique_ptr<fml::Mapping> mapping) override;
|
||||
@@ -43,7 +45,7 @@ class PlatformMessageHandlerIos : public PlatformMessageHandler {
|
||||
|
||||
private:
|
||||
std::unordered_map<std::string, HandlerInfo> message_handlers_;
|
||||
TaskRunners task_runners_;
|
||||
const fml::RefPtr<fml::TaskRunner> platform_task_runner_;
|
||||
std::mutex message_handlers_mutex_;
|
||||
FML_DISALLOW_COPY_AND_ASSIGN(PlatformMessageHandlerIos);
|
||||
};
|
||||
|
||||
@@ -11,10 +11,6 @@
|
||||
|
||||
static uint64_t platform_message_counter = 1;
|
||||
|
||||
@protocol FlutterTaskQueue
|
||||
- (void)dispatch:(dispatch_block_t)block;
|
||||
@end
|
||||
|
||||
@interface FLTSerialTaskQueue : NSObject <FlutterTaskQueue>
|
||||
@property(nonatomic, strong) dispatch_queue_t queue;
|
||||
@end
|
||||
@@ -44,8 +40,9 @@ NSObject<FlutterTaskQueue>* PlatformMessageHandlerIos::MakeBackgroundTaskQueue()
|
||||
return [[[FLTSerialTaskQueue alloc] init] autorelease];
|
||||
}
|
||||
|
||||
PlatformMessageHandlerIos::PlatformMessageHandlerIos(const TaskRunners& task_runners)
|
||||
: task_runners_(task_runners) {}
|
||||
PlatformMessageHandlerIos::PlatformMessageHandlerIos(
|
||||
fml::RefPtr<fml::TaskRunner> platform_task_runner)
|
||||
: platform_task_runner_(std::move(platform_task_runner)) {}
|
||||
|
||||
void PlatformMessageHandlerIos::HandlePlatformMessage(std::unique_ptr<PlatformMessage> message) {
|
||||
// This can be called from any isolate's thread.
|
||||
@@ -97,6 +94,10 @@ void PlatformMessageHandlerIos::HandlePlatformMessage(std::unique_ptr<PlatformMe
|
||||
}
|
||||
}
|
||||
|
||||
bool PlatformMessageHandlerIos::DoesHandlePlatformMessageOnPlatformThread() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
void PlatformMessageHandlerIos::InvokePlatformMessageResponseCallback(
|
||||
int response_id,
|
||||
std::unique_ptr<fml::Mapping> mapping) {
|
||||
@@ -114,7 +115,7 @@ void PlatformMessageHandlerIos::InvokePlatformMessageEmptyResponseCallback(int r
|
||||
void PlatformMessageHandlerIos::SetMessageHandler(const std::string& channel,
|
||||
FlutterBinaryMessageHandler handler,
|
||||
NSObject<FlutterTaskQueue>* task_queue) {
|
||||
FML_CHECK(task_runners_.GetPlatformTaskRunner()->RunsTasksOnCurrentThread());
|
||||
FML_CHECK(platform_task_runner_->RunsTasksOnCurrentThread());
|
||||
/// TODO(gaaclarke): This should be migrated to a lockfree datastructure.
|
||||
std::lock_guard lock(message_handlers_mutex_);
|
||||
message_handlers_.erase(channel);
|
||||
|
||||
@@ -46,7 +46,7 @@ class MockPlatformMessageResponse : public PlatformMessageResponse {
|
||||
- (void)testCreate {
|
||||
flutter::TaskRunners task_runners("test", GetCurrentTaskRunner(), CreateNewThread("raster"),
|
||||
CreateNewThread("ui"), CreateNewThread("io"));
|
||||
auto handler = std::make_unique<PlatformMessageHandlerIos>(task_runners);
|
||||
auto handler = std::make_unique<PlatformMessageHandlerIos>(task_runners.GetPlatformTaskRunner());
|
||||
XCTAssertTrue(handler);
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ class MockPlatformMessageResponse : public PlatformMessageResponse {
|
||||
"test", GetCurrentTaskRunner(), thread_host.raster_thread->GetTaskRunner(),
|
||||
thread_host.ui_thread->GetTaskRunner(), thread_host.io_thread->GetTaskRunner());
|
||||
|
||||
auto handler = std::make_unique<PlatformMessageHandlerIos>(task_runners);
|
||||
auto handler = std::make_unique<PlatformMessageHandlerIos>(task_runners.GetPlatformTaskRunner());
|
||||
std::string channel = "foo";
|
||||
XCTestExpectation* didCallReply = [self expectationWithDescription:@"didCallReply"];
|
||||
handler->SetMessageHandler(
|
||||
@@ -83,7 +83,7 @@ class MockPlatformMessageResponse : public PlatformMessageResponse {
|
||||
"test", GetCurrentTaskRunner(), thread_host.raster_thread->GetTaskRunner(),
|
||||
thread_host.ui_thread->GetTaskRunner(), thread_host.io_thread->GetTaskRunner());
|
||||
|
||||
auto handler = std::make_unique<PlatformMessageHandlerIos>(task_runners);
|
||||
auto handler = std::make_unique<PlatformMessageHandlerIos>(task_runners.GetPlatformTaskRunner());
|
||||
std::string channel = "foo";
|
||||
XCTestExpectation* didCallMessage = [self expectationWithDescription:@"didCallMessage"];
|
||||
handler->SetMessageHandler(
|
||||
@@ -111,7 +111,7 @@ class MockPlatformMessageResponse : public PlatformMessageResponse {
|
||||
"test", GetCurrentTaskRunner(), thread_host.raster_thread->GetTaskRunner(),
|
||||
thread_host.ui_thread->GetTaskRunner(), thread_host.io_thread->GetTaskRunner());
|
||||
|
||||
auto handler = std::make_unique<PlatformMessageHandlerIos>(task_runners);
|
||||
auto handler = std::make_unique<PlatformMessageHandlerIos>(task_runners.GetPlatformTaskRunner());
|
||||
std::string channel = "foo";
|
||||
XCTestExpectation* didCallReply = [self expectationWithDescription:@"didCallReply"];
|
||||
NSObject<FlutterTaskQueue>* taskQueue = PlatformMessageHandlerIos::MakeBackgroundTaskQueue();
|
||||
|
||||
@@ -48,7 +48,8 @@ PlatformViewIOS::PlatformViewIOS(
|
||||
ios_context_(context),
|
||||
platform_views_controller_(platform_views_controller),
|
||||
accessibility_bridge_([this](bool enabled) { PlatformView::SetSemanticsEnabled(enabled); }),
|
||||
platform_message_handler_(new PlatformMessageHandlerIos(task_runners)) {}
|
||||
platform_message_handler_(
|
||||
new PlatformMessageHandlerIos(task_runners.GetPlatformTaskRunner())) {}
|
||||
|
||||
PlatformViewIOS::PlatformViewIOS(
|
||||
PlatformView::Delegate& delegate,
|
||||
|
||||
Reference in New Issue
Block a user