mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
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:
committed by
Facebook GitHub Bot
parent
b0e39b2ed9
commit
24d91268b6
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user