Skip to content

Commit

Permalink
[fuchsia] Permit PerfettoBridge capabilities for Chrome and WebEngine.
Browse files Browse the repository at this point in the history
Enables Chrome and WebEngine to communicate with the Perfetto
ProducerConnector FIDL interface.

Adds sandbox entries so that all child processes may connect
directly with the Producer endpoint without a Mojo intermediary
(a la Android).

Bug: 1166873
Change-Id: Ic111e39eed1cf3fbe9583634cb3531e3ad369b8f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3656128
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Auto-Submit: Kevin Marshall <kmarshall@chromium.org>
Commit-Queue: Kevin Marshall <kmarshall@chromium.org>
Reviewed-by: David Dorwin <ddorwin@chromium.org>
Reviewed-by: Primiano Tucci <primiano@chromium.org>
Reviewed-by: Wez <wez@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1016822}
  • Loading branch information
Kevin Marshall authored and Chromium LUCI CQ committed Jun 22, 2022
1 parent 4edaea2 commit 6d71e11
Show file tree
Hide file tree
Showing 14 changed files with 44 additions and 15 deletions.
2 changes: 1 addition & 1 deletion build/config/fuchsia/test/minimum.shard.test-cml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
"fuchsia.hwinfo.Product",
"fuchsia.media.ProfileProvider",
"fuchsia.process.Launcher",
"fuchsia.sys.Loader",
"fuchsia.sys.Loader"
],
},
],
Expand Down
1 change: 1 addition & 0 deletions chrome/app/chrome.cml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"fuchsia.net.name.Lookup",
"fuchsia.posix.socket.Provider",
"fuchsia.process.Launcher",
"fuchsia.tracing.perfetto.ProducerConnector",
"fuchsia.ui.composition.Allocator",
"fuchsia.ui.composition.Flatland",
"fuchsia.ui.composition.ScreenCapture",
Expand Down
1 change: 1 addition & 0 deletions chrome/app/chrome_v1.cmx
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"fuchsia.posix.socket.Provider",
"fuchsia.process.Launcher",
"fuchsia.sysmem.Allocator",
"fuchsia.tracing.perfetto.ProducerConnector",
"fuchsia.ui.composition.Allocator",
"fuchsia.ui.composition.Flatland",
"fuchsia.ui.input3.Keyboard",
Expand Down
1 change: 1 addition & 0 deletions content/shell/fuchsia/content_shell.cmx
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
"fuchsia.process.Launcher",
"fuchsia.sys.Launcher",
"fuchsia.sysmem.Allocator",
"fuchsia.tracing.perfetto.ProducerConnector",
"fuchsia.ui.composition.Allocator",
"fuchsia.ui.composition.Flatland",
"fuchsia.ui.input3.Keyboard",
Expand Down
1 change: 1 addition & 0 deletions fuchsia_web/runners/cast/cast_runner.cc
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ static constexpr const char* kServices[] = {
"fuchsia.ui.composition.Flatland",
"fuchsia.ui.input3.Keyboard",
"fuchsia.ui.scenic.Scenic",
"fuchsia.tracing.perfetto.ProducerConnector",
"fuchsia.vulkan.loader.Loader",
};

Expand Down
1 change: 1 addition & 0 deletions fuchsia_web/runners/cast/cast_runner.cml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
"fuchsia.settings.Display",
"fuchsia.sys.Environment",
"fuchsia.sys.Loader",
"fuchsia.tracing.perfetto.ProducerConnector",
"fuchsia.ui.composition.Allocator",
"fuchsia.ui.composition.Flatland",
"fuchsia.ui.input3.Keyboard",
Expand Down
1 change: 1 addition & 0 deletions fuchsia_web/runners/cast/cast_runner.cmx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
"fuchsia.sys.Loader",
"fuchsia.sys.Runner-cast",
"fuchsia.sysmem.Allocator",
"fuchsia.tracing.perfetto.ProducerConnector",
"fuchsia.ui.composition.Allocator",
"fuchsia.ui.composition.Flatland",
"fuchsia.ui.input3.Keyboard",
Expand Down
1 change: 1 addition & 0 deletions fuchsia_web/runners/web/web_runner.cmx
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
"fuchsia.sys.Environment",
"fuchsia.sys.Loader",
"fuchsia.sysmem.Allocator",
"fuchsia.tracing.perfetto.ProducerConnector",
"fuchsia.ui.composition.Allocator",
"fuchsia.ui.composition.Flatland",
"fuchsia.ui.input3.Keyboard",
Expand Down
1 change: 1 addition & 0 deletions fuchsia_web/webengine/test/web_engine_shell.cmx
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"fuchsia.sys.Launcher",
"fuchsia.sys.Loader",
"fuchsia.sysmem.Allocator",
"fuchsia.tracing.perfetto.ProducerConnector",
"fuchsia.ui.composition.Allocator",
"fuchsia.ui.composition.Flatland",
"fuchsia.ui.input3.Keyboard",
Expand Down
1 change: 1 addition & 0 deletions fuchsia_web/webengine/web_instance.cmx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
"fuchsia.process.Launcher",
"fuchsia.settings.Display",
"fuchsia.sysmem.Allocator",
"fuchsia.tracing.perfetto.ProducerConnector",
"fuchsia.ui.composition.Allocator",
"fuchsia.ui.composition.Flatland",
"fuchsia.ui.input3.Keyboard",
Expand Down
16 changes: 11 additions & 5 deletions fuchsia_web/webinstance_host/web_instance_host.cc
Original file line number Diff line number Diff line change
Expand Up @@ -355,12 +355,18 @@ std::vector<std::string> GetRequiredServicesForConfig(
// at:
// https://fuchsia.dev/reference/fidl/fuchsia.web#CreateContextParams.service_directory
std::vector<std::string> services{
"fuchsia.buildinfo.Provider", "fuchsia.device.NameProvider",
"fuchsia.fonts.Provider", "fuchsia.hwinfo.Product",
"fuchsia.intl.PropertyProvider", "fuchsia.logger.LogSink",
"fuchsia.memorypressure.Provider", "fuchsia.process.Launcher",
"fuchsia.buildinfo.Provider",
"fuchsia.device.NameProvider",
"fuchsia.fonts.Provider",
"fuchsia.hwinfo.Product",
"fuchsia.intl.PropertyProvider",
"fuchsia.logger.LogSink",
"fuchsia.memorypressure.Provider",
"fuchsia.process.Launcher",
"fuchsia.settings.Display", // Used if preferred theme is DEFAULT.
"fuchsia.sysmem.Allocator", "fuchsia.ui.scenic.Scenic"};
"fuchsia.sysmem.Allocator",
"fuchsia.tracing.perfetto.ProducerConnector",
"fuchsia.ui.scenic.Scenic"};

