summaryrefslogtreecommitdiffstats
path: root/src/core/reporter.cpp
diff options
context:
space:
mode:
authorZach Hilman <zachhilman@gmail.com>2019-06-29 23:15:48 +0200
committerZach Hilman <zachhilman@gmail.com>2019-09-22 18:34:33 +0200
commit82bf055ecad08bd1c3f5b041888461db5c2da79a (patch)
tree2eb0a18b6fd7094ce999775918ef53c087afbca1 /src/core/reporter.cpp
parentMerge pull request #2683 from DarkLordZach/lock-exit (diff)
downloadyuzu-82bf055ecad08bd1c3f5b041888461db5c2da79a.tar
yuzu-82bf055ecad08bd1c3f5b041888461db5c2da79a.tar.gz
yuzu-82bf055ecad08bd1c3f5b041888461db5c2da79a.tar.bz2
yuzu-82bf055ecad08bd1c3f5b041888461db5c2da79a.tar.lz
yuzu-82bf055ecad08bd1c3f5b041888461db5c2da79a.tar.xz
yuzu-82bf055ecad08bd1c3f5b041888461db5c2da79a.tar.zst
yuzu-82bf055ecad08bd1c3f5b041888461db5c2da79a.zip
Diffstat (limited to '')
-rw-r--r--src/core/reporter.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/core/reporter.cpp b/src/core/reporter.cpp
index 9c657929e..a465d7421 100644
--- a/src/core/reporter.cpp
+++ b/src/core/reporter.cpp
@@ -7,6 +7,8 @@
#include <fmt/chrono.h>
#include <fmt/format.h>
+#include <fmt/ostream.h>
+#include <fmt/time.h>
#include <json.hpp>
#include "common/file_util.h"
@@ -17,6 +19,7 @@
#include "core/hle/kernel/hle_ipc.h"
#include "core/hle/kernel/process.h"
#include "core/hle/result.h"
+#include "core/hle/service/lm/manager.h"
#include "core/reporter.h"
#include "core/settings.h"
@@ -354,6 +357,55 @@ void Reporter::SaveErrorReport(u64 title_id, ResultCode result,
SaveToFile(std::move(out), GetPath("error_report", title_id, timestamp));
}
+void Reporter::SaveLogReport(u32 destination, std::vector<Service::LM::LogMessage> messages) const {
+ if (!IsReportingEnabled()) {
+ return;
+ }
+
+ const auto timestamp = GetTimestamp();
+ json out;
+
+ out["yuzu_version"] = GetYuzuVersionData();
+ out["report_common"] =
+ GetReportCommonData(system.CurrentProcess()->GetTitleID(), RESULT_SUCCESS, timestamp);
+
+ out["log_destination"] =
+ fmt::format("{}", static_cast<Service::LM::DestinationFlag>(destination));
+
+ auto json_messages = json::array();
+ std::transform(messages.begin(), messages.end(), std::back_inserter(json_messages),
+ [](const Service::LM::LogMessage& message) {
+ json out;
+ out["is_head"] = fmt::format("{}", message.header.IsHeadLog());
+ out["is_tail"] = fmt::format("{}", message.header.IsTailLog());
+ out["pid"] = fmt::format("{:016X}", message.header.pid);
+ out["thread_context"] =
+ fmt::format("{:016X}", message.header.thread_context);
+ out["payload_size"] = fmt::format("{:016X}", message.header.payload_size);
+ out["flags"] = fmt::format("{:04X}", message.header.flags.Value());
+ out["severity"] = fmt::format("{}", message.header.severity.Value());
+ out["verbosity"] = fmt::format("{:02X}", message.header.verbosity);
+
+ auto fields = json::array();
+ std::transform(message.fields.begin(), message.fields.end(),
+ std::back_inserter(fields), [](const auto& kv) {
+ json out;
+ out["type"] = fmt::format("{}", kv.first);
+ out["data"] =
+ Service::LM::FormatField(kv.first, kv.second);
+ return std::move(out);
+ });
+
+ out["fields"] = std::move(fields);
+ return std::move(out);
+ });
+
+ out["log_messages"] = std::move(json_messages);
+
+ SaveToFile(std::move(out),
+ GetPath("log_report", system.CurrentProcess()->GetTitleID(), timestamp));
+}
+
void Reporter::SaveFilesystemAccessReport(Service::FileSystem::LogMode log_mode,
std::string log_message) const {
if (!IsReportingEnabled())