mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Fabric: Storing commit revision number in MountingTelemetry
Summary: Now we store a revision number of a Shadow Tree that leads to a transaction for which the concrete instance of MountingTelemetry corresponds. This is useful to understand how many actual transactions were skipped during a mounting phase (a mounting transaction does not directly correspond to a commit operation). Changelog: [Internal] Fabric-specific internal change. Reviewed By: mdvacca Differential Revision: D23364663 fbshipit-source-id: 32b86bcdfc1ae97d8fff3b97a8615cc5a5b4d4a9
This commit is contained in:
committed by
Facebook GitHub Bot
parent
dfa25df2cf
commit
cb48b50290
@@ -609,7 +609,8 @@ void Binding::schedulerDidFinishTransaction(
|
||||
}
|
||||
}
|
||||
}
|
||||
int64_t commitNumber = telemetry.getCommitNumber();
|
||||
|
||||
auto revisionNumber = telemetry.getRevisionNumber();
|
||||
|
||||
std::vector<local_ref<jobject>> queue;
|
||||
// Upper bound estimation of mount items to be delivered to Java side.
|
||||
@@ -813,7 +814,7 @@ void Binding::schedulerDidFinishTransaction(
|
||||
surfaceId,
|
||||
position == 0 ? nullptr : mountItemsArray.get(),
|
||||
position,
|
||||
commitNumber);
|
||||
revisionNumber);
|
||||
|
||||
static auto scheduleMountItem =
|
||||
jni::findClassStatic(Binding::UIManagerJavaDescriptor)
|
||||
@@ -833,7 +834,7 @@ void Binding::schedulerDidFinishTransaction(
|
||||
scheduleMountItem(
|
||||
localJavaUIManager,
|
||||
batch.get(),
|
||||
telemetry.getCommitNumber(),
|
||||
telemetry.getRevisionNumber(),
|
||||
telemetryTimePointToMilliseconds(telemetry.getCommitStartTime()),
|
||||
telemetryTimePointToMilliseconds(telemetry.getDiffStartTime()),
|
||||
telemetryTimePointToMilliseconds(telemetry.getDiffEndTime()),
|
||||
|
||||
@@ -30,7 +30,6 @@ void MountingTelemetry::willCommit() {
|
||||
assert(commitStartTime_ == kTelemetryUndefinedTimePoint);
|
||||
assert(commitEndTime_ == kTelemetryUndefinedTimePoint);
|
||||
commitStartTime_ = telemetryTimePointNow();
|
||||
commitNumber_++;
|
||||
}
|
||||
|
||||
void MountingTelemetry::didCommit() {
|
||||
@@ -79,6 +78,10 @@ void MountingTelemetry::didMount() {
|
||||
mountEndTime_ = telemetryTimePointNow();
|
||||
}
|
||||
|
||||
void MountingTelemetry::setRevisionNumber(int revisionNumber) {
|
||||
revisionNumber_ = revisionNumber;
|
||||
}
|
||||
|
||||
TelemetryTimePoint MountingTelemetry::getDiffStartTime() const {
|
||||
assert(diffStartTime_ != kTelemetryUndefinedTimePoint);
|
||||
assert(diffEndTime_ != kTelemetryUndefinedTimePoint);
|
||||
@@ -131,8 +134,8 @@ int MountingTelemetry::getNumberOfTextMeasurements() const {
|
||||
return numberOfTextMeasurements_;
|
||||
}
|
||||
|
||||
int MountingTelemetry::getCommitNumber() const {
|
||||
return commitNumber_;
|
||||
int MountingTelemetry::getRevisionNumber() const {
|
||||
return revisionNumber_;
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
|
||||
@@ -42,6 +42,8 @@ class MountingTelemetry final {
|
||||
void willMount();
|
||||
void didMount();
|
||||
|
||||
void setRevisionNumber(int revisionNumber);
|
||||
|
||||
/*
|
||||
* Reading
|
||||
*/
|
||||
@@ -55,8 +57,7 @@ class MountingTelemetry final {
|
||||
TelemetryTimePoint getMountEndTime() const;
|
||||
|
||||
int getNumberOfTextMeasurements() const;
|
||||
|
||||
int getCommitNumber() const;
|
||||
int getRevisionNumber() const;
|
||||
|
||||
private:
|
||||
TelemetryTimePoint diffStartTime_{kTelemetryUndefinedTimePoint};
|
||||
@@ -69,8 +70,7 @@ class MountingTelemetry final {
|
||||
TelemetryTimePoint mountEndTime_{kTelemetryUndefinedTimePoint};
|
||||
|
||||
int numberOfTextMeasurements_{0};
|
||||
|
||||
int commitNumber_{0};
|
||||
int revisionNumber_{0};
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
|
||||
@@ -361,6 +361,7 @@ bool ShadowTree::tryCommit(
|
||||
emitLayoutEvents(affectedLayoutableNodes);
|
||||
|
||||
telemetry.didCommit();
|
||||
telemetry.setRevisionNumber(revisionNumber);
|
||||
|
||||
mountingCoordinator_->push(
|
||||
ShadowTreeRevision{newRootShadowNode, revisionNumber, telemetry});
|
||||
|
||||
@@ -23,6 +23,7 @@ void SurfaceTelemetry::incorporate(
|
||||
numberOfTransactions_++;
|
||||
numberOfMutations_ += numberOfMutations;
|
||||
numberOfTextMeasurements_ += telemetry.getNumberOfTextMeasurements();
|
||||
lastRevisionNumber_ = telemetry.getRevisionNumber();
|
||||
|
||||
while (recentCommitTelemetries_.size() >=
|
||||
kMaxNumberOfRecordedCommitTelemetries) {
|
||||
@@ -60,6 +61,10 @@ int SurfaceTelemetry::getNumberOfTextMeasurements() const {
|
||||
return numberOfTextMeasurements_;
|
||||
}
|
||||
|
||||
int SurfaceTelemetry::getLastRevisionNumber() const {
|
||||
return lastRevisionNumber_;
|
||||
}
|
||||
|
||||
std::vector<MountingTelemetry> SurfaceTelemetry::getRecentCommitTelemetries()
|
||||
const {
|
||||
auto result = std::vector<MountingTelemetry>{};
|
||||
|
||||
@@ -35,6 +35,7 @@ class SurfaceTelemetry final {
|
||||
int getNumberOfTransactions() const;
|
||||
int getNumberOfMutations() const;
|
||||
int getNumberOfTextMeasurements() const;
|
||||
int getLastRevisionNumber() const;
|
||||
|
||||
std::vector<MountingTelemetry> getRecentCommitTelemetries() const;
|
||||
|
||||
@@ -53,6 +54,7 @@ class SurfaceTelemetry final {
|
||||
int numberOfTransactions_{};
|
||||
int numberOfMutations_{};
|
||||
int numberOfTextMeasurements_{};
|
||||
int lastRevisionNumber_{};
|
||||
|
||||
better::small_vector<MountingTelemetry, kMaxNumberOfRecordedCommitTelemetries>
|
||||
recentCommitTelemetries_{};
|
||||
|
||||
@@ -57,6 +57,8 @@ TEST(MountingTelemetryTest, normalUseCase) {
|
||||
sleep<TelemetryClock>(0.1);
|
||||
telemetry.didCommit();
|
||||
|
||||
telemetry.setRevisionNumber(42);
|
||||
|
||||
telemetry.unsetAsThreadLocal();
|
||||
|
||||
sleep<TelemetryClock>(0.3);
|
||||
@@ -77,6 +79,7 @@ TEST(MountingTelemetryTest, normalUseCase) {
|
||||
EXPECT_EQ_WITH_THRESHOLD(mountDuration, 100, threshold);
|
||||
|
||||
EXPECT_EQ(telemetry.getNumberOfTextMeasurements(), 3);
|
||||
EXPECT_EQ(telemetry.getRevisionNumber(), 42);
|
||||
}
|
||||
|
||||
TEST(MountingTelemetryTest, abnormalUseCases) {
|
||||
|
||||
Reference in New Issue
Block a user