// TODO(crbug.com/1209031): Provide these conditionally, once corresponding
// ContextFeatureFlags have been defined.
Expand Down
2 changes: 2 additions & 0 deletions sandbox/policy/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ component("policy") {
]

deps += [
"//services/tracing/public/cpp",
"//third_party/fuchsia-sdk/sdk/fidl/fuchsia.buildinfo",
"//third_party/fuchsia-sdk/sdk/fidl/fuchsia.camera3",
"//third_party/fuchsia-sdk/sdk/fidl/fuchsia.fonts",
Expand All @@ -164,6 +165,7 @@ component("policy") {
"//third_party/fuchsia-sdk/sdk/fidl/fuchsia.memorypressure",
"//third_party/fuchsia-sdk/sdk/fidl/fuchsia.net.interfaces",
"//third_party/fuchsia-sdk/sdk/fidl/fuchsia.sysmem",
"//third_party/fuchsia-sdk/sdk/fidl/fuchsia.tracing.perfetto",
"//third_party/fuchsia-sdk/sdk/fidl/fuchsia.ui.scenic",
]
}
Expand Down
3 changes: 3 additions & 0 deletions sandbox/policy/fuchsia/DEPS
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
include_rules = [
"+services/tracing/public/cpp",
]
27 changes: 18 additions & 9 deletions sandbox/policy/fuchsia/sandbox_policy_fuchsia.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <fuchsia/memorypressure/cpp/fidl.h>
#include <fuchsia/net/interfaces/cpp/fidl.h>
#include <fuchsia/sysmem/cpp/fidl.h>
#include <fuchsia/tracing/perfetto/cpp/fidl.h>
#include <fuchsia/ui/scenic/cpp/fidl.h>
#include <lib/sys/cpp/component_context.h>
#include <lib/sys/cpp/service_directory.h>
Expand All @@ -45,6 +46,7 @@
#include "printing/buildflags/buildflags.h"
#include "sandbox/policy/mojom/sandbox.mojom.h"
#include "sandbox/policy/switches.h"
#include "services/tracing/public/cpp/tracing_features.h"

namespace sandbox {
namespace policy {
Expand Down Expand Up @@ -211,22 +213,29 @@ SandboxPolicyFuchsia::SandboxPolicyFuchsia(sandbox::mojom::Sandbox type) {
base::SequenceBound<base::FilteredServiceDirectory>(
GetServiceDirectoryTaskRunner(),
base::ComponentContextForProcess()->svc());
for (const char* service_name : kMinimalServices) {

std::vector<const char*> services(kMinimalServices.begin(),
kMinimalServices.end());

// Grant access to the services required by the process type.
std::copy(config->services.begin(), config->services.end(),
std::back_inserter(services));

// If system tracing is enabled, then allow child processes to also make
// use of it.
if (tracing::ShouldSetupSystemTracing()) {
services.push_back(fuchsia::tracing::perfetto::ProducerConnector::Name_);
}

for (const char* service_name : services) {
// |service_name_| points to a compile-time constant in
// |kMinimalServices|. It will remain valid for the duration of the task.
filtered_service_directory_
.AsyncCall(&base::FilteredServiceDirectory::AddService)
.WithArgs(service_name)
.Then(base::BindOnce(&AddServiceCallback, service_name));
}
for (const char* service_name : config->services) {
// |service_name_| comes from |config|, which points to a compile-time
// constant. It will remain valid for the duration of the task.
filtered_service_directory_
.AsyncCall(&base::FilteredServiceDirectory::AddService)
.WithArgs(service_name)
.Then(base::BindOnce(&AddServiceCallback, service_name));
}

filtered_service_directory_
.AsyncCall(&base::FilteredServiceDirectory::ConnectClient)
.WithArgs(service_directory_client_.NewRequest())
Expand Down

0 comments on commit 6d71e11

Please sign in to comment.