summaryrefslogtreecommitdiffstats
path: root/chromium/v8/src/diagnostics/code-tracer.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/v8/src/diagnostics/code-tracer.h')
-rw-r--r--chromium/v8/src/diagnostics/code-tracer.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/chromium/v8/src/diagnostics/code-tracer.h b/chromium/v8/src/diagnostics/code-tracer.h
index a9f276bf448..194d3cbe667 100644
--- a/chromium/v8/src/diagnostics/code-tracer.h
+++ b/chromium/v8/src/diagnostics/code-tracer.h
@@ -5,9 +5,11 @@
#ifndef V8_DIAGNOSTICS_CODE_TRACER_H_
#define V8_DIAGNOSTICS_CODE_TRACER_H_
+#include "src/base/optional.h"
#include "src/common/globals.h"
#include "src/flags/flags.h"
#include "src/utils/allocation.h"
+#include "src/utils/ostreams.h"
#include "src/utils/utils.h"
#include "src/utils/vector.h"
@@ -45,6 +47,28 @@ class CodeTracer final : public Malloced {
CodeTracer* tracer_;
};
+ class StreamScope : public Scope {
+ public:
+ explicit StreamScope(CodeTracer* tracer) : Scope(tracer) {
+ FILE* file = this->file();
+ if (file == stdout) {
+ stdout_stream_.emplace();
+ } else {
+ file_stream_.emplace(file);
+ }
+ }
+
+ std::ostream& stream() {
+ if (stdout_stream_.has_value()) return stdout_stream_.value();
+ return file_stream_.value();
+ }
+
+ private:
+ // Exactly one of these two will be initialized.
+ base::Optional<StdoutStream> stdout_stream_;
+ base::Optional<OFStream> file_stream_;
+ };
+
void OpenFile() {
if (!ShouldRedirect()) {
return;