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

Side by Side Diff: content/browser/browser_main_loop.cc

Issue 2791503002: Add Redirection For BrowserThread::FILE to the COM STA Task Runner (Closed)
Patch Set: Rebase Created 3 years, 7 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 | « no previous file | 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 (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 #include "content/browser/browser_main_loop.h" 5 #include "content/browser/browser_main_loop.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 if (redirect_thread) { 1042 if (redirect_thread) {
1043 non_ui_non_io_task_runner_traits = kUserBlockingTraits; 1043 non_ui_non_io_task_runner_traits = kUserBlockingTraits;
1044 } else { 1044 } else {
1045 thread_to_start = &file_user_blocking_thread_; 1045 thread_to_start = &file_user_blocking_thread_;
1046 } 1046 }
1047 break; 1047 break;
1048 case BrowserThread::FILE: 1048 case BrowserThread::FILE:
1049 TRACE_EVENT_BEGIN1("startup", 1049 TRACE_EVENT_BEGIN1("startup",
1050 "BrowserMainLoop::CreateThreads:start", 1050 "BrowserMainLoop::CreateThreads:start",
1051 "Thread", "BrowserThread::FILE"); 1051 "Thread", "BrowserThread::FILE");
1052
1053 #if defined(OS_WIN)
1054 // On Windows, the FILE thread needs to have a UI message loop which
1055 // pumps messages in such a way that Google Update can communicate back
1056 // to us.
1057 // TODO(robliao): Need to support COM in TaskScheduler before
1058 // redirecting the FILE thread on Windows. http://crbug.com/662122
1059 thread_to_start = &file_thread_;
1060 options = ui_message_loop_options;
1061 options.timer_slack = base::TIMER_SLACK_MAXIMUM;
1062 #else
1063 if (redirect_thread) { 1052 if (redirect_thread) {
1064 non_ui_non_io_task_runner_traits = kUserVisibleTraits; 1053 non_ui_non_io_task_runner_traits = kUserVisibleTraits;
1065 } else { 1054 } else {
1066 thread_to_start = &file_thread_; 1055 thread_to_start = &file_thread_;
1067 options = io_message_loop_options; 1056 options = io_message_loop_options;
1068 options.timer_slack = base::TIMER_SLACK_MAXIMUM; 1057 options.timer_slack = base::TIMER_SLACK_MAXIMUM;
1069 } 1058 }
1070 #endif
1071 break; 1059 break;
1072 case BrowserThread::PROCESS_LAUNCHER: 1060 case BrowserThread::PROCESS_LAUNCHER:
1073 TRACE_EVENT_BEGIN1("startup", 1061 TRACE_EVENT_BEGIN1("startup",
1074 "BrowserMainLoop::CreateThreads:start", 1062 "BrowserMainLoop::CreateThreads:start",
1075 "Thread", "BrowserThread::PROCESS_LAUNCHER"); 1063 "Thread", "BrowserThread::PROCESS_LAUNCHER");
1076 #if defined(OS_ANDROID) 1064 #if defined(OS_ANDROID)
1077 // Android specializes Launcher thread so it is accessible in java. 1065 // Android specializes Launcher thread so it is accessible in java.
1078 // Note Android never does clean shutdown, so shutdown use-after-free 1066 // Note Android never does clean shutdown, so shutdown use-after-free
1079 // concerns are not a problem in practice. 1067 // concerns are not a problem in practice.
1080 redirect_thread = false; 1068 redirect_thread = false;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1131 BrowserThread::ID id = static_cast<BrowserThread::ID>(thread_id); 1119 BrowserThread::ID id = static_cast<BrowserThread::ID>(thread_id);
1132 1120
1133 if (thread_to_start) { 1121 if (thread_to_start) {
1134 (*thread_to_start) 1122 (*thread_to_start)
1135 .reset(message_loop ? new BrowserProcessSubThread(id, message_loop) 1123 .reset(message_loop ? new BrowserProcessSubThread(id, message_loop)
1136 : new BrowserProcessSubThread(id)); 1124 : new BrowserProcessSubThread(id));
1137 // Start the thread if an existing |message_loop| wasn't provided. 1125 // Start the thread if an existing |message_loop| wasn't provided.
1138 if (!message_loop && !(*thread_to_start)->StartWithOptions(options)) 1126 if (!message_loop && !(*thread_to_start)->StartWithOptions(options))
1139 LOG(FATAL) << "Failed to start the browser thread: id == " << id; 1127 LOG(FATAL) << "Failed to start the browser thread: id == " << id;
1140 } else { 1128 } else {
1141 scoped_refptr<base::SingleThreadTaskRunner> redirection_task_runner = 1129 scoped_refptr<base::SingleThreadTaskRunner> redirection_task_runner;
1142 base::CreateSingleThreadTaskRunnerWithTraits( 1130 #if defined(OS_WIN)
1143 non_ui_non_io_task_runner_traits); 1131 // On Windows, the FILE thread needs to have a UI message loop which
1132 // pumps messages in such a way that Google Update can communicate back
1133 // to us. The COM STA task runner provides this service.
1134 redirection_task_runner =
1135 (thread_id == BrowserThread::FILE)
1136 ? base::CreateCOMSTATaskRunnerWithTraits(
1137 non_ui_non_io_task_runner_traits)
1138 : base::CreateSingleThreadTaskRunnerWithTraits(
1139 non_ui_non_io_task_runner_traits);
1140 #else // defined(OS_WIN)
1141 redirection_task_runner = base::CreateSingleThreadTaskRunnerWithTraits(
1142 non_ui_non_io_task_runner_traits);
1143 #endif // defined(OS_WIN)
1144 DCHECK(redirection_task_runner); 1144 DCHECK(redirection_task_runner);
1145 BrowserThreadImpl::RedirectThreadIDToTaskRunner( 1145 BrowserThreadImpl::RedirectThreadIDToTaskRunner(
1146 id, std::move(redirection_task_runner)); 1146 id, std::move(redirection_task_runner));
1147 } 1147 }
1148 1148
1149 TRACE_EVENT_END0("startup", "BrowserMainLoop::CreateThreads:start"); 1149 TRACE_EVENT_END0("startup", "BrowserMainLoop::CreateThreads:start");
1150 } 1150 }
1151 created_threads_ = true; 1151 created_threads_ = true;
1152 return result_code_; 1152 return result_code_;
1153 } 1153 }
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after
1771 BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE), 1771 BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE),
1772 MediaInternals::GetInstance()); 1772 MediaInternals::GetInstance());
1773 } 1773 }
1774 CHECK(audio_manager_); 1774 CHECK(audio_manager_);
1775 1775
1776 audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get()); 1776 audio_system_ = media::AudioSystemImpl::Create(audio_manager_.get());
1777 CHECK(audio_system_); 1777 CHECK(audio_system_);
1778 } 1778 }
1779 1779
1780 } // namespace content 1780 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698