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

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

Issue 76723003: Fix Android build ? (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month 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
« no previous file with comments | « no previous file | runtime/vm/signal_handler_android.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 #include "platform/globals.h" 5 #include "platform/globals.h"
6 #if defined(TARGET_OS_ANDROID) 6 #if defined(TARGET_OS_ANDROID)
7 7
8 #include "vm/isolate.h" 8 #include "vm/isolate.h"
9 #include "vm/json_stream.h" 9 #include "vm/json_stream.h"
10 #include "vm/profiler.h" 10 #include "vm/profiler.h"
11 #include "vm/signal_handler.h" 11 #include "vm/signal_handler.h"
12 12
13 namespace dart { 13 namespace dart {
14 14
15 DECLARE_FLAG(bool, profile); 15 DECLARE_FLAG(bool, profile);
16 16
17 static void CollectSample(IsolateProfilerData* profiler_data,
18 uintptr_t pc,
19 uintptr_t fp,
20 uintptr_t sp,
21 uintptr_t stack_lower,
22 uintptr_t stack_upper) {
23 SampleBuffer* sample_buffer = profiler_data->sample_buffer();
24 Sample* sample = sample_buffer->ReserveSample();
25 ASSERT(sample != NULL);
26 sample->timestamp = OS::GetCurrentTimeMicros();
27 }
28
29 17
30 static void ProfileSignalAction(int signal, siginfo_t* info, void* context_) { 18 static void ProfileSignalAction(int signal, siginfo_t* info, void* context_) {
31 if (signal != SIGPROF) { 19 if (signal != SIGPROF) {
32 return; 20 return;
33 } 21 }
34 ucontext_t* context = reinterpret_cast<ucontext_t*>(context_);
35 mcontext_t mcontext = context->uc_mcontext;
36 Isolate* isolate = Isolate::Current(); 22 Isolate* isolate = Isolate::Current();
37 if (isolate == NULL) { 23 if (isolate == NULL) {
38 return; 24 return;
39 } 25 }
40 // Thread owns no profiler locks at this point. 26 // Thread owns no profiler locks at this point.
41 { 27 {
42 // Thread owns isolate profiler data mutex. 28 // Thread owns isolate profiler data mutex.
43 ScopedMutex profiler_data_lock(isolate->profiler_data_mutex()); 29 ScopedMutex profiler_data_lock(isolate->profiler_data_mutex());
44 IsolateProfilerData* profiler_data = isolate->profiler_data(); 30 IsolateProfilerData* profiler_data = isolate->profiler_data();
45 if (profiler_data == NULL) { 31 if (profiler_data == NULL) {
46 return; 32 return;
47 } 33 }
48 uintptr_t stack_lower = 0;
49 uintptr_t stack_upper = 0;
50 isolate->GetStackBounds(&stack_lower, &stack_upper);
51 uintptr_t PC = SignalHandler::GetProgramCounter(mcontext);
52 uintptr_t FP = SignalHandler::GetFramePointer(mcontext);
53 uintptr_t SP = SignalHandler::GetStackPointer(mcontext);
54 int64_t sample_time = OS::GetCurrentTimeMicros();
55 profiler_data->SampledAt(sample_time);
56 CollectSample(profiler_data, PC, FP, SP, stack_lower, stack_upper);
57 } 34 }
58 // Thread owns no profiler locks at this point. 35 // Thread owns no profiler locks at this point.
59 // This call will acquire both ProfilerManager::monitor and the 36 // This call will acquire both ProfilerManager::monitor and the
60 // isolate's profiler data mutex. 37 // isolate's profiler data mutex.
61 ProfilerManager::ScheduleIsolate(isolate); 38 ProfilerManager::ScheduleIsolate(isolate);
62 } 39 }
63 40
64 41
65 int64_t ProfilerManager::SampleAndRescheduleIsolates(int64_t current_time) { 42 int64_t ProfilerManager::SampleAndRescheduleIsolates(int64_t current_time) {
66 if (isolates_size_ == 0) { 43 if (isolates_size_ == 0) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 int64_t current_time = OS::GetCurrentTimeMicros(); 90 int64_t current_time = OS::GetCurrentTimeMicros();
114 int64_t next_sample = SampleAndRescheduleIsolates(current_time); 91 int64_t next_sample = SampleAndRescheduleIsolates(current_time);
115 lock.WaitMicros(next_sample); 92 lock.WaitMicros(next_sample);
116 } 93 }
117 } 94 }
118 95
119 96
120 } // namespace dart 97 } // namespace dart
121 98
122 #endif // defined(TARGET_OS_ANDROID) 99 #endif // defined(TARGET_OS_ANDROID)
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/signal_handler_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698