diff --git a/ReactCommon/react/renderer/mounting/SurfaceTelemetry.cpp b/ReactCommon/react/renderer/mounting/SurfaceTelemetry.cpp index cbe68e0831a..ea4436edba7 100644 --- a/ReactCommon/react/renderer/mounting/SurfaceTelemetry.cpp +++ b/ReactCommon/react/renderer/mounting/SurfaceTelemetry.cpp @@ -7,6 +7,8 @@ #include "SurfaceTelemetry.h" +#include + namespace facebook { namespace react { @@ -20,6 +22,13 @@ void SurfaceTelemetry::incorporate( numberOfTransactions_++; numberOfMutations_ += numberOfMutations; + + while (recentCommitTelemetries_.size() >= + kMaxNumberOfRecordedCommitTelemetries) { + recentCommitTelemetries_.erase(recentCommitTelemetries_.begin()); + } + + recentCommitTelemetries_.push_back(telemetry); } TelemetryDuration SurfaceTelemetry::getLayoutTime() const { @@ -46,5 +55,16 @@ int SurfaceTelemetry::getNumberOfMutations() const { return numberOfMutations_; } +std::vector SurfaceTelemetry::getRecentCommitTelemetries() + const { + auto result = std::vector{}; + result.reserve(recentCommitTelemetries_.size()); + std::copy( + recentCommitTelemetries_.begin(), + recentCommitTelemetries_.end(), + std::back_inserter(result)); + return result; +} + } // namespace react } // namespace facebook diff --git a/ReactCommon/react/renderer/mounting/SurfaceTelemetry.h b/ReactCommon/react/renderer/mounting/SurfaceTelemetry.h index d10f7853a47..566b798f265 100644 --- a/ReactCommon/react/renderer/mounting/SurfaceTelemetry.h +++ b/ReactCommon/react/renderer/mounting/SurfaceTelemetry.h @@ -7,6 +7,9 @@ #pragma once +#include +#include + #include #include @@ -19,6 +22,8 @@ namespace react { */ class SurfaceTelemetry final { public: + constexpr static size_t kMaxNumberOfRecordedCommitTelemetries = 16; + /* * Metrics */ @@ -30,6 +35,8 @@ class SurfaceTelemetry final { int getNumberOfTransactions() const; int getNumberOfMutations() const; + std::vector getRecentCommitTelemetries() const; + /* * Incorporate data from given transaction telemetry into aggregated data * for the Surface. @@ -44,6 +51,9 @@ class SurfaceTelemetry final { int numberOfTransactions_{}; int numberOfMutations_{}; + + better::small_vector + recentCommitTelemetries_{}; }; } // namespace react