Skip to content

Commit

Permalink
Reland "fuchsia: Implement CreateViewWithViewProvider" (flutter#18615)
Browse files Browse the repository at this point in the history
The last commit was a bad push -- this one compiles.

Tested: Manual test via workstation product
BUG: 50875
  • Loading branch information
arbreng authored May 27, 2020
1 parent 63ed5b1 commit c9f9891
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 23 deletions.
29 changes: 20 additions & 9 deletions shell/platform/fuchsia/flutter/component.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <lib/async/default.h>
#include <lib/fdio/directory.h>
#include <lib/fdio/namespace.h>
#include <lib/ui/scenic/cpp/view_ref_pair.h>
#include <lib/ui/scenic/cpp/view_token_pair.h>
#include <lib/vfs/cpp/composed_service_dir.h>
#include <lib/vfs/cpp/remote_dir.h>
Expand Down Expand Up @@ -553,7 +554,6 @@ void Application::AttemptVMLaunchWithCurrentSettings(
FML_CHECK(vm) << "Mut be able to initialize the VM.";
}

// |fuchsia::sys::ComponentController|
void Application::Kill() {
application_controller_.events().OnTerminated(
last_return_code_.second, fuchsia::sys::TerminationReason::EXITED);
Expand All @@ -563,12 +563,10 @@ void Application::Kill() {
// collected.
}

// |fuchsia::sys::ComponentController|
void Application::Detach() {
application_controller_.set_error_handler(nullptr);
}

// |flutter::Engine::Delegate|
void Application::OnEngineTerminate(const Engine* shell_holder) {
auto found = std::find_if(shell_holders_.begin(), shell_holders_.end(),
[shell_holder](const auto& holder) {
Expand Down Expand Up @@ -596,11 +594,20 @@ void Application::OnEngineTerminate(const Engine* shell_holder) {
}
}

// |fuchsia::ui::app::ViewProvider|
void Application::CreateView(
zx::eventpair token,
fidl::InterfaceRequest<fuchsia::sys::ServiceProvider> /*incoming_services*/,
fidl::InterfaceHandle<
fuchsia::sys::ServiceProvider> /*outgoing_services*/) {
auto view_ref_pair = scenic::ViewRefPair::New();
CreateViewWithViewRef(std::move(token), std::move(view_ref_pair.control_ref),
std::move(view_ref_pair.view_ref));
}

void Application::CreateViewWithViewRef(
zx::eventpair view_token,
fidl::InterfaceRequest<fuchsia::sys::ServiceProvider> incoming_services,
fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> outgoing_services) {
fuchsia::ui::views::ViewRefControl control_ref,
fuchsia::ui::views::ViewRef view_ref) {
if (!svc_) {
FML_DLOG(ERROR)
<< "Component incoming services was invalid when attempting to "
Expand All @@ -616,9 +623,13 @@ void Application::CreateView(
settings_, // settings
std::move(isolate_snapshot_), // isolate snapshot
scenic::ToViewToken(std::move(view_token)), // view token
std::move(fdio_ns_), // FDIO namespace
std::move(directory_request_), // outgoing request
product_config_ // product configuration
scenic::ViewRefPair{
.control_ref = std::move(control_ref),
.view_ref = std::move(view_ref),
},
std::move(fdio_ns_), // FDIO namespace
std::move(directory_request_), // outgoing request
product_config_ // product configuration
));
}

Expand Down
7 changes: 6 additions & 1 deletion shell/platform/fuchsia/flutter/component.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,11 +114,16 @@ class Application final : public Engine::Delegate,

// |fuchsia::ui::app::ViewProvider|
void CreateView(
zx::eventpair view_token,
zx::eventpair token,
fidl::InterfaceRequest<fuchsia::sys::ServiceProvider> incoming_services,
fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> outgoing_services)
override;

// |fuchsia::ui::app::ViewProvider|
void CreateViewWithViewRef(zx::eventpair view_token,
fuchsia::ui::views::ViewRefControl control_ref,
fuchsia::ui::views::ViewRef view_ref) override;

// |flutter::Engine::Delegate|
void OnEngineTerminate(const Engine* holder) override;

Expand Down
22 changes: 9 additions & 13 deletions shell/platform/fuchsia/flutter/engine.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include "engine.h"

#include <lib/async/cpp/task.h>
#include <lib/ui/scenic/cpp/view_ref_pair.h>
#include <zircon/status.h>
#include <sstream>

Expand Down Expand Up @@ -57,6 +56,7 @@ Engine::Engine(Delegate& delegate,
flutter::Settings settings,
fml::RefPtr<const flutter::DartSnapshot> isolate_snapshot,
fuchsia::ui::views::ViewToken view_token,
scenic::ViewRefPair view_ref_pair,
UniqueFDIONS fdio_ns,
fidl::InterfaceRequest<fuchsia::io::Directory> directory_request,
FlutterRunnerProductConfiguration product_config)
Expand Down Expand Up @@ -115,18 +115,14 @@ Engine::Engine(Delegate& delegate,
});
};

auto view_ref_pair = scenic::ViewRefPair::New();
fuchsia::ui::views::ViewRef view_ref;
view_ref_pair.view_ref.Clone(&view_ref);

fuchsia::ui::views::ViewRef dart_view_ref;
view_ref_pair.view_ref.Clone(&dart_view_ref);
zx::eventpair dart_view_ref_event_pair(std::move(dart_view_ref.reference));
fuchsia::ui::views::ViewRef platform_view_ref, isolate_view_ref;
view_ref_pair.view_ref.Clone(&platform_view_ref);
view_ref_pair.view_ref.Clone(&isolate_view_ref);

// Setup the callback that will instantiate the platform view.
flutter::Shell::CreateCallback<flutter::PlatformView>
on_create_platform_view = fml::MakeCopyable(
[debug_label = thread_label_, view_ref = std::move(view_ref),
[debug_label = thread_label_, view_ref = std::move(platform_view_ref),
runner_services,
parent_environment_service_provider =
std::move(parent_environment_service_provider),
Expand Down Expand Up @@ -263,10 +259,10 @@ Engine::Engine(Delegate& delegate,
svc->Connect(environment.NewRequest());

isolate_configurator_ = std::make_unique<IsolateConfigurator>(
std::move(fdio_ns), //
std::move(environment), //
directory_request.TakeChannel(), //
std::move(dart_view_ref_event_pair) //
std::move(fdio_ns), //
std::move(environment), //
directory_request.TakeChannel(), //
std::move(isolate_view_ref.reference) //
);
}

Expand Down
2 changes: 2 additions & 0 deletions shell/platform/fuchsia/flutter/engine.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <fuchsia/ui/views/cpp/fidl.h>
#include <lib/async-loop/cpp/loop.h>
#include <lib/sys/cpp/service_directory.h>
#include <lib/ui/scenic/cpp/view_ref_pair.h>
#include <lib/zx/event.h>

#include "flutter/fml/macros.h"
Expand All @@ -37,6 +38,7 @@ class Engine final {
flutter::Settings settings,
fml::RefPtr<const flutter::DartSnapshot> isolate_snapshot,
fuchsia::ui::views::ViewToken view_token,
scenic::ViewRefPair view_ref_pair,
UniqueFDIONS fdio_ns,
fidl::InterfaceRequest<fuchsia::io::Directory> directory_request,
FlutterRunnerProductConfiguration product_config);
Expand Down

0 comments on commit c9f9891

Please sign in to comment.