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

Unified Diff: runtime/vm/code_observers.cc

Issue 11660011: Clean up CodeObservers (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add a period to a comment. Created 8 years 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
« no previous file with comments | « runtime/vm/code_observers.h ('k') | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/code_observers.cc
diff --git a/runtime/vm/code_observers.cc b/runtime/vm/code_observers.cc
index f8bac19603bfad5ae901f958692b49e2b17b662d..ef84ceb779bc2f1c6410b7965f0f45603cd0d37e 100644
--- a/runtime/vm/code_observers.cc
+++ b/runtime/vm/code_observers.cc
@@ -4,21 +4,10 @@
#include "vm/code_observers.h"
-#include "vm/dart.h"
-#include "vm/debuginfo.h"
-#include "vm/flags.h"
-#include "vm/isolate.h"
#include "vm/os.h"
-#include "vm/vtune.h"
-#include "vm/zone.h"
namespace dart {
-DEFINE_FLAG(bool, generate_gdb_symbols, false,
- "Generate symbols of generated dart functions for debugging with GDB");
-DEFINE_FLAG(bool, generate_perf_events_symbols, false,
- "Generate events symbols for profiling with perf");
-
intptr_t CodeObservers::observers_length_ = 0;
CodeObserver** CodeObservers::observers_ = NULL;
@@ -56,120 +45,16 @@ bool CodeObservers::AreActive() {
}
-class PerfCodeObserver : public CodeObserver {
- public:
- PerfCodeObserver() {
- Dart_FileOpenCallback file_open = Isolate::file_open_callback();
- if (file_open == NULL) {
- return;
- }
-// TODO(7321): Move OS-specific code for perf profiling to the OS abstraction
-#if defined(TARGET_OS_LINUX)
- const char* format = "/tmp/perf-%ld.map";
- intptr_t pid = getpid();
- intptr_t len = OS::SNPrint(NULL, 0, format, pid);
- char* filename = new char[len + 1];
- OS::SNPrint(filename, len + 1, format, pid);
- out_file_ = (*file_open)(filename);
-#endif
- }
-
- // Not currently being called
- ~PerfCodeObserver() {
- Dart_FileCloseCallback file_close = Isolate::file_close_callback();
- if (file_close == NULL) {
- return;
- }
- ASSERT(out_file_ != NULL);
- (*file_close)(out_file_);
- }
-
- virtual bool IsActive() const {
- return FLAG_generate_perf_events_symbols;
- }
-
- virtual void Notify(const char* name,
- uword base,
- uword prologue_offset,
- uword size,
- bool optimized) {
- Dart_FileWriteCallback file_write = Isolate::file_write_callback();
- ASSERT(file_write != NULL);
- const char* format = "%"Px" %"Px" %s%s\n";
- const char* marker = optimized ? "*" : "";
- intptr_t len = OS::SNPrint(NULL, 0, format, base, size, marker, name);
- char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len + 1);
- OS::SNPrint(buffer, len + 1, format, base, size, marker, name);
- ASSERT(out_file_ != NULL);
- (*file_write)(buffer, len, out_file_);
- }
-
- private:
- void* out_file_;
-};
-
-
-class PprofCodeObserver : public CodeObserver {
- public:
- virtual bool IsActive() const {
- return Dart::pprof_symbol_generator() != NULL;
- }
-
- virtual void Notify(const char* name,
- uword base,
- uword prologue_offset,
- uword size,
- bool optimized) {
- DebugInfo* pprof_symbol_generator = Dart::pprof_symbol_generator();
- ASSERT(pprof_symbol_generator != NULL);
- pprof_symbol_generator->AddCode(base, size);
- pprof_symbol_generator->AddCodeRegion(name, base, size);
- }
-};
-
-
-class GdbCodeObserver : public CodeObserver {
- public:
- virtual bool IsActive() const {
- return FLAG_generate_gdb_symbols;
- }
-
- virtual void Notify(const char* name,
- uword base,
- uword prologue_offset,
- uword size,
- bool optimized) {
- if (prologue_offset > 0) {
- // In order to ensure that gdb sees the first instruction of a function
- // as the prologue sequence we register two symbols for the cases when
- // the prologue sequence is not the first instruction:
- // <name>_entry is used for code preceding the prologue sequence.
- // <name> for rest of the code (first instruction is prologue sequence).
- const char* kFormat = "%s_%s";
- intptr_t len = OS::SNPrint(NULL, 0, kFormat, name, "entry");
- char* pname = Isolate::Current()->current_zone()->Alloc<char>(len + 1);
- OS::SNPrint(pname, (len + 1), kFormat, name, "entry");
- DebugInfo::RegisterSection(pname, base, size);
- DebugInfo::RegisterSection(name,
- (base + prologue_offset),
- (size - prologue_offset));
- } else {
- DebugInfo::RegisterSection(name, base, size);
- }
+void CodeObservers::DeleteAll() {
+ for (intptr_t i = 0; i < observers_length_; i++) {
+ delete observers_[i];
}
-};
+ delete[] observers_;
+}
void CodeObservers::InitOnce() {
-// TODO(7321): Move flag registration to the OS abstraction
- if (FLAG_generate_perf_events_symbols) {
- Register(new PerfCodeObserver);
- }
- Register(new PprofCodeObserver);
- Register(new GdbCodeObserver);
-#if defined(DART_VTUNE_SUPPORT)
- Register(new VTuneCodeObserver);
-#endif
+ OS::RegisterCodeObservers();
}
« no previous file with comments | « runtime/vm/code_observers.h ('k') | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698