Commit 573a9db8 authored by Simeon Anfinrud's avatar Simeon Anfinrud Committed by Commit Bot

[base/debug] Print task trace to Android log.

Bug: None
Test: base_unittests
Test: Call base::debug::TaskTrace().Print() somewhere on Android
Change-Id: I1a4bda16bfa11436efd277b941735d3610eaacd0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1666426Reviewed-by: default avatarAlbert J. Wong <ajwong@chromium.org>
Commit-Queue: Simeon Anfinrud <sanfin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#672602}
parent cb39e453
...@@ -4,15 +4,50 @@ ...@@ -4,15 +4,50 @@
#include "base/debug/task_trace.h" #include "base/debug/task_trace.h"
#include "build/build_config.h"
#if defined(OS_ANDROID)
#include <android/log.h>
#endif // OS_ANDROID
#include <algorithm> #include <algorithm>
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
#if defined(OS_ANDROID)
#include "base/no_destructor.h"
#endif
#include "base/pending_task.h" #include "base/pending_task.h"
#include "base/task/common/task_annotator.h" #include "base/task/common/task_annotator.h"
namespace base { namespace base {
namespace debug { namespace debug {
namespace {
#if defined(OS_ANDROID)
// Android sends stdout and stderr to /dev/null; logging should be done through
// the __android_log_write() function. Here we create an override of
// std::stringbuf that writes to the Android log.
class AndroidErrBuffer : public std::stringbuf {
protected:
int sync() override {
__android_log_write(ANDROID_LOG_ERROR, "chromium", str().c_str());
return 0;
}
};
std::ostream& DefaultOutputStream() {
static NoDestructor<AndroidErrBuffer> buf;
static NoDestructor<std::ostream> out(buf.get());
return *out;
}
#else
// Use stderr by default.
std::ostream& DefaultOutputStream() {
return std::cerr;
}
#endif // OS_ANDROID
} // namespace
TaskTrace::TaskTrace() { TaskTrace::TaskTrace() {
const PendingTask* current_task = TaskAnnotator::CurrentTaskForThread(); const PendingTask* current_task = TaskAnnotator::CurrentTaskForThread();
...@@ -36,7 +71,7 @@ bool TaskTrace::empty() const { ...@@ -36,7 +71,7 @@ bool TaskTrace::empty() const {
} }
void TaskTrace::Print() const { void TaskTrace::Print() const {
OutputToStream(&std::cerr); OutputToStream(&DefaultOutputStream());
} }
void TaskTrace::OutputToStream(std::ostream* os) const { void TaskTrace::OutputToStream(std::ostream* os) const {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment