Files
allwpilib/wpilibc/src/main/native/include/frc/Tracer.h
Peter Johnson b2c3b2dd8e Use std::string_view and fmtlib across all libraries (#3402)
- Twine, StringRef, Format, and NativeFormatting have been removed
- Logging now uses fmtlib style formatting
- Nearly all uses of wpi::outs/errs have been replaced with fmt::print() or
std::puts()/std::fputs() (for unformatted strings).
- A wpi/fmt/raw_ostream.h header has been added to enable
fmt::print() with wpi::raw_ostream
2021-06-06 16:13:58 -07:00

74 lines
1.8 KiB
C++

// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <chrono>
#include <string_view>
#include <hal/cpp/fpga_clock.h>
#include <wpi/StringMap.h>
namespace wpi {
class raw_ostream;
} // namespace wpi
namespace frc {
/**
* A class for keeping track of how much time it takes for different parts of
* code to execute. This is done with epochs, that are added to calls to
* AddEpoch() and can be printed with a call to PrintEpochs().
*
* Epochs are a way to partition the time elapsed so that when overruns occur,
* one can determine which parts of an operation consumed the most time.
*/
class Tracer {
public:
/**
* Constructs a Tracer instance.
*/
Tracer();
/**
* Restarts the epoch timer.
*/
void ResetTimer();
/**
* Clears all epochs.
*/
void ClearEpochs();
/**
* Adds time since last epoch to the list printed by PrintEpochs().
*
* Epochs are a way to partition the time elapsed so that when overruns occur,
* one can determine which parts of an operation consumed the most time.
*
* @param epochName The name to associate with the epoch.
*/
void AddEpoch(std::string_view epochName);
/**
* Prints list of epochs added so far and their times to the DriverStation.
*/
void PrintEpochs();
/**
* Prints list of epochs added so far and their times to a stream.
*
* @param os output stream
*/
void PrintEpochs(wpi::raw_ostream& os);
private:
static constexpr std::chrono::milliseconds kMinPrintPeriod{1000};
hal::fpga_clock::time_point m_startTime;
hal::fpga_clock::time_point m_lastEpochsPrintTime = hal::fpga_clock::epoch();
wpi::StringMap<std::chrono::nanoseconds> m_epochs;
};
} // namespace frc