Skip to content

Commit

Permalink
[wpilib] Fix usage reporting for static classes (#6090)
Browse files Browse the repository at this point in the history
  • Loading branch information
Gold856 authored Dec 27, 2023
1 parent f2c2bab commit 141241d
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,17 @@ ShuffleboardInstance::ShuffleboardInstance(nt::NetworkTableInstance ntInstance)
m_impl->selectedTabPub =
m_impl->rootMetaTable->GetStringTopic("Selected")
.Publish(nt::PubSubOptions{.keepDuplicates = true});
HAL_Report(HALUsageReporting::kResourceType_Shuffleboard, 0);
}

ShuffleboardInstance::~ShuffleboardInstance() = default;

static bool gReported = false;

frc::ShuffleboardTab& ShuffleboardInstance::GetTab(std::string_view title) {
if (!gReported) {
HAL_Report(HALUsageReporting::kResourceType_Shuffleboard, 0);
gReported = true;
}
if (m_impl->tabs.find(title) == m_impl->tabs.end()) {
m_impl->tabs.try_emplace(title,
std::make_unique<ShuffleboardTab>(*this, title));
Expand Down
51 changes: 29 additions & 22 deletions wpilibc/src/main/native/cpp/smartdashboard/SmartDashboard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ using namespace frc;

namespace {
struct Instance {
Instance() { HAL_Report(HALUsageReporting::kResourceType_SmartDashboard, 0); }

detail::ListenerExecutor listenerExecutor;
std::shared_ptr<nt::NetworkTable> table =
nt::NetworkTableInstance::GetDefault().GetTable("SmartDashboard");
Expand All @@ -46,6 +44,8 @@ void ResetSmartDashboardInstance() {
} // namespace frc::impl
#endif

static bool gReported = false;

void SmartDashboard::init() {
GetInstance();
}
Expand All @@ -59,25 +59,33 @@ std::vector<std::string> SmartDashboard::GetKeys(int types) {
}

void SmartDashboard::SetPersistent(std::string_view key) {
GetInstance().table->GetEntry(key).SetPersistent();
GetEntry(key).SetPersistent();
}

void SmartDashboard::ClearPersistent(std::string_view key) {
GetInstance().table->GetEntry(key).ClearPersistent();
GetEntry(key).ClearPersistent();
}

bool SmartDashboard::IsPersistent(std::string_view key) {
return GetInstance().table->GetEntry(key).IsPersistent();
return GetEntry(key).IsPersistent();
}

nt::NetworkTableEntry SmartDashboard::GetEntry(std::string_view key) {
if (!gReported) {
HAL_Report(HALUsageReporting::kResourceType_SmartDashboard, 0);
gReported = true;
}
return GetInstance().table->GetEntry(key);
}

void SmartDashboard::PutData(std::string_view key, wpi::Sendable* data) {
if (!data) {
throw FRC_MakeError(err::NullParameter, "value");
}
if (!gReported) {
HAL_Report(HALUsageReporting::kResourceType_SmartDashboard, 0);
gReported = true;
}
auto& inst = GetInstance();
std::scoped_lock lock(inst.tablesToDataMutex);
auto& uid = inst.tablesToData[key];
Expand Down Expand Up @@ -120,7 +128,7 @@ bool SmartDashboard::PutBoolean(std::string_view keyName, bool value) {

bool SmartDashboard::SetDefaultBoolean(std::string_view key,
bool defaultValue) {
return GetInstance().table->GetEntry(key).SetDefaultBoolean(defaultValue);
return GetEntry(key).SetDefaultBoolean(defaultValue);
}

bool SmartDashboard::GetBoolean(std::string_view keyName, bool defaultValue) {
Expand All @@ -133,7 +141,7 @@ bool SmartDashboard::PutNumber(std::string_view keyName, double value) {

bool SmartDashboard::SetDefaultNumber(std::string_view key,
double defaultValue) {
return GetInstance().table->GetEntry(key).SetDefaultDouble(defaultValue);
return GetEntry(key).SetDefaultDouble(defaultValue);
}

double SmartDashboard::GetNumber(std::string_view keyName,
Expand All @@ -148,7 +156,7 @@ bool SmartDashboard::PutString(std::string_view keyName,

bool SmartDashboard::SetDefaultString(std::string_view key,
std::string_view defaultValue) {
return GetInstance().table->GetEntry(key).SetDefaultString(defaultValue);
return GetEntry(key).SetDefaultString(defaultValue);
}

std::string SmartDashboard::GetString(std::string_view keyName,
Expand All @@ -158,63 +166,62 @@ std::string SmartDashboard::GetString(std::string_view keyName,

bool SmartDashboard::PutBooleanArray(std::string_view key,
std::span<const int> value) {
return GetInstance().table->GetEntry(key).SetBooleanArray(value);
return GetEntry(key).SetBooleanArray(value);
}

bool SmartDashboard::SetDefaultBooleanArray(std::string_view key,
std::span<const int> defaultValue) {
return GetInstance().table->GetEntry(key).SetDefaultBooleanArray(
defaultValue);
return GetEntry(key).SetDefaultBooleanArray(defaultValue);
}

std::vector<int> SmartDashboard::GetBooleanArray(
std::string_view key, std::span<const int> defaultValue) {
return GetInstance().table->GetEntry(key).GetBooleanArray(defaultValue);
return GetEntry(key).GetBooleanArray(defaultValue);
}

bool SmartDashboard::PutNumberArray(std::string_view key,
std::span<const double> value) {
return GetInstance().table->GetEntry(key).SetDoubleArray(value);
return GetEntry(key).SetDoubleArray(value);
}

bool SmartDashboard::SetDefaultNumberArray(
std::string_view key, std::span<const double> defaultValue) {
return GetInstance().table->GetEntry(key).SetDefaultDoubleArray(defaultValue);
return GetEntry(key).SetDefaultDoubleArray(defaultValue);
}

std::vector<double> SmartDashboard::GetNumberArray(
std::string_view key, std::span<const double> defaultValue) {
return GetInstance().table->GetEntry(key).GetDoubleArray(defaultValue);
return GetEntry(key).GetDoubleArray(defaultValue);
}

bool SmartDashboard::PutStringArray(std::string_view key,
std::span<const std::string> value) {
return GetInstance().table->GetEntry(key).SetStringArray(value);
return GetEntry(key).SetStringArray(value);
}

bool SmartDashboard::SetDefaultStringArray(
std::string_view key, std::span<const std::string> defaultValue) {
return GetInstance().table->GetEntry(key).SetDefaultStringArray(defaultValue);
return GetEntry(key).SetDefaultStringArray(defaultValue);
}

std::vector<std::string> SmartDashboard::GetStringArray(
std::string_view key, std::span<const std::string> defaultValue) {
return GetInstance().table->GetEntry(key).GetStringArray(defaultValue);
return GetEntry(key).GetStringArray(defaultValue);
}

bool SmartDashboard::PutRaw(std::string_view key,
std::span<const uint8_t> value) {
return GetInstance().table->GetEntry(key).SetRaw(value);
return GetEntry(key).SetRaw(value);
}

bool SmartDashboard::SetDefaultRaw(std::string_view key,
std::span<const uint8_t> defaultValue) {
return GetInstance().table->GetEntry(key).SetDefaultRaw(defaultValue);
return GetEntry(key).SetDefaultRaw(defaultValue);
}

std::vector<uint8_t> SmartDashboard::GetRaw(
std::string_view key, std::span<const uint8_t> defaultValue) {
return GetInstance().table->GetEntry(key).GetRaw(defaultValue);
return GetEntry(key).GetRaw(defaultValue);
}

bool SmartDashboard::PutValue(std::string_view keyName,
Expand All @@ -224,7 +231,7 @@ bool SmartDashboard::PutValue(std::string_view keyName,

bool SmartDashboard::SetDefaultValue(std::string_view key,
const nt::Value& defaultValue) {
return GetInstance().table->GetEntry(key).SetDefaultValue(defaultValue);
return GetEntry(key).SetDefaultValue(defaultValue);
}

nt::Value SmartDashboard::GetValue(std::string_view keyName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

final class ShuffleboardInstance implements ShuffleboardRoot {
private final Map<String, ShuffleboardTab> m_tabs = new LinkedHashMap<>();

private boolean m_reported = false; // NOPMD redundant field initializer
private boolean m_tabsChanged = false; // NOPMD redundant field initializer
private final NetworkTable m_rootTable;
private final NetworkTable m_rootMetaTable;
Expand All @@ -35,12 +35,15 @@ final class ShuffleboardInstance implements ShuffleboardRoot {
m_rootMetaTable = m_rootTable.getSubTable(".metadata");
m_selectedTabPub =
m_rootMetaTable.getStringTopic("Selected").publish(PubSubOption.keepDuplicates(true));
HAL.report(tResourceType.kResourceType_Shuffleboard, 0);
}

@Override
public ShuffleboardTab getTab(String title) {
requireNonNullParam(title, "title", "getTab");
if (!m_reported) {
HAL.report(tResourceType.kResourceType_Shuffleboard, 0);
m_reported = true;
}
if (!m_tabs.containsKey(title)) {
m_tabs.put(title, new ShuffleboardTab(this, title));
m_tabsChanged = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,10 @@ public final class SmartDashboard {
/** The executor for listener tasks; calls listener tasks synchronously from main thread. */
private static final ListenerExecutor listenerExecutor = new ListenerExecutor();

private static boolean m_reported = false; // NOPMD redundant field initializer

static {
setNetworkTableInstance(NetworkTableInstance.getDefault());
HAL.report(tResourceType.kResourceType_SmartDashboard, 0);
}

private SmartDashboard() {
Expand All @@ -64,6 +65,10 @@ public static synchronized void setNetworkTableInstance(NetworkTableInstance ins
*/
@SuppressWarnings("PMD.CompareObjectsWithEquals")
public static synchronized void putData(String key, Sendable data) {
if (!m_reported) {
HAL.report(tResourceType.kResourceType_SmartDashboard, 0);
m_reported = true;
}
Sendable sddata = tablesToData.get(key);
if (sddata == null || sddata != data) {
tablesToData.put(key, data);
Expand Down Expand Up @@ -114,6 +119,10 @@ public static synchronized Sendable getData(String key) {
* @return Network table entry.
*/
public static NetworkTableEntry getEntry(String key) {
if (!m_reported) {
HAL.report(tResourceType.kResourceType_SmartDashboard, 0);
m_reported = true;
}
return table.getEntry(key);
}

Expand Down

0 comments on commit 141241d

Please sign in to comment.