Add systrace sections to core

Summary:
I'm hunting down the source of a perf regression on a screen and think that having these systrace sections could be handy for this and future investigations.

Changelog: [internal]

Reviewed By: mdvacca

Differential Revision: D29802969

fbshipit-source-id: f4030261da8888ddeb32ae41b9cf2b25af6a5583
This commit is contained in:
Joshua Gross
2021-07-20 19:28:06 -07:00
committed by Facebook GitHub Bot
parent b0e39b2ed9
commit 24d91268b6
4 changed files with 45 additions and 30 deletions
@@ -260,7 +260,9 @@ void Binding::startSurface(
animationDriver_);
{
SystraceSection s2("FabricUIManagerBinding::startSurface::surfaceId::lock");
std::unique_lock<better::shared_mutex> lock(surfaceHandlerRegistryMutex_);
SystraceSection s3("FabricUIManagerBinding::startSurface::surfaceId");
surfaceHandlerRegistry_.emplace(surfaceId, std::move(surfaceHandler));
}
}
@@ -319,7 +321,11 @@ void Binding::startSurfaceWithConstraints(
animationDriver_);
{
SystraceSection s2(
"FabricUIManagerBinding::startSurfaceWithConstraints::surfaceId::lock");
std::unique_lock<better::shared_mutex> lock(surfaceHandlerRegistryMutex_);
SystraceSection s3(
"FabricUIManagerBinding::startSurfaceWithConstraints::surfaceId");
surfaceHandlerRegistry_.emplace(surfaceId, std::move(surfaceHandler));
}
}
@@ -8,6 +8,7 @@
#include "SurfaceHandler.h"
#include <react/debug/react_native_assert.h>
#include <react/renderer/debug/SystraceSection.h>
#include <react/renderer/scheduler/Scheduler.h>
#include <react/renderer/uimanager/UIManager.h>
@@ -53,38 +54,38 @@ Status SurfaceHandler::getStatus() const noexcept {
}
void SurfaceHandler::start() const noexcept {
SystraceSection s("SurfaceHandler::start");
std::unique_lock<better::shared_mutex> lock(linkMutex_);
react_native_assert(
link_.status == Status::Registered && "Surface must be registered.");
react_native_assert(
getLayoutConstraints().layoutDirection != LayoutDirection::Undefined &&
"layoutDirection must be set.");
auto parameters = Parameters{};
{
std::unique_lock<better::shared_mutex> lock(linkMutex_);
react_native_assert(
link_.status == Status::Registered && "Surface must be registered.");
react_native_assert(
getLayoutConstraints().layoutDirection != LayoutDirection::Undefined &&
"layoutDirection must be set.");
auto parameters = Parameters{};
{
std::shared_lock<better::shared_mutex> parametersLock(parametersMutex_);
parameters = parameters_;
}
auto shadowTree = std::make_unique<ShadowTree>(
parameters.surfaceId,
parameters.layoutConstraints,
parameters.layoutContext,
*link_.uiManager);
link_.shadowTree = shadowTree.get();
link_.uiManager->startSurface(
std::move(shadowTree),
parameters.moduleName,
parameters.props,
parameters_.displayMode);
link_.status = Status::Running;
applyDisplayMode(parameters.displayMode);
SystraceSection s2("SurfaceHandler::start::paramsLock");
std::shared_lock<better::shared_mutex> parametersLock(parametersMutex_);
parameters = parameters_;
}
auto shadowTree = std::make_unique<ShadowTree>(
parameters.surfaceId,
parameters.layoutConstraints,
parameters.layoutContext,
*link_.uiManager);
link_.shadowTree = shadowTree.get();
link_.uiManager->startSurface(
std::move(shadowTree),
parameters.moduleName,
parameters.props,
parameters_.displayMode);
link_.status = Status::Running;
applyDisplayMode(parameters.displayMode);
}
void SurfaceHandler::stop() const noexcept {
@@ -156,6 +157,7 @@ std::string SurfaceHandler::getModuleName() const noexcept {
}
void SurfaceHandler::setProps(folly::dynamic const &props) const noexcept {
SystraceSection s("SurfaceHandler::setProps");
std::unique_lock<better::shared_mutex> lock(parametersMutex_);
parameters_.props = props;
}
@@ -201,6 +203,7 @@ Size SurfaceHandler::measure(
void SurfaceHandler::constraintLayout(
LayoutConstraints const &layoutConstraints,
LayoutContext const &layoutContext) const noexcept {
SystraceSection s("SurfaceHandler::constraintLayout");
{
std::unique_lock<better::shared_mutex> lock(parametersMutex_);
@@ -241,6 +244,7 @@ LayoutContext SurfaceHandler::getLayoutContext() const noexcept {
#pragma mark - Private
void SurfaceHandler::applyDisplayMode(DisplayMode displayMode) const noexcept {
SystraceSection s("SurfaceHandler::applyDisplayMode");
react_native_assert(
link_.status == Status::Running && "Surface must be running.");
react_native_assert(
@@ -160,6 +160,7 @@ void UIManager::startSurface(
shadowTreeRegistry_.add(std::move(shadowTree));
runtimeExecutor_([=](jsi::Runtime &runtime) {
SystraceSection s("UIManager::startSurface::onRuntime");
auto uiManagerBinding = UIManagerBinding::getBinding(runtime);
if (!uiManagerBinding) {
return;
@@ -139,6 +139,7 @@ void UIManagerBinding::startSurface(
std::string const &moduleName,
folly::dynamic const &initalProps,
DisplayMode displayMode) const {
SystraceSection s("UIManagerBinding::startSurface");
folly::dynamic parameters = folly::dynamic::object();
parameters["rootTag"] = surfaceId;
parameters["initialProps"] = initalProps;
@@ -172,6 +173,7 @@ void UIManagerBinding::setSurfaceProps(
std::string const &moduleName,
folly::dynamic const &initalProps,
DisplayMode displayMode) const {
SystraceSection s("UIManagerBinding::setSurfaceProps");
folly::dynamic parameters = folly::dynamic::object();
parameters["rootTag"] = surfaceId;
parameters["initialProps"] = initalProps;
@@ -271,6 +273,7 @@ jsi::Value UIManagerBinding::get(
jsi::Runtime &runtime,
jsi::PropNameID const &name) {
auto methodName = name.utf8(runtime);
SystraceSection s("UIManagerBinding::get", "name", methodName);
// Convert shared_ptr<UIManager> to a raw ptr
// Why? Because:
@@ -836,6 +839,7 @@ jsi::Value UIManagerBinding::get(
void UIManagerBinding::executeMeasure(
jsi::Runtime &runtime,
std::function<void(jsi::Runtime &)> &&callback) const noexcept {
SystraceSection s("UIManagerBinding::executeMeasure");
if (enableAsyncMeasure_) {
runtimeExecutor_(std::move(callback));
} else {