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

Unified Diff: src/profiler/sampling-heap-profiler.h

Issue 1697903002: Sampling heap profiler data structure changes (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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 | « no previous file | src/profiler/sampling-heap-profiler.cc » ('j') | src/profiler/sampling-heap-profiler.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/profiler/sampling-heap-profiler.h
diff --git a/src/profiler/sampling-heap-profiler.h b/src/profiler/sampling-heap-profiler.h
index 1f98bec849f80f7f068c8e903d6b6b8e190f79e2..4816af085e172422b4f91c09b0d2665d47e5f0d9 100644
--- a/src/profiler/sampling-heap-profiler.h
+++ b/src/profiler/sampling-heap-profiler.h
@@ -69,29 +69,36 @@ class SamplingHeapProfiler {
const int start_position_;
};
- class SampledAllocation {
+ class AllocationNode;
+
+ struct Sample {
+ size_t size;
+ AllocationNode* owner;
+ Global<Value>* global;
ofrobots 2016/02/14 23:57:42 It is more idiomatic to keep Globals (and Locals a
mattloring 2016/02/16 05:28:40 Globals are held by value now. How does DISALLOW_C
+ };
+
+ class AllocationNode {
public:
- SampledAllocation(SamplingHeapProfiler* sampling_heap_profiler,
- Isolate* isolate, Local<Value> local, size_t size,
- int max_frames);
- ~SampledAllocation() {
- for (auto info : stack_) {
- delete info;
+ explicit AllocationNode(FunctionInfo* info)
+ : script_id_(info->get_script_id()),
+ script_position_(info->get_start_position()),
+ name_(info->get_name()) {}
+ ~AllocationNode() {
+ for (auto child : children_) {
+ delete child;
}
- global_.Reset(); // drop the reference.
}
- size_t get_size() const { return size_; }
- const std::vector<FunctionInfo*>& get_stack() const { return stack_; }
private:
- static void OnWeakCallback(const WeakCallbackInfo<SampledAllocation>& data);
+ std::map<size_t, unsigned int> allocations_;
+ std::vector<AllocationNode*> children_;
+ int script_id_;
+ int script_position_;
+ const char* name_;
- SamplingHeapProfiler* const sampling_heap_profiler_;
- Global<Value> global_;
- std::vector<FunctionInfo*> stack_;
- const size_t size_;
+ friend class SamplingHeapProfiler;
- DISALLOW_COPY_AND_ASSIGN(SampledAllocation);
+ DISALLOW_COPY_AND_ASSIGN(AllocationNode);
};
private:
@@ -99,23 +106,23 @@ class SamplingHeapProfiler {
void SampleObject(Address soon_object, size_t size);
+ static void OnWeakCallback(const WeakCallbackInfo<Sample>& data);
+
// Methods that construct v8::AllocationProfile.
- v8::AllocationProfile::Node* AddStack(
- AllocationProfile* profile, const std::map<int, Script*>& scripts,
- const std::vector<FunctionInfo*>& stack);
- v8::AllocationProfile::Node* FindOrAddChildNode(
- AllocationProfile* profile, const std::map<int, Script*>& scripts,
- v8::AllocationProfile::Node* parent, FunctionInfo* function_info);
- v8::AllocationProfile::Node* AllocateNode(
- AllocationProfile* profile, const std::map<int, Script*>& scripts,
- FunctionInfo* function_info);
+ v8::AllocationProfile::Node* GenerateProfile(
+ AllocationProfile* profile, SamplingHeapProfiler::AllocationNode* node,
+ const std::map<int, Script*>& scripts);
+ AllocationNode* AddStack(const std::vector<FunctionInfo*>& stack);
+ std::vector<FunctionInfo*> CollectStack(int max_frames);
+ AllocationNode* FindOrAddChildNode(AllocationNode* parent,
+ FunctionInfo* function_info);
Isolate* const isolate_;
Heap* const heap_;
base::SmartPointer<SamplingAllocationObserver> new_space_observer_;
base::SmartPointer<SamplingAllocationObserver> other_spaces_observer_;
StringsStorage* const names_;
- std::set<SampledAllocation*> samples_;
+ AllocationNode* profile_root_;
const int stack_depth_;
friend class SamplingAllocationObserver;
« no previous file with comments | « no previous file | src/profiler/sampling-heap-profiler.cc » ('j') | src/profiler/sampling-heap-profiler.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698