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

Unified Diff: src/cpu-profiler.h

Issue 1356223004: Move heap and CPU profilers into a dedicated directory. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebaseline 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
« no previous file with comments | « src/compiler.cc ('k') | src/cpu-profiler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/cpu-profiler.h
diff --git a/src/cpu-profiler.h b/src/cpu-profiler.h
deleted file mode 100644
index 7619a1ef6db009010dc36b325a3752f8a0c16cd0..0000000000000000000000000000000000000000
--- a/src/cpu-profiler.h
+++ /dev/null
@@ -1,276 +0,0 @@
-// Copyright 2012 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef V8_CPU_PROFILER_H_
-#define V8_CPU_PROFILER_H_
-
-#include "src/allocation.h"
-#include "src/base/atomicops.h"
-#include "src/base/platform/time.h"
-#include "src/circular-queue.h"
-#include "src/compiler.h"
-#include "src/sampler.h"
-#include "src/unbound-queue.h"
-
-namespace v8 {
-namespace internal {
-
-// Forward declarations.
-class CodeEntry;
-class CodeMap;
-class CompilationInfo;
-class CpuProfile;
-class CpuProfilesCollection;
-class ProfileGenerator;
-
-#define CODE_EVENTS_TYPE_LIST(V) \
- V(CODE_CREATION, CodeCreateEventRecord) \
- V(CODE_MOVE, CodeMoveEventRecord) \
- V(CODE_DISABLE_OPT, CodeDisableOptEventRecord) \
- V(CODE_DEOPT, CodeDeoptEventRecord) \
- V(REPORT_BUILTIN, ReportBuiltinEventRecord)
-
-
-class CodeEventRecord {
- public:
-#define DECLARE_TYPE(type, ignore) type,
- enum Type {
- NONE = 0,
- CODE_EVENTS_TYPE_LIST(DECLARE_TYPE)
- NUMBER_OF_TYPES
- };
-#undef DECLARE_TYPE
-
- Type type;
- mutable unsigned order;
-};
-
-
-class CodeCreateEventRecord : public CodeEventRecord {
- public:
- Address start;
- CodeEntry* entry;
- unsigned size;
-
- INLINE(void UpdateCodeMap(CodeMap* code_map));
-};
-
-
-class CodeMoveEventRecord : public CodeEventRecord {
- public:
- Address from;
- Address to;
-
- INLINE(void UpdateCodeMap(CodeMap* code_map));
-};
-
-
-class CodeDisableOptEventRecord : public CodeEventRecord {
- public:
- Address start;
- const char* bailout_reason;
-
- INLINE(void UpdateCodeMap(CodeMap* code_map));
-};
-
-
-class CodeDeoptEventRecord : public CodeEventRecord {
- public:
- Address start;
- const char* deopt_reason;
- SourcePosition position;
- size_t pc_offset;
-
- INLINE(void UpdateCodeMap(CodeMap* code_map));
-};
-
-
-class ReportBuiltinEventRecord : public CodeEventRecord {
- public:
- Address start;
- Builtins::Name builtin_id;
-
- INLINE(void UpdateCodeMap(CodeMap* code_map));
-};
-
-
-class TickSampleEventRecord {
- public:
- // The parameterless constructor is used when we dequeue data from
- // the ticks buffer.
- TickSampleEventRecord() { }
- explicit TickSampleEventRecord(unsigned order) : order(order) { }
-
- unsigned order;
- TickSample sample;
-};
-
-
-class CodeEventsContainer {
- public:
- explicit CodeEventsContainer(
- CodeEventRecord::Type type = CodeEventRecord::NONE) {
- generic.type = type;
- }
- union {
- CodeEventRecord generic;
-#define DECLARE_CLASS(ignore, type) type type##_;
- CODE_EVENTS_TYPE_LIST(DECLARE_CLASS)
-#undef DECLARE_TYPE
- };
-};
-
-
-// This class implements both the profile events processor thread and
-// methods called by event producers: VM and stack sampler threads.
-class ProfilerEventsProcessor : public base::Thread {
- public:
- ProfilerEventsProcessor(ProfileGenerator* generator,
- Sampler* sampler,
- base::TimeDelta period);
- virtual ~ProfilerEventsProcessor();
-
- // Thread control.
- virtual void Run();
- void StopSynchronously();
- INLINE(bool running()) { return !!base::NoBarrier_Load(&running_); }
- void Enqueue(const CodeEventsContainer& event);
-
- // Puts current stack into tick sample events buffer.
- void AddCurrentStack(Isolate* isolate);
- void AddDeoptStack(Isolate* isolate, Address from, int fp_to_sp_delta);
-
- // Tick sample events are filled directly in the buffer of the circular
- // queue (because the structure is of fixed width, but usually not all
- // stack frame entries are filled.) This method returns a pointer to the
- // next record of the buffer.
- inline TickSample* StartTickSample();
- inline void FinishTickSample();
-
- // SamplingCircularQueue has stricter alignment requirements than a normal new
- // can fulfil, so we need to provide our own new/delete here.
- void* operator new(size_t size);
- void operator delete(void* ptr);
-
- private:
- // Called from events processing thread (Run() method.)
- bool ProcessCodeEvent();
-
- enum SampleProcessingResult {
- OneSampleProcessed,
- FoundSampleForNextCodeEvent,
- NoSamplesInQueue
- };
- SampleProcessingResult ProcessOneSample();
-
- ProfileGenerator* generator_;
- Sampler* sampler_;
- base::Atomic32 running_;
- // Sampling period in microseconds.
- const base::TimeDelta period_;
- UnboundQueue<CodeEventsContainer> events_buffer_;
- static const size_t kTickSampleBufferSize = 1 * MB;
- static const size_t kTickSampleQueueLength =
- kTickSampleBufferSize / sizeof(TickSampleEventRecord);
- SamplingCircularQueue<TickSampleEventRecord,
- kTickSampleQueueLength> ticks_buffer_;
- UnboundQueue<TickSampleEventRecord> ticks_from_vm_buffer_;
- unsigned last_code_event_id_;
- unsigned last_processed_code_event_id_;
-};
-
-
-#define PROFILE(IsolateGetter, Call) \
- do { \
- Isolate* cpu_profiler_isolate = (IsolateGetter); \
- v8::internal::Logger* logger = cpu_profiler_isolate->logger(); \
- CpuProfiler* cpu_profiler = cpu_profiler_isolate->cpu_profiler(); \
- if (logger->is_logging_code_events() || cpu_profiler->is_profiling()) { \
- logger->Call; \
- } \
- } while (false)
-
-
-class CpuProfiler : public CodeEventListener {
- public:
- explicit CpuProfiler(Isolate* isolate);
-
- CpuProfiler(Isolate* isolate,
- CpuProfilesCollection* test_collection,
- ProfileGenerator* test_generator,
- ProfilerEventsProcessor* test_processor);
-
- virtual ~CpuProfiler();
-
- void set_sampling_interval(base::TimeDelta value);
- void StartProfiling(const char* title, bool record_samples = false);
- void StartProfiling(String* title, bool record_samples);
- CpuProfile* StopProfiling(const char* title);
- CpuProfile* StopProfiling(String* title);
- int GetProfilesCount();
- CpuProfile* GetProfile(int index);
- void DeleteAllProfiles();
- void DeleteProfile(CpuProfile* profile);
-
- // Invoked from stack sampler (thread or signal handler.)
- inline TickSample* StartTickSample();
- inline void FinishTickSample();
-
- // Must be called via PROFILE macro, otherwise will crash when
- // profiling is not enabled.
- virtual void CallbackEvent(Name* name, Address entry_point);
- virtual void CodeCreateEvent(Logger::LogEventsAndTags tag,
- Code* code, const char* comment);
- virtual void CodeCreateEvent(Logger::LogEventsAndTags tag,
- Code* code, Name* name);
- virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, Code* code,
- SharedFunctionInfo* shared,
- CompilationInfo* info, Name* script_name);
- virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, Code* code,
- SharedFunctionInfo* shared,
- CompilationInfo* info, Name* script_name,
- int line, int column);
- virtual void CodeCreateEvent(Logger::LogEventsAndTags tag,
- Code* code, int args_count);
- virtual void CodeMovingGCEvent() {}
- virtual void CodeMoveEvent(Address from, Address to);
- virtual void CodeDisableOptEvent(Code* code, SharedFunctionInfo* shared);
- virtual void CodeDeoptEvent(Code* code, Address pc, int fp_to_sp_delta);
- virtual void CodeDeleteEvent(Address from);
- virtual void GetterCallbackEvent(Name* name, Address entry_point);
- virtual void RegExpCodeCreateEvent(Code* code, String* source);
- virtual void SetterCallbackEvent(Name* name, Address entry_point);
- virtual void SharedFunctionInfoMoveEvent(Address from, Address to) {}
-
- INLINE(bool is_profiling() const) { return is_profiling_; }
- bool* is_profiling_address() {
- return &is_profiling_;
- }
-
- ProfileGenerator* generator() const { return generator_; }
- ProfilerEventsProcessor* processor() const { return processor_; }
- Isolate* isolate() const { return isolate_; }
-
- private:
- void StartProcessorIfNotStarted();
- void StopProcessorIfLastProfile(const char* title);
- void StopProcessor();
- void ResetProfiles();
- void LogBuiltins();
-
- Isolate* isolate_;
- base::TimeDelta sampling_interval_;
- CpuProfilesCollection* profiles_;
- ProfileGenerator* generator_;
- ProfilerEventsProcessor* processor_;
- bool saved_is_logging_;
- bool is_profiling_;
-
- DISALLOW_COPY_AND_ASSIGN(CpuProfiler);
-};
-
-} } // namespace v8::internal
-
-
-#endif // V8_CPU_PROFILER_H_
« no previous file with comments | « src/compiler.cc ('k') | src/cpu-profiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698