⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 log.h.svn-base

📁 Google浏览器V8内核代码
💻 SVN-BASE
字号:
// Copyright 2006-2008 the V8 project authors. All rights reserved.// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are// met:////     * Redistributions of source code must retain the above copyright//       notice, this list of conditions and the following disclaimer.//     * Redistributions in binary form must reproduce the above//       copyright notice, this list of conditions and the following//       disclaimer in the documentation and/or other materials provided//       with the distribution.//     * Neither the name of Google Inc. nor the names of its//       contributors may be used to endorse or promote products derived//       from this software without specific prior written permission.//// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#ifndef V8_LOG_H_#define V8_LOG_H_namespace v8 { namespace internal {// Logger is used for collecting logging information from V8 during// execution. The result is dumped to a file.//// Available command line flags:////  --log// Minimal logging (no API, code, or GC sample events), default is off.//// --log-all// Log all events to the file, default is off.  This is the same as combining// --log-api, --log-code, --log-gc, and --log-regexp.//// --log-api// Log API events to the logfile, default is off.  --log-api implies --log.//// --log-code// Log code (create, move, and delete) events to the logfile, default is off.// --log-code implies --log.//// --log-gc// Log GC heap samples after each GC that can be processed by hp2ps, default// is off.  --log-gc implies --log.//// --log-regexp// Log creation and use of regular expressions, Default is off.// --log-regexp implies --log.//// --logfile <filename>// Specify the name of the logfile, default is "v8.log".//// --prof// Collect statistical profiling information (ticks), default is off.  The// tick profiler requires code events, so --prof implies --log-code.// Forward declarations.class Ticker;class Profiler;class Semaphore;class SlidingStateWindow;#undef LOG#ifdef ENABLE_LOGGING_AND_PROFILING#define LOG(Call) v8::internal::Logger::Call#else#define LOG(Call) ((void) 0)#endifclass VMState {#ifdef ENABLE_LOGGING_AND_PROFILING public:  explicit VMState(StateTag state);  ~VMState();  StateTag state() { return state_; } private:  StateTag state_;  VMState* previous_;#else public:  explicit VMState(StateTag state) {}#endif};class Logger { public:  // Opens the file for logging if the right flags are set.  static bool Setup();  // Closes file opened in Setup.  static void TearDown();  // Enable the computation of a sliding window of states.  static void EnableSlidingStateWindow();  // Write a raw string to the log to be used as a preamble.  // No check is made that the 'preamble' is actually at the beginning  // of the log.  static void Preamble(const char* content);  // ==== Events that are always logged. ====  // Emits an event with a string value -> (name, value).  static void StringEvent(const char* name, const char* value);  // Emits an event with an int value -> (name, value).  static void IntEvent(const char* name, int value);  // Emits an event with an handle value -> (name, location).  static void HandleEvent(const char* name, Object** location);  // Emits memory management events for C allocated structures.  static void NewEvent(const char* name, void* object, size_t size);  static void DeleteEvent(const char* name, void* object);  // Emits an event with a tag, and some resource usage information.  // -> (name, tag, <rusage information>).  // Currently, the resource usage information is a process time stamp  // and a real time timestamp.  static void ResourceEvent(const char* name, const char* tag);  // Emits an event that an undefined property was read from an  // object.  static void SuspectReadEvent(String* name, String* obj);  // Emits an event when a message is put on or read from a debugging queue.  // DebugTag lets us put a call-site specific label on the event.  static void DebugTag(const char* call_site_tag);  static void DebugEvent(const char* event_type, Vector<uint16_t> parameter);  // ==== Events logged by --log-api. ====  static void ApiNamedSecurityCheck(Object* key);  static void ApiIndexedSecurityCheck(uint32_t index);  static void ApiNamedPropertyAccess(const char* tag,                                     JSObject* holder,                                     Object* name);  static void ApiIndexedPropertyAccess(const char* tag,                                       JSObject* holder,                                       uint32_t index);  static void ApiObjectAccess(const char* tag, JSObject* obj);  static void ApiEntryCall(const char* name);  // ==== Events logged by --log-code. ====  // Emits a code create event.  static void CodeCreateEvent(const char* tag, Code* code, const char* source);  static void CodeCreateEvent(const char* tag, Code* code, String* name);  static void CodeCreateEvent(const char* tag, Code* code, int args_count);  // Emits a code move event.  static void CodeMoveEvent(Address from, Address to);  // Emits a code delete event.  static void CodeDeleteEvent(Address from);  // ==== Events logged by --log-gc. ====  // Heap sampling events: start, end, and individual types.  static void HeapSampleBeginEvent(const char* space, const char* kind);  static void HeapSampleEndEvent(const char* space, const char* kind);  static void HeapSampleItemEvent(const char* type, int number, int bytes);  static void SharedLibraryEvent(const char* library_path,                                 unsigned start,                                 unsigned end);  static void SharedLibraryEvent(const wchar_t* library_path,                                 unsigned start,                                 unsigned end);  // ==== Events logged by --log-regexp ====  // Regexp compilation and execution events.  static void RegExpCompileEvent(Handle<JSRegExp> regexp);  static void RegExpExecEvent(Handle<JSRegExp> regexp,                              int start_index,                              Handle<String> input_string);#ifdef ENABLE_LOGGING_AND_PROFILING  static StateTag state() {    return current_state_ ? current_state_->state() : OTHER;  }#endif#ifdef ENABLE_LOGGING_AND_PROFILING private:  // Emits the source code of a regexp. Used by regexp events.  static void LogRegExpSource(Handle<JSRegExp> regexp);  // Emits a profiler tick event. Used by the profiler thread.  static void TickEvent(TickSample* sample, bool overflow);  static void ApiEvent(const char* name, ...);  // When logging is active, logfile_ refers the file  // events are written to.  static FILE* logfile_;  // The sampler used by the profiler and the sliding state window.  static Ticker* ticker_;  // When the statistical profile is active, profiler_  // points to a Profiler, that handles collection  // of samples.  static Profiler* profiler_;  // mutex_ is a Mutex used for enforcing exclusive  // access to the log file.  static Mutex* mutex_;  // A stack of VM states.  static VMState* current_state_;  // SlidingStateWindow instance keeping a sliding window of the most  // recent VM states.  static SlidingStateWindow* sliding_state_window_;  // Internal implementation classes with access to  // private members.  friend class EventLog;  friend class TimeLog;  friend class Profiler;  friend class SlidingStateWindow;  friend class VMState;#endif};} }  // namespace v8::internal#endif  // V8_LOG_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -