Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/trace_event/memory_profiler_allocation_context.h" | 5 #include "base/trace_event/memory_profiler_allocation_context.h" |
| 6 | 6 |
| 7 #include "base/threading/thread_local_storage.h" | 7 #include "base/threading/thread_local_storage.h" |
| 8 | 8 |
| 9 namespace base { | 9 namespace base { |
| 10 namespace trace_event { | 10 namespace trace_event { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 68 auto tracker = AllocationContextTracker::GetThreadLocalTracker(); | 68 auto tracker = AllocationContextTracker::GetThreadLocalTracker(); |
| 69 tracker->context_[key] = value; | 69 tracker->context_[key] = value; |
| 70 } | 70 } |
| 71 | 71 |
| 72 // static | 72 // static |
| 73 void AllocationContextTracker::UnsetContextField(const char* key) { | 73 void AllocationContextTracker::UnsetContextField(const char* key) { |
| 74 auto tracker = AllocationContextTracker::GetThreadLocalTracker(); | 74 auto tracker = AllocationContextTracker::GetThreadLocalTracker(); |
| 75 tracker->context_.erase(key); | 75 tracker->context_.erase(key); |
| 76 } | 76 } |
| 77 | 77 |
| 78 // static | 78 // Returns a pointer past the end of the fixed-size array |array| of |T| of |
| 79 AllocationStack* AllocationContextTracker::GetPseudoStackForTesting() { | 79 // length |N|, identical to C++11 |std::end|. |
| 80 auto tracker = AllocationContextTracker::GetThreadLocalTracker(); | 80 template <typename T, int N> |
| 81 return &tracker->pseudo_stack_; | 81 const T* End(const T(&array)[N]) { |
| 82 return array + N; | |
| 82 } | 83 } |
| 83 | 84 |
| 84 // static | 85 // static |
| 85 AllocationContext AllocationContextTracker::GetContext() { | 86 AllocationContext AllocationContextTracker::GetContext() { |
| 86 // TODO(ruuda): Implement this in a follow-up CL. | 87 auto tracker = GetThreadLocalTracker(); |
| 87 return AllocationContext(); | 88 AllocationContext ctx; |
| 89 | |
| 90 // Fill the backtrace. | |
| 91 { | |
| 92 auto src = tracker->pseudo_stack_.top(); | |
| 93 auto dst = ctx.backtrace; | |
| 94 auto src_end = tracker->pseudo_stack_.bottom(); | |
| 95 auto dst_end = End(ctx.backtrace); | |
| 96 | |
| 97 // Copy as much of the top of the pseudo stack into the backtrace as | |
| 98 // possible. | |
| 99 for (; src != src_end && dst != dst_end; src++, dst++) | |
| 100 *dst = *src; | |
| 101 | |
| 102 // If there is room for more, fill the remaining slots with empty frames. | |
| 103 for (; dst != dst_end; dst++) | |
| 104 *dst = nullptr; | |
|
picksi
2015/09/25 09:44:35
Q:Is the performance overhead for clearing all the
Ruud van Asseldonk
2015/09/25 11:46:19
It would, but I am not sure how that would affect
picksi
2015/09/25 12:31:26
No, leave it as it is! You make some good points :
| |
| 105 } | |
| 106 | |
| 107 // Fill the context fields. | |
| 108 { | |
| 109 auto src = tracker->context_.begin(); | |
| 110 auto dst = ctx.fields; | |
| 111 auto src_end = tracker->context_.end(); | |
| 112 auto dst_end = End(ctx.fields); | |
| 113 | |
| 114 // Copy as much (key, value) pairs as possible. | |
| 115 for (; src != src_end && dst != dst_end; src++, dst++) | |
| 116 *dst = *src; | |
|
picksi
2015/09/25 09:44:35
nit: This code is duplicated from 99-100, should i
Ruud van Asseldonk
2015/09/25 11:46:19
Ideally there would be an |std::copy| that copies
| |
| 117 | |
| 118 // If there is room for more, fill the remaining slots with nullptr keys. | |
| 119 for (; dst != dst_end; dst++) | |
| 120 dst->first = nullptr; | |
| 121 } | |
| 122 | |
| 123 return ctx; | |
| 88 } | 124 } |
| 89 | 125 |
| 90 } // namespace trace_event | 126 } // namespace trace_event |
| 91 } // namespace base | 127 } // namespace base |
| OLD | NEW |