react-native/ReactCommon/jsi/instrumentation.h

77 lines
2.7 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.
#pragma once
#include <string>
#include <jsi/jsi.h>
namespace facebook {
namespace jsi {
/// Methods for starting and collecting instrumentation, an \c Instrumentation
/// instance is associated with a particular \c Runtime instance, which it
/// controls the instrumentation of.
class Instrumentation {
public:
virtual ~Instrumentation() = default;
/// Returns GC statistics as a JSON-encoded string, with an object containing
/// "type" and "version" fields outermost. "type" is a string, unique to a
/// particular implementation of \c jsi::Instrumentation, and "version" is a
/// number to indicate any revision to that implementation and its output
/// format.
///
/// \pre This call can only be made on the instrumentation instance of a
/// runtime initialised to collect GC statistics.
///
/// \post All cumulative measurements mentioned in the output are accumulated
/// across the entire lifetime of the Runtime.
///
/// \return the GC statistics collected so far, as a JSON-encoded string.
virtual std::string getRecordedGCStats() = 0;
/// Request statistics about the current state of the runtime's heap. This
/// function can be called at any time, and should produce information that is
/// correct at the instant it is called (i.e, not stale).
///
/// \return a jsi Value containing whichever statistics the runtime supports
/// for its heap.
virtual Value getHeapInfo(bool includeExpensive) = 0;
/// perform a full garbage collection
virtual void collectGarbage() = 0;
/// Captures the heap to a file
///
/// \param path to save the heap capture
///
/// \param compact Whether the JSON should be compact or pretty
///
/// \return true iff the heap capture succeeded
virtual bool createSnapshotToFile(const std::string& path, bool compact) = 0;
/// Write a trace of bridge traffic to the given file name.
virtual void writeBridgeTrafficTraceToFile(
const std::string& fileName) const = 0;
/// Write basic block profile trace to the given file name.
virtual void writeBasicBlockProfileTraceToFile(
const std::string& fileName) const = 0;
/// Enable sampling profiler.
virtual void enableSamplingProfiler() const = 0;
/// Dump sampled stack trace to the given file name.
virtual void dumpSampledTraceToFile(const std::string& fileName) const = 0;
/// Dump external profiler symbols to the given file name.
virtual void dumpProfilerSymbolsToFile(const std::string& fileName) const = 0;
};
} // namespace jsi
} // namespace facebook