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

Unified Diff: src/cpu-profiler.h

Issue 1582004: C++ profiles processor: wire up to VM. (Closed)
Patch Set: Created 10 years, 9 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') | src/platform-linux.cc » ('J')
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
index 42d5d0abd32f22a784968e249babf6fec3bb1e23..864df78ea3fbe9ca12bd3e76af4f57905425bd1a 100644
--- a/src/cpu-profiler.h
+++ b/src/cpu-profiler.h
@@ -31,11 +31,18 @@
#ifdef ENABLE_CPP_PROFILES_PROCESSOR
#include "circular-queue.h"
-#include "profile-generator.h"
namespace v8 {
namespace internal {
+// Forward declarations.
+class CodeEntry;
+class CodeMap;
+class CpuProfile;
+class CpuProfilesCollection;
+class ProfileGenerator;
+
+
#define CODE_EVENTS_TYPE_LIST(V) \
V(CODE_CREATION, CodeCreateEventRecord) \
V(CODE_MOVE, CodeMoveEventRecord) \
@@ -64,9 +71,7 @@ class CodeCreateEventRecord : public CodeEventRecord {
CodeEntry* entry;
unsigned size;
- INLINE(void UpdateCodeMap(CodeMap* code_map)) {
- code_map->AddCode(start, entry, size);
- }
+ INLINE(void UpdateCodeMap(CodeMap* code_map));
};
@@ -75,9 +80,7 @@ class CodeMoveEventRecord : public CodeEventRecord {
Address from;
Address to;
- INLINE(void UpdateCodeMap(CodeMap* code_map)) {
- code_map->MoveCode(from, to);
- }
+ INLINE(void UpdateCodeMap(CodeMap* code_map));
};
@@ -85,9 +88,7 @@ class CodeDeleteEventRecord : public CodeEventRecord {
public:
Address start;
- INLINE(void UpdateCodeMap(CodeMap* code_map)) {
- code_map->DeleteCode(start);
- }
+ INLINE(void UpdateCodeMap(CodeMap* code_map));
};
@@ -96,9 +97,7 @@ class CodeAliasEventRecord : public CodeEventRecord {
Address alias;
Address start;
- INLINE(void UpdateCodeMap(CodeMap* code_map)) {
- code_map->AddAlias(alias, start);
- }
+ INLINE(void UpdateCodeMap(CodeMap* code_map));
};
@@ -133,6 +132,9 @@ class ProfilerEventsProcessor : public Thread {
INLINE(bool running()) { return running_; }
// Events adding methods. Called by VM threads.
+ void CallbackCreateEvent(Logger::LogEventsAndTags tag,
+ const char* prefix, String* name,
+ Address start);
void CodeCreateEvent(Logger::LogEventsAndTags tag,
String* name,
String* resource_name, int line_number,
@@ -176,6 +178,91 @@ class ProfilerEventsProcessor : public Thread {
} } // namespace v8::internal
+
+#define PROFILE(Call) \
+ LOG(Call); \
+ do { \
+ if (v8::internal::CpuProfiler::is_profiling()) { \
+ v8::internal::CpuProfiler::Call; \
+ } \
+ } while (false)
+#else
+#define PROFILE(Call) LOG(Call)
+#endif // ENABLE_CPP_PROFILES_PROCESSOR
+
+
+namespace v8 {
+namespace internal {
+
+class CpuProfiler {
+ public:
+ static void Setup();
+ static void TearDown();
+
+#ifdef ENABLE_CPP_PROFILES_PROCESSOR
+ static void StartProfiling(const char* title);
+ static void StartProfiling(String* title);
+ static CpuProfile* StopProfiling(const char* title);
+ static CpuProfile* StopProfiling(String* title);
+ static int GetProfilesCount();
+ static CpuProfile* GetProfile(int index);
+ static CpuProfile* FindProfile(unsigned uid);
+
+ // Invoked from stack sampler (thread or signal handler.)
+ static TickSample* TickSampleEvent();
+
+ // Must be called via PROFILE macro, otherwise will crash when
+ // profiling is not enabled.
+ static void CallbackEvent(String* name, Address entry_point);
+ static void CodeCreateEvent(Logger::LogEventsAndTags tag,
+ Code* code, const char* comment);
+ static void CodeCreateEvent(Logger::LogEventsAndTags tag,
+ Code* code, String* name);
+ static void CodeCreateEvent(Logger::LogEventsAndTags tag,
+ Code* code, String* name,
+ String* source, int line);
+ static void CodeCreateEvent(Logger::LogEventsAndTags tag,
+ Code* code, int args_count);
+ static void CodeMoveEvent(Address from, Address to);
+ static void CodeDeleteEvent(Address from);
+ static void FunctionCreateEvent(JSFunction* function);
+ static void FunctionMoveEvent(Address from, Address to);
+ static void FunctionDeleteEvent(Address from);
+ static void GetterCallbackEvent(String* name, Address entry_point);
+ static void RegExpCodeCreateEvent(Code* code, String* source);
+ static void SetterCallbackEvent(String* name, Address entry_point);
+
+ static INLINE(bool is_profiling()) {
+ ASSERT(singleton_ != NULL);
+ return singleton_->processor_ != NULL;
+ }
+
+ private:
+ CpuProfiler();
+ ~CpuProfiler();
+ void StartCollectingProfile(const char* title);
+ void StartCollectingProfile(String* title);
+ void StartProcessorIfNotStarted();
+ CpuProfile* StopCollectingProfile(const char* title);
+ CpuProfile* StopCollectingProfile(String* title);
+ void StopProcessorIfLastProfile();
+
+ CpuProfilesCollection* profiles_;
+ unsigned next_profile_uid_;
+ ProfileGenerator* generator_;
+ ProfilerEventsProcessor* processor_;
+
+ static CpuProfiler* singleton_;
+
+#else
+ static INLINE(bool is_profiling()) { return false; }
#endif // ENABLE_CPP_PROFILES_PROCESSOR
+ private:
+ 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') | src/platform-linux.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698