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

Side by Side Diff: content/public/test/test_browser_thread_bundle.h

Issue 2557083002: Run ScopedTaskScheduler tasks synchronously. (Closed)
Patch Set: rebase Created 3 years, 12 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 Chromium Authors. All rights reserved. 1 // Copyright 2013 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 // TestBrowserThreadBundle is a convenience class for creating a set of 5 // TestBrowserThreadBundle is a convenience class for creating a set of
6 // TestBrowserThreads in unit tests. For most tests, it is sufficient to 6 // TestBrowserThreads, a blocking pool, and a task scheduler in unit tests. For
7 // just instantiate the TestBrowserThreadBundle as a member variable. 7 // most tests, it is sufficient to just instantiate the TestBrowserThreadBundle
8 // It is a good idea to put the TestBrowserThreadBundle as the first member 8 // as a member variable. It is a good idea to put the TestBrowserThreadBundle as
9 // variable in test classes, so it is destroyed last, and the test threads 9 // the first member variable in test classes, so it is destroyed last, and the
10 // always exist from the perspective of other classes. 10 // test threads always exist from the perspective of other classes.
11 // 11 //
12 // By default, all of the created TestBrowserThreads will be backed by a single 12 // By default, all of the created TestBrowserThreads and the task scheduler will
13 // shared MessageLoop. If a test truly needs separate threads, it can do 13 // be backed by a single shared MessageLoop. If a test truly needs separate
14 // so by passing the appropriate combination of option values during 14 // threads, it can do so by passing the appropriate combination of option values
15 // the TestBrowserThreadBundle construction. 15 // during the TestBrowserThreadBundle construction.
16 // 16 //
17 // The TestBrowserThreadBundle will attempt to drain the MessageLoop on 17 // To synchronously run tasks posted to task scheduler or to TestBrowserThreads
18 // destruction. Sometimes a test needs to drain currently enqueued tasks 18 // that use the shared MessageLoop, call RunLoop::Run/RunUntilIdle() on the
19 // mid-test. Browser tests should call content::RunAllPendingInMessageLoop(). 19 // thread where the TestBrowserThreadBundle lives. The destructor of
20 // Unit tests should use base::RunLoop (e.g., base::RunLoop().RunUntilIdle()). 20 // TestBrowserThreadBundle runs remaining TestBrowserThreads tasks, remaining
21 // TODO(phajdan.jr): Revise this comment after switch to Aura. 21 // blocking pool tasks, and remaining BLOCK_SHUTDOWN task scheduler tasks.
22 // 22 //
23 // The TestBrowserThreadBundle will also flush the blocking pool on destruction. 23 // If a test needs a MessageLoopForIO on the main thread, it should use the
24 // We do this to avoid memory leaks, particularly in the case of threads posting 24 // IO_MAINLOOP option. This also allows task scheduler tasks to use
25 // tasks to the blocking pool via PostTaskAndReply. By ensuring that the tasks 25 // FileDescriptorWatcher. Most of the time, IO_MAINLOOP avoids needing to use a
26 // are run while the originating TestBroswserThreads still exist, we prevent 26 // REAL_IO_THREAD.
27 // leakage of PostTaskAndReplyRelay objects. We also flush the blocking pool
28 // again at the point where it would normally be shut down, to better simulate
29 // the normal thread shutdown process.
30 //
31 // Some tests using the IO thread expect a MessageLoopForIO. Passing
32 // IO_MAINLOOP will use a MessageLoopForIO for the main MessageLoop.
33 // Most of the time, this avoids needing to use a REAL_IO_THREAD.
34 // 27 //
35 // For some tests it is important to emulate real browser startup. During real 28 // For some tests it is important to emulate real browser startup. During real
36 // browser startup some initialization is done (e.g. creation of thread objects) 29 // browser startup some initialization is done (e.g. creation of thread objects)
37 // between creating the main thread message loop, which is bound to the existing 30 // between creating the main thread message loop, which is bound to the existing
38 // main thread, and starting the other threads. Passing DONT_START_THREADS to 31 // main thread, and starting the other threads. Passing DONT_START_THREADS to
39 // constructor will delay staring these other threads until the test explicitly 32 // constructor will delay staring these other threads until the test explicitly
40 // calls Start(). 33 // calls Start().
41 // 34 //
42 // DONT_START_THREADS should only be used when the options specify at least 35 // DONT_START_THREADS should only be used when the options specify at least
43 // one real thread other than the main thread. 36 // one real thread other than the main thread.
44 37
45 #ifndef CONTENT_PUBLIC_TEST_TEST_BROWSER_THREAD_BUNDLE_H_ 38 #ifndef CONTENT_PUBLIC_TEST_TEST_BROWSER_THREAD_BUNDLE_H_
46 #define CONTENT_PUBLIC_TEST_TEST_BROWSER_THREAD_BUNDLE_H_ 39 #define CONTENT_PUBLIC_TEST_TEST_BROWSER_THREAD_BUNDLE_H_
47 40
48 #include <memory> 41 #include <memory>
49 42
50 #include "base/macros.h" 43 #include "base/macros.h"
51 44
52 namespace base { 45 namespace base {
53 class MessageLoop; 46 class MessageLoop;
47 namespace test {
48 class ScopedTaskScheduler;
49 } // namespace test
54 } // namespace base 50 } // namespace base
55 51
56 namespace content { 52 namespace content {
57 53
58 class TestBrowserThread; 54 class TestBrowserThread;
59 55
60 class TestBrowserThreadBundle { 56 class TestBrowserThreadBundle {
61 public: 57 public:
62 // Used to specify the type of MessageLoop that backs the UI thread, and 58 // Used to specify the type of MessageLoop that backs the UI thread, and
63 // which of the named BrowserThreads should be backed by a real 59 // which of the named BrowserThreads should be backed by a real
(...skipping 13 matching lines...) Expand all
77 // Start the real threads; should only be called from other classes if the 73 // Start the real threads; should only be called from other classes if the
78 // DONT_START_THREADS option was used when the bundle was created. 74 // DONT_START_THREADS option was used when the bundle was created.
79 void Start(); 75 void Start();
80 76
81 ~TestBrowserThreadBundle(); 77 ~TestBrowserThreadBundle();
82 78
83 private: 79 private:
84 void Init(); 80 void Init();
85 81
86 std::unique_ptr<base::MessageLoop> message_loop_; 82 std::unique_ptr<base::MessageLoop> message_loop_;
83 std::unique_ptr<base::test::ScopedTaskScheduler> task_scheduler_;
87 std::unique_ptr<TestBrowserThread> ui_thread_; 84 std::unique_ptr<TestBrowserThread> ui_thread_;
88 std::unique_ptr<TestBrowserThread> db_thread_; 85 std::unique_ptr<TestBrowserThread> db_thread_;
89 std::unique_ptr<TestBrowserThread> file_thread_; 86 std::unique_ptr<TestBrowserThread> file_thread_;
90 std::unique_ptr<TestBrowserThread> file_user_blocking_thread_; 87 std::unique_ptr<TestBrowserThread> file_user_blocking_thread_;
91 std::unique_ptr<TestBrowserThread> process_launcher_thread_; 88 std::unique_ptr<TestBrowserThread> process_launcher_thread_;
92 std::unique_ptr<TestBrowserThread> cache_thread_; 89 std::unique_ptr<TestBrowserThread> cache_thread_;
93 std::unique_ptr<TestBrowserThread> io_thread_; 90 std::unique_ptr<TestBrowserThread> io_thread_;
94 91
95 int options_; 92 int options_;
96 bool threads_started_; 93 bool threads_started_;
97 94
98 DISALLOW_COPY_AND_ASSIGN(TestBrowserThreadBundle); 95 DISALLOW_COPY_AND_ASSIGN(TestBrowserThreadBundle);
99 }; 96 };
100 97
101 } // namespace content 98 } // namespace content
102 99
103 #endif // CONTENT_PUBLIC_TEST_TEST_BROWSER_THREAD_BUNDLE_H_ 100 #endif // CONTENT_PUBLIC_TEST_TEST_BROWSER_THREAD_BUNDLE_H_
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/net/client_cert_store_chromeos_unittest.cc ('k') | content/public/test/test_browser_thread_bundle.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698