mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
dfa25df2cf
Summary: With this change, we now collect the number of text measurements that we perform during the layout phase of the commit. Text measurements are the most expensive layout operations which pretty much responsible for the vast majority of time spent in the layout phase. Changelog: [Internal] Fabric-specific internal change. Reviewed By: mdvacca Differential Revision: D23364664 fbshipit-source-id: 19514b93166b4053c2f3be37e79507f2c5248000
140 lines
4.2 KiB
C++
140 lines
4.2 KiB
C++
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#include "MountingTelemetry.h"
|
|
|
|
#include <cassert>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
using ThreadLocalMountingTelemetry = ThreadStorage<MountingTelemetry *>;
|
|
|
|
MountingTelemetry *MountingTelemetry::threadLocalTelemetry() {
|
|
return ThreadLocalMountingTelemetry::getInstance().get().value_or(nullptr);
|
|
}
|
|
|
|
void MountingTelemetry::setAsThreadLocal() {
|
|
ThreadLocalMountingTelemetry::getInstance().set(this);
|
|
}
|
|
|
|
void MountingTelemetry::unsetAsThreadLocal() {
|
|
ThreadLocalMountingTelemetry::getInstance().set(nullptr);
|
|
}
|
|
|
|
void MountingTelemetry::willCommit() {
|
|
assert(commitStartTime_ == kTelemetryUndefinedTimePoint);
|
|
assert(commitEndTime_ == kTelemetryUndefinedTimePoint);
|
|
commitStartTime_ = telemetryTimePointNow();
|
|
commitNumber_++;
|
|
}
|
|
|
|
void MountingTelemetry::didCommit() {
|
|
assert(commitStartTime_ != kTelemetryUndefinedTimePoint);
|
|
assert(commitEndTime_ == kTelemetryUndefinedTimePoint);
|
|
commitEndTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void MountingTelemetry::willDiff() {
|
|
assert(diffStartTime_ == kTelemetryUndefinedTimePoint);
|
|
assert(diffEndTime_ == kTelemetryUndefinedTimePoint);
|
|
diffStartTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void MountingTelemetry::didDiff() {
|
|
assert(diffStartTime_ != kTelemetryUndefinedTimePoint);
|
|
assert(diffEndTime_ == kTelemetryUndefinedTimePoint);
|
|
diffEndTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void MountingTelemetry::willLayout() {
|
|
assert(layoutStartTime_ == kTelemetryUndefinedTimePoint);
|
|
assert(layoutEndTime_ == kTelemetryUndefinedTimePoint);
|
|
layoutStartTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void MountingTelemetry::didMeasureText() {
|
|
numberOfTextMeasurements_++;
|
|
}
|
|
|
|
void MountingTelemetry::didLayout() {
|
|
assert(layoutStartTime_ != kTelemetryUndefinedTimePoint);
|
|
assert(layoutEndTime_ == kTelemetryUndefinedTimePoint);
|
|
layoutEndTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void MountingTelemetry::willMount() {
|
|
assert(mountStartTime_ == kTelemetryUndefinedTimePoint);
|
|
assert(mountEndTime_ == kTelemetryUndefinedTimePoint);
|
|
mountStartTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void MountingTelemetry::didMount() {
|
|
assert(mountStartTime_ != kTelemetryUndefinedTimePoint);
|
|
assert(mountEndTime_ == kTelemetryUndefinedTimePoint);
|
|
mountEndTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
TelemetryTimePoint MountingTelemetry::getDiffStartTime() const {
|
|
assert(diffStartTime_ != kTelemetryUndefinedTimePoint);
|
|
assert(diffEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return diffStartTime_;
|
|
}
|
|
|
|
TelemetryTimePoint MountingTelemetry::getDiffEndTime() const {
|
|
assert(diffStartTime_ != kTelemetryUndefinedTimePoint);
|
|
assert(diffEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return diffEndTime_;
|
|
}
|
|
|
|
TelemetryTimePoint MountingTelemetry::getCommitStartTime() const {
|
|
assert(commitStartTime_ != kTelemetryUndefinedTimePoint);
|
|
assert(commitEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return commitStartTime_;
|
|
}
|
|
|
|
TelemetryTimePoint MountingTelemetry::getCommitEndTime() const {
|
|
assert(commitStartTime_ != kTelemetryUndefinedTimePoint);
|
|
assert(commitEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return commitEndTime_;
|
|
}
|
|
|
|
TelemetryTimePoint MountingTelemetry::getLayoutStartTime() const {
|
|
assert(layoutStartTime_ != kTelemetryUndefinedTimePoint);
|
|
assert(layoutEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return layoutStartTime_;
|
|
}
|
|
|
|
TelemetryTimePoint MountingTelemetry::getLayoutEndTime() const {
|
|
assert(layoutStartTime_ != kTelemetryUndefinedTimePoint);
|
|
assert(layoutEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return layoutEndTime_;
|
|
}
|
|
|
|
TelemetryTimePoint MountingTelemetry::getMountStartTime() const {
|
|
assert(mountStartTime_ != kTelemetryUndefinedTimePoint);
|
|
assert(mountEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return mountStartTime_;
|
|
}
|
|
|
|
TelemetryTimePoint MountingTelemetry::getMountEndTime() const {
|
|
assert(mountStartTime_ != kTelemetryUndefinedTimePoint);
|
|
assert(mountEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return mountEndTime_;
|
|
}
|
|
|
|
int MountingTelemetry::getNumberOfTextMeasurements() const {
|
|
return numberOfTextMeasurements_;
|
|
}
|
|
|
|
int MountingTelemetry::getCommitNumber() const {
|
|
return commitNumber_;
|
|
}
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|