Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(212)

Unified Diff: runtime/vm/log.cc

Issue 1314673008: Migrate logging infrastructure Isolate->Thread (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Fix test. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/log.cc
diff --git a/runtime/vm/log.cc b/runtime/vm/log.cc
index 5bb984222e94a902b5b44d41fe529e9779589f7d..e29432f0da8374ead7a1d3a8cb6766cfe60d2948 100644
--- a/runtime/vm/log.cc
+++ b/runtime/vm/log.cc
@@ -11,6 +11,10 @@ namespace dart {
DEFINE_FLAG(bool, force_log_flush, false, "Always flush log messages.");
+DEFINE_FLAG(charp, isolate_log_filter, NULL,
+ "Log isolates whose name include the filter. "
+ "Default: service isolate log messages are suppressed.");
+
Log::Log(LogPrinter printer)
: printer_(printer),
manual_flush_(0),
@@ -18,6 +22,23 @@ Log::Log(LogPrinter printer)
}
+Log::~Log() {
+ // Did someone enable manual flushing and then forgot to Flush?
+ ASSERT(cursor() == 0);
+}
+
+
+Log* Log::Current() {
+ Thread* thread = Thread::Current();
+ Isolate* isolate = thread->isolate();
+ if (isolate != NULL && Log::ShouldLogForIsolate(isolate)) {
+ return thread->log();
+ } else {
+ return Log::NoOpLog();
+ }
+}
+
+
void Log::Print(const char* format, ...) {
if (this == NoOpLog()) {
return;
@@ -92,6 +113,24 @@ intptr_t Log::cursor() const {
}
+bool Log::ShouldLogForIsolate(const Isolate* isolate) {
+ if (FLAG_isolate_log_filter == NULL) {
+ if (isolate->is_service_isolate()) {
+ // By default, do not log for the service isolate.
+ return false;
+ }
+ return true;
+ }
+ const char* name = isolate->name();
+ ASSERT(name != NULL);
+ if (strstr(name, FLAG_isolate_log_filter) == NULL) {
+ // Filter does not match, do not log for this isolate.
+ return false;
+ }
+ return true;
+}
+
+
Log Log::noop_log_;
Log* Log::NoOpLog() {
return &noop_log_;
@@ -117,25 +156,14 @@ void Log::DisableManualFlush() {
}
-LogBlock::LogBlock(Thread* thread, Log* log)
- : StackResource(thread),
- log_(log), cursor_(log->cursor()) {
- CommonConstructor();
-}
-
-
-LogBlock::LogBlock(Isolate* isolate)
- : StackResource(isolate),
- log_(isolate->Log()), cursor_(isolate->Log()->cursor()) {
- CommonConstructor();
+void LogBlock::Initialize() {
+ log_->EnableManualFlush();
}
-LogBlock::LogBlock(Thread* thread)
- : StackResource(thread),
- log_(thread->isolate()->Log()),
- cursor_(thread->isolate()->Log()->cursor()) {
- CommonConstructor();
+LogBlock::~LogBlock() {
+ log_->Flush(cursor_);
+ log_->DisableManualFlush();
}
} // namespace dart
« no previous file with comments | « runtime/vm/log.h ('k') | runtime/vm/log_test.cc » ('j') | runtime/vm/thread.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698