// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. #ifndef VM_CODE_OBSERVERS_H_ #define VM_CODE_OBSERVERS_H_ #include "vm/globals.h" #include "vm/allocation.h" namespace dart { // Object observing code creation events. Used by external profilers and // debuggers to map address ranges to function names. class CodeObserver { public: CodeObserver() { } virtual ~CodeObserver() { } // Returns true if this observer is active and should be notified // about newly created code objects. virtual bool IsActive() const = 0; // Notify code observer about a newly created code object with the // given properties. virtual void Notify(const char* name, uword base, uword prologue_offset, uword size, bool optimized) = 0; private: DISALLOW_COPY_AND_ASSIGN(CodeObserver); }; class CodeObservers : public AllStatic { public: static void InitOnce(); static void Register(CodeObserver* observer); // Notify all active code observers about a newly created code object. static void NotifyAll(const char* name, uword base, uword prologue_offset, uword size, bool optimized); // Returns true if there is at least one active code observer. static bool AreActive(); static void DeleteAll(); private: static intptr_t observers_length_; static CodeObserver** observers_; }; } // namespace dart #endif // VM_CODE_OBSERVERS_H_