| Index: src/cpu-profiler.h
|
| diff --git a/src/cpu-profiler.h b/src/cpu-profiler.h
|
| index 4d5559e4febdc9de02a7ca105e007347a6686170..86f9f6711f9f21713130f24fcdea3e61149112ef 100644
|
| --- a/src/cpu-profiler.h
|
| +++ b/src/cpu-profiler.h
|
| @@ -41,6 +41,7 @@ class CodeEntry;
|
| class CodeMap;
|
| class CpuProfile;
|
| class CpuProfilesCollection;
|
| +class HashMap;
|
| class ProfileGenerator;
|
| class TokenEnumerator;
|
|
|
| @@ -132,7 +133,7 @@ class TickSampleEventRecord BASE_EMBEDDED {
|
| class ProfilerEventsProcessor : public Thread {
|
| public:
|
| explicit ProfilerEventsProcessor(ProfileGenerator* generator);
|
| - virtual ~ProfilerEventsProcessor() { }
|
| + virtual ~ProfilerEventsProcessor();
|
|
|
| // Thread control.
|
| virtual void Run();
|
| @@ -163,6 +164,7 @@ class ProfilerEventsProcessor : public Thread {
|
| Address start, unsigned size);
|
| // Puts current stack into tick sample events buffer.
|
| void AddCurrentStack();
|
| + bool IsKnownFunction(Address start);
|
|
|
| // Tick sample events are filled directly in the buffer of the circular
|
| // queue (because the structure is of fixed width, but usually not all
|
| @@ -183,6 +185,13 @@ class ProfilerEventsProcessor : public Thread {
|
| bool ProcessTicks(unsigned dequeue_order);
|
|
|
| INLINE(static bool FilterOutCodeCreateEvent(Logger::LogEventsAndTags tag));
|
| + INLINE(static bool AddressesMatch(void* key1, void* key2)) {
|
| + return key1 == key2;
|
| + }
|
| + INLINE(static uint32_t AddressHash(Address addr)) {
|
| + return ComputeIntegerHash(
|
| + static_cast<uint32_t>(reinterpret_cast<uintptr_t>(addr)));
|
| + }
|
|
|
| ProfileGenerator* generator_;
|
| bool running_;
|
| @@ -190,6 +199,9 @@ class ProfilerEventsProcessor : public Thread {
|
| SamplingCircularQueue ticks_buffer_;
|
| UnboundQueue<TickSampleEventRecord> ticks_from_vm_buffer_;
|
| unsigned enqueue_order_;
|
| +
|
| + // Used from the VM thread.
|
| + HashMap* known_functions_;
|
| };
|
|
|
| } } // namespace v8::internal
|
| @@ -242,6 +254,10 @@ class CpuProfiler {
|
| static void CodeMoveEvent(Address from, Address to);
|
| static void CodeDeleteEvent(Address from);
|
| static void FunctionCreateEvent(JSFunction* function);
|
| + // Reports function creation in case we had missed it (e.g.
|
| + // if it was created from compiled code).
|
| + static void FunctionCreateEventFromMove(JSFunction* function,
|
| + HeapObject* source);
|
| static void FunctionMoveEvent(Address from, Address to);
|
| static void FunctionDeleteEvent(Address from);
|
| static void GetterCallbackEvent(String* name, Address entry_point);
|
|
|