summaryrefslogtreecommitdiff
path: root/chromium/content/browser/browser_main_loop_unittest.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-07-31 15:50:41 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-08-30 12:35:23 +0000
commit7b2ffa587235a47d4094787d72f38102089f402a (patch)
tree30e82af9cbab08a7fa028bb18f4f2987a3f74dfa /chromium/content/browser/browser_main_loop_unittest.cc
parentd94af01c90575348c4e81a418257f254b6f8d225 (diff)
downloadqtwebengine-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.cc91
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