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

Side by Side Diff: ppapi/tests/test_case.h

Issue 11364188: PPAPI: Take PPB_MessageLoop out of Dev (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge Created 8 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 | « ppapi/shared_impl/tracked_callback.cc ('k') | ppapi/tests/test_message_loop.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium 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 #ifndef PPAPI_TESTS_TEST_CASE_H_ 5 #ifndef PPAPI_TESTS_TEST_CASE_H_
6 #define PPAPI_TESTS_TEST_CASE_H_ 6 #define PPAPI_TESTS_TEST_CASE_H_
7 7
8 #include <cmath> 8 #include <cmath>
9 #include <limits> 9 #include <limits>
10 #include <set> 10 #include <set>
11 #include <string> 11 #include <string>
12 12
13 #include "ppapi/c/pp_resource.h" 13 #include "ppapi/c/pp_resource.h"
14 #include "ppapi/c/dev/ppb_testing_dev.h" 14 #include "ppapi/c/dev/ppb_testing_dev.h"
15 #include "ppapi/cpp/dev/message_loop_dev.h"
16 #include "ppapi/cpp/dev/scrollbar_dev.h" 15 #include "ppapi/cpp/dev/scrollbar_dev.h"
16 #include "ppapi/cpp/message_loop.h"
17 #include "ppapi/cpp/view.h" 17 #include "ppapi/cpp/view.h"
18 #include "ppapi/tests/test_utils.h" 18 #include "ppapi/tests/test_utils.h"
19 #include "ppapi/tests/testing_instance.h" 19 #include "ppapi/tests/testing_instance.h"
20 20
21 #if (defined __native_client__) 21 #if (defined __native_client__)
22 #include "ppapi/cpp/var.h" 22 #include "ppapi/cpp/var.h"
23 #else 23 #else
24 #include "ppapi/cpp/private/var_private.h" 24 #include "ppapi/cpp/private/var_private.h"
25 #endif 25 #endif
26 26
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 std::string RunOnThread(std::string(T::*test_to_run)()) { 118 std::string RunOnThread(std::string(T::*test_to_run)()) {
119 #ifdef ENABLE_PEPPER_THREADING 119 #ifdef ENABLE_PEPPER_THREADING
120 if (!testing_interface_) { 120 if (!testing_interface_) {
121 return "Testing blocking callbacks requires the testing interface. In " 121 return "Testing blocking callbacks requires the testing interface. In "
122 "Chrome, use the --enable-pepper-testing flag."; 122 "Chrome, use the --enable-pepper-testing flag.";
123 } 123 }
124 // These tests are only valid if running out-of-process (threading is not 124 // These tests are only valid if running out-of-process (threading is not
125 // supported in-process). For in-process, just consider it a pass. 125 // supported in-process). For in-process, just consider it a pass.
126 if (!testing_interface_->IsOutOfProcess()) 126 if (!testing_interface_->IsOutOfProcess())
127 return std::string(); 127 return std::string();
128 pp::MessageLoop_Dev background_loop(instance_); 128 pp::MessageLoop background_loop(instance_);
129 ThreadedTestRunner<T> runner(instance_->pp_instance(), 129 ThreadedTestRunner<T> runner(instance_->pp_instance(),
130 static_cast<T*>(this), test_to_run, background_loop); 130 static_cast<T*>(this), test_to_run, background_loop);
131 RunOnThreadInternal(&ThreadedTestRunner<T>::ThreadFunction, &runner, 131 RunOnThreadInternal(&ThreadedTestRunner<T>::ThreadFunction, &runner,
132 testing_interface_); 132 testing_interface_);
133 return runner.result(); 133 return runner.result();
134 #else 134 #else
135 // If threading's not enabled, just treat it as success. 135 // If threading's not enabled, just treat it as success.
136 return std::string(); 136 return std::string();
137 #endif 137 #endif
138 } 138 }
(...skipping 18 matching lines...) Expand all
157 } 157 }
158 158
159 private: 159 private:
160 template <class T> 160 template <class T>
161 class ThreadedTestRunner { 161 class ThreadedTestRunner {
162 public: 162 public:
163 typedef std::string(T::*TestMethodType)(); 163 typedef std::string(T::*TestMethodType)();
164 ThreadedTestRunner(PP_Instance instance, 164 ThreadedTestRunner(PP_Instance instance,
165 T* test_case, 165 T* test_case,
166 TestMethodType test_to_run, 166 TestMethodType test_to_run,
167 pp::MessageLoop_Dev loop) 167 pp::MessageLoop loop)
168 : instance_(instance), 168 : instance_(instance),
169 test_case_(test_case), 169 test_case_(test_case),
170 test_to_run_(test_to_run), 170 test_to_run_(test_to_run),
171 loop_(loop) { 171 loop_(loop) {
172 } 172 }
173 const std::string& result() { return result_; } 173 const std::string& result() { return result_; }
174 static void ThreadFunction(void* runner) { 174 static void ThreadFunction(void* runner) {
175 static_cast<ThreadedTestRunner<T>*>(runner)->Run(); 175 static_cast<ThreadedTestRunner<T>*>(runner)->Run();
176 } 176 }
177 177
178 private: 178 private:
179 void Run() { 179 void Run() {
180 PP_DCHECK(PP_OK == loop_.AttachToCurrentThread()); 180 PP_DCHECK(PP_OK == loop_.AttachToCurrentThread());
181 result_ = (test_case_->*test_to_run_)(); 181 result_ = (test_case_->*test_to_run_)();
182 // Now give the loop a chance to clean up. 182 // Now give the loop a chance to clean up.
183 loop_.PostQuit(true /* should_destroy */); 183 loop_.PostQuit(true /* should_destroy */);
184 loop_.Run(); 184 loop_.Run();
185 // Tell the main thread to quit its nested message loop, now that the test 185 // Tell the main thread to quit its nested message loop, now that the test
186 // is complete. 186 // is complete.
187 TestCase::QuitMainMessageLoop(instance_); 187 TestCase::QuitMainMessageLoop(instance_);
188 } 188 }
189 189
190 std::string result_; 190 std::string result_;
191 PP_Instance instance_; 191 PP_Instance instance_;
192 T* test_case_; 192 T* test_case_;
193 TestMethodType test_to_run_; 193 TestMethodType test_to_run_;
194 pp::MessageLoop_Dev loop_; 194 pp::MessageLoop loop_;
195 }; 195 };
196 196
197 // The internals for RunOnThread. This allows us to avoid including 197 // The internals for RunOnThread. This allows us to avoid including
198 // pp_thread.h in this header file, since it includes system headers like 198 // pp_thread.h in this header file, since it includes system headers like
199 // windows.h. 199 // windows.h.
200 // RunOnThreadInternal launches a new thread to run |thread_func|, waits 200 // RunOnThreadInternal launches a new thread to run |thread_func|, waits
201 // for it to complete using RunMessageLoop(), then joins. 201 // for it to complete using RunMessageLoop(), then joins.
202 void RunOnThreadInternal(void (*thread_func)(void*), 202 void RunOnThreadInternal(void (*thread_func)(void*),
203 void* thread_param, 203 void* thread_param,
204 const PPB_Testing_Dev* testing_interface); 204 const PPB_Testing_Dev* testing_interface);
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 #define ASSERT_SUBTEST_SUCCESS(function) \ 333 #define ASSERT_SUBTEST_SUCCESS(function) \
334 do { \ 334 do { \
335 std::string result = (function); \ 335 std::string result = (function); \
336 if (!result.empty()) \ 336 if (!result.empty()) \
337 return result; \ 337 return result; \
338 } while (false) 338 } while (false)
339 339
340 #define PASS() return std::string() 340 #define PASS() return std::string()
341 341
342 #endif // PPAPI_TESTS_TEST_CASE_H_ 342 #endif // PPAPI_TESTS_TEST_CASE_H_
OLDNEW
« no previous file with comments | « ppapi/shared_impl/tracked_callback.cc ('k') | ppapi/tests/test_message_loop.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698