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

Side by Side Diff: runtime/vm/profiler.h

Issue 1199473003: Add storage of class id and state bit to the profiler's Sample (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 6 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 unified diff | Download patch
« no previous file with comments | « no previous file | runtime/vm/profiler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_PROFILER_H_ 5 #ifndef VM_PROFILER_H_
6 #define VM_PROFILER_H_ 6 #define VM_PROFILER_H_
7 7
8 #include "vm/allocation.h" 8 #include "vm/allocation.h"
9 #include "vm/bitfield.h" 9 #include "vm/bitfield.h"
10 #include "vm/code_observers.h" 10 #include "vm/code_observers.h"
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 } 152 }
153 153
154 void Clear() { 154 void Clear() {
155 isolate_ = NULL; 155 isolate_ = NULL;
156 pc_marker_ = 0; 156 pc_marker_ = 0;
157 for (intptr_t i = 0; i < kStackBufferSizeInWords; i++) { 157 for (intptr_t i = 0; i < kStackBufferSizeInWords; i++) {
158 stack_buffer_[i] = 0; 158 stack_buffer_[i] = 0;
159 } 159 }
160 vm_tag_ = VMTag::kInvalidTagId; 160 vm_tag_ = VMTag::kInvalidTagId;
161 user_tag_ = UserTags::kDefaultUserTag; 161 user_tag_ = UserTags::kDefaultUserTag;
162 sp_ = 0;
163 lr_ = 0; 162 lr_ = 0;
164 fp_ = 0; 163 metadata_ = 0;
165 state_ = 0; 164 state_ = 0;
166 uword* pcs = GetPCArray(); 165 uword* pcs = GetPCArray();
167 for (intptr_t i = 0; i < pcs_length_; i++) { 166 for (intptr_t i = 0; i < pcs_length_; i++) {
168 pcs[i] = 0; 167 pcs[i] = 0;
169 } 168 }
170 } 169 }
171 170
172 // Timestamp sample was taken at. 171 // Timestamp sample was taken at.
173 int64_t timestamp() const { 172 int64_t timestamp() const {
174 return timestamp_; 173 return timestamp_;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 } 210 }
212 211
213 uword pc_marker() const { 212 uword pc_marker() const {
214 return pc_marker_; 213 return pc_marker_;
215 } 214 }
216 215
217 void set_pc_marker(uword pc_marker) { 216 void set_pc_marker(uword pc_marker) {
218 pc_marker_ = pc_marker; 217 pc_marker_ = pc_marker;
219 } 218 }
220 219
221 uword sp() const {
222 return sp_;
223 }
224
225 void set_sp(uword sp) {
226 sp_ = sp;
227 }
228
229 uword fp() const {
230 return fp_;
231 }
232
233 void set_fp(uword fp) {
234 fp_ = fp;
235 }
236
237 uword lr() const { 220 uword lr() const {
238 return lr_; 221 return lr_;
239 } 222 }
240 223
241 void set_lr(uword link_register) { 224 void set_lr(uword link_register) {
242 lr_ = link_register; 225 lr_ = link_register;
243 } 226 }
244 227
245 void InsertCallerForTopFrame(uword pc) { 228 void InsertCallerForTopFrame(uword pc) {
246 if (pcs_length_ == 1) { 229 if (pcs_length_ == 1) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 } 282 }
300 283
301 bool truncated_trace() const { 284 bool truncated_trace() const {
302 return TruncatedTraceBit::decode(state_); 285 return TruncatedTraceBit::decode(state_);
303 } 286 }
304 287
305 void set_truncated_trace(bool truncated_trace) { 288 void set_truncated_trace(bool truncated_trace) {
306 state_ = TruncatedTraceBit::update(truncated_trace, state_); 289 state_ = TruncatedTraceBit::update(truncated_trace, state_);
307 } 290 }
308 291
292 bool is_allocation_sample() const {
293 return ClassAllocationSampleBit::decode(state_);
294 }
295
296 void set_is_allocation_sample(bool allocation_sample) {
297 state_ = ClassAllocationSampleBit::update(allocation_sample, state_);
298 }
299
300 intptr_t allocation_cid() const {
301 ASSERT(is_allocation_sample());
302 return metadata_;
303 }
304
305 void set_metadata(intptr_t metadata) {
306 metadata_ = metadata;
307 }
308
309 static void InitOnce(); 309 static void InitOnce();
310 310
311 static intptr_t instance_size() { 311 static intptr_t instance_size() {
312 return instance_size_; 312 return instance_size_;
313 } 313 }
314 314
315 uword* GetPCArray() const; 315 uword* GetPCArray() const;
316 316
317 static const int kStackBufferSizeInWords = 2; 317 static const int kStackBufferSizeInWords = 2;
318 uword* GetStackBuffer() { 318 uword* GetStackBuffer() {
319 return &stack_buffer_[0]; 319 return &stack_buffer_[0];
320 } 320 }
321 321
322 private: 322 private:
323 static intptr_t instance_size_; 323 static intptr_t instance_size_;
324 static intptr_t pcs_length_; 324 static intptr_t pcs_length_;
325 enum StateBits { 325 enum StateBits {
326 kProcessedBit = 0, 326 kProcessedBit = 0,
327 kLeafFrameIsDartBit = 1, 327 kLeafFrameIsDartBit = 1,
328 kIgnoreBit = 2, 328 kIgnoreBit = 2,
329 kExitFrameBit = 3, 329 kExitFrameBit = 3,
330 kMissingFrameInsertedBit = 4, 330 kMissingFrameInsertedBit = 4,
331 kTruncatedTrace = 5, 331 kTruncatedTrace = 5,
332 kClassAllocationSample = 6,
332 }; 333 };
333 class ProcessedBit : public BitField<bool, kProcessedBit, 1> {}; 334 class ProcessedBit : public BitField<bool, kProcessedBit, 1> {};
334 class LeafFrameIsDart : public BitField<bool, kLeafFrameIsDartBit, 1> {}; 335 class LeafFrameIsDart : public BitField<bool, kLeafFrameIsDartBit, 1> {};
335 class IgnoreBit : public BitField<bool, kIgnoreBit, 1> {}; 336 class IgnoreBit : public BitField<bool, kIgnoreBit, 1> {};
336 class ExitFrameBit : public BitField<bool, kExitFrameBit, 1> {}; 337 class ExitFrameBit : public BitField<bool, kExitFrameBit, 1> {};
337 class MissingFrameInsertedBit 338 class MissingFrameInsertedBit
338 : public BitField<bool, kMissingFrameInsertedBit, 1> {}; 339 : public BitField<bool, kMissingFrameInsertedBit, 1> {};
339 class TruncatedTraceBit : public BitField<bool, kTruncatedTrace, 1> {}; 340 class TruncatedTraceBit : public BitField<bool, kTruncatedTrace, 1> {};
341 class ClassAllocationSampleBit
342 : public BitField<bool, kClassAllocationSample, 1> {};
340 343
341 int64_t timestamp_; 344 int64_t timestamp_;
342 ThreadId tid_; 345 ThreadId tid_;
343 Isolate* isolate_; 346 Isolate* isolate_;
344 uword pc_marker_; 347 uword pc_marker_;
345 uword stack_buffer_[kStackBufferSizeInWords]; 348 uword stack_buffer_[kStackBufferSizeInWords];
346 uword vm_tag_; 349 uword vm_tag_;
347 uword user_tag_; 350 uword user_tag_;
348 uword sp_; 351 uword metadata_;
349 uword fp_;
350 uword lr_; 352 uword lr_;
351 uword state_; 353 uword state_;
352 354
353 /* There are a variable number of words that follow, the words hold the 355 /* There are a variable number of words that follow, the words hold the
354 * sampled pc values. Access via GetPCArray() */ 356 * sampled pc values. Access via GetPCArray() */
355 357
356 DISALLOW_COPY_AND_ASSIGN(Sample); 358 DISALLOW_COPY_AND_ASSIGN(Sample);
357 }; 359 };
358 360
359 361
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 intptr_t capacity_; 411 intptr_t capacity_;
410 uintptr_t cursor_; 412 uintptr_t cursor_;
411 413
412 DISALLOW_COPY_AND_ASSIGN(SampleBuffer); 414 DISALLOW_COPY_AND_ASSIGN(SampleBuffer);
413 }; 415 };
414 416
415 417
416 } // namespace dart 418 } // namespace dart
417 419
418 #endif // VM_PROFILER_H_ 420 #endif // VM_PROFILER_H_
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/profiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698