diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-07-31 15:50:41 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-08-30 12:35:23 +0000 |
commit | 7b2ffa587235a47d4094787d72f38102089f402a (patch) | |
tree | 30e82af9cbab08a7fa028bb18f4f2987a3f74dfa /chromium/content/browser/browser_main_loop_unittest.cc | |
parent | d94af01c90575348c4e81a418257f254b6f8d225 (diff) | |
download | qtwebengine-chromium-7b2ffa587235a47d4094787d72f38102089f402a.tar.gz |
BASELINE: Update Chromium to 76.0.3809.94
Change-Id: I321c3f5f929c105aec0f98c5091ef6108822e647
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/content/browser/browser_main_loop_unittest.cc')
-rw-r--r-- | chromium/content/browser/browser_main_loop_unittest.cc | 91 |
1 files changed, 75 insertions, 16 deletions
diff --git a/chromium/content/browser/browser_main_loop_unittest.cc b/chromium/content/browser/browser_main_loop_unittest.cc index 66b7e9c8ee9..4c9e0734004 100644 --- a/chromium/content/browser/browser_main_loop_unittest.cc +++ b/chromium/content/browser/browser_main_loop_unittest.cc @@ -7,49 +7,108 @@ #include "base/command_line.h" #include "base/message_loop/message_loop.h" #include "base/system/sys_info.h" +#include "base/task/post_task.h" #include "base/task/thread_pool/thread_pool.h" +#include "base/test/mock_callback.h" #include "base/test/scoped_command_line.h" #include "content/browser/browser_thread_impl.h" #include "content/browser/scheduler/browser_task_executor.h" +#include "content/browser/service_manager/service_manager_context.h" +#include "content/browser/startup_data_impl.h" #include "content/browser/startup_helper.h" #include "content/public/browser/browser_thread.h" #include "content/public/common/content_switches.h" #include "content/public/common/main_function_params.h" +#include "content/public/test/test_utils.h" #include "testing/gtest/include/gtest/gtest.h" namespace content { -// Verify that a single-process browser process has at least as many threads as -// the number of cores in its foreground pool. -TEST(BrowserMainLoopTest, CreateThreadsInSingleProcess) { - { +using StrickMockTask = + testing::StrictMock<base::MockCallback<base::RepeatingCallback<void()>>>; + +class BrowserMainLoopTest : public testing::Test { + protected: + BrowserMainLoopTest() { base::test::ScopedCommandLine scoped_command_line; scoped_command_line.GetProcessCommandLine()->AppendSwitch( switches::kSingleProcess); - base::ThreadPool::Create("Browser"); + base::ThreadPoolInstance::Create("Browser"); StartBrowserThreadPool(); BrowserTaskExecutor::Create(); - MainFunctionParams main_function_params( - *scoped_command_line.GetProcessCommandLine()); + } + + ~BrowserMainLoopTest() override { + BrowserTaskExecutor::ResetForTesting(); + for (int id = BrowserThread::UI; id < BrowserThread::ID_COUNT; ++id) { + BrowserThreadImpl::ResetGlobalsForTesting( + static_cast<BrowserThread::ID>(id)); + } + base::ThreadPoolInstance::Get()->JoinForTesting(); + base::ThreadPoolInstance::Set(nullptr); + } + + const base::CommandLine& GetProcessCommandLine() { + return *scoped_command_line_.GetProcessCommandLine(); + } + + private: + base::test::ScopedCommandLine scoped_command_line_; +}; // namespace content + +// Verify that a single-process browser process has at least as many threads as +// the number of cores in its foreground pool. +TEST_F(BrowserMainLoopTest, CreateThreadsInSingleProcess) { + { + MainFunctionParams main_function_params(GetProcessCommandLine()); + BrowserMainLoop browser_main_loop( main_function_params, - std::make_unique<base::ThreadPool::ScopedExecutionFence>()); + std::make_unique<base::ThreadPoolInstance::ScopedExecutionFence>()); browser_main_loop.MainMessageLoopStart(); browser_main_loop.Init(); browser_main_loop.CreateThreads(); - EXPECT_GE(base::ThreadPool::GetInstance() + EXPECT_GE(base::ThreadPoolInstance::Get() ->GetMaxConcurrentNonBlockedTasksWithTraitsDeprecated( {base::TaskPriority::USER_VISIBLE}), base::SysInfo::NumberOfProcessors() - 1); browser_main_loop.ShutdownThreadsAndCleanUp(); } - BrowserTaskExecutor::ResetForTesting(); - for (int id = BrowserThread::UI; id < BrowserThread::ID_COUNT; ++id) { - BrowserThreadImpl::ResetGlobalsForTesting( - static_cast<BrowserThread::ID>(id)); - } - base::ThreadPool::GetInstance()->JoinForTesting(); - base::ThreadPool::SetInstance(nullptr); +} + +TEST_F(BrowserMainLoopTest, + PostTaskToIOThreadBeforeThreadCreationDoesNotRunTask) { + MainFunctionParams main_function_params(GetProcessCommandLine()); + + auto service_manager_thread = BrowserTaskExecutor::CreateIOThread(); + ServiceManagerContext service_manager_context( + service_manager_thread->task_runner()); + + StartupDataImpl startup_data; + startup_data.thread = std::move(service_manager_thread); + startup_data.service_manager_context = &service_manager_context; + main_function_params.startup_data = &startup_data; + + BrowserMainLoop browser_main_loop( + main_function_params, + std::make_unique<base::ThreadPoolInstance::ScopedExecutionFence>()); + browser_main_loop.MainMessageLoopStart(); + browser_main_loop.Init(); + + StrickMockTask task; + + // No task should run because IO thread has not been initialized yet. + base::PostTaskWithTraits(FROM_HERE, {BrowserThread::IO}, task.Get()); + base::CreateTaskRunnerWithTraits({BrowserThread::IO}) + ->PostTask(FROM_HERE, task.Get()); + + content::RunAllPendingInMessageLoop(BrowserThread::IO); + + EXPECT_CALL(task, Run).Times(2); + browser_main_loop.CreateThreads(); + content::RunAllPendingInMessageLoop(BrowserThread::IO); + + browser_main_loop.ShutdownThreadsAndCleanUp(); } } // namespace content |