mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
60f15d6b5d
Summary: Now we not only measure how many times we measured text but also measure how much time it takes. This way we can see which portion of the layout process is spent by layout itself (and measuring embedded components). Changelog: [Internal] Fabric-specific internal change. Reviewed By: mdvacca Differential Revision: D26827447 fbshipit-source-id: e0b09fcacc86aed50dd94b48458215adbb0a60ef
157 lines
5.3 KiB
C++
157 lines
5.3 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 "TransactionTelemetry.h"
|
|
|
|
#include <react/debug/react_native_assert.h>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
thread_local TransactionTelemetry *threadLocalTransactionTelemetry = nullptr;
|
|
|
|
TransactionTelemetry *TransactionTelemetry::threadLocalTelemetry() {
|
|
return threadLocalTransactionTelemetry;
|
|
}
|
|
|
|
void TransactionTelemetry::setAsThreadLocal() {
|
|
threadLocalTransactionTelemetry = this;
|
|
}
|
|
|
|
void TransactionTelemetry::unsetAsThreadLocal() {
|
|
threadLocalTransactionTelemetry = nullptr;
|
|
}
|
|
|
|
void TransactionTelemetry::willCommit() {
|
|
react_native_assert(commitStartTime_ == kTelemetryUndefinedTimePoint);
|
|
react_native_assert(commitEndTime_ == kTelemetryUndefinedTimePoint);
|
|
commitStartTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void TransactionTelemetry::didCommit() {
|
|
react_native_assert(commitStartTime_ != kTelemetryUndefinedTimePoint);
|
|
react_native_assert(commitEndTime_ == kTelemetryUndefinedTimePoint);
|
|
commitEndTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void TransactionTelemetry::willDiff() {
|
|
react_native_assert(diffStartTime_ == kTelemetryUndefinedTimePoint);
|
|
react_native_assert(diffEndTime_ == kTelemetryUndefinedTimePoint);
|
|
diffStartTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void TransactionTelemetry::didDiff() {
|
|
react_native_assert(diffStartTime_ != kTelemetryUndefinedTimePoint);
|
|
react_native_assert(diffEndTime_ == kTelemetryUndefinedTimePoint);
|
|
diffEndTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void TransactionTelemetry::willLayout() {
|
|
react_native_assert(layoutStartTime_ == kTelemetryUndefinedTimePoint);
|
|
react_native_assert(layoutEndTime_ == kTelemetryUndefinedTimePoint);
|
|
layoutStartTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void TransactionTelemetry::willMeasureText() {
|
|
react_native_assert(
|
|
lastTextMeasureStartTime_ == kTelemetryUndefinedTimePoint);
|
|
lastTextMeasureStartTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void TransactionTelemetry::didMeasureText() {
|
|
numberOfTextMeasurements_++;
|
|
react_native_assert(
|
|
lastTextMeasureStartTime_ != kTelemetryUndefinedTimePoint);
|
|
textMeasureTime_ += telemetryTimePointNow() - lastTextMeasureStartTime_;
|
|
lastTextMeasureStartTime_ = kTelemetryUndefinedTimePoint;
|
|
}
|
|
|
|
void TransactionTelemetry::didLayout() {
|
|
react_native_assert(layoutStartTime_ != kTelemetryUndefinedTimePoint);
|
|
react_native_assert(layoutEndTime_ == kTelemetryUndefinedTimePoint);
|
|
layoutEndTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void TransactionTelemetry::willMount() {
|
|
react_native_assert(mountStartTime_ == kTelemetryUndefinedTimePoint);
|
|
react_native_assert(mountEndTime_ == kTelemetryUndefinedTimePoint);
|
|
mountStartTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void TransactionTelemetry::didMount() {
|
|
react_native_assert(mountStartTime_ != kTelemetryUndefinedTimePoint);
|
|
react_native_assert(mountEndTime_ == kTelemetryUndefinedTimePoint);
|
|
mountEndTime_ = telemetryTimePointNow();
|
|
}
|
|
|
|
void TransactionTelemetry::setRevisionNumber(int revisionNumber) {
|
|
revisionNumber_ = revisionNumber;
|
|
}
|
|
|
|
TelemetryTimePoint TransactionTelemetry::getDiffStartTime() const {
|
|
react_native_assert(diffStartTime_ != kTelemetryUndefinedTimePoint);
|
|
react_native_assert(diffEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return diffStartTime_;
|
|
}
|
|
|
|
TelemetryTimePoint TransactionTelemetry::getDiffEndTime() const {
|
|
react_native_assert(diffStartTime_ != kTelemetryUndefinedTimePoint);
|
|
react_native_assert(diffEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return diffEndTime_;
|
|
}
|
|
|
|
TelemetryTimePoint TransactionTelemetry::getCommitStartTime() const {
|
|
react_native_assert(commitStartTime_ != kTelemetryUndefinedTimePoint);
|
|
react_native_assert(commitEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return commitStartTime_;
|
|
}
|
|
|
|
TelemetryTimePoint TransactionTelemetry::getCommitEndTime() const {
|
|
react_native_assert(commitStartTime_ != kTelemetryUndefinedTimePoint);
|
|
react_native_assert(commitEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return commitEndTime_;
|
|
}
|
|
|
|
TelemetryTimePoint TransactionTelemetry::getLayoutStartTime() const {
|
|
react_native_assert(layoutStartTime_ != kTelemetryUndefinedTimePoint);
|
|
react_native_assert(layoutEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return layoutStartTime_;
|
|
}
|
|
|
|
TelemetryTimePoint TransactionTelemetry::getLayoutEndTime() const {
|
|
react_native_assert(layoutStartTime_ != kTelemetryUndefinedTimePoint);
|
|
react_native_assert(layoutEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return layoutEndTime_;
|
|
}
|
|
|
|
TelemetryTimePoint TransactionTelemetry::getMountStartTime() const {
|
|
react_native_assert(mountStartTime_ != kTelemetryUndefinedTimePoint);
|
|
react_native_assert(mountEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return mountStartTime_;
|
|
}
|
|
|
|
TelemetryTimePoint TransactionTelemetry::getMountEndTime() const {
|
|
react_native_assert(mountStartTime_ != kTelemetryUndefinedTimePoint);
|
|
react_native_assert(mountEndTime_ != kTelemetryUndefinedTimePoint);
|
|
return mountEndTime_;
|
|
}
|
|
|
|
TelemetryDuration TransactionTelemetry::getTextMeasureTime() const {
|
|
return textMeasureTime_;
|
|
}
|
|
|
|
int TransactionTelemetry::getNumberOfTextMeasurements() const {
|
|
return numberOfTextMeasurements_;
|
|
}
|
|
|
|
int TransactionTelemetry::getRevisionNumber() const {
|
|
return revisionNumber_;
|
|
}
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|