brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · f403375 Raw
59 lines · cpp
1#include "lldb/DataFormatters/TypeSummary.h"2#include "lldb/Target/Statistics.h"3#include "lldb/Utility/Stream.h"4#include "lldb/lldb-forward.h"5#include "lldb/lldb-private-enumerations.h"6#include "lldb/lldb-private.h"7#include "llvm/Testing/Support/Error.h"8#include "gtest/gtest.h"9#include <thread>10 11using namespace lldb_private;12using Duration = std::chrono::duration<double>;13 14class DummySummaryImpl : public lldb_private::TypeSummaryImpl {15public:16  DummySummaryImpl()17      : TypeSummaryImpl(TypeSummaryImpl::Kind::eSummaryString,18                        TypeSummaryImpl::Flags()) {}19 20  std::string GetName() override { return "DummySummary"; }21 22  std::string GetSummaryKindName() override { return "dummy"; }23 24  std::string GetDescription() override { return ""; }25 26  bool FormatObject(ValueObject *valobj, std::string &dest,27                    const TypeSummaryOptions &options) override {28    return false;29  }30};31 32TEST(MultithreadFormatting, Multithread) {33  SummaryStatisticsCache statistics_cache;34  DummySummaryImpl summary;35  std::vector<std::thread> threads;36  for (int i = 0; i < 10; ++i) {37    threads.emplace_back(std::thread([&statistics_cache, &summary]() {38      auto sp = statistics_cache.GetSummaryStatisticsForProvider(summary);39      {40        SummaryStatistics::SummaryInvocation invocation(sp);41        std::this_thread::sleep_for(Duration(1));42      }43    }));44  }45 46  for (auto &thread : threads)47    thread.join();48 49  auto sp = statistics_cache.GetSummaryStatisticsForProvider(summary);50  ASSERT_TRUE(sp->GetDurationReference().get().count() > 10);51  ASSERT_TRUE(sp->GetSummaryCount() == 10);52 53  std::string stats_as_json;54  llvm::raw_string_ostream ss(stats_as_json);55  ss << sp->ToJSON();56  ASSERT_THAT(stats_as_json, ::testing::HasSubstr("\"name\":\"DummySummary\""));57  ASSERT_THAT(stats_as_json, ::testing::HasSubstr("\"type\":\"dummy\""));58}59