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

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

Issue 205713004: Add isolate tag-profile and better handling of errors (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 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 unified diff | Download patch | Annotate | Revision Log
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 #include "platform/utils.h" 5 #include "platform/utils.h"
6 6
7 #include "vm/allocation.h" 7 #include "vm/allocation.h"
8 #include "vm/atomic.h" 8 #include "vm/atomic.h"
9 #include "vm/code_patcher.h" 9 #include "vm/code_patcher.h"
10 #include "vm/isolate.h" 10 #include "vm/isolate.h"
(...skipping 944 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 } 955 }
956 CodeRegion* region = new CodeRegion(CodeRegion::kTagCode, 956 CodeRegion* region = new CodeRegion(CodeRegion::kTagCode,
957 tag, 957 tag,
958 tag + 1, 958 tag + 1,
959 0); 959 0);
960 index = tag_code_table_->InsertCodeRegion(region); 960 index = tag_code_table_->InsertCodeRegion(region);
961 ASSERT(index >= 0); 961 ASSERT(index >= 0);
962 region->set_creation_serial(visited()); 962 region->set_creation_serial(visited());
963 } 963 }
964 964
965 void TickTag(uword tag, bool exclusive) {
966 CodeRegionTable::TickResult r;
967 intptr_t serial = exclusive ? -1 : visited();
968 r = tag_code_table_->Tick(tag, exclusive, serial, 0);
969 if (r == CodeRegionTable::kTicked) {
970 // Live code found and ticked.
971 return;
972 }
973 ASSERT(r == CodeRegionTable::kNotFound);
974 CreateAndTickTagCodeRegion(tag, exclusive, serial);
975 }
976
977 void CreateAndTickTagCodeRegion(uword tag, bool exclusive, intptr_t serial) {
978 // Need to create tag code.
979 CodeRegion* region = new CodeRegion(CodeRegion::kTagCode,
980 tag,
981 tag + 1,
982 0);
983 intptr_t index = tag_code_table_->InsertCodeRegion(region);
984 region->set_creation_serial(visited());
985 ASSERT(index >= 0);
986 tag_code_table_->At(index)->Tick(tag, exclusive, serial);
987 }
988
989 void Tick(uword pc, bool exclusive, int64_t timestamp) { 965 void Tick(uword pc, bool exclusive, int64_t timestamp) {
990 CodeRegionTable::TickResult r; 966 CodeRegionTable::TickResult r;
991 intptr_t serial = exclusive ? -1 : visited(); 967 intptr_t serial = exclusive ? -1 : visited();
992 r = live_code_table_->Tick(pc, exclusive, serial, timestamp); 968 r = live_code_table_->Tick(pc, exclusive, serial, timestamp);
993 if (r == CodeRegionTable::kTicked) { 969 if (r == CodeRegionTable::kTicked) {
994 // Live code found and ticked. 970 // Live code found and ticked.
995 return; 971 return;
996 } 972 }
997 if (r == CodeRegionTable::kNewerCode) { 973 if (r == CodeRegionTable::kNewerCode) {
998 // Code has been overwritten by newer code. 974 // Code has been overwritten by newer code.
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after
1546 1522
1547 1523
1548 Sample* sample_; 1524 Sample* sample_;
1549 const uword stack_upper_; 1525 const uword stack_upper_;
1550 const uword original_pc_; 1526 const uword original_pc_;
1551 const uword original_fp_; 1527 const uword original_fp_;
1552 const uword original_sp_; 1528 const uword original_sp_;
1553 uword lower_bound_; 1529 uword lower_bound_;
1554 }; 1530 };
1555 1531
1532
1556 void Profiler::RecordSampleInterruptCallback( 1533 void Profiler::RecordSampleInterruptCallback(
1557 const InterruptedThreadState& state, 1534 const InterruptedThreadState& state,
1558 void* data) { 1535 void* data) {
1559 Isolate* isolate = reinterpret_cast<Isolate*>(data); 1536 Isolate* isolate = reinterpret_cast<Isolate*>(data);
1560 if (isolate == NULL) { 1537 if (isolate == NULL) {
1561 return; 1538 return;
1562 } 1539 }
1540 VMTagCounters* counters = isolate->vm_tag_counters();
1541 ASSERT(counters != NULL);
1542 counters->Increment(isolate->vm_tag());
1563 IsolateProfilerData* profiler_data = isolate->profiler_data(); 1543 IsolateProfilerData* profiler_data = isolate->profiler_data();
1564 if (profiler_data == NULL) { 1544 if (profiler_data == NULL) {
1565 return; 1545 return;
1566 } 1546 }
1567 SampleBuffer* sample_buffer = profiler_data->sample_buffer(); 1547 SampleBuffer* sample_buffer = profiler_data->sample_buffer();
1568 if (sample_buffer == NULL) { 1548 if (sample_buffer == NULL) {
1569 return; 1549 return;
1570 } 1550 }
1571 Sample* sample = sample_buffer->ReserveSample(); 1551 Sample* sample = sample_buffer->ReserveSample();
1572 sample->Init(isolate, OS::GetCurrentTimeMicros(), state.tid); 1552 sample->Init(isolate, OS::GetCurrentTimeMicros(), state.tid);
1573 uword stack_lower = 0; 1553 uword stack_lower = 0;
1574 uword stack_upper = 0; 1554 uword stack_upper = 0;
1575 isolate->GetStackBounds(&stack_lower, &stack_upper); 1555 isolate->GetStackBounds(&stack_lower, &stack_upper);
1576 if ((stack_lower == 0) || (stack_upper == 0)) { 1556 if ((stack_lower == 0) || (stack_upper == 0)) {
1577 stack_lower = 0; 1557 stack_lower = 0;
1578 stack_upper = 0; 1558 stack_upper = 0;
1579 } 1559 }
1580 ProfilerSampleStackWalker stackWalker(sample, stack_lower, stack_upper, 1560 ProfilerSampleStackWalker stackWalker(sample, stack_lower, stack_upper,
1581 state.pc, state.fp, state.sp); 1561 state.pc, state.fp, state.sp);
1582 stackWalker.walk(isolate->heap(), isolate->vm_tag()); 1562 stackWalker.walk(isolate->heap(), isolate->vm_tag());
1583 } 1563 }
1584 1564
1585
1586 } // namespace dart 1565 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698