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

Side by Side Diff: test/inspector/task-runner.cc

Issue 2428213002: [inspector] finish test runner gracefully.. (Closed)
Patch Set: Created 4 years, 2 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 | « test/inspector/task-runner.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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 "test/inspector/task-runner.h" 5 #include "test/inspector/task-runner.h"
6 6
7 #if !defined(_WIN32) && !defined(_WIN64) 7 #if !defined(_WIN32) && !defined(_WIN64)
8 #include <unistd.h> // NOLINT 8 #include <unistd.h> // NOLINT
9 #endif // !defined(_WIN32) && !defined(_WIN64) 9 #endif // !defined(_WIN32) && !defined(_WIN64)
10 10
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 if (ready_semaphore_) ready_semaphore_->Signal(); 56 if (ready_semaphore_) ready_semaphore_->Signal();
57 } 57 }
58 58
59 void TaskRunner::Run() { 59 void TaskRunner::Run() {
60 InitializeContext(); 60 InitializeContext();
61 RunMessageLoop(false); 61 RunMessageLoop(false);
62 } 62 }
63 63
64 void TaskRunner::RunMessageLoop(bool only_protocol) { 64 void TaskRunner::RunMessageLoop(bool only_protocol) {
65 int loop_number = ++nested_loop_count_; 65 int loop_number = ++nested_loop_count_;
66 while (nested_loop_count_ == loop_number) { 66 while (nested_loop_count_ == loop_number && !is_terminated_.Value()) {
67 TaskRunner::Task* task = GetNext(only_protocol); 67 TaskRunner::Task* task = GetNext(only_protocol);
68 if (!task) return;
68 v8::Isolate::Scope isolate_scope(isolate_); 69 v8::Isolate::Scope isolate_scope(isolate_);
69 if (catch_exceptions_) { 70 if (catch_exceptions_) {
70 v8::TryCatch try_catch(isolate_); 71 v8::TryCatch try_catch(isolate_);
71 task->Run(isolate_, context_); 72 task->Run(isolate_, context_);
72 delete task; 73 delete task;
73 if (try_catch.HasCaught()) { 74 if (try_catch.HasCaught()) {
74 ReportUncaughtException(isolate_, try_catch); 75 ReportUncaughtException(isolate_, try_catch);
75 fflush(stdout); 76 fflush(stdout);
76 fflush(stderr); 77 fflush(stderr);
77 _exit(0); 78 _exit(0);
78 } 79 }
79 } else { 80 } else {
80 task->Run(isolate_, context_); 81 task->Run(isolate_, context_);
81 delete task; 82 delete task;
82 } 83 }
83 } 84 }
84 } 85 }
85 86
86 void TaskRunner::QuitMessageLoop() { 87 void TaskRunner::QuitMessageLoop() {
87 DCHECK(nested_loop_count_ > 0); 88 DCHECK(nested_loop_count_ > 0);
88 --nested_loop_count_; 89 --nested_loop_count_;
89 } 90 }
90 91
91 void TaskRunner::Append(Task* task) { 92 void TaskRunner::Append(Task* task) {
92 queue_.Enqueue(task); 93 queue_.Enqueue(task);
93 process_queue_semaphore_.Signal(); 94 process_queue_semaphore_.Signal();
94 } 95 }
95 96
97 void TaskRunner::Terminate() {
98 is_terminated_.Increment(1);
99 process_queue_semaphore_.Signal();
100 }
101
96 TaskRunner::Task* TaskRunner::GetNext(bool only_protocol) { 102 TaskRunner::Task* TaskRunner::GetNext(bool only_protocol) {
97 for (;;) { 103 for (;;) {
104 if (is_terminated_.Value()) return nullptr;
98 if (only_protocol) { 105 if (only_protocol) {
99 Task* task = nullptr; 106 Task* task = nullptr;
100 if (queue_.Dequeue(&task)) { 107 if (queue_.Dequeue(&task)) {
101 if (task->is_inspector_task()) return task; 108 if (task->is_inspector_task()) return task;
102 deffered_queue_.Enqueue(task); 109 deffered_queue_.Enqueue(task);
103 } 110 }
104 } else { 111 } else {
105 Task* task = nullptr; 112 Task* task = nullptr;
106 if (deffered_queue_.Dequeue(&task)) return task; 113 if (deffered_queue_.Dequeue(&task)) return task;
107 if (queue_.Dequeue(&task)) return task; 114 if (queue_.Dequeue(&task)) return task;
108 } 115 }
109 process_queue_semaphore_.Wait(); 116 process_queue_semaphore_.Wait();
110 } 117 }
111 UNREACHABLE();
112 return nullptr; 118 return nullptr;
113 } 119 }
114 120
115 TaskRunner* TaskRunner::FromContext(v8::Local<v8::Context> context) { 121 TaskRunner* TaskRunner::FromContext(v8::Local<v8::Context> context) {
116 return static_cast<TaskRunner*>( 122 return static_cast<TaskRunner*>(
117 context->GetAlignedPointerFromEmbedderData(kTaskRunnerIndex)); 123 context->GetAlignedPointerFromEmbedderData(kTaskRunnerIndex));
118 } 124 }
119 125
120 ExecuteStringTask::ExecuteStringTask( 126 ExecuteStringTask::ExecuteStringTask(
121 const v8::internal::Vector<uint16_t>& expression) 127 const v8::internal::Vector<uint16_t>& expression)
(...skipping 26 matching lines...) Expand all
148 } 154 }
149 155
150 v8::ScriptCompiler::Source scriptSource(source, origin); 156 v8::ScriptCompiler::Source scriptSource(source, origin);
151 v8::Local<v8::Script> script; 157 v8::Local<v8::Script> script;
152 if (!v8::ScriptCompiler::Compile(local_context, &scriptSource) 158 if (!v8::ScriptCompiler::Compile(local_context, &scriptSource)
153 .ToLocal(&script)) 159 .ToLocal(&script))
154 return; 160 return;
155 v8::MaybeLocal<v8::Value> result; 161 v8::MaybeLocal<v8::Value> result;
156 result = script->Run(local_context); 162 result = script->Run(local_context);
157 } 163 }
OLDNEW
« no previous file with comments | « test/inspector/task-runner.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698