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

Side by Side Diff: src/libplatform/default-platform.cc

Issue 2737743002: Make idle tasks optional in the default platform. (Closed)
Patch Set: another fix Created 3 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
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project 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 "src/libplatform/default-platform.h" 5 #include "src/libplatform/default-platform.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <queue> 8 #include <queue>
9 9
10 #include "include/libplatform/libplatform.h" 10 #include "include/libplatform/libplatform.h"
11 #include "src/base/logging.h" 11 #include "src/base/logging.h"
12 #include "src/base/platform/platform.h" 12 #include "src/base/platform/platform.h"
13 #include "src/base/platform/time.h" 13 #include "src/base/platform/time.h"
14 #include "src/base/sys-info.h" 14 #include "src/base/sys-info.h"
15 #include "src/libplatform/worker-thread.h" 15 #include "src/libplatform/worker-thread.h"
16 16
17 namespace v8 { 17 namespace v8 {
18 namespace platform { 18 namespace platform {
19 19
20 20 v8::Platform* CreateDefaultPlatform(int thread_pool_size,
21 v8::Platform* CreateDefaultPlatform(int thread_pool_size) { 21 IdleTaskSupport idle_task_support) {
22 DefaultPlatform* platform = new DefaultPlatform(); 22 DefaultPlatform* platform = new DefaultPlatform(idle_task_support);
23 platform->SetThreadPoolSize(thread_pool_size); 23 platform->SetThreadPoolSize(thread_pool_size);
24 platform->EnsureInitialized(); 24 platform->EnsureInitialized();
25 return platform; 25 return platform;
26 } 26 }
27 27
28 28
29 bool PumpMessageLoop(v8::Platform* platform, v8::Isolate* isolate) { 29 bool PumpMessageLoop(v8::Platform* platform, v8::Isolate* isolate) {
30 return reinterpret_cast<DefaultPlatform*>(platform)->PumpMessageLoop(isolate); 30 return reinterpret_cast<DefaultPlatform*>(platform)->PumpMessageLoop(isolate);
31 } 31 }
32 32
33 void RunIdleTasks(v8::Platform* platform, v8::Isolate* isolate, 33 void RunIdleTasks(v8::Platform* platform, v8::Isolate* isolate,
34 double idle_time_in_seconds) { 34 double idle_time_in_seconds) {
35 reinterpret_cast<DefaultPlatform*>(platform)->RunIdleTasks( 35 reinterpret_cast<DefaultPlatform*>(platform)->RunIdleTasks(
36 isolate, idle_time_in_seconds); 36 isolate, idle_time_in_seconds);
37 } 37 }
38 38
39 void SetTracingController( 39 void SetTracingController(
40 v8::Platform* platform, 40 v8::Platform* platform,
41 v8::platform::tracing::TracingController* tracing_controller) { 41 v8::platform::tracing::TracingController* tracing_controller) {
42 return reinterpret_cast<DefaultPlatform*>(platform)->SetTracingController( 42 return reinterpret_cast<DefaultPlatform*>(platform)->SetTracingController(
43 tracing_controller); 43 tracing_controller);
44 } 44 }
45 45
46 const int DefaultPlatform::kMaxThreadPoolSize = 8; 46 const int DefaultPlatform::kMaxThreadPoolSize = 8;
47 47
48 DefaultPlatform::DefaultPlatform() 48 DefaultPlatform::DefaultPlatform(IdleTaskSupport idle_task_support)
49 : initialized_(false), thread_pool_size_(0) {} 49 : initialized_(false),
50 thread_pool_size_(0),
51 idle_task_support_(idle_task_support) {}
50 52
51 DefaultPlatform::~DefaultPlatform() { 53 DefaultPlatform::~DefaultPlatform() {
52 if (tracing_controller_) { 54 if (tracing_controller_) {
53 tracing_controller_->StopTracing(); 55 tracing_controller_->StopTracing();
54 tracing_controller_.reset(); 56 tracing_controller_.reset();
55 } 57 }
56 58
57 base::LockGuard<base::Mutex> guard(&lock_); 59 base::LockGuard<base::Mutex> guard(&lock_);
58 queue_.Terminate(); 60 queue_.Terminate();
59 if (initialized_) { 61 if (initialized_) {
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 return false; 160 return false;
159 } 161 }
160 } 162 }
161 task->Run(); 163 task->Run();
162 delete task; 164 delete task;
163 return true; 165 return true;
164 } 166 }
165 167
166 void DefaultPlatform::RunIdleTasks(v8::Isolate* isolate, 168 void DefaultPlatform::RunIdleTasks(v8::Isolate* isolate,
167 double idle_time_in_seconds) { 169 double idle_time_in_seconds) {
170 DCHECK(IdleTaskSupport::kEnabled == idle_task_support_);
168 double deadline_in_seconds = 171 double deadline_in_seconds =
169 MonotonicallyIncreasingTime() + idle_time_in_seconds; 172 MonotonicallyIncreasingTime() + idle_time_in_seconds;
170 while (deadline_in_seconds > MonotonicallyIncreasingTime()) { 173 while (deadline_in_seconds > MonotonicallyIncreasingTime()) {
171 { 174 {
172 IdleTask* task; 175 IdleTask* task;
173 { 176 {
174 base::LockGuard<base::Mutex> guard(&lock_); 177 base::LockGuard<base::Mutex> guard(&lock_);
175 task = PopTaskInMainThreadIdleQueue(isolate); 178 task = PopTaskInMainThreadIdleQueue(isolate);
176 } 179 }
177 if (task == nullptr) return; 180 if (task == nullptr) return;
(...skipping 23 matching lines...) Expand all
201 double deadline = MonotonicallyIncreasingTime() + delay_in_seconds; 204 double deadline = MonotonicallyIncreasingTime() + delay_in_seconds;
202 main_thread_delayed_queue_[isolate].push(std::make_pair(deadline, task)); 205 main_thread_delayed_queue_[isolate].push(std::make_pair(deadline, task));
203 } 206 }
204 207
205 void DefaultPlatform::CallIdleOnForegroundThread(Isolate* isolate, 208 void DefaultPlatform::CallIdleOnForegroundThread(Isolate* isolate,
206 IdleTask* task) { 209 IdleTask* task) {
207 base::LockGuard<base::Mutex> guard(&lock_); 210 base::LockGuard<base::Mutex> guard(&lock_);
208 main_thread_idle_queue_[isolate].push(task); 211 main_thread_idle_queue_[isolate].push(task);
209 } 212 }
210 213
211 bool DefaultPlatform::IdleTasksEnabled(Isolate* isolate) { return true; } 214 bool DefaultPlatform::IdleTasksEnabled(Isolate* isolate) {
215 return idle_task_support_ == IdleTaskSupport::kEnabled;
216 }
212 217
213 double DefaultPlatform::MonotonicallyIncreasingTime() { 218 double DefaultPlatform::MonotonicallyIncreasingTime() {
214 return base::TimeTicks::HighResolutionNow().ToInternalValue() / 219 return base::TimeTicks::HighResolutionNow().ToInternalValue() /
215 static_cast<double>(base::Time::kMicrosecondsPerSecond); 220 static_cast<double>(base::Time::kMicrosecondsPerSecond);
216 } 221 }
217 222
218 uint64_t DefaultPlatform::AddTraceEvent( 223 uint64_t DefaultPlatform::AddTraceEvent(
219 char phase, const uint8_t* category_enabled_flag, const char* name, 224 char phase, const uint8_t* category_enabled_flag, const char* name,
220 const char* scope, uint64_t id, uint64_t bind_id, int num_args, 225 const char* scope, uint64_t id, uint64_t bind_id, int num_args,
221 const char** arg_names, const uint8_t* arg_types, 226 const char** arg_names, const uint8_t* arg_types,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 tracing_controller_->AddTraceStateObserver(observer); 273 tracing_controller_->AddTraceStateObserver(observer);
269 } 274 }
270 275
271 void DefaultPlatform::RemoveTraceStateObserver(TraceStateObserver* observer) { 276 void DefaultPlatform::RemoveTraceStateObserver(TraceStateObserver* observer) {
272 if (!tracing_controller_) return; 277 if (!tracing_controller_) return;
273 tracing_controller_->RemoveTraceStateObserver(observer); 278 tracing_controller_->RemoveTraceStateObserver(observer);
274 } 279 }
275 280
276 } // namespace platform 281 } // namespace platform
277 } // namespace v8 282 } // namespace v8
OLDNEW
« no previous file with comments | « src/libplatform/default-platform.h ('k') | test/unittests/libplatform/default-platform-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